diff --git a/tests/Avalonia.Controls.UnitTests/BorderTests.cs b/tests/Avalonia.Controls.UnitTests/BorderTests.cs index 9a6a041ec7..0ac9392bc6 100644 --- a/tests/Avalonia.Controls.UnitTests/BorderTests.cs +++ b/tests/Avalonia.Controls.UnitTests/BorderTests.cs @@ -1,6 +1,10 @@ // Copyright (c) The Avalonia Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. +using Avalonia.Media; +using Avalonia.Rendering; +using Avalonia.UnitTests; +using Moq; using Xunit; namespace Avalonia.Controls.UnitTests @@ -42,5 +46,22 @@ namespace Avalonia.Controls.UnitTests Assert.Equal(new Rect(6, 6, 0, 0), content.Bounds); } + + [Fact] + public void Changing_Background_Brush_Color_Should_Invalidate_Visual() + { + var target = new Border() + { + Background = new SolidColorBrush(Colors.Red), + }; + + var root = new TestRoot(target); + var renderer = Mock.Get(root.Renderer); + renderer.ResetCalls(); + + ((SolidColorBrush)target.Background).Color = Colors.Green; + + renderer.Verify(x => x.AddDirty(target), Times.Once); + } } } diff --git a/tests/Avalonia.Controls.UnitTests/PanelTests.cs b/tests/Avalonia.Controls.UnitTests/PanelTests.cs index ed239120d6..4a404ea97e 100644 --- a/tests/Avalonia.Controls.UnitTests/PanelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/PanelTests.cs @@ -3,7 +3,11 @@ using System.Linq; using Avalonia.LogicalTree; +using Avalonia.Media; +using Avalonia.Rendering; +using Avalonia.UnitTests; using Avalonia.VisualTree; +using Moq; using Xunit; namespace Avalonia.Controls.UnitTests @@ -115,5 +119,22 @@ namespace Avalonia.Controls.UnitTests Assert.Equal(new[] { child2, child1 }, panel.GetLogicalChildren()); Assert.Equal(new[] { child2, child1 }, panel.GetVisualChildren()); } + + [Fact] + public void Changing_Background_Brush_Color_Should_Invalidate_Visual() + { + var target = new Panel() + { + Background = new SolidColorBrush(Colors.Red), + }; + + var root = new TestRoot(target); + var renderer = Mock.Get(root.Renderer); + renderer.ResetCalls(); + + ((SolidColorBrush)target.Background).Color = Colors.Green; + + renderer.Verify(x => x.AddDirty(target), Times.Once); + } } } diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Standalone.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Standalone.cs index 6716456c78..9d65f2cba7 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Standalone.cs +++ b/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Standalone.cs @@ -13,6 +13,7 @@ using System; using System.Linq; using Xunit; using Avalonia.Rendering; +using Avalonia.Media; namespace Avalonia.Controls.UnitTests.Presenters { @@ -203,5 +204,22 @@ namespace Avalonia.Controls.UnitTests.Presenters Assert.NotEqual(foo, logicalChildren.First()); } + + [Fact] + public void Changing_Background_Brush_Color_Should_Invalidate_Visual() + { + var target = new ContentPresenter() + { + Background = new SolidColorBrush(Colors.Red), + }; + + var root = new TestRoot(target); + var renderer = Mock.Get(root.Renderer); + renderer.ResetCalls(); + + ((SolidColorBrush)target.Background).Color = Colors.Green; + + renderer.Verify(x => x.AddDirty(target), Times.Once); + } } -} \ No newline at end of file +} diff --git a/tests/Avalonia.Controls.UnitTests/Shapes/RectangleTests.cs b/tests/Avalonia.Controls.UnitTests/Shapes/RectangleTests.cs new file mode 100644 index 0000000000..0ec73edec0 --- /dev/null +++ b/tests/Avalonia.Controls.UnitTests/Shapes/RectangleTests.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Avalonia.Controls.Shapes; +using Avalonia.Media; +using Avalonia.UnitTests; +using Moq; +using Xunit; + +namespace Avalonia.Controls.UnitTests.Shapes +{ + public class RectangleTests + { + [Fact] + public void Changing_Fill_Brush_Color_Should_Invalidate_Visual() + { + var target = new Rectangle() + { + Fill = new SolidColorBrush(Colors.Red), + }; + + var root = new TestRoot(target); + var renderer = Mock.Get(root.Renderer); + renderer.ResetCalls(); + + ((SolidColorBrush)target.Fill).Color = Colors.Green; + + renderer.Verify(x => x.AddDirty(target), Times.Once); + } + + [Fact] + public void Changing_Stroke_Brush_Color_Should_Invalidate_Visual() + { + var target = new Rectangle() + { + Stroke = new SolidColorBrush(Colors.Red), + }; + + var root = new TestRoot(target); + var renderer = Mock.Get(root.Renderer); + renderer.ResetCalls(); + + ((SolidColorBrush)target.Stroke).Color = Colors.Green; + + renderer.Verify(x => x.AddDirty(target), Times.Once); + } + } +} diff --git a/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs b/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs index 9a1140fc05..45e683455b 100644 --- a/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs @@ -2,6 +2,10 @@ // Licensed under the MIT license. See licence.md file in the project root for full license information. using Avalonia.Data; +using Avalonia.Media; +using Avalonia.Rendering; +using Avalonia.UnitTests; +using Moq; using Xunit; namespace Avalonia.Controls.UnitTests @@ -25,5 +29,39 @@ namespace Avalonia.Controls.UnitTests "", textBlock.Text); } + + [Fact] + public void Changing_Background_Brush_Color_Should_Invalidate_Visual() + { + var target = new TextBlock() + { + Background = new SolidColorBrush(Colors.Red), + }; + + var root = new TestRoot(target); + var renderer = Mock.Get(root.Renderer); + renderer.ResetCalls(); + + ((SolidColorBrush)target.Background).Color = Colors.Green; + + renderer.Verify(x => x.AddDirty(target), Times.Once); + } + + [Fact] + public void Changing_Foreground_Brush_Color_Should_Invalidate_Visual() + { + var target = new TextBlock() + { + Foreground = new SolidColorBrush(Colors.Red), + }; + + var root = new TestRoot(target); + var renderer = Mock.Get(root.Renderer); + renderer.ResetCalls(); + + ((SolidColorBrush)target.Foreground).Color = Colors.Green; + + renderer.Verify(x => x.AddDirty(target), Times.Once); + } } } diff --git a/tests/Avalonia.UnitTests/TestRoot.cs b/tests/Avalonia.UnitTests/TestRoot.cs index 884df33fc0..972b1d78c0 100644 --- a/tests/Avalonia.UnitTests/TestRoot.cs +++ b/tests/Avalonia.UnitTests/TestRoot.cs @@ -19,6 +19,13 @@ namespace Avalonia.UnitTests public TestRoot() { + Renderer = Mock.Of(); + } + + public TestRoot(IControl child) + : this() + { + Child = child; } event EventHandler INameScope.Registered