using Avalonia.Controls; using Avalonia.Controls.Presenters; using Avalonia.UnitTests; using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.Xaml { public class DataTemplateTests : XamlTestBase { [Fact] public void DataTemplate_Can_Be_Empty() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" "; var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); var target = window.FindControl("target"); window.ApplyTemplate(); target.ApplyTemplate(); ((ContentPresenter)target.Presenter).UpdateChild(); Assert.Null(target.Presenter.Child); } } [Fact] public void DataTemplate_Can_Contain_Name() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" "; var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); var target = window.FindControl("target"); window.ApplyTemplate(); target.ApplyTemplate(); ((ContentPresenter)target.Presenter).UpdateChild(); Assert.IsType(target.Presenter.Child); } } [Fact] public void DataTemplate_Can_Contain_Named_UserControl() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" "; var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); var itemsControl = window.FindControl("itemsControl"); window.DataContext = new[] { "item1", "item2" }; window.ApplyTemplate(); itemsControl.ApplyTemplate(); itemsControl.Presenter.ApplyTemplate(); Assert.Equal(2, itemsControl.Presenter.Panel.Children.Count); } } [Fact] public void Can_Set_DataContext_In_DataTemplate() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" "; var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); var target = window.FindControl("target"); var viewModel = new TestViewModel { String = "Root", Child = new TestViewModel { String = "Child", Child = new TestViewModel { String = "Grandchild", } }, }; window.DataContext = viewModel; window.ApplyTemplate(); target.ApplyTemplate(); ((ContentPresenter)target.Presenter).UpdateChild(); var canvas = (Canvas)target.Presenter.Child; Assert.Same(viewModel, target.DataContext); Assert.Same(viewModel.Child, target.Presenter.DataContext); Assert.Same(viewModel.Child.Child, canvas.DataContext); } } } }