summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Core.UnitTests/NavigationProxyTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Core.UnitTests/NavigationProxyTests.cs')
-rw-r--r--Xamarin.Forms.Core.UnitTests/NavigationProxyTests.cs188
1 files changed, 188 insertions, 0 deletions
diff --git a/Xamarin.Forms.Core.UnitTests/NavigationProxyTests.cs b/Xamarin.Forms.Core.UnitTests/NavigationProxyTests.cs
new file mode 100644
index 00000000..459f4cf4
--- /dev/null
+++ b/Xamarin.Forms.Core.UnitTests/NavigationProxyTests.cs
@@ -0,0 +1,188 @@
+using System.Collections.Generic;
+using System.Linq;
+using NUnit.Framework;
+using System.Threading.Tasks;
+
+
+namespace Xamarin.Forms.Core.UnitTests
+{
+ [TestFixture]
+ public class NavigationProxyTests : BaseTestFixture
+ {
+ class NavigationTest : INavigation
+ {
+ public Page LastPushed { get; set; }
+ public Page LastPushedModal { get; set; }
+
+ public bool Popped { get; set; }
+ public bool PoppedModal { get; set; }
+
+ public Task PushAsync (Page root)
+ {
+ return PushAsync (root, true);
+ }
+
+ public Task<Page> PopAsync ()
+ {
+ return PopAsync (true);
+ }
+
+ public Task PopToRootAsync ()
+ {
+ return PopToRootAsync (true);
+ }
+
+ public Task PushModalAsync (Page root)
+ {
+ return PushModalAsync (root, true);
+ }
+
+ public Task<Page> PopModalAsync ()
+ {
+ return PopModalAsync (true);
+ }
+
+ public Task PushAsync (Page root, bool animated)
+ {
+ LastPushed = root;
+ return Task.FromResult (root);
+ }
+
+ public Task<Page> PopAsync (bool animated)
+ {
+ Popped = true;
+ return Task.FromResult (LastPushed);
+ }
+
+ public Task PopToRootAsync (bool animated)
+ {
+ return Task.FromResult<Page> (null);
+ }
+
+ public Task PushModalAsync (Page root, bool animated)
+ {
+ LastPushedModal = root;
+ return Task.FromResult<object> (null);
+ }
+
+ public Task<Page> PopModalAsync (bool animated)
+ {
+ PoppedModal = true;
+ return Task.FromResult<Page> (null);
+ }
+
+ public void RemovePage (Page page)
+ {
+ }
+
+ public void InsertPageBefore (Page page, Page before)
+ {
+ }
+
+ public System.Collections.Generic.IReadOnlyList<Page> NavigationStack
+ {
+ get { return new List<Page> (); }
+ }
+
+ public System.Collections.Generic.IReadOnlyList<Page> ModalStack
+ {
+ get { return new List<Page> (); }
+ }
+ }
+
+ [Test]
+ public void Constructor ()
+ {
+ var proxy = new NavigationProxy ();
+
+ Assert.Null (proxy.Inner);
+ }
+
+ [Test]
+ public async Task PushesIntoNextInner ()
+ {
+ var page = new ContentPage ();
+ var navProxy = new NavigationProxy ();
+
+ await navProxy.PushAsync (page);
+
+ var navTest = new NavigationTest ();
+ navProxy.Inner = navTest;
+
+ Assert.AreEqual (page, navTest.LastPushed);
+ }
+
+ [Test]
+ public async Task PushesModalIntoNextInner ()
+ {
+ var page = new ContentPage ();
+ var navProxy = new NavigationProxy ();
+
+ await navProxy.PushModalAsync (page);
+
+ var navTest = new NavigationTest ();
+ navProxy.Inner = navTest;
+
+ Assert.AreEqual (page, navTest.LastPushedModal);
+ }
+
+ [Test]
+ public async Task TestPushWithInner ()
+ {
+ var proxy = new NavigationProxy ();
+ var inner = new NavigationTest ();
+
+ proxy.Inner = inner;
+
+ var child = new ContentPage {Content = new View ()};
+ await proxy.PushAsync (child);
+
+ Assert.AreEqual (child, inner.LastPushed);
+ }
+
+ [Test]
+ public async Task TestPushModalWithInner ()
+ {
+ var proxy = new NavigationProxy ();
+ var inner = new NavigationTest ();
+
+ proxy.Inner = inner;
+
+ var child = new ContentPage {Content = new View ()};
+ await proxy.PushModalAsync (child);
+
+ Assert.AreEqual (child, inner.LastPushedModal);
+ }
+
+ [Test]
+ public async Task TestPopWithInner ()
+ {
+ var proxy = new NavigationProxy ();
+ var inner = new NavigationTest ();
+
+ proxy.Inner = inner;
+
+ var child = new ContentPage {Content = new View ()};
+ await proxy.PushAsync (child);
+
+ var result = await proxy.PopAsync ();
+ Assert.AreEqual (child, result);
+ Assert.True (inner.Popped, "Pop was never called on the inner proxy item");
+ }
+
+ [Test]
+ public async Task TestPopModalWithInner ()
+ {
+ var proxy = new NavigationProxy ();
+ var inner = new NavigationTest ();
+
+ proxy.Inner = inner;
+
+ var child = new ContentPage {Content = new View ()};
+ await proxy.PushModalAsync (child);
+
+ await proxy.PopModalAsync ();
+ Assert.True (inner.PoppedModal, "Pop was never called on the inner proxy item");
+ }
+ }
+}