diff options
author | E.Z. Hart <hartez@users.noreply.github.com> | 2017-01-23 12:42:38 -0700 |
---|---|---|
committer | Kangho Hur <kangho.hur@samsung.com> | 2017-03-24 13:12:24 +0900 |
commit | 8ac2874b55a3f331abb58fa983b8603e08b80184 (patch) | |
tree | 8dd3a2305b3bd1eac8ee01fac37a15e6aa4ee0d0 /Xamarin.Forms.Core.UnitTests | |
parent | b57d4e67779bc67070e90b23167a01e37c3a2f8a (diff) | |
download | xamarin-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.cs | 89 |
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 (); |