|
|
@@ -12,15 +12,23 @@ namespace Avalonia.ReactiveUI.UnitTests
|
|
|
|
|
|
public class FirstView : ReactiveUserControl<FirstViewModel> { }
|
|
|
|
|
|
+ public class AlternativeFirstView : ReactiveUserControl<FirstViewModel> { }
|
|
|
+
|
|
|
public class SecondViewModel : ReactiveObject { }
|
|
|
|
|
|
public class SecondView : ReactiveUserControl<SecondViewModel> { }
|
|
|
|
|
|
+ public class AlternativeSecondView : ReactiveUserControl<SecondViewModel> { }
|
|
|
+
|
|
|
+ public static string AlternativeViewContract => "AlternativeView";
|
|
|
+
|
|
|
public ViewModelViewHostTest()
|
|
|
{
|
|
|
Locator.CurrentMutable.RegisterConstant(new AvaloniaActivationForViewFetcher(), typeof(IActivationForViewFetcher));
|
|
|
Locator.CurrentMutable.Register(() => new FirstView(), typeof(IViewFor<FirstViewModel>));
|
|
|
Locator.CurrentMutable.Register(() => new SecondView(), typeof(IViewFor<SecondViewModel>));
|
|
|
+ Locator.CurrentMutable.Register(() => new AlternativeFirstView(), typeof(IViewFor<FirstViewModel>), AlternativeViewContract);
|
|
|
+ Locator.CurrentMutable.Register(() => new AlternativeSecondView(), typeof(IViewFor<SecondViewModel>), AlternativeViewContract);
|
|
|
}
|
|
|
|
|
|
[Fact]
|
|
|
@@ -67,5 +75,67 @@ namespace Avalonia.ReactiveUI.UnitTests
|
|
|
Assert.Equal(first, ((FirstView)host.Content).DataContext);
|
|
|
Assert.Equal(first, ((FirstView)host.Content).ViewModel);
|
|
|
}
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void ViewModelViewHost_View_Should_Stay_In_Sync_With_ViewModel_And_Contract()
|
|
|
+ {
|
|
|
+ var defaultContent = new TextBlock();
|
|
|
+ var host = new ViewModelViewHost
|
|
|
+ {
|
|
|
+ DefaultContent = defaultContent,
|
|
|
+ PageTransition = null
|
|
|
+ };
|
|
|
+
|
|
|
+ var root = new TestRoot
|
|
|
+ {
|
|
|
+ Child = host
|
|
|
+ };
|
|
|
+
|
|
|
+ Assert.NotNull(host.Content);
|
|
|
+ Assert.Equal(typeof(TextBlock), host.Content.GetType());
|
|
|
+ Assert.Equal(defaultContent, host.Content);
|
|
|
+
|
|
|
+ var first = new FirstViewModel();
|
|
|
+ host.ViewModel = first;
|
|
|
+
|
|
|
+ host.ViewContract = null;
|
|
|
+ Assert.NotNull(host.Content);
|
|
|
+ Assert.Equal(typeof(FirstView), host.Content.GetType());
|
|
|
+ Assert.Equal(first, ((FirstView)host.Content).DataContext);
|
|
|
+ Assert.Equal(first, ((FirstView)host.Content).ViewModel);
|
|
|
+
|
|
|
+ host.ViewContract = AlternativeViewContract;
|
|
|
+ Assert.NotNull(host.Content);
|
|
|
+ Assert.Equal(typeof(AlternativeFirstView), host.Content.GetType());
|
|
|
+ Assert.Equal(first, ((AlternativeFirstView)host.Content).DataContext);
|
|
|
+ Assert.Equal(first, ((AlternativeFirstView)host.Content).ViewModel);
|
|
|
+
|
|
|
+ var second = new SecondViewModel();
|
|
|
+ host.ViewModel = second;
|
|
|
+
|
|
|
+ host.ViewContract = null;
|
|
|
+ Assert.NotNull(host.Content);
|
|
|
+ Assert.Equal(typeof(SecondView), host.Content.GetType());
|
|
|
+ Assert.Equal(second, ((SecondView)host.Content).DataContext);
|
|
|
+ Assert.Equal(second, ((SecondView)host.Content).ViewModel);
|
|
|
+
|
|
|
+ host.ViewContract = AlternativeViewContract;
|
|
|
+ Assert.NotNull(host.Content);
|
|
|
+ Assert.Equal(typeof(AlternativeSecondView), host.Content.GetType());
|
|
|
+ Assert.Equal(second, ((AlternativeSecondView)host.Content).DataContext);
|
|
|
+ Assert.Equal(second, ((AlternativeSecondView)host.Content).ViewModel);
|
|
|
+
|
|
|
+ host.ViewModel = null;
|
|
|
+
|
|
|
+ host.ViewContract = null;
|
|
|
+ Assert.NotNull(host.Content);
|
|
|
+ Assert.Equal(typeof(TextBlock), host.Content.GetType());
|
|
|
+ Assert.Equal(defaultContent, host.Content);
|
|
|
+
|
|
|
+ host.ViewContract = AlternativeViewContract;
|
|
|
+ Assert.NotNull(host.Content);
|
|
|
+ Assert.Equal(typeof(TextBlock), host.Content.GetType());
|
|
|
+ Assert.Equal(defaultContent, host.Content);
|
|
|
+ }
|
|
|
}
|
|
|
-}
|
|
|
+}
|