From 552421f8d23813fc1a68f01a714157989010de2d Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 3 Feb 2015 00:33:44 +0100 Subject: [PATCH] Fix failing layout test. --- Perspex.Layout/Layoutable.cs | 7 +++-- .../FullLayoutTests.cs | 30 +++++++++++++++++++ .../Perspex.Layout.UnitTests.csproj | 8 +++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/Perspex.Layout/Layoutable.cs b/Perspex.Layout/Layoutable.cs index 42bcb31d72..4a37c9a190 100644 --- a/Perspex.Layout/Layoutable.cs +++ b/Perspex.Layout/Layoutable.cs @@ -198,9 +198,11 @@ namespace Perspex.Layout throw new InvalidOperationException("Invalid Arrange rectangle."); } - if (!this.DesiredSize.HasValue) + // If the measure was invalidated during an arrange pass, wait for the arrange pass to + // be re-run. + if (!this.IsMeasureValid) { - throw new InvalidOperationException("Arrange called before Measure."); + return; } if (force || !this.IsArrangeValid || this.previousArrange != rect) @@ -233,6 +235,7 @@ namespace Perspex.Layout this.IsArrangeValid = false; this.previousMeasure = null; this.previousArrange = null; + this.DesiredSize = null; if (parent != null && IsResizable(parent)) { diff --git a/Tests/Perspex.Layout.UnitTests/FullLayoutTests.cs b/Tests/Perspex.Layout.UnitTests/FullLayoutTests.cs index 5acaa67c9c..8fd882c452 100644 --- a/Tests/Perspex.Layout.UnitTests/FullLayoutTests.cs +++ b/Tests/Perspex.Layout.UnitTests/FullLayoutTests.cs @@ -6,12 +6,15 @@ namespace Perspex.Layout.UnitTests { + using System.Diagnostics; + using System.IO; using System.Linq; using Moq; using Perspex.Controls; using Perspex.Controls.Presenters; using Perspex.Controls.Primitives; using Perspex.Controls.Templates; + using Perspex.Diagnostics; using Perspex.Input; using Perspex.Platform; using Perspex.Rendering; @@ -62,6 +65,30 @@ namespace Perspex.Layout.UnitTests } } + class TestLogger : ILogger + { + + StreamWriter s; + + public TestLogger() + { + s = new StreamWriter(new FileStream(@"D:\temp\layout.txt", FileMode.Create, FileAccess.ReadWrite)); + } + + public LogLevel Level + { + get; + set; + } + + public void Write(string message, LogLevel logLevel) + { + if ((int)logLevel < (int)Level) return; + s.WriteLine(message); + s.Flush(); + } + } + [Fact] public void Test_ScrollViewer_With_TextBlock() { @@ -69,6 +96,9 @@ namespace Perspex.Layout.UnitTests { this.RegisterServices(); + LogManager.Enable(new TestLogger()); + LogManager.Instance.LogLayoutMessages = true; + ScrollViewer scrollViewer; TextBlock textBlock; diff --git a/Tests/Perspex.Layout.UnitTests/Perspex.Layout.UnitTests.csproj b/Tests/Perspex.Layout.UnitTests/Perspex.Layout.UnitTests.csproj index 418967507e..b896fcc253 100644 --- a/Tests/Perspex.Layout.UnitTests/Perspex.Layout.UnitTests.csproj +++ b/Tests/Perspex.Layout.UnitTests/Perspex.Layout.UnitTests.csproj @@ -67,6 +67,10 @@ + + {415e048e-4611-4815-9cf2-d774e29079ac} + NGenerics + {d211e587-d8bc-45b9-95a4-f297c8fa5200} Perspex.Animation @@ -79,6 +83,10 @@ {d2221c82-4a25-4583-9b43-d791e3f6820c} Perspex.Controls + + {7062ae20-5dcc-4442-9645-8195bdece63e} + Perspex.Diagnostics + {62024b2d-53eb-4638-b26b-85eeaa54866e} Perspex.Input