|
|
@@ -1,3 +1,4 @@
|
|
|
+using System.Reactive.Disposables;
|
|
|
using Avalonia.UnitTests;
|
|
|
using ReactiveUI;
|
|
|
using Splat;
|
|
|
@@ -7,7 +8,20 @@ namespace Avalonia.ReactiveUI.UnitTests
|
|
|
{
|
|
|
public class ReactiveUserControlTest
|
|
|
{
|
|
|
- public class ExampleViewModel : ReactiveObject { }
|
|
|
+ public class ExampleViewModel : ReactiveObject, IActivatableViewModel
|
|
|
+ {
|
|
|
+ public bool IsActive { get; private set; }
|
|
|
+
|
|
|
+ public ViewModelActivator Activator { get; } = new ViewModelActivator();
|
|
|
+
|
|
|
+ public ExampleViewModel() => this.WhenActivated(disposables =>
|
|
|
+ {
|
|
|
+ IsActive = true;
|
|
|
+ Disposable
|
|
|
+ .Create(() => IsActive = false)
|
|
|
+ .DisposeWith(disposables);
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
public class ExampleView : ReactiveUserControl<ExampleViewModel> { }
|
|
|
|
|
|
@@ -44,5 +58,47 @@ namespace Avalonia.ReactiveUI.UnitTests
|
|
|
Assert.Null(view.ViewModel);
|
|
|
Assert.Null(view.DataContext);
|
|
|
}
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void Should_Start_With_NotNull_Activated_ViewModel()
|
|
|
+ {
|
|
|
+ var root = new TestRoot();
|
|
|
+ var view = new ExampleView {ViewModel = new ExampleViewModel()};
|
|
|
+
|
|
|
+ Assert.False(view.ViewModel.IsActive);
|
|
|
+
|
|
|
+ root.Child = view;
|
|
|
+
|
|
|
+ Assert.NotNull(view.ViewModel);
|
|
|
+ Assert.NotNull(view.DataContext);
|
|
|
+ Assert.True(view.ViewModel.IsActive);
|
|
|
+
|
|
|
+ root.Child = null;
|
|
|
+
|
|
|
+ Assert.NotNull(view.ViewModel);
|
|
|
+ Assert.NotNull(view.DataContext);
|
|
|
+ Assert.False(view.ViewModel.IsActive);
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void Should_Start_With_NotNull_Activated_DataContext()
|
|
|
+ {
|
|
|
+ var root = new TestRoot();
|
|
|
+ var view = new ExampleView {DataContext = new ExampleViewModel()};
|
|
|
+
|
|
|
+ Assert.False(view.ViewModel.IsActive);
|
|
|
+
|
|
|
+ root.Child = view;
|
|
|
+
|
|
|
+ Assert.NotNull(view.ViewModel);
|
|
|
+ Assert.NotNull(view.DataContext);
|
|
|
+ Assert.True(view.ViewModel.IsActive);
|
|
|
+
|
|
|
+ root.Child = null;
|
|
|
+
|
|
|
+ Assert.NotNull(view.ViewModel);
|
|
|
+ Assert.NotNull(view.DataContext);
|
|
|
+ Assert.False(view.ViewModel.IsActive);
|
|
|
+ }
|
|
|
}
|
|
|
}
|