AvaloniaActivationForViewFetcherTest.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System;
  2. using System.Reactive.Concurrency;
  3. using System.Reactive.Disposables;
  4. using Avalonia.Controls;
  5. using Avalonia.Rendering;
  6. using Avalonia.Platform;
  7. using Avalonia.UnitTests;
  8. using Avalonia;
  9. using ReactiveUI;
  10. using DynamicData;
  11. using Xunit;
  12. using Splat;
  13. namespace Avalonia
  14. {
  15. public class AvaloniaActivationForViewFetcherTest
  16. {
  17. public class TestUserControl : UserControl, IActivatable { }
  18. public class TestUserControlWithWhenActivated : UserControl, IActivatable
  19. {
  20. public bool Active { get; private set; }
  21. public TestUserControlWithWhenActivated()
  22. {
  23. this.WhenActivated(disposables => {
  24. Active = true;
  25. Disposable
  26. .Create(() => Active = false)
  27. .DisposeWith(disposables);
  28. });
  29. }
  30. }
  31. [Fact]
  32. public void Visual_Element_Is_Activated_And_Deactivated()
  33. {
  34. var userControl = new TestUserControl();
  35. var activationForViewFetcher = new AvaloniaActivationForViewFetcher();
  36. activationForViewFetcher
  37. .GetActivationForView(userControl)
  38. .ToObservableChangeSet(scheduler: ImmediateScheduler.Instance)
  39. .Bind(out var activated)
  40. .Subscribe();
  41. var fakeRenderedDecorator = new TestRoot();
  42. fakeRenderedDecorator.Child = userControl;
  43. Assert.True(activated[0]);
  44. Assert.Equal(1, activated.Count);
  45. fakeRenderedDecorator.Child = null;
  46. Assert.True(activated[0]);
  47. Assert.False(activated[1]);
  48. Assert.Equal(2, activated.Count);
  49. }
  50. [Fact]
  51. public void Get_Affinity_For_View_Should_Return_Non_Zero_For_Visual_Elements()
  52. {
  53. var userControl = new TestUserControl();
  54. var activationForViewFetcher = new AvaloniaActivationForViewFetcher();
  55. var forUserControl = activationForViewFetcher.GetAffinityForView(userControl.GetType());
  56. var forNonUserControl = activationForViewFetcher.GetAffinityForView(typeof(object));
  57. Assert.NotEqual(0, forUserControl);
  58. Assert.Equal(0, forNonUserControl);
  59. }
  60. [Fact]
  61. public void Activation_For_View_Fetcher_Should_Support_When_Activated()
  62. {
  63. Locator.CurrentMutable.RegisterConstant(
  64. new AvaloniaActivationForViewFetcher(),
  65. typeof(IActivationForViewFetcher));
  66. var userControl = new TestUserControlWithWhenActivated();
  67. Assert.False(userControl.Active);
  68. var fakeRenderedDecorator = new TestRoot();
  69. fakeRenderedDecorator.Child = userControl;
  70. Assert.True(userControl.Active);
  71. fakeRenderedDecorator.Child = null;
  72. Assert.False(userControl.Active);
  73. }
  74. }
  75. }