ReactiveUserControlTest.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using System.Reactive.Disposables;
  2. using Avalonia.UnitTests;
  3. using ReactiveUI;
  4. using Splat;
  5. using Xunit;
  6. namespace Avalonia.ReactiveUI.UnitTests
  7. {
  8. public class ReactiveUserControlTest
  9. {
  10. public class ExampleViewModel : ReactiveObject, IActivatableViewModel
  11. {
  12. public bool IsActive { get; private set; }
  13. public ViewModelActivator Activator { get; } = new ViewModelActivator();
  14. public ExampleViewModel() => this.WhenActivated(disposables =>
  15. {
  16. IsActive = true;
  17. Disposable
  18. .Create(() => IsActive = false)
  19. .DisposeWith(disposables);
  20. });
  21. }
  22. public class ExampleView : ReactiveUserControl<ExampleViewModel> { }
  23. public ReactiveUserControlTest() =>
  24. Locator
  25. .CurrentMutable
  26. .RegisterConstant(
  27. new AvaloniaActivationForViewFetcher(),
  28. typeof(IActivationForViewFetcher));
  29. [Fact]
  30. public void Data_Context_Should_Stay_In_Sync_With_Reactive_User_Control_View_Model()
  31. {
  32. var root = new TestRoot();
  33. var view = new ExampleView();
  34. root.Child = view;
  35. var viewModel = new ExampleViewModel();
  36. Assert.Null(view.ViewModel);
  37. view.DataContext = viewModel;
  38. Assert.Equal(view.ViewModel, viewModel);
  39. Assert.Equal(view.DataContext, viewModel);
  40. view.DataContext = null;
  41. Assert.Null(view.ViewModel);
  42. Assert.Null(view.DataContext);
  43. view.ViewModel = viewModel;
  44. Assert.Equal(viewModel, view.ViewModel);
  45. Assert.Equal(viewModel, view.DataContext);
  46. view.ViewModel = null;
  47. Assert.Null(view.ViewModel);
  48. Assert.Null(view.DataContext);
  49. }
  50. [Fact]
  51. public void Should_Start_With_NotNull_Activated_ViewModel()
  52. {
  53. var root = new TestRoot();
  54. var view = new ExampleView {ViewModel = new ExampleViewModel()};
  55. Assert.False(view.ViewModel.IsActive);
  56. root.Child = view;
  57. Assert.NotNull(view.ViewModel);
  58. Assert.NotNull(view.DataContext);
  59. Assert.True(view.ViewModel.IsActive);
  60. root.Child = null;
  61. Assert.NotNull(view.ViewModel);
  62. Assert.NotNull(view.DataContext);
  63. Assert.False(view.ViewModel.IsActive);
  64. }
  65. [Fact]
  66. public void Should_Start_With_NotNull_Activated_DataContext()
  67. {
  68. var root = new TestRoot();
  69. var view = new ExampleView {DataContext = new ExampleViewModel()};
  70. Assert.False(view.ViewModel.IsActive);
  71. root.Child = view;
  72. Assert.NotNull(view.ViewModel);
  73. Assert.NotNull(view.DataContext);
  74. Assert.True(view.ViewModel.IsActive);
  75. root.Child = null;
  76. Assert.NotNull(view.ViewModel);
  77. Assert.NotNull(view.DataContext);
  78. Assert.False(view.ViewModel.IsActive);
  79. }
  80. }
  81. }