diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Converters/AvaloniaPropertyConverterTest.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Converters/AvaloniaPropertyConverterTest.cs index dd741d6207..b987d6e3e7 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Converters/AvaloniaPropertyConverterTest.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Converters/AvaloniaPropertyConverterTest.cs @@ -2,18 +2,26 @@ // Licensed under the MIT license. See licence.md file in the project root for full license information. using System; -using System.Reactive; using Moq; -using OmniXaml; -using OmniXaml.ObjectAssembler.Commands; -using OmniXaml.TypeConversion; -using OmniXaml.Typing; using Avalonia.Collections; -using Avalonia.Controls; using Avalonia.Markup.Xaml.Converters; using Avalonia.Styling; using Xunit; + +#if !OMNIXAML + using Portable.Xaml.ComponentModel; +using Portable.Xaml; +using Portable.Xaml.Markup; + +#else + +using OmniXaml; +using OmniXaml.ObjectAssembler.Commands; +using OmniXaml.TypeConversion; +using OmniXaml.Typing; + +#endif namespace Avalonia.Markup.Xaml.UnitTests.Converters { @@ -56,12 +64,38 @@ namespace Avalonia.Markup.Xaml.UnitTests.Converters Assert.Equal(AttachedOwner.AttachedProperty, result); } + #if !OMNIXAML private ITypeDescriptorContext CreateContext(Style style = null) { - return null; + var tdMock = new Mock(); + var xsc = new Mock(); + var sc = Mock.Of(); + var amb = new Mock(); + var tr = new Mock(); + + tdMock.Setup(d => d.GetService(typeof(IAmbientProvider))) + .Returns(amb.Object); + tdMock.Setup(d => d.GetService(typeof(IXamlSchemaContextProvider))) + .Returns(xsc.Object); + tdMock.Setup(d => d.GetService(typeof(IXamlTypeResolver))) + .Returns(tr.Object); + + xsc.SetupGet(v => v.SchemaContext) + .Returns(sc); + amb.Setup(v => v.GetFirstAmbientValue(It.IsAny())) + .Returns(style); + amb.Setup(v => v.GetAllAmbientValues(It.IsAny())) + .Returns(new object[] { style }); + tr.Setup(v => v.Resolve(nameof(Class1))) + .Returns(typeof(Class1)); + tr.Setup(v => v.Resolve(nameof(AttachedOwner))) + .Returns(typeof(AttachedOwner)); + + return tdMock.Object; } #else + private IValueContext CreateContext(Style style = null) { var context = new Mock(); @@ -77,7 +111,9 @@ namespace Avalonia.Markup.Xaml.UnitTests.Converters typeRepository.Setup(x => x.GetByQualifiedName("AttachedOwner")).Returns(attachedOwnerXamlType); return context.Object; } + #endif + private class Class1 : AvaloniaObject, IStyleable { public static readonly StyledProperty FooProperty = @@ -112,4 +148,4 @@ namespace Avalonia.Markup.Xaml.UnitTests.Converters AvaloniaProperty.RegisterAttached("Attached"); } } -} +} \ No newline at end of file diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs index 11a4f745e2..2f9c50bc0a 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs @@ -50,6 +50,22 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml Assert.Equal(21.0, TextBlock.GetFontSize(target)); } + [Fact] + public void Attached_Property_Supports_Binding() + { + using (UnitTestApplication.Start(TestServices.MockWindowingPlatform)) + { + var xaml = + @""; + + var target = AvaloniaXamlLoader.Parse(xaml); + + target.DataContext = 21.0; + + Assert.Equal(21.0, TextBlock.GetFontSize(target)); + } + } + [Fact] public void Attached_Property_In_Panel_Is_Set() { @@ -396,8 +412,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml [Fact] public void Xaml_Binding_Is_Delayed() { - using (UnitTestApplication.Start(TestServices.MockPlatformWrapper - .With(windowingPlatform: new MockWindowingPlatform()))) + using (UnitTestApplication.Start(TestServices.MockWindowingPlatform)) { var xaml = @""; @@ -484,11 +499,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml 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() { using (UnitTestApplication.Start(TestServices.MockPlatformWrapper @@ -497,12 +508,12 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml var xaml = @" - + - + "; var target = AvaloniaXamlLoader.Parse(xaml); @@ -595,5 +606,25 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml Assert.True(attached < widthChanged); } } + + [Fact] + public void Control_Is_Added_To_Parent_Before_Properties_Are_Set_Simple() + { + var xaml = @" + + +"; + + var window = AvaloniaXamlLoader.Parse(xaml); + var tracker = (InitializationOrderTracker)window.Content; + + var parentSet = tracker.Order.IndexOf("Property Parent Changed"); + var widthChanged = tracker.Order.IndexOf("Property Width Changed"); + + Assert.Equal(0, parentSet); + Assert.Equal(1, widthChanged); + } } } \ No newline at end of file diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests.cs index a66d6ac6d8..989bd668f4 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests.cs @@ -83,7 +83,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml [Fact] public void Can_Bind_To_DataContext_Of_Anchor_On_Non_Control() { - using (UnitTestApplication.Start(TestServices.StyledWindow)) + using (UnitTestApplication.Start(TestServices.MockWindowingPlatform)) { var xaml = @" -"; - var loader = new AvaloniaXamlLoader(); - var window = (Window)loader.Load(xaml); - var textBlock = (TextBlock)window.Content; +"; - window.ApplyTemplate(); + var window = AvaloniaXamlLoader.Parse(xaml); + var textBlock = (TextBlock)window.Content; - Assert.Equal("foo", textBlock.Text); - } + textBlock.Tag = "foo"; + + Assert.Equal("foo", textBlock.Text); } [Fact] public void Longform_Binding_To_Self_Works() { - using (UnitTestApplication.Start(TestServices.StyledWindow)) + using (UnitTestApplication.Start(TestServices.MockWindowingPlatform)) { var xaml = @" new Styles()))) { var xaml = @" ()); + public static readonly TestServices MockWindowingPlatform = new TestServices( + windowingPlatform: new MockWindowingPlatform()); + public static readonly TestServices MockStyler = new TestServices( styler: Mock.Of());