From 21bddb1ced9747ac171ff12e5748902dcfbf39c0 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 19 May 2020 09:12:08 +0200 Subject: [PATCH] Added test that fails after resource refactor. `Changing_Resource_In_Templated_Parent_Should_Affect_Templated_Child` now fails because resource changed messages no longer traverse into templated children. --- .../Primitives/TemplatedControlTests.cs | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/TemplatedControlTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/TemplatedControlTests.cs index d069753e85..2930098371 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/TemplatedControlTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/TemplatedControlTests.cs @@ -10,6 +10,7 @@ using Avalonia.Styling; using Avalonia.UnitTests; using Avalonia.VisualTree; using Xunit; +using Avalonia.Media; namespace Avalonia.Controls.UnitTests.Primitives { @@ -512,6 +513,68 @@ namespace Avalonia.Controls.UnitTests.Primitives } } + [Fact] + public void Templated_Child_Should_Find_Resource_In_TemplatedParent() + { + var target = new ContentControl + { + Resources = + { + { "red", Brushes.Red }, + }, + Template = new FuncControlTemplate((x, scope) => + { + var result = new ContentPresenter + { + Name = "PART_ContentPresenter", + [!ContentPresenter.ContentProperty] = x[!ContentControl.ContentProperty], + }.RegisterInNameScope(scope); + + result.Bind(ContentPresenter.BackgroundProperty, result.GetResourceObservable("red")); + + return result; + }), + }; + + target.ApplyTemplate(); + + var contentPresenter = Assert.IsType(target.GetVisualChildren().Single()); + Assert.Same(Brushes.Red, contentPresenter.Background); + } + + [Fact] + public void Changing_Resource_In_Templated_Parent_Should_Affect_Templated_Child() + { + var target = new ContentControl + { + Resources = + { + { "red", Brushes.Red }, + }, + Template = new FuncControlTemplate((x, scope) => + { + var result = new ContentPresenter + { + Name = "PART_ContentPresenter", + [!ContentPresenter.ContentProperty] = x[!ContentControl.ContentProperty], + }.RegisterInNameScope(scope); + + result.Bind(ContentPresenter.BackgroundProperty, result.GetResourceObservable("red")); + + return result; + }), + }; + + target.ApplyTemplate(); + + var contentPresenter = Assert.IsType(target.GetVisualChildren().Single()); + Assert.Same(Brushes.Red, contentPresenter.Background); + + target.Resources["red"] = Brushes.Green; + + Assert.Same(Brushes.Green, contentPresenter.Background); + } + private static IControl ScrollingContentControlTemplate(ContentControl control, INameScope scope) { return new Border