From 0e99ccce5ffea5af565d3c566f06dfeda0e6f6c7 Mon Sep 17 00:00:00 2001 From: donandren Date: Sat, 4 Mar 2017 13:55:02 +0200 Subject: [PATCH] added some more tests for xaml parsing of binding/multibinding/attached --- .../Xaml/BasicTests.cs | 158 +++++++++++++++--- 1 file changed, 136 insertions(+), 22 deletions(-) diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs index 6586b7ee5b..11a4f745e2 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs @@ -1,7 +1,6 @@ // Copyright (c) The Avalonia Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. -using System.Linq; using Avalonia.Controls; using Avalonia.Controls.Presenters; using Avalonia.Markup.Xaml.Data; @@ -10,6 +9,7 @@ using Avalonia.Markup.Xaml.Templates; using Avalonia.Media; using Avalonia.Styling; using Avalonia.UnitTests; +using System.Linq; using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.Xaml @@ -50,6 +50,21 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml Assert.Equal(21.0, TextBlock.GetFontSize(target)); } + [Fact] + public void Attached_Property_In_Panel_Is_Set() + { + var xaml = @" + + Foo +"; + + var target = AvaloniaXamlLoader.Parse(xaml); + + Assert.Equal(0, target.Children.Count); + + Assert.Equal("Foo", ToolTip.GetTip(target)); + } + [Fact] public void ContentControl_ContentTemplate_Is_Functional() { @@ -379,38 +394,137 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml } [Fact] + public void Xaml_Binding_Is_Delayed() + { + using (UnitTestApplication.Start(TestServices.MockPlatformWrapper + .With(windowingPlatform: new MockWindowingPlatform()))) + { + var xaml = +@""; + + var target = AvaloniaXamlLoader.Parse(xaml); + + Assert.Null(target.Content); + + target.DataContext = "Foo"; + + Assert.Null(target.Content); + + DelayedBinding.ApplyBindings(target); + + Assert.Equal("Foo", target.Content); + } + } + + [Fact] + public void Double_Xaml_Binding_Is_Operational() + { + using (UnitTestApplication.Start(TestServices.MockPlatformWrapper + .With(windowingPlatform: new MockWindowingPlatform()))) + { + var xaml = +@""; + + var target = AvaloniaXamlLoader.Parse(xaml); + + Assert.Null(target.Content); + + target.DataContext = 55.0; + + Assert.Equal(55.0, target.Width); + } + } + + [Fact] + public void Collection_Xaml_Binding_Is_Operational() + { + using (UnitTestApplication.Start(TestServices.MockPlatformWrapper + .With(windowingPlatform: new MockWindowingPlatform()))) + { + var xaml = @" + + + + +"; + + var target = AvaloniaXamlLoader.Parse(xaml); + + Assert.NotNull(target.Content); + + var itemsControl = target.FindControl("itemsControl"); + + var items = new string[] { "Foo", "Bar" }; + + target.DataContext = items; + + Assert.Equal(items, itemsControl.Items); + } + } + + [Fact] + public void Multi_Xaml_Binding_Is_Parsed() + { + var xaml = +@" + + +"; + + var target = AvaloniaXamlLoader.Parse(xaml); + + Assert.Equal(2, target.Bindings.Count); + + Assert.Equal(BoolConverters.And, target.Converter); + + var bindings = target.Bindings.Cast().ToArray(); + + Assert.Equal("Foo", bindings[0].Path); + Assert.Equal("Bar", bindings[1].Path); + } + +#if OMNIXAML + [Fact(Skip ="OmniXaml doesn't support set property with base class prefix ...")] +#else + [Fact] +#endif public void Control_Template_Is_Operational() { - var xaml = @" - - -"; +"; - var target = AvaloniaXamlLoader.Parse(xaml); + var target = AvaloniaXamlLoader.Parse(xaml); - Assert.NotNull(target.Template); + Assert.NotNull(target.Template); - Assert.Null(target.Presenter); + Assert.Null(target.Presenter); - target.ApplyTemplate(); + target.ApplyTemplate(); - Assert.NotNull(target.Presenter); + Assert.NotNull(target.Presenter); - target.Content = "Foo"; + target.Content = "Foo"; - Assert.Equal("Foo", target.Presenter.Content); + Assert.Equal("Foo", target.Presenter.Content); + } } [Fact] public void Style_ControlTemplate_Is_Build() { - var xaml = @" + var xaml = @" "; - var style = AvaloniaXamlLoader.Parse