From 662b1e008dabcbb011694518d34fa9f8f7f6aac6 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 17 Nov 2020 09:32:28 +0100 Subject: [PATCH] More tests for #5027. --- .../Avalonia.Styling.UnitTests.csproj | 1 + .../Avalonia.Styling.UnitTests/StyleTests.cs | 198 ++++++++++++++++++ 2 files changed, 199 insertions(+) diff --git a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj index 2b7f6263a7..cf24f2ec18 100644 --- a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj +++ b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj @@ -4,6 +4,7 @@ Library CS0067 true + latest diff --git a/tests/Avalonia.Styling.UnitTests/StyleTests.cs b/tests/Avalonia.Styling.UnitTests/StyleTests.cs index a6bbe63cd0..70de9603e8 100644 --- a/tests/Avalonia.Styling.UnitTests/StyleTests.cs +++ b/tests/Avalonia.Styling.UnitTests/StyleTests.cs @@ -218,6 +218,204 @@ namespace Avalonia.Styling.UnitTests Assert.Equal(new[] { "foodefault", "Bar" }, values); } + [Fact] + public void Inactive_Values_Should_Not_Be_Made_Active_During_Style_Attach() + { + using var app = UnitTestApplication.Start(TestServices.RealStyler); + + var root = new TestRoot + { + Styles = + { + new Style(x => x.OfType()) + { + Setters = + { + new Setter(Class1.FooProperty, "Foo"), + }, + }, + + new Style(x => x.OfType()) + { + Setters = + { + new Setter(Class1.FooProperty, "Bar"), + }, + } + } + }; + + var values = new List(); + var target = new Class1(); + + target.GetObservable(Class1.FooProperty).Subscribe(x => values.Add(x)); + root.Child = target; + + Assert.Equal(new[] { "foodefault", "Bar" }, values); + } + + [Fact] + public void Inactive_Bindings_Should_Not_Be_Made_Active_During_Style_Attach() + { + using var app = UnitTestApplication.Start(TestServices.RealStyler); + + var root = new TestRoot + { + Styles = + { + new Style(x => x.OfType()) + { + Setters = + { + new Setter(Class1.FooProperty, new Binding("Foo")), + }, + }, + + new Style(x => x.OfType()) + { + Setters = + { + new Setter(Class1.FooProperty, new Binding("Bar")), + }, + } + } + }; + + var values = new List(); + var target = new Class1 + { + DataContext = new + { + Foo = "Foo", + Bar = "Bar", + } + }; + + target.GetObservable(Class1.FooProperty).Subscribe(x => values.Add(x)); + root.Child = target; + + Assert.Equal(new[] { "foodefault", "Bar" }, values); + } + + [Fact] + public void Inactive_Values_Should_Not_Be_Made_Active_During_Style_Detach() + { + using var app = UnitTestApplication.Start(TestServices.RealStyler); + + var root = new TestRoot + { + Styles = + { + new Style(x => x.OfType()) + { + Setters = + { + new Setter(Class1.FooProperty, "Foo"), + }, + }, + + new Style(x => x.OfType()) + { + Setters = + { + new Setter(Class1.FooProperty, "Bar"), + }, + } + } + }; + + var target = new Class1(); + root.Child = target; + + var values = new List(); + target.GetObservable(Class1.FooProperty).Subscribe(x => values.Add(x)); + root.Child = null; + + Assert.Equal(new[] { "Bar", "foodefault" }, values); + } + + [Fact] + public void Inactive_Values_Should_Not_Be_Made_Active_During_Style_Detach_2() + { + using var app = UnitTestApplication.Start(TestServices.RealStyler); + + var root = new TestRoot + { + Styles = + { + new Style(x => x.OfType().Class("foo")) + { + Setters = + { + new Setter(Class1.FooProperty, "Foo"), + }, + }, + + new Style(x => x.OfType()) + { + Setters = + { + new Setter(Class1.FooProperty, "Bar"), + }, + } + } + }; + + var target = new Class1 { Classes = { "foo" } }; + root.Child = target; + + var values = new List(); + target.GetObservable(Class1.FooProperty).Subscribe(x => values.Add(x)); + root.Child = null; + + Assert.Equal(new[] { "Foo", "foodefault" }, values); + } + + [Fact] + public void Inactive_Bindings_Should_Not_Be_Made_Active_During_Style_Detach() + { + using var app = UnitTestApplication.Start(TestServices.RealStyler); + + var root = new TestRoot + { + Styles = + { + new Style(x => x.OfType()) + { + Setters = + { + new Setter(Class1.FooProperty, new Binding("Foo")), + }, + }, + + new Style(x => x.OfType()) + { + Setters = + { + new Setter(Class1.FooProperty, new Binding("Bar")), + }, + } + } + }; + + var target = new Class1 + { + DataContext = new + { + Foo = "Foo", + Bar = "Bar", + } + }; + + root.Child = target; + + var values = new List(); + target.GetObservable(Class1.FooProperty).Subscribe(x => values.Add(x)); + root.Child = null; + + Assert.Equal(new[] { "Bar", "foodefault" }, values); + } + [Fact] public void Template_In_Non_Matching_Style_Is_Not_Built() {