From 6d2056ad2b0d3ae5d64167467f5a1e9ff94d0f25 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 5 Dec 2014 18:14:03 +0100 Subject: [PATCH] Added unit test to test breakage. --- Perspex.Controls/Window.cs | 7 +- Perspex.Layout.UnitTests/FullLayoutTests.cs | 111 ++++++++++++++++++ Perspex.Layout.UnitTests/LayoutableTests.cs | 51 -------- .../Perspex.Layout.UnitTests.csproj | 20 +++- Perspex.Layout.UnitTests/packages.config | 3 +- Perspex.sln | 6 + 6 files changed, 141 insertions(+), 57 deletions(-) create mode 100644 Perspex.Layout.UnitTests/FullLayoutTests.cs delete mode 100644 Perspex.Layout.UnitTests/LayoutableTests.cs diff --git a/Perspex.Controls/Window.cs b/Perspex.Controls/Window.cs index 19aac2f48c..82c62aafa8 100644 --- a/Perspex.Controls/Window.cs +++ b/Perspex.Controls/Window.cs @@ -48,6 +48,12 @@ namespace Perspex.Controls this.LayoutManager = Locator.Current.GetService(); this.RenderManager = Locator.Current.GetService(); + if (renderInterface == null) + { + throw new InvalidOperationException( + "Could not create an interface to the rendering subsystem: maybe no rendering subsystem was initialized?"); + } + if (this.impl == null) { throw new InvalidOperationException( @@ -85,7 +91,6 @@ namespace Perspex.Controls this.LayoutManager.Root = this; this.LayoutManager.LayoutNeeded.Subscribe(_ => this.HandleLayoutNeeded()); - this.RenderManager.RenderNeeded.Subscribe(_ => this.HandleRenderNeeded()); this.GetObservable(TitleProperty).Subscribe(s => this.impl.SetTitle(s)); diff --git a/Perspex.Layout.UnitTests/FullLayoutTests.cs b/Perspex.Layout.UnitTests/FullLayoutTests.cs new file mode 100644 index 0000000000..52608e1762 --- /dev/null +++ b/Perspex.Layout.UnitTests/FullLayoutTests.cs @@ -0,0 +1,111 @@ +// ----------------------------------------------------------------------- +// +// Copyright 2014 MIT Licence. See licence.md for more information. +// +// ----------------------------------------------------------------------- + +namespace Perspex.Layout.UnitTests +{ + using System.Linq; + using Microsoft.VisualStudio.TestTools.UnitTesting; + using Moq; + using Perspex.Controls; + using Perspex.Controls.Presenters; + using Perspex.Controls.Primitives; + using Perspex.Input; + using Perspex.Platform; + using Perspex.Rendering; + using Perspex.Styling; + using Perspex.Themes.Default; + using Ploeh.AutoFixture; + using Ploeh.AutoFixture.AutoMoq; + using Splat; + + [TestClass] + public class FullLayoutTests + { + [TestMethod] + public void Test_ScrollViewer_With_TextBlock() + { + using (var context = Locator.CurrentMutable.WithResolver()) + { + this.RegisterServices(); + + ScrollViewer scrollViewer; + TextBlock textBlock; + + var window = new Window() + { + Content = (scrollViewer = new ScrollViewer + { + Id = "scrollViewer", + Width = 200, + Height = 200, + HorizontalAlignment = HorizontalAlignment.Center, + VerticalAlignment = VerticalAlignment.Center, + Content = (textBlock = new TextBlock + { + Width = 400, + Height = 400, + Text = "Hello World!", + }), + }) + }; + + window.LayoutManager.ExecuteLayoutPass(); + + Assert.AreEqual(new Size(800, 600), window.ActualSize); + Assert.AreEqual(new Size(200, 200), scrollViewer.ActualSize); + Assert.AreEqual(new Point(300, 200), Position(scrollViewer)); + Assert.AreEqual(new Size(400, 400), textBlock.ActualSize); + + var scrollBars = scrollViewer.GetTemplateControls().OfType().ToList(); + var presenters = scrollViewer.GetTemplateControls().OfType().ToList(); + + Assert.AreEqual(2, scrollBars.Count); + Assert.AreEqual(1, presenters.Count); + + var presenter = presenters[0]; + Assert.AreEqual(new Size(190, 190), presenter.ActualSize); + + var horzScroll = scrollBars.Single(x => x.Orientation == Orientation.Horizontal); + var vertScroll = scrollBars.Single(x => x.Orientation == Orientation.Vertical); + + Assert.IsTrue(horzScroll.IsVisible); + Assert.IsTrue(vertScroll.IsVisible); + Assert.AreEqual(new Size(200, 10), horzScroll.ActualSize); + Assert.AreEqual(new Size(10, 200), vertScroll.ActualSize); + Assert.AreEqual(new Point(0, 190), Position(horzScroll)); + Assert.AreEqual(new Point(190, 0), Position(vertScroll)); + } + } + + private static Point Position(IVisual v) + { + return v.Bounds.Position; + } + + private void RegisterServices() + { + var fixture = new Fixture().Customize(new AutoMoqCustomization()); + var l = Locator.CurrentMutable; + var windowImpl = new Mock(); + var renderManager = fixture.Create(); + var globalStyles = new Mock(); + var theme = new DefaultTheme(); + + globalStyles.Setup(x => x.Styles).Returns(theme); + windowImpl.Setup(x => x.ClientSize).Returns(new Size(800, 600)); + + l.RegisterConstant(new Mock().Object, typeof(IInputManager)); + l.RegisterConstant(new LayoutManager(), typeof(ILayoutManager)); + l.RegisterConstant(new Mock().Object, typeof(IPlatformRenderInterface)); + l.RegisterConstant(new Mock().Object, typeof(IPlatformThreadingInterface)); + l.RegisterConstant(renderManager, typeof(IRenderManager)); + l.RegisterConstant(new Styler(), typeof(IStyler)); + l.RegisterConstant(globalStyles.Object, typeof(IGlobalStyles)); + l.RegisterConstant(windowImpl.Object, typeof(IWindowImpl)); + l.RegisterConstant(new Mock().Object, typeof(ITextService)); + } + } +} diff --git a/Perspex.Layout.UnitTests/LayoutableTests.cs b/Perspex.Layout.UnitTests/LayoutableTests.cs deleted file mode 100644 index 705662762a..0000000000 --- a/Perspex.Layout.UnitTests/LayoutableTests.cs +++ /dev/null @@ -1,51 +0,0 @@ -// ----------------------------------------------------------------------- -// -// Copyright 2014 MIT Licence. See licence.md for more information. -// -// ----------------------------------------------------------------------- - -namespace Perspex.Layout.UnitTests -{ - using Microsoft.VisualStudio.TestTools.UnitTesting; - using Moq; - using Moq.AutoMock; - using Perspex.Controls; - using Perspex.Input; - using Perspex.Platform; - using Perspex.Rendering; - using Perspex.Styling; - using Splat; - - [TestClass] - public class LayoutableTests - { - private Mock layoutManager; - - [TestMethod] - public void Calling_InvalidateMeasure_On_Window_Should_Call_LayoutManager_InvalidateMeasure() - { - using (var d = Locator.Current.WithResolver()) - { - this.RegisterServices(); - - Window target = new Window(); - } - } - - private void RegisterServices() - { - var l = Locator.CurrentMutable; - var m = new AutoMocker(); - - var lm = m.CreateInstance(); - //this.layoutManager = - - l.RegisterConstant(new Mock().Object, typeof(IInputManager)); - l.RegisterConstant(this.layoutManager.Object, typeof(ILayoutManager)); - l.RegisterConstant(new Mock().Object, typeof(IPlatformRenderInterface)); - l.RegisterConstant(new Mock().Object, typeof(IRenderManager)); - l.RegisterConstant(new Mock().Object, typeof(IStyler)); - l.RegisterConstant(new Mock().Object, typeof(IWindowImpl)); - } - } -} diff --git a/Perspex.Layout.UnitTests/Perspex.Layout.UnitTests.csproj b/Perspex.Layout.UnitTests/Perspex.Layout.UnitTests.csproj index 1aefe5f42b..b3b175be46 100644 --- a/Perspex.Layout.UnitTests/Perspex.Layout.UnitTests.csproj +++ b/Perspex.Layout.UnitTests/Perspex.Layout.UnitTests.csproj @@ -35,11 +35,15 @@ 4 - + + False ..\packages\Moq.4.2.1409.1722\lib\net40\Moq.dll - - ..\packages\Moq.AutoMock.0.3.2.1\lib\net40\Moq.AutoMock.dll + + ..\packages\AutoFixture.3.21.1\lib\net40\Ploeh.AutoFixture.dll + + + ..\packages\AutoFixture.AutoMoq.3.21.1\lib\net40\Ploeh.AutoFixture.AutoMoq.dll ..\packages\Splat.1.5.1\lib\Net45\Splat.dll @@ -59,7 +63,7 @@ - + @@ -75,6 +79,10 @@ {62024b2d-53eb-4638-b26b-85eeaa54866e} Perspex.Input + + {6b0ed19d-a08b-461c-a9d9-a9ee40b0c06b} + Perspex.Interactivity + {42472427-4774-4c81-8aff-9f27b8e31721} Perspex.Layout @@ -87,6 +95,10 @@ {f1baa01a-f176-4c6a-b39d-5b40bb1b148f} Perspex.Styling + + {3e10a5fa-e8da-48b1-ad44-6a5b6cb7750f} + Perspex.Themes.Default + diff --git a/Perspex.Layout.UnitTests/packages.config b/Perspex.Layout.UnitTests/packages.config index 105b5d5ca8..c9695c09a2 100644 --- a/Perspex.Layout.UnitTests/packages.config +++ b/Perspex.Layout.UnitTests/packages.config @@ -1,6 +1,7 @@  + + - \ No newline at end of file diff --git a/Perspex.sln b/Perspex.sln index 8ceac37052..ffe48b90e1 100644 --- a/Perspex.sln +++ b/Perspex.sln @@ -55,6 +55,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utils", "Utils", "{2BAFBE53 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NGenerics", "NGenerics\NGenerics.csproj", "{415E048E-4611-4815-9CF2-D774E29079AC}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Perspex.Layout.UnitTests", "Perspex.Layout.UnitTests\Perspex.Layout.UnitTests.csproj", "{DB070A10-BF39-4752-8456-86E9D5928478}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -148,6 +150,10 @@ Global {415E048E-4611-4815-9CF2-D774E29079AC}.Debug|Any CPU.Build.0 = Debug|Any CPU {415E048E-4611-4815-9CF2-D774E29079AC}.Release|Any CPU.ActiveCfg = Release|Any CPU {415E048E-4611-4815-9CF2-D774E29079AC}.Release|Any CPU.Build.0 = Release|Any CPU + {DB070A10-BF39-4752-8456-86E9D5928478}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DB070A10-BF39-4752-8456-86E9D5928478}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB070A10-BF39-4752-8456-86E9D5928478}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DB070A10-BF39-4752-8456-86E9D5928478}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE