From b2b7fafabfc211cf37f227dc263ec40f20adeafe Mon Sep 17 00:00:00 2001 From: artyom Date: Mon, 10 Aug 2020 23:41:09 +0300 Subject: [PATCH] Bring additional tests for binding hooks --- .../AutoDataTemplateBindingHookTest.cs | 64 ++++++++++++++++--- 1 file changed, 54 insertions(+), 10 deletions(-) diff --git a/tests/Avalonia.ReactiveUI.UnitTests/AutoDataTemplateBindingHookTest.cs b/tests/Avalonia.ReactiveUI.UnitTests/AutoDataTemplateBindingHookTest.cs index 8ef37dbd21..2fdd12a391 100644 --- a/tests/Avalonia.ReactiveUI.UnitTests/AutoDataTemplateBindingHookTest.cs +++ b/tests/Avalonia.ReactiveUI.UnitTests/AutoDataTemplateBindingHookTest.cs @@ -28,11 +28,36 @@ namespace Avalonia.ReactiveUI.UnitTests public class ExampleView : ReactiveUserControl { - public ItemsControl List { get; } = new ItemsControl(); + public ItemsControl List { get; } = new ItemsControl + { + Template = GetTemplate() + }; public ExampleView() { + List.ApplyTemplate(); + List.Presenter.ApplyTemplate(); Content = List; + + ViewModel = new ExampleViewModel(); + this.OneWayBind(ViewModel, x => x.Items, x => x.List.Items); + } + } + + public class ExampleViewWithItemTemplate : ReactiveUserControl + { + public ItemsControl List { get; } = new ItemsControl + { + Template = GetTemplate() + }; + + public ExampleViewWithItemTemplate() + { + List.ApplyTemplate(); + List.Presenter.ApplyTemplate(); + List.ItemTemplate = GetItemTemplate(); + Content = List; + ViewModel = new ExampleViewModel(); this.OneWayBind(ViewModel, x => x.Items, x => x.List.Items); } @@ -50,6 +75,15 @@ namespace Avalonia.ReactiveUI.UnitTests { var view = new ExampleView(); Assert.NotNull(view.List.ItemTemplate); + Assert.IsType>(view.List.ItemTemplate); + } + + [Fact] + public void Should_Not_Override_Data_Template_Binding_When_Item_Template_Is_Set() + { + var view = new ExampleViewWithItemTemplate(); + Assert.NotNull(view.List.ItemTemplate); + Assert.IsType>(view.List.ItemTemplate); } [Fact] @@ -58,10 +92,6 @@ namespace Avalonia.ReactiveUI.UnitTests var view = new ExampleView(); view.ViewModel.Items.Add(new NestedViewModel()); - view.List.Template = GetTemplate(); - view.List.ApplyTemplate(); - view.List.Presenter.ApplyTemplate(); - var child = view.List.Presenter.Panel.Children[0]; var container = (ContentPresenter) child; container.UpdateChild(); @@ -69,6 +99,19 @@ namespace Avalonia.ReactiveUI.UnitTests Assert.IsType(container.Child); } + [Fact] + public void Should_Not_Use_View_Model_View_Host_When_Item_Template_Is_Set() + { + var view = new ExampleViewWithItemTemplate(); + view.ViewModel.Items.Add(new NestedViewModel()); + + var child = view.List.Presenter.Panel.Children[0]; + var container = (ContentPresenter) child; + container.UpdateChild(); + + Assert.IsType(container.Child); + } + [Fact] public void Should_Resolve_And_Embedd_Appropriate_View_Model() { @@ -76,10 +119,6 @@ namespace Avalonia.ReactiveUI.UnitTests var root = new TestRoot { Child = view }; view.ViewModel.Items.Add(new NestedViewModel()); - view.List.Template = GetTemplate(); - view.List.ApplyTemplate(); - view.List.Presenter.ApplyTemplate(); - var child = view.List.Presenter.Panel.Children[0]; var container = (ContentPresenter) child; container.UpdateChild(); @@ -93,7 +132,12 @@ namespace Avalonia.ReactiveUI.UnitTests Assert.IsType(host.DataContext); } - private FuncControlTemplate GetTemplate() + private static FuncDataTemplate GetItemTemplate() + { + return new FuncDataTemplate((parent, scope) => new TextBlock()); + } + + private static FuncControlTemplate GetTemplate() { return new FuncControlTemplate((parent, scope) => {