diff options
Diffstat (limited to 'Xamarin.Forms.Core.UnitTests/NavigationModelTests.cs')
-rw-r--r-- | Xamarin.Forms.Core.UnitTests/NavigationModelTests.cs | 304 |
1 files changed, 304 insertions, 0 deletions
diff --git a/Xamarin.Forms.Core.UnitTests/NavigationModelTests.cs b/Xamarin.Forms.Core.UnitTests/NavigationModelTests.cs new file mode 100644 index 00000000..ec3aaf5f --- /dev/null +++ b/Xamarin.Forms.Core.UnitTests/NavigationModelTests.cs @@ -0,0 +1,304 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NUnit.Framework; + +namespace Xamarin.Forms.Core.UnitTests +{ + [TestFixture] + public class NavigationModelTests : BaseTestFixture + { + [Test] + public void CurrentNullWhenEmpty () + { + var navModel = new NavigationModel (); + Assert.Null (navModel.CurrentPage); + } + + [Test] + public void CurrentGivesLastViewWithoutModal () + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + var page2 = new ContentPage (); + + navModel.Push (page1, null); + navModel.Push (page2, page1); + + Assert.AreEqual (page2, navModel.CurrentPage); + } + + [Test] + public void CurrentGivesLastViewWithModal() + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + var page2 = new ContentPage (); + + var modal1 = new ContentPage (); + var modal2 = new ContentPage (); + + navModel.Push (page1, null); + navModel.Push (page2, page1); + + navModel.PushModal (modal1); + navModel.Push (modal2, modal1); + + Assert.AreEqual (modal2, navModel.CurrentPage); + } + + [Test] + public void Roots () + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + var page2 = new ContentPage (); + + var modal1 = new ContentPage (); + var modal2 = new ContentPage (); + + navModel.Push (page1, null); + navModel.Push (page2, page1); + + navModel.PushModal (modal1); + navModel.Push (modal2, modal1); + + Assert.True (navModel.Roots.SequenceEqual (new[] {page1, modal1})); + } + + [Test] + public void PushFirstItem () + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + navModel.Push (page1, null); + + Assert.AreEqual (page1, navModel.CurrentPage); + Assert.AreEqual (page1, navModel.Roots.First ()); + } + + [Test] + public void ThrowsWhenPushingWithoutAncestor () + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + var page2 = new ContentPage (); + + navModel.Push (page1, null); + Assert.Throws<InvalidNavigationException> (() => navModel.Push (page2, null)); + } + + [Test] + public void PushFromNonRootAncestor () + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + var page2 = new ContentPage (); + var page3 = new ContentPage (); + + page2.Parent = page1; + page3.Parent = page2; + + navModel.Push (page1, null); + navModel.Push (page2, page1); + navModel.Push (page3, page2); + + Assert.AreEqual (page3, navModel.CurrentPage); + } + + [Test] + public void ThrowsWhenPushFromInvalidAncestor () + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + var page2 = new ContentPage (); + + Assert.Throws<InvalidNavigationException> (() => navModel.Push (page2, page1)); + } + + [Test] + public void Pop () + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + var page2 = new ContentPage (); + + navModel.Push (page1, null); + navModel.Push (page2, page1); + + navModel.Pop (page1); + + Assert.AreEqual (page1, navModel.CurrentPage); + } + + [Test] + public void ThrowsPoppingRootItem () + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + + navModel.Push (page1, null); + + Assert.Throws<InvalidNavigationException> (() => navModel.Pop (page1)); + } + + [Test] + public void ThrowsPoppingRootOfModal () + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + var page2 = new ContentPage (); + + var modal1 = new ContentPage (); + + navModel.Push (page1, null); + navModel.Push (page2, page1); + + navModel.PushModal (modal1); + Assert.Throws<InvalidNavigationException> (() => navModel.Pop (modal1)); + } + + [Test] + public void ThrowsPoppingWithInvalidAncestor () + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + + navModel.Push (page1, null); + + Assert.Throws<InvalidNavigationException> (() => navModel.Pop (new ContentPage ())); + } + + [Test] + public void PopToRoot () + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + var page2 = new ContentPage (); + var page3 = new ContentPage (); + + page2.Parent = page1; + page3.Parent = page2; + + navModel.Push (page1, null); + navModel.Push (page2, page1); + navModel.Push (page3, page2); + + navModel.PopToRoot (page2); + + Assert.AreEqual (page1, navModel.CurrentPage); + } + + [Test] + public void ThrowsWhenPopToRootOnRoot () + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + + navModel.Push (page1, null); + Assert.Throws<InvalidNavigationException> (() => navModel.PopToRoot (page1)); + } + + [Test] + public void ThrowsWhenPopToRootWithInvalidAncestor() + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + var page2 = new ContentPage (); + + navModel.Push (page1, null); + navModel.Push (page2, page1); + + Assert.Throws<InvalidNavigationException> (() => navModel.PopToRoot (new ContentPage ())); + } + + [Test] + public void PopModal () + { + var navModel = new NavigationModel (); + + var child1 = new ContentPage (); + var modal1 = new ContentPage (); + + navModel.Push (child1, null); + navModel.PushModal (modal1); + + navModel.PopModal (); + + Assert.AreEqual (child1, navModel.CurrentPage); + Assert.AreEqual (1, navModel.Roots.Count ()); + } + + [Test] + public void ReturnsCorrectModal () + { + var navModel = new NavigationModel (); + + var child1 = new ContentPage (); + var modal1 = new ContentPage (); + var modal2 = new ContentPage (); + + navModel.Push (child1, null); + navModel.PushModal (modal1); + navModel.PushModal (modal2); + + Assert.AreEqual (modal2, navModel.PopModal ()); + } + + [Test] + public void PopTopPageWithoutModals () + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + var page2 = new ContentPage (); + + navModel.Push (page1, null); + navModel.Push (page2, page1); + + Assert.AreEqual (page2, navModel.PopTopPage ()); + } + + [Test] + public void PopTopPageWithSinglePage () + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + + navModel.Push (page1, null); + + Assert.Null (navModel.PopTopPage ()); + } + + [Test] + public void PopTopPageWithModal () + { + var navModel = new NavigationModel (); + + var page1 = new ContentPage (); + var modal1 = new ContentPage (); + + navModel.Push (page1, null); + navModel.PushModal (modal1); + + Assert.AreEqual (modal1, navModel.PopTopPage ()); + } + } +} |