diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs b/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs index 568ccb81d8..b4743e900d 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs +++ b/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs @@ -96,6 +96,55 @@ namespace Avalonia.Visuals.UnitTests.Rendering Assert.Equal(new List { root, decorator, border, canvas }, result); } + [Fact] + public void Should_Add_Dirty_Rect_On_Child_Remove() + { + var dispatcher = new ImmediateDispatcher(); + var loop = new Mock(); + + Decorator decorator; + Border border; + var root = new TestRoot + { + Width = 100, + Height= 100, + Child = decorator = new Decorator + { + Child = border = new Border + { + Width = 50, + Height = 50, + Background = Brushes.Red, + }, + } + }; + + root.Measure(Size.Infinity); + root.Arrange(new Rect(root.DesiredSize)); + + var sceneBuilder = new SceneBuilder(); + var target = new DeferredRenderer( + root, + loop.Object, + sceneBuilder: sceneBuilder, + dispatcher: dispatcher); + + root.Renderer = target; + target.Start(); + RunFrame(target); + + decorator.Child = null; + + RunFrame(target); + + var scene = target.UnitTestScene(); + var stackNode = scene.FindNode(decorator); + var dirty = scene.Layers[0].Dirty.ToList(); + + Assert.Equal(1, dirty.Count); + Assert.Equal(new Rect(25, 25, 50, 50), dirty[0]); + } + [Fact] public void Should_Update_VisualNode_Order_On_Child_Remove_Insert() {