From 46dc485eee6cbfb6350a5eee89f08762290b5a22 Mon Sep 17 00:00:00 2001 From: Antony Male Date: Thu, 15 Jan 2015 09:54:05 +0000 Subject: [PATCH] Add tests for new conductor Dispose behaviour --- StyletUnitTests/ConductorAllActiveTests.cs | 39 ++++++++++++++++++- StyletUnitTests/ConductorNavigatingTests.cs | 36 +++++++++++++++--- StyletUnitTests/ConductorOneActiveTests.cs | 42 ++++++++++++++++++++- StyletUnitTests/ConductorTests.cs | 20 +++++++++- StyletUnitTests/ScreenExtensionTests.cs | 1 - StyletUnitTests/WindowManagerTests.cs | 3 -- 6 files changed, 127 insertions(+), 14 deletions(-) diff --git a/StyletUnitTests/ConductorAllActiveTests.cs b/StyletUnitTests/ConductorAllActiveTests.cs index 01a5ab8..2259904 100644 --- a/StyletUnitTests/ConductorAllActiveTests.cs +++ b/StyletUnitTests/ConductorAllActiveTests.cs @@ -46,7 +46,15 @@ namespace StyletUnitTests } [Test] - public void ActivateItemDoesActiveIfConductorIsActive() + public void ActivateItemDeactivatesIfConductorIsNotActive() + { + var screen = new Mock(); + this.conductor.ActivateItem(screen.Object); + screen.Verify(x => x.Deactivate()); + } + + [Test] + public void ActivateItemActivatesfConductorIsActive() { var screen = new Mock(); ((IActivate)this.conductor).Activate(); @@ -54,6 +62,15 @@ namespace StyletUnitTests screen.Verify(x => x.Activate()); } + [Test] + public void ActivateItemDoesNotDeactivateIfConductorIsActive() + { + var screen = new Mock(); + ((IActivate)this.conductor).Activate(); + this.conductor.ActivateItem(screen.Object); + screen.Verify(x => x.Deactivate(), Times.Never); + } + [Test] public void DeactiveDeactivatesItems() { @@ -113,7 +130,7 @@ namespace StyletUnitTests } [Test] - public void RemovingItemClosesAndDisposesAndRemovesParent() + public void RemovingItemClosesAndRemovesParent() { var screen = new Mock(); screen.SetupGet(x => x.Parent).Returns(this.conductor); @@ -121,9 +138,27 @@ namespace StyletUnitTests this.conductor.Items.Remove(screen.Object); screen.VerifySet(x => x.Parent = null); screen.Verify(x => x.Close()); + } + + [Test] + public void RemovingItemDisposesIfDisposeChildrenIsTrue() + { + var screen = new Mock(); + this.conductor.Items.Add(screen.Object); + this.conductor.Items.Remove(screen.Object); screen.Verify(x => x.Dispose()); } + [Test] + public void RemovingItemDoesNotDisposeIfDisposeChildrenIsFalse() + { + var screen = new Mock(); + this.conductor.DisposeChildren = false; + this.conductor.Items.Add(screen.Object); + this.conductor.Items.Remove(screen.Object); + screen.Verify(x => x.Dispose(), Times.Never); + } + [Test] public void AddingItemTwiceDoesNotResultInDuplicates() { diff --git a/StyletUnitTests/ConductorNavigatingTests.cs b/StyletUnitTests/ConductorNavigatingTests.cs index 27b6954..780fe64 100644 --- a/StyletUnitTests/ConductorNavigatingTests.cs +++ b/StyletUnitTests/ConductorNavigatingTests.cs @@ -55,6 +55,14 @@ namespace StyletUnitTests screen.Verify(x => x.Activate()); } + [Test] + public void InitialActivateDeactivatesItemIfConductorIsDeactivated() + { + var screen = new Mock(); + this.conductor.ActivateItem(screen.Object); + screen.Verify(x => x.Deactivate()); + } + [Test] public void ActivatesActiveItemWhenActivated() { @@ -144,17 +152,38 @@ namespace StyletUnitTests Assert.AreEqual(this.conductor.ActiveItem, screen.Object); } - [Test] - public void CloseRemovesItemsParent() + public void CloseClosesAndRemovesItemsParent() { var screen = new Mock(); screen.Setup(x => x.CanCloseAsync()).Returns(Task.FromResult(true)); screen.Setup(x => x.Parent).Returns(this.conductor); this.conductor.ActivateItem(screen.Object); this.conductor.CloseItem(screen.Object); + screen.Verify(x => x.Close()); screen.VerifySet(x => x.Parent = null); } + + [Test] + public void CloseDisposesItemIfDisposeChildrenIsTrue() + { + var screen = new Mock(); + screen.Setup(x => x.CanCloseAsync()).Returns(Task.FromResult(true)); + this.conductor.ActivateItem(screen.Object); + this.conductor.CloseItem(screen.Object); + screen.Verify(x => x.Dispose()); + } + + [Test] + public void CloseDoesNotDisposeItemIfDisposeChildrenIsFalse() + { + var screen = new Mock(); + screen.Setup(x => x.CanCloseAsync()).Returns(Task.FromResult(true)); + this.conductor.DisposeChildren = false; + this.conductor.ActivateItem(screen.Object); + this.conductor.CloseItem(screen.Object); + screen.Verify(x => x.Dispose(), Times.Never); + } [Test] public void CanCloseReturnsTrueIfNoActiveItem() @@ -221,10 +250,8 @@ namespace StyletUnitTests ((IClose)this.conductor).Close(); screen1.Verify(x => x.Close()); - screen1.Verify(x => x.Dispose()); screen1.VerifySet(x => x.Parent = null); screen2.Verify(x => x.Close()); - screen2.Verify(x => x.Dispose()); screen2.VerifySet(x => x.Parent = null); } @@ -237,7 +264,6 @@ namespace StyletUnitTests ((IChildDelegate)this.conductor).CloseItem(screen.Object); screen.Verify(x => x.Close()); - screen.Verify(x => x.Dispose()); Assert.Null(this.conductor.ActiveItem); } } diff --git a/StyletUnitTests/ConductorOneActiveTests.cs b/StyletUnitTests/ConductorOneActiveTests.cs index f27bfc2..81aa01a 100644 --- a/StyletUnitTests/ConductorOneActiveTests.cs +++ b/StyletUnitTests/ConductorOneActiveTests.cs @@ -182,6 +182,7 @@ namespace StyletUnitTests { var screen1 = new Mock(); var screen2 = new Mock(); + ((IActivate)this.conductor).Activate(); this.conductor.ActivateItem(screen1.Object); this.conductor.Items.Add(screen2.Object); @@ -199,9 +200,27 @@ namespace StyletUnitTests this.conductor.Items.Remove(screen.Object); screen.VerifySet(x => x.Parent = null); screen.Verify(x => x.Close()); + } + + [Test] + public void RemovingItemDisposesIfDisposeChildrenIsTrue() + { + var screen = new Mock(); + this.conductor.Items.Add(screen.Object); + this.conductor.Items.Remove(screen.Object); screen.Verify(x => x.Dispose()); } + [Test] + public void RemovingItemDoesNotDisposeIfDisposeChildrenIsFalse() + { + var screen = new Mock(); + this.conductor.DisposeChildren = false; + this.conductor.Items.Add(screen.Object); + this.conductor.Items.Remove(screen.Object); + screen.Verify(x => x.Dispose(), Times.Never); + } + [Test] public void RemovingActiveItemActivatesAnotherItem() { @@ -216,7 +235,6 @@ namespace StyletUnitTests Assert.AreEqual(this.conductor.ActiveItem, screen2.Object); screen2.Verify(x => x.Activate()); screen1.Verify(x => x.Close()); - screen1.Verify(x => x.Dispose()); } [Test] @@ -257,10 +275,30 @@ namespace StyletUnitTests this.conductor.ActivateItem(screen.Object); this.conductor.CloseItem(screen.Object); screen.Verify(x => x.Close()); - screen.Verify(x => x.Dispose()); Assert.AreEqual(0, this.conductor.Items.Count); } + [Test] + public void CloseItemDisposesIfDisposeChildrenIsTrue() + { + var screen = new Mock(); + screen.Setup(x => x.CanCloseAsync()).Returns(Task.FromResult(true)); + this.conductor.ActivateItem(screen.Object); + this.conductor.CloseItem(screen.Object); + screen.Verify(x => x.Dispose()); + } + + [Test] + public void CloseItemDoesNotDisposeIfDisposeChildrenIsFalse() + { + var screen = new Mock(); + this.conductor.DisposeChildren = false; + screen.Setup(x => x.CanCloseAsync()).Returns(Task.FromResult(true)); + this.conductor.ActivateItem(screen.Object); + this.conductor.CloseItem(screen.Object); + screen.Verify(x => x.Dispose(), Times.Never); + } + [Test] public void ClosingConductorClosesActiveItem() { diff --git a/StyletUnitTests/ConductorTests.cs b/StyletUnitTests/ConductorTests.cs index 9a3e0fb..a1deace 100644 --- a/StyletUnitTests/ConductorTests.cs +++ b/StyletUnitTests/ConductorTests.cs @@ -194,10 +194,28 @@ namespace StyletUnitTests this.conductor.ActivateItem(screen1.Object); ((IClose)this.conductor).Close(); screen1.Verify(x => x.Close()); - screen1.Verify(x => x.Dispose()); screen1.VerifySet(x => x.Parent = null); } + [Test] + public void ClosingConductorDisposesActiveItemIfDisposeChildrenIsTrue() + { + var screen = new Mock(); + this.conductor.ActivateItem(screen.Object); + ((IClose)this.conductor).Close(); + screen.Verify(x => x.Dispose()); + } + + [Test] + public void ClosingConductorDoesNotDisposeActiveItemIfDisposeChildrenIsFalse() + { + this.conductor.DisposeChildren = false; + var screen = new Mock(); + this.conductor.ActivateItem(screen.Object); + ((IClose)this.conductor).Close(); + screen.Verify(x => x.Dispose(), Times.Never); + } + [Test] public void ClosesItemIfItemRequestsClose() { diff --git a/StyletUnitTests/ScreenExtensionTests.cs b/StyletUnitTests/ScreenExtensionTests.cs index 82c6446..bfaa9ac 100644 --- a/StyletUnitTests/ScreenExtensionTests.cs +++ b/StyletUnitTests/ScreenExtensionTests.cs @@ -102,7 +102,6 @@ namespace StyletUnitTests this.child.Object.ConductWith(this.parent); ((IClose)this.parent).Close(); this.child.Verify(x => x.Close()); - this.child.Verify(x => x.Dispose()); } [Test] diff --git a/StyletUnitTests/WindowManagerTests.cs b/StyletUnitTests/WindowManagerTests.cs index 238e6df..91d149b 100644 --- a/StyletUnitTests/WindowManagerTests.cs +++ b/StyletUnitTests/WindowManagerTests.cs @@ -223,10 +223,8 @@ namespace StyletUnitTests model.Setup(x => x.CanCloseAsync()).Returns(tcs.Task); window.OnClosing(new CancelEventArgs()); model.Verify(x => x.Close(), Times.Never); - model.Verify(x => x.Dispose(), Times.Never); tcs.SetResult(true); model.Verify(x => x.Close(), Times.Once); - model.Verify(x => x.Dispose(), Times.Once); Assert.True(window.OnClosedCalled); @@ -272,7 +270,6 @@ namespace StyletUnitTests ((IChildDelegate)parent).CloseItem(model.Object); model.Verify(x => x.Close()); - model.Verify(x => x.Dispose()); Assert.True(window.OnClosedCalled); }