summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Core.UnitTests
diff options
context:
space:
mode:
authorE.Z. Hart <hartez@users.noreply.github.com>2017-01-23 12:42:38 -0700
committerKangho Hur <kangho.hur@samsung.com>2017-03-24 13:12:24 +0900
commit8ac2874b55a3f331abb58fa983b8603e08b80184 (patch)
tree8dd3a2305b3bd1eac8ee01fac37a15e6aa4ee0d0 /Xamarin.Forms.Core.UnitTests
parentb57d4e67779bc67070e90b23167a01e37c3a2f8a (diff)
downloadxamarin-forms-8ac2874b55a3f331abb58fa983b8603e08b80184.tar.gz
xamarin-forms-8ac2874b55a3f331abb58fa983b8603e08b80184.tar.bz2
xamarin-forms-8ac2874b55a3f331abb58fa983b8603e08b80184.zip
Reduce overhead of pushing existing navigation stack (#672)
* Make StackCopy less awkward * Clean up comment * Update docs * Update docs * Replace SecondToLast with an arbitrarily deep Peek method * Update docs * Handle negative depths in Peek()
Diffstat (limited to 'Xamarin.Forms.Core.UnitTests')
-rw-r--r--Xamarin.Forms.Core.UnitTests/NavigationUnitTest.cs89
1 files changed, 77 insertions, 12 deletions
diff --git a/Xamarin.Forms.Core.UnitTests/NavigationUnitTest.cs b/Xamarin.Forms.Core.UnitTests/NavigationUnitTest.cs
index 1cc3ac6a..7118e149 100644
--- a/Xamarin.Forms.Core.UnitTests/NavigationUnitTest.cs
+++ b/Xamarin.Forms.Core.UnitTests/NavigationUnitTest.cs
@@ -213,29 +213,94 @@ namespace Xamarin.Forms.Core.UnitTests
}
[Test]
- public async Task TestStackCopy ()
+ public async Task PeekOne()
{
- var nav = new NavigationPage ();
+ var nav = new NavigationPage();
bool signaled = false;
nav.PoppedToRoot += (sender, args) => signaled = true;
- var root = new ContentPage {Content = new View ()};
- var child1 = new ContentPage {Content = new View ()};
- var child2 = new ContentPage {Content = new View ()};
+ var root = new ContentPage { Content = new View() };
+ var child1 = new ContentPage { Content = new View() };
+ var child2 = new ContentPage { Content = new View() };
- await nav.PushAsync (root);
- await nav.PushAsync (child1);
- await nav.PushAsync (child2);
+ await nav.PushAsync(root);
+ await nav.PushAsync(child1);
+ await nav.PushAsync(child2);
+
+ Assert.AreEqual(((INavigationPageController)nav).Peek(1), child1);
+ }
- var copy = ((INavigationPageController)nav).StackCopy;
+ [Test]
+ public async Task PeekZero()
+ {
+ var nav = new NavigationPage();
- Assert.AreEqual (child2, copy.Pop ());
- Assert.AreEqual (child1, copy.Pop ());
- Assert.AreEqual (root, copy.Pop ());
+ bool signaled = false;
+ nav.PoppedToRoot += (sender, args) => signaled = true;
+
+ var root = new ContentPage { Content = new View() };
+ var child1 = new ContentPage { Content = new View() };
+ var child2 = new ContentPage { Content = new View() };
+
+ await nav.PushAsync(root);
+ await nav.PushAsync(child1);
+ await nav.PushAsync(child2);
+
+ Assert.AreEqual(((INavigationPageController)nav).Peek(0), child2);
}
[Test]
+ public async Task PeekPastStackDepth()
+ {
+ var nav = new NavigationPage();
+
+ bool signaled = false;
+ nav.PoppedToRoot += (sender, args) => signaled = true;
+
+ var root = new ContentPage { Content = new View() };
+ var child1 = new ContentPage { Content = new View() };
+ var child2 = new ContentPage { Content = new View() };
+
+ await nav.PushAsync(root);
+ await nav.PushAsync(child1);
+ await nav.PushAsync(child2);
+
+ Assert.AreEqual(((INavigationPageController)nav).Peek(3), null);
+ }
+
+ [Test]
+ public async Task PeekShallow()
+ {
+ var nav = new NavigationPage();
+
+ bool signaled = false;
+ nav.PoppedToRoot += (sender, args) => signaled = true;
+
+ var root = new ContentPage { Content = new View() };
+ var child1 = new ContentPage { Content = new View() };
+ var child2 = new ContentPage { Content = new View() };
+
+ await nav.PushAsync(root);
+ await nav.PushAsync(child1);
+ await nav.PushAsync(child2);
+
+ Assert.AreEqual(((INavigationPageController)nav).Peek(-1), null);
+ }
+
+ [Test]
+ public async Task PeekEmpty([Range(0, 3)] int depth)
+ {
+ var nav = new NavigationPage();
+
+ bool signaled = false;
+ nav.PoppedToRoot += (sender, args) => signaled = true;
+
+ Assert.AreEqual(((INavigationPageController)nav).Peek(depth), null);
+ }
+
+
+ [Test]
public void ConstructWithRoot ()
{
var root = new ContentPage ();