ReactiveWindowTest.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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 ReactiveWindowTest
  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 ExampleWindow : ReactiveWindow<ExampleViewModel> { }
  23. public ReactiveWindowTest() =>
  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_Window_View_Model()
  31. {
  32. using (UnitTestApplication.Start(TestServices.StyledWindow))
  33. {
  34. var view = new ExampleWindow();
  35. var viewModel = new ExampleViewModel();
  36. view.Show();
  37. Assert.Null(view.ViewModel);
  38. Assert.Null(view.DataContext);
  39. view.DataContext = viewModel;
  40. Assert.Equal(viewModel, view.ViewModel);
  41. Assert.Equal(viewModel, view.DataContext);
  42. view.DataContext = null;
  43. Assert.Null(view.ViewModel);
  44. Assert.Null(view.DataContext);
  45. view.ViewModel = viewModel;
  46. Assert.Equal(viewModel, view.ViewModel);
  47. Assert.Equal(viewModel, view.DataContext);
  48. view.ViewModel = null;
  49. Assert.Null(view.ViewModel);
  50. Assert.Null(view.DataContext);
  51. }
  52. }
  53. [Fact]
  54. public void Should_Start_With_NotNull_Activated_ViewModel()
  55. {
  56. using (UnitTestApplication.Start(TestServices.StyledWindow))
  57. {
  58. var view = new ExampleWindow { ViewModel = new ExampleViewModel() };
  59. Assert.False(view.ViewModel.IsActive);
  60. view.Show();
  61. Assert.NotNull(view.ViewModel);
  62. Assert.NotNull(view.DataContext);
  63. Assert.True(view.ViewModel.IsActive);
  64. view.Close();
  65. Assert.NotNull(view.ViewModel);
  66. Assert.NotNull(view.DataContext);
  67. Assert.False(view.ViewModel.IsActive);
  68. }
  69. }
  70. [Fact]
  71. public void Should_Start_With_NotNull_Activated_DataContext()
  72. {
  73. using (UnitTestApplication.Start(TestServices.StyledWindow))
  74. {
  75. var view = new ExampleWindow { DataContext = new ExampleViewModel() };
  76. Assert.False(view.ViewModel.IsActive);
  77. view.Show();
  78. Assert.NotNull(view.ViewModel);
  79. Assert.NotNull(view.DataContext);
  80. Assert.True(view.ViewModel.IsActive);
  81. view.Close();
  82. Assert.NotNull(view.ViewModel);
  83. Assert.NotNull(view.DataContext);
  84. Assert.False(view.ViewModel.IsActive);
  85. }
  86. }
  87. }
  88. }