瀏覽代碼

Added failing test for #7706.

Steven Kirk 2 年之前
父節點
當前提交
3a250c86f3
共有 1 個文件被更改,包括 33 次插入0 次删除
  1. 33 0
      tests/Avalonia.Base.UnitTests/Layout/LayoutManagerTests.cs

+ 33 - 0
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);
+        }
     }
 }