diff --git a/tests/Avalonia.Base.UnitTests/Layout/LayoutManagerTests.cs b/tests/Avalonia.Base.UnitTests/Layout/LayoutManagerTests.cs index 45a6efdd4a..cadf23c754 100644 --- a/tests/Avalonia.Base.UnitTests/Layout/LayoutManagerTests.cs +++ b/tests/Avalonia.Base.UnitTests/Layout/LayoutManagerTests.cs @@ -547,5 +547,38 @@ namespace Avalonia.Base.UnitTests.Layout Assert.True(root.IsMeasureValid); Assert.True(root.IsArrangeValid); } + + [Fact] + public void GreatGrandparent_Can_Invalidate_Grandparent_Measure_During_Arrange() + { + // Issue #7706 (second part: scrollbar gets stuck) + var child = new LayoutTestControl(); + var parent = new LayoutTestControl { Child = child }; + var grandparent = new LayoutTestControl { Child = parent }; + var greatGrandparent = new LayoutTestControl { Child = grandparent }; + var root = new LayoutTestRoot { Child = greatGrandparent }; + + root.LayoutManager.ExecuteInitialLayoutPass(); + + greatGrandparent.DoArrangeOverride = (_, s) => + { + grandparent.InvalidateMeasure(); + return s; + }; + + child.InvalidateArrange(); + greatGrandparent.InvalidateArrange(); + + root.LayoutManager.ExecuteLayoutPass(); + + Assert.True(child.IsMeasureValid); + Assert.True(child.IsArrangeValid); + Assert.True(parent.IsMeasureValid); + Assert.True(parent.IsArrangeValid); + Assert.True(greatGrandparent.IsMeasureValid); + Assert.True(greatGrandparent.IsArrangeValid); + Assert.True(root.IsMeasureValid); + Assert.True(root.IsArrangeValid); + } } }