From 62901f02d5ab390753cb91db0481ca32787bc459 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Mon, 2 Feb 2015 23:06:58 +0100 Subject: [PATCH] Started adding ScrollContentPresenter tests. --- .../Presenters/ScrollContentPresenter.cs | 5 +- .../Perspex.Controls.UnitTests.csproj | 16 ++++++ .../ScrollContentPresenterTests.cs | 53 +++++++++++++++++++ .../packages.config | 5 ++ 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 Tests/Perspex.Controls.UnitTests/ScrollContentPresenterTests.cs diff --git a/Perspex.Controls/Presenters/ScrollContentPresenter.cs b/Perspex.Controls/Presenters/ScrollContentPresenter.cs index 1b0a84b52f..c0bb1da5c6 100644 --- a/Perspex.Controls/Presenters/ScrollContentPresenter.cs +++ b/Perspex.Controls/Presenters/ScrollContentPresenter.cs @@ -26,6 +26,8 @@ namespace Perspex.Controls.Presenters public static readonly PerspexProperty CanScrollHorizontallyProperty = PerspexProperty.Register("CanScrollHorizontally", true); + private Size measuredExtent; + static ScrollContentPresenter() { ClipToBoundsProperty.OverrideDefaultValue(typeof(ScrollContentPresenter), true); @@ -77,7 +79,7 @@ namespace Perspex.Controls.Presenters content.Measure(measureSize); var size = content.DesiredSize.Value; - this.Extent = size; + this.measuredExtent = size; return size.Constrain(availableSize); } else @@ -91,6 +93,7 @@ namespace Perspex.Controls.Presenters var child = this.GetVisualChildren().SingleOrDefault() as ILayoutable; this.Viewport = finalSize; + this.Extent = this.measuredExtent; if (child != null) { diff --git a/Tests/Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj b/Tests/Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj index 2f6064d26d..68f9cdb109 100644 --- a/Tests/Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj +++ b/Tests/Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj @@ -51,6 +51,21 @@ ..\..\packages\Splat.1.5.1\lib\Net45\Splat.dll + + False + ..\..\packages\Rx-Core.2.2.5\lib\net45\System.Reactive.Core.dll + + + False + ..\..\packages\Rx-Interfaces.2.2.5\lib\net45\System.Reactive.Interfaces.dll + + + False + ..\..\packages\Rx-Linq.2.2.5\lib\net45\System.Reactive.Linq.dll + + + ..\..\packages\Rx-PlatformServices.2.2.5\lib\net45\System.Reactive.PlatformServices.dll + ..\..\packages\xunit.1.9.2\lib\net20\xunit.dll @@ -65,6 +80,7 @@ + diff --git a/Tests/Perspex.Controls.UnitTests/ScrollContentPresenterTests.cs b/Tests/Perspex.Controls.UnitTests/ScrollContentPresenterTests.cs new file mode 100644 index 0000000000..0e358560a6 --- /dev/null +++ b/Tests/Perspex.Controls.UnitTests/ScrollContentPresenterTests.cs @@ -0,0 +1,53 @@ +// ----------------------------------------------------------------------- +// +// Copyright 2014 MIT Licence. See licence.md for more information. +// +// ----------------------------------------------------------------------- + +namespace Perspex.Controls.UnitTests +{ + using System; + using System.Collections.Generic; + using System.Reactive.Linq; + using Perspex.Controls.Presenters; + using Xunit; + + public class ScrollContentPresenterTests + { + [Fact] + public void Arrange_Should_Set_Viewport_And_Extent_In_That_Order() + { + var target = new ScrollContentPresenter + { + Content = new Border { Width = 40, Height = 50 } + }; + + var set = new List(); + + target.Measure(new Size(100, 100)); + + target.GetObservable(ScrollViewer.ViewportProperty).Skip(1).Subscribe(_ => set.Add("Viewport")); + target.GetObservable(ScrollViewer.ExtentProperty).Skip(1).Subscribe(_ => set.Add("Extent")); + + target.Arrange(new Rect(0, 0, 100, 100)); + + Assert.Equal(new[] { "Viewport", "Extent" }, set); + } + + [Fact] + public void Setting_Offset_Should_Invalidate_Arrange() + { + var target = new ScrollContentPresenter + { + Content = new Border { Width = 40, Height = 50 } + }; + + target.Measure(new Size(100, 100)); + target.Arrange(new Rect(0, 0, 100, 100)); + target.Offset = new Vector(10, 100); + + Assert.True(target.IsMeasureValid); + Assert.False(target.IsArrangeValid); + } + } +} \ No newline at end of file diff --git a/Tests/Perspex.Controls.UnitTests/packages.config b/Tests/Perspex.Controls.UnitTests/packages.config index 7952b1097c..815bfd2f08 100644 --- a/Tests/Perspex.Controls.UnitTests/packages.config +++ b/Tests/Perspex.Controls.UnitTests/packages.config @@ -3,6 +3,11 @@ + + + + +