Browse Source

Added unit test to test breakage.

pull/10/head
Steven Kirk 12 years ago
parent
commit
6d2056ad2b
  1. 7
      Perspex.Controls/Window.cs
  2. 111
      Perspex.Layout.UnitTests/FullLayoutTests.cs
  3. 51
      Perspex.Layout.UnitTests/LayoutableTests.cs
  4. 20
      Perspex.Layout.UnitTests/Perspex.Layout.UnitTests.csproj
  5. 3
      Perspex.Layout.UnitTests/packages.config
  6. 6
      Perspex.sln

7
Perspex.Controls/Window.cs

@ -48,6 +48,12 @@ namespace Perspex.Controls
this.LayoutManager = Locator.Current.GetService<ILayoutManager>();
this.RenderManager = Locator.Current.GetService<IRenderManager>();
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));

111
Perspex.Layout.UnitTests/FullLayoutTests.cs

@ -0,0 +1,111 @@
// -----------------------------------------------------------------------
// <copyright file="LayoutManagerTests.cs" company="Steven Kirk">
// Copyright 2014 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
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<ScrollBar>().ToList();
var presenters = scrollViewer.GetTemplateControls().OfType<ScrollContentPresenter>().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<IWindowImpl>();
var renderManager = fixture.Create<IRenderManager>();
var globalStyles = new Mock<IGlobalStyles>();
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<IInputManager>().Object, typeof(IInputManager));
l.RegisterConstant(new LayoutManager(), typeof(ILayoutManager));
l.RegisterConstant(new Mock<IPlatformRenderInterface>().Object, typeof(IPlatformRenderInterface));
l.RegisterConstant(new Mock<IPlatformThreadingInterface>().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<ITextService>().Object, typeof(ITextService));
}
}
}

51
Perspex.Layout.UnitTests/LayoutableTests.cs

@ -1,51 +0,0 @@
// -----------------------------------------------------------------------
// <copyright file="LayoutableTests.cs" company="Steven Kirk">
// Copyright 2014 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
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<ILayoutManager> 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<ILayoutManager>();
//this.layoutManager =
l.RegisterConstant(new Mock<IInputManager>().Object, typeof(IInputManager));
l.RegisterConstant(this.layoutManager.Object, typeof(ILayoutManager));
l.RegisterConstant(new Mock<IPlatformRenderInterface>().Object, typeof(IPlatformRenderInterface));
l.RegisterConstant(new Mock<IRenderManager>().Object, typeof(IRenderManager));
l.RegisterConstant(new Mock<IStyler>().Object, typeof(IStyler));
l.RegisterConstant(new Mock<IWindowImpl>().Object, typeof(IWindowImpl));
}
}
}

20
Perspex.Layout.UnitTests/Perspex.Layout.UnitTests.csproj

@ -35,11 +35,15 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Moq">
<Reference Include="Moq, Version=4.2.1409.1722, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Moq.4.2.1409.1722\lib\net40\Moq.dll</HintPath>
</Reference>
<Reference Include="Moq.AutoMock">
<HintPath>..\packages\Moq.AutoMock.0.3.2.1\lib\net40\Moq.AutoMock.dll</HintPath>
<Reference Include="Ploeh.AutoFixture">
<HintPath>..\packages\AutoFixture.3.21.1\lib\net40\Ploeh.AutoFixture.dll</HintPath>
</Reference>
<Reference Include="Ploeh.AutoFixture.AutoMoq">
<HintPath>..\packages\AutoFixture.AutoMoq.3.21.1\lib\net40\Ploeh.AutoFixture.AutoMoq.dll</HintPath>
</Reference>
<Reference Include="Splat">
<HintPath>..\packages\Splat.1.5.1\lib\Net45\Splat.dll</HintPath>
@ -59,7 +63,7 @@
</Otherwise>
</Choose>
<ItemGroup>
<Compile Include="LayoutableTests.cs" />
<Compile Include="FullLayoutTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
@ -75,6 +79,10 @@
<Project>{62024b2d-53eb-4638-b26b-85eeaa54866e}</Project>
<Name>Perspex.Input</Name>
</ProjectReference>
<ProjectReference Include="..\Perspex.Interactivity\Perspex.Interactivity.csproj">
<Project>{6b0ed19d-a08b-461c-a9d9-a9ee40b0c06b}</Project>
<Name>Perspex.Interactivity</Name>
</ProjectReference>
<ProjectReference Include="..\Perspex.Layout\Perspex.Layout.csproj">
<Project>{42472427-4774-4c81-8aff-9f27b8e31721}</Project>
<Name>Perspex.Layout</Name>
@ -87,6 +95,10 @@
<Project>{f1baa01a-f176-4c6a-b39d-5b40bb1b148f}</Project>
<Name>Perspex.Styling</Name>
</ProjectReference>
<ProjectReference Include="..\Perspex.Themes.Default\Perspex.Themes.Default.csproj">
<Project>{3e10a5fa-e8da-48b1-ad44-6a5b6cb7750f}</Project>
<Name>Perspex.Themes.Default</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />

3
Perspex.Layout.UnitTests/packages.config

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AutoFixture" version="3.21.1" targetFramework="net45" />
<package id="AutoFixture.AutoMoq" version="3.21.1" targetFramework="net45" />
<package id="Moq" version="4.2.1409.1722" targetFramework="net45" />
<package id="Moq.AutoMock" version="0.3.2.1" targetFramework="net45" />
<package id="Splat" version="1.5.1" targetFramework="net45" />
</packages>

6
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

Loading…
Cancel
Save