From 0aef92ac49f1d9ce69705b50e7f6add222c85b0f Mon Sep 17 00:00:00 2001 From: Antony Male Date: Sat, 15 Mar 2014 14:51:52 +0000 Subject: [PATCH] Add some tests for Conductor.Collections.OneActive, but still needs some more --- StyletUnitTests/ConductorOneActiveTests.cs | 94 ++++++++++++++++++++++ StyletUnitTests/StyletUnitTests.csproj | 1 + 2 files changed, 95 insertions(+) create mode 100644 StyletUnitTests/ConductorOneActiveTests.cs diff --git a/StyletUnitTests/ConductorOneActiveTests.cs b/StyletUnitTests/ConductorOneActiveTests.cs new file mode 100644 index 0000000..71de1d8 --- /dev/null +++ b/StyletUnitTests/ConductorOneActiveTests.cs @@ -0,0 +1,94 @@ +using Moq; +using NUnit.Framework; +using Stylet; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StyletUnitTests +{ + [TestFixture] + public class ConductorOneActiveTests + { + private Conductor.Collections.OneActive conductor; + + [SetUp] + public void SetUp() + { + this.conductor = new Conductor.Collections.OneActive(); + } + + [Test] + public void NoActiveItemsBeforeAnyItemsActivated() + { + Assert.IsEmpty(this.conductor.Items); + } + + [Test] + public void ActivatingItemActivatesAndAddsToItems() + { + var screen = new Mock(); + ((IActivate)this.conductor).Activate(); + this.conductor.ActivateItem(screen.Object); + + screen.Verify(x => x.Activate()); + Assert.AreEqual(screen.Object, this.conductor.ActiveItem); + Assert.That(this.conductor.Items, Is.EquivalentTo(new[] { screen.Object })); + } + + [Test] + public void ActivatingItemDeactivatesPreviousItem() + { + var screen1 = new Mock(); + var screen2 = new Mock(); + ((IActivate)this.conductor).Activate(); + + this.conductor.ActivateItem(screen1.Object); + this.conductor.ActivateItem(screen2.Object); + + screen1.Verify(x => x.Deactivate(false)); + screen2.Verify(x => x.Activate()); + + Assert.AreEqual(screen2.Object, this.conductor.ActiveItem); + Assert.AreEqual(new[] { screen1.Object, screen2.Object }, this.conductor.Items); + } + + [Test] + public void ClosingActiveItemChoosesPreviousItemIfAvailable() + { + var screen1 = new Mock(); + var screen2 = new Mock(); + var screen3 = new Mock(); + ((IActivate)this.conductor).Activate(); + + this.conductor.Items.AddRange(new[] { screen1.Object, screen2.Object, screen3.Object }); + this.conductor.ActivateItem(screen2.Object); + + screen2.Setup(x => x.CanCloseAsync()).Returns(Task.FromResult(true)); + + this.conductor.DeactivateItem(screen2.Object, true); + Assert.AreEqual(screen1.Object, this.conductor.ActiveItem); + Assert.AreEqual(new[] { screen1.Object, screen3.Object }, this.conductor.Items); + } + + [Test] + public void ClosingActiveItemChoosesNextItemIfNoPreviousItem() + { + var screen1 = new Mock(); + var screen2 = new Mock(); + var screen3 = new Mock(); + ((IActivate)this.conductor).Activate(); + + this.conductor.Items.AddRange(new[] { screen1.Object, screen2.Object, screen3.Object }); + this.conductor.ActivateItem(screen3.Object); + + screen3.Setup(x => x.CanCloseAsync()).Returns(Task.FromResult(true)); + + this.conductor.DeactivateItem(screen3.Object, true); + Assert.AreEqual(screen2.Object, this.conductor.ActiveItem); + Assert.AreEqual(new[] { screen1.Object, screen2.Object }, this.conductor.Items); + } + } +} diff --git a/StyletUnitTests/StyletUnitTests.csproj b/StyletUnitTests/StyletUnitTests.csproj index 453e390..5725846 100644 --- a/StyletUnitTests/StyletUnitTests.csproj +++ b/StyletUnitTests/StyletUnitTests.csproj @@ -54,6 +54,7 @@ +