From eddd06e9ebad3e62f8bea6025097e49c330090c9 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sun, 8 Dec 2019 14:17:49 +0300 Subject: [PATCH] Merge pull request #3332 from donandren/issues/3145 fix some issues with ControlTemplate in xamlil --- ...olTemplateTargetTypeMetadataTransformer.cs | 2 +- .../Avalonia.Markup.Xaml/XamlIl/xamlil.github | 2 +- .../Xaml/BasicTests.cs | 23 ++++++-- .../Xaml/StyleTests.cs | 52 +++++++++++++++++++ 4 files changed, 72 insertions(+), 7 deletions(-) diff --git a/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlControlTemplateTargetTypeMetadataTransformer.cs b/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlControlTemplateTargetTypeMetadataTransformer.cs index aab43bbd6f..40386924c3 100644 --- a/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlControlTemplateTargetTypeMetadataTransformer.cs +++ b/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlControlTemplateTargetTypeMetadataTransformer.cs @@ -25,7 +25,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers if ((tt?.Values.FirstOrDefault() is XamlIlTypeExtensionNode tn)) { - targetType = tn.Type; + targetType = tn.Value; } else { diff --git a/src/Markup/Avalonia.Markup.Xaml/XamlIl/xamlil.github b/src/Markup/Avalonia.Markup.Xaml/XamlIl/xamlil.github index ad9915e193..4c4b6cf8ff 160000 --- a/src/Markup/Avalonia.Markup.Xaml/XamlIl/xamlil.github +++ b/src/Markup/Avalonia.Markup.Xaml/XamlIl/xamlil.github @@ -1 +1 @@ -Subproject commit ad9915e19398a49c5a11b66000c361659ca692b3 +Subproject commit 4c4b6cf8ff0894c925d87b27d4fc7a064440c218 diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs index f4d4a9dd2a..eaf9f22406 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs @@ -307,6 +307,23 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml Assert.Equal("child", child.Name); } + [Fact] + public void ControlTemplate_With_TargetType_Is_Operational() + { + var xaml = @" + + + +"; + var template = AvaloniaXamlLoader.Parse(xaml); + + Assert.Equal(typeof(ContentControl), template.TargetType); + + Assert.IsType(typeof(ContentPresenter), template.Build(new ContentControl()).Control); + } + [Fact] public void ControlTemplate_With_Panel_Children_Are_Added() { @@ -704,11 +721,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml } } - - [Fact(Skip = -@"Doesn't work with Portable.xaml, it's working in different creation order - -Handled in test 'Control_Is_Added_To_Parent_Before_Final_EndInit' -do we need it?")] + [Fact] public void Control_Is_Added_To_Parent_Before_Properties_Are_Set() { using (UnitTestApplication.Start(TestServices.StyledWindow)) diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs index b76022852c..f7629e5b9e 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs @@ -5,6 +5,7 @@ using System.Xml; using Avalonia.Controls; using Avalonia.Markup.Data; using Avalonia.Markup.Xaml.Styling; +using Avalonia.Markup.Xaml.Templates; using Avalonia.Media; using Avalonia.Styling; using Avalonia.UnitTests; @@ -38,6 +39,57 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml } } + [Fact] + public void DataTemplate_Can_Be_Added_To_Style_Resources() + { + using (UnitTestApplication.Start(TestServices.MockPlatformWrapper)) + { + var xaml = @" + + + + +"; + var loader = new AvaloniaXamlLoader(); + var userControl = (UserControl)loader.Load(xaml); + var dataTemplate = (DataTemplate)((Style)userControl.Styles[0]).Resources["dataTemplate"]; + + Assert.NotNull(dataTemplate); + } + } + + [Fact] + public void ControlTemplate_Can_Be_Added_To_Style_Resources() + { + using (UnitTestApplication.Start(TestServices.MockPlatformWrapper)) + { + var xaml = @" + + + + +"; + var loader = new AvaloniaXamlLoader(); + var userControl = (UserControl)loader.Load(xaml); + var controlTemplate = (ControlTemplate)((Style)userControl.Styles[0]).Resources["controlTemplate"]; + + Assert.NotNull(controlTemplate); + Assert.Equal(typeof(Button), controlTemplate.TargetType); + } + } + [Fact] public void SolidColorBrush_Can_Be_Added_To_Style_Resources() {