public void ArrangeWhenMeasureChangedTest() { TestTaskScheduler scheduler = (TestTaskScheduler)ApplicationHost.Current.TaskScheduler; using (scheduler.DisableImmediateProcessing()) { TestElement element = new TestElement { MeasureSize = new Size(100, 100), ArrangeSize = new Size(100, 100), }; element.IsRootElement = true; element.Measure(new Size(100, 100)); element.Arrange(new Rect(0, 0, 100, 100)); Assert.AreEqual(1, element.MeasureCount); Assert.AreEqual(1, element.ArrangeCount); element.InvalidateMeasure(); scheduler.ProcessDueOperations(); Assert.AreEqual(2, element.MeasureCount); Assert.AreEqual(1, element.ArrangeCount); element.MeasureSize = new Size(150, 150); element.InvalidateMeasure(); scheduler.ProcessDueOperations(); Assert.AreEqual(3, element.MeasureCount); Assert.AreEqual(2, element.ArrangeCount); } }
public void MeasureInvisibleOnceOnlyTest() { TestTaskScheduler scheduler = (TestTaskScheduler)ApplicationHost.Current.TaskScheduler; using (scheduler.DisableImmediateProcessing()) { TestElement child = new TestElement { MeasureSize = new Size(100, 100), ArrangeSize = new Size(100, 100) }; TestContainer parent = new TestContainer { IsRootElement = true }; parent.Child = child; parent.Measure(Size.Infinity); parent.Arrange(new Rect(parent.DesiredSize)); Assert.AreEqual(1, parent.MeasureCount); Assert.AreEqual(1, parent.ArrangeCount); Assert.AreEqual(1, child.MeasureCount); Assert.AreEqual(1, child.ArrangeCount); Assert.AreEqual(new Size(100, 100), child.DesiredSize); Assert.AreEqual(new Size(100, 100), parent.DesiredSize); child.Visibility = Visibility.Collapsed; scheduler.ProcessDueOperations(); Assert.AreEqual(2, parent.MeasureCount); Assert.AreEqual(2, parent.ArrangeCount); Assert.AreEqual(1, child.MeasureCount); Assert.AreEqual(1, child.ArrangeCount); Assert.AreEqual(Size.Zero, child.DesiredSize); Assert.AreEqual(Size.Zero, parent.DesiredSize); child.InvalidateMeasure(); child.InvalidateArrange(); scheduler.ProcessDueOperations(); Assert.AreEqual(2, parent.MeasureCount); Assert.AreEqual(2, parent.ArrangeCount); Assert.AreEqual(1, child.MeasureCount); Assert.AreEqual(1, child.ArrangeCount); parent.InvalidateMeasure(); parent.InvalidateArrange(); scheduler.ProcessDueOperations(); Assert.AreEqual(3, parent.MeasureCount); Assert.AreEqual(3, parent.ArrangeCount); Assert.AreEqual(1, child.MeasureCount); Assert.AreEqual(1, child.ArrangeCount); } }
public void MeasureVisibleOnlyTest() { TestTaskScheduler scheduler = (TestTaskScheduler)ApplicationHost.Current.TaskScheduler; using (scheduler.DisableImmediateProcessing()) { TestElement child = new TestElement(); TestContainer parent = new TestContainer(); parent.Child = child; parent.InvalidateMeasure(); parent.InvalidateArrange(); child.InvalidateMeasure(); child.InvalidateArrange(); scheduler.ProcessDueOperations(); Assert.AreEqual(0, parent.MeasureCount); Assert.AreEqual(0, parent.ArrangeCount); Assert.AreEqual(0, child.MeasureCount); Assert.AreEqual(0, child.ArrangeCount); Assert.IsFalse(parent.IsMeasureValid); Assert.IsFalse(parent.IsArrangeValid); Assert.IsFalse(child.IsMeasureValid); Assert.IsFalse(child.IsArrangeValid); } }
public void MeasureParentOnceTest() { TestTaskScheduler scheduler = (TestTaskScheduler)ApplicationHost.Current.TaskScheduler; using (scheduler.DisableImmediateProcessing()) { TestContainer parent = new TestContainer(); TestElement child = new TestElement { MeasureSize = new Size(100, 100), ArrangeSize = new Size(100, 100), }; parent.IsRootElement = true; parent.Child = child; parent.Measure(new Size(100, 100)); parent.Arrange(new Rect(0, 0, 200, 200)); scheduler.ProcessDueOperations(); Assert.AreEqual(1, parent.MeasureCount); Assert.AreEqual(1, parent.ArrangeCount); Assert.AreEqual(1, child.MeasureCount); Assert.AreEqual(1, child.ArrangeCount); Assert.IsTrue(parent.IsMeasureValid); Assert.IsTrue(parent.IsArrangeValid); Assert.IsTrue(child.IsMeasureValid); Assert.IsTrue(child.IsArrangeValid); } }
public void LayoutInvalidationTest() { TestTaskScheduler scheduler = (TestTaskScheduler)ApplicationHost.Current.TaskScheduler; using (scheduler.DisableImmediateProcessing()) { UIElement root = new UIElement { IsRootElement = true }; UIElement child = new UIElement(); root.Measure(Size.Infinity); root.Arrange(new Rect(root.DesiredSize)); Assert.IsTrue(root.IsMeasureValid); Assert.IsTrue(root.IsArrangeValid); root.AddVisualChild(child); Assert.IsFalse(root.IsMeasureValid); Assert.IsTrue(root.IsArrangeValid); scheduler.ProcessDueOperations(); Assert.IsTrue(root.IsMeasureValid); Assert.IsTrue(root.IsArrangeValid); root.RemoveVisualChild(child); Assert.IsFalse(root.IsMeasureValid); Assert.IsTrue(root.IsArrangeValid); scheduler.ProcessDueOperations(); Assert.IsTrue(root.IsMeasureValid); Assert.IsTrue(root.IsArrangeValid); } }