From 90c95407a1a6fd7bffbfafef78fc3ba3c5f67da9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Cruz?= Date: Thu, 23 Apr 2026 15:16:33 +0100 Subject: [PATCH] Fix #20625: simplify compiled binding regression tests Address review feedback to reduce test complexity in XamlIlTests. This change removes per-test UserControl helper classes and command scaffolding that were not required to validate the compiler behavior. Tests now use inline XAML in each [Fact] and shared lightweight mock types for root and item data. The compiled binding scenarios are still covered, including root fallback inference and named DataContext resolution with ItemTemplate and nested namescopes, but with less boilerplate and better readability. --- .../Xaml/XamlIlTests.cs | 190 +++++------------- 1 file changed, 53 insertions(+), 137 deletions(-) diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/XamlIlTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/XamlIlTests.cs index 78a1b34e36..f0e27f05d1 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/XamlIlTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/XamlIlTests.cs @@ -432,9 +432,14 @@ namespace Avalonia.Markup.Xaml.UnitTests { using (UnitTestApplication.Start(TestServices.StyledWindow)) { - var parsed = new XamlIlCompiledBindingRootControl(); - - var textBlock = Assert.IsType(parsed.Content); + var parsed = (CompiledBindingRootMock)AvaloniaRuntimeXamlLoader.Parse(@" + + +"); + parsed.DataContext = parsed; + var textBlock = (TextBlock)parsed.Content!; Assert.Equal("Hello", textBlock.Text); } } @@ -444,10 +449,19 @@ namespace Avalonia.Markup.Xaml.UnitTests { using (UnitTestApplication.Start(TestServices.StyledWindow)) { - var parsed = new XamlIlCompiledBindingTemplateControl(); - - var listBox = Assert.IsType(parsed.Content); - Assert.NotNull(listBox.ItemTemplate); + var parsed = (ListBox)AvaloniaRuntimeXamlLoader.Parse(@" + + + + + + +"); + Assert.NotNull(parsed.ItemTemplate); } } @@ -456,9 +470,14 @@ namespace Avalonia.Markup.Xaml.UnitTests { using (UnitTestApplication.Start(TestServices.StyledWindow)) { - var parsed = new XamlIlCompiledBindingRootControlWithMismatchedDataContext(); - - var textBlock = Assert.IsType(parsed.Content); + var parsed = (CompiledBindingRootMock)AvaloniaRuntimeXamlLoader.Parse(@" + + +"); + parsed.DataContext = new object(); + var textBlock = (TextBlock)parsed.Content!; Assert.Null(textBlock.Text); } } @@ -468,10 +487,25 @@ namespace Avalonia.Markup.Xaml.UnitTests { using (UnitTestApplication.Start(TestServices.StyledWindow)) { - var parsed = new XamlIlCompiledBindingNestedTemplateControl(); - - var listBox = Assert.IsType(parsed.Content); - Assert.NotNull(listBox.ItemTemplate); + var parsed = (ListBox)AvaloniaRuntimeXamlLoader.Parse(@" + + + + + + + + + + + + +"); + Assert.NotNull(parsed.ItemTemplate); } } } @@ -605,134 +639,16 @@ namespace Avalonia.Markup.Xaml.UnitTests } - public class XamlIlCompiledBindingRootControl : UserControl - { - public string Greeting => "Hello"; - - public XamlIlCompiledBindingRootControl() - { - DataContext = this; - AvaloniaRuntimeXamlLoader.Load(@" - - - -", typeof(XamlIlTests).Assembly, this); - } - } - - public class XamlIlCompiledBindingRootControlWithMismatchedDataContext : UserControl + public class CompiledBindingRootMock : UserControl { public string Greeting => "Hello"; - - public XamlIlCompiledBindingRootControlWithMismatchedDataContext() - { - DataContext = new object(); - AvaloniaRuntimeXamlLoader.Load(@" - - - -", typeof(XamlIlTests).Assembly, this); - } - } - - public class XamlIlCompiledBindingTemplateControl : UserControl - { - public IReadOnlyList Items { get; } = - [new XamlIlCompiledBindingTemplateItem { Name = "Item" }]; - - public ICommand ButtonCommand { get; } = new XamlIlCompiledBindingNoOpCommand(); - - public XamlIlCompiledBindingTemplateControl() - { - DataContext = this; - AvaloniaRuntimeXamlLoader.Load(@" - - - - - - -