public async Task NavigationChangedEventArgs(bool useMaui) { var rootPage = new ContentPage { Title = "Root" }; var navPage = new TestNavigationPage(useMaui, rootPage); var rootArg = new Page(); navPage.Pushed += (s, e) => { rootArg = e.Page; }; var pushPage = new ContentPage { Title = "Page 2" }; await navPage.PushAsync(pushPage); Assert.AreEqual(rootArg, pushPage); var secondPushPage = new ContentPage { Title = "Page 3" }; await navPage.PushAsync(secondPushPage); Assert.AreEqual(rootArg, secondPushPage); }
public async Task TestPopToRootEventArgs(bool useMaui) { var nav = new TestNavigationPage(useMaui); List <Page> poppedChildren = null; nav.PoppedToRoot += (sender, args) => poppedChildren = (args as PoppedToRootEventArgs).PoppedPages.ToList(); 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.PopToRootAsync(); Assert.IsNotNull(poppedChildren); Assert.AreEqual(2, poppedChildren.Count); Assert.Contains(child1, poppedChildren); Assert.Contains(child2, poppedChildren); Assert.AreSame(root, nav.RootPage); Assert.AreSame(root, nav.CurrentPage); Assert.AreSame(nav.RootPage, nav.CurrentPage); }
public async Task PeekShallow(bool useMaui) { var nav = new TestNavigationPage(useMaui); 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); }
public async Task TestPop(bool useMaui) { NavigationPage nav = new TestNavigationPage(useMaui); Label child = new Label(); Page childRoot = new ContentPage { Content = child }; Label child2 = new Label(); Page childRoot2 = new ContentPage { Content = child2 }; await nav.PushAsync(childRoot); await nav.PushAsync(childRoot2); bool fired = false; nav.Popped += (sender, e) => fired = true; var popped = await nav.PopAsync(); Assert.True(fired); Assert.AreSame(childRoot, nav.CurrentPage); Assert.AreEqual(childRoot2, popped); await nav.PopAsync(); var last = await nav.PopAsync(); Assert.IsNull(last); }
public async Task TestPopToRoot(bool useMaui) { var nav = new TestNavigationPage(useMaui); 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); await nav.PopToRootAsync(); Assert.True(signaled); Assert.AreSame(root, nav.RootPage); Assert.AreSame(root, nav.CurrentPage); Assert.AreSame(nav.RootPage, nav.CurrentPage); }
public async Task TestDoublePush(bool useMaui) { NavigationPage nav = new TestNavigationPage(useMaui); Label child = new Label(); Page childRoot = new ContentPage { Content = child }; await nav.PushAsync(childRoot); bool fired = false; nav.Pushed += (sender, e) => fired = true; Assert.AreSame(childRoot, nav.RootPage); Assert.AreSame(childRoot, nav.CurrentPage); await nav.PushAsync(childRoot); Assert.False(fired); Assert.AreSame(childRoot, nav.RootPage); Assert.AreSame(childRoot, nav.CurrentPage); Assert.AreSame(nav.RootPage, nav.CurrentPage); }
public async Task RemoveInnerPage(bool useMaui) { ContentPage initialPage = new ContentPage(); ContentPage pushedPage = new ContentPage(); ContentPage initialPageAppearing = null; ContentPage pageDisappeared = null; NavigationPage nav = new TestNavigationPage(useMaui, initialPage); _ = new Window(nav); nav.SendAppearing(); var pageToRemove = new ContentPage(); await nav.PushAsync(pageToRemove); await nav.PushAsync(pushedPage); initialPage.Appearing += (__, _) => Assert.Fail("Appearing Fired Incorrectly"); pushedPage.Disappearing += (__, _) => Assert.Fail("Appearing Fired Incorrectly"); nav.Navigation.RemovePage(pageToRemove); }
public async Task TestRemovePage(bool useMaui) { var root = new ContentPage { Title = "Root" }; var newPage = new ContentPage(); var navPage = new TestNavigationPage(useMaui, root); await navPage.PushAsync(newPage); navPage.Navigation.RemovePage(root); Assert.AreSame(newPage, navPage.RootPage); Assert.AreSame(newPage, navPage.CurrentPage); Assert.AreSame(navPage.RootPage, navPage.CurrentPage); Assert.AreNotSame(root, navPage.CurrentPage); Assert.Throws <ArgumentException>(() => { navPage.Navigation.RemovePage(root); }); Assert.Throws <InvalidOperationException>(() => { navPage.Navigation.RemovePage(newPage); }); Assert.Throws <ArgumentNullException>(() => { navPage.Navigation.RemovePage(null); }); }
public async Task PopLifeCycle(bool useMaui) { ContentPage initialPage = new ContentPage(); ContentPage pushedPage = new ContentPage(); ContentPage rootPageFiresAppearingAfterPop = null; ContentPage pageDisappeared = null; NavigationPage nav = new TestNavigationPage(useMaui, initialPage); _ = new Window(nav); nav.SendAppearing(); initialPage.Appearing += (sender, _) => rootPageFiresAppearingAfterPop = (ContentPage)sender; pushedPage.Disappearing += (sender, _) => pageDisappeared = (ContentPage)sender; await nav.PushAsync(pushedPage); Assert.IsNull(rootPageFiresAppearingAfterPop); Assert.IsNull(pageDisappeared); await nav.PopAsync(); Assert.AreEqual(initialPage, rootPageFiresAppearingAfterPop); Assert.AreEqual(pushedPage, pageDisappeared); }
public async Task RemoveLastPage(bool useMaui) { ContentPage initialPage = new ContentPage(); ContentPage pushedPage = new ContentPage(); ContentPage initialPageAppearing = null; ContentPage pageDisappeared = null; NavigationPage nav = new TestNavigationPage(useMaui, initialPage); _ = new Window(nav); nav.SendAppearing(); initialPage.Appearing += (sender, _) => initialPageAppearing = (ContentPage)sender; pushedPage.Disappearing += (sender, _) => pageDisappeared = (ContentPage)sender; await nav.PushAsync(pushedPage); Assert.IsNull(initialPageAppearing); Assert.IsNull(pageDisappeared); nav.Navigation.RemovePage(pushedPage); Assert.AreEqual(initialPageAppearing, initialPage); Assert.AreEqual(pageDisappeared, pushedPage); }
public async Task PushingPagesWhileNavigating() { ContentPage contentPage1 = new ContentPage(); ContentPage contentPage2 = new ContentPage(); ContentPage contentPage3 = new ContentPage(); var navigationPage = new TestNavigationPage(true, contentPage1); await navigationPage.PushAsync(contentPage2); await navigationPage.PushAsync(contentPage3); Assert.AreEqual(3, navigationPage.Navigation.NavigationStack.Count); Assert.AreEqual(contentPage1, navigationPage.Navigation.NavigationStack[0]); Assert.AreEqual(contentPage2, navigationPage.Navigation.NavigationStack[1]); Assert.AreEqual(contentPage3, navigationPage.Navigation.NavigationStack[2]); navigationPage.ValidateNavigationCompleted(); }
public async Task NavigationPagePopToRoot(bool useMaui) { var firstPage = new LCPage(); var poppedPage = new LCPage(); NavigationPage navigationPage = new TestNavigationPage(useMaui, firstPage); await navigationPage.PushAsync(new ContentPage()); await navigationPage.PushAsync(new ContentPage()); await navigationPage.PushAsync(poppedPage); await navigationPage.PopToRootAsync(); Assert.IsNotNull(poppedPage.NavigatingFromArgs); Assert.AreEqual(poppedPage, firstPage.NavigatedToArgs.PreviousPage); Assert.AreEqual(firstPage, poppedPage.NavigatedFromArgs.DestinationPage); }
public async Task NavigationPagePushPage(bool useMaui) { var previousPage = new LCPage(); var lcPage = new LCPage(); NavigationPage navigationPage = new TestNavigationPage(useMaui, previousPage); await navigationPage.PushAsync(lcPage); Assert.IsNotNull(previousPage.NavigatingFromArgs); Assert.AreEqual(previousPage, lcPage.NavigatedToArgs.PreviousPage); Assert.AreEqual(lcPage, previousPage.NavigatedFromArgs.DestinationPage); }
public async Task HandlesPopToRoot(bool useMaui) { var root = new ContentPage { Title = "Root" }; var navPage = new TestNavigationPage(useMaui, root); await navPage.PushAsync(new ContentPage()); await navPage.PushAsync(new ContentPage()); bool popped = false; navPage.PoppedToRoot += (sender, args) => { popped = true; }; await navPage.Navigation.PopToRootAsync(); Assert.True(popped); }
public async Task NavigatesBackWhenBackButtonPressed(bool useMaui) { var root = new ContentPage { Title = "Root" }; var navPage = new TestNavigationPage(useMaui, root); await navPage.PushAsync(new ContentPage()); var result = await navPage.SendBackButtonPressedAsync(); Assert.AreEqual(root, navPage.CurrentPage); Assert.True(result); }
public async Task DoesNotSendBackEventToNonCurrentPage(bool useMaui) { var current = new BackButtonPage(); var navPage = new TestNavigationPage(useMaui, current); navPage.PushAsync(new ContentPage()); var emitted = false; current.BackPressed += (sender, args) => emitted = true; await navPage.SendBackButtonPressedAsync(); Assert.False(emitted); }
public async Task CurrentPageUpdatesOnPopBeforeAsyncCompletes() { var root = new ContentPage { Title = "Root" }; var navPage = new TestNavigationPage(true, root); await navPage.PushAsync(new ContentPage()); var popped = navPage.PopAsync(); Assert.AreEqual(navPage.CurrentPage, root); await popped; Assert.AreEqual(navPage.CurrentPage, root); }
public async Task PushingPageBeforeSettingHandlerPropagatesAfterSettingHandler() { ContentPage contentPage1 = new ContentPage(); var navigationPage = new TestNavigationPage(true, setHandler: false); await navigationPage.PushAsync(contentPage1); (navigationPage as IView).Handler = new TestNavigationHandler(); var navTask = navigationPage.CurrentNavigationTask; Assert.IsNotNull(navTask); await navTask; navigationPage.ValidateNavigationCompleted(); }
public async Task TestPushEvent(bool useMaui) { NavigationPage nav = new TestNavigationPage(useMaui); Label child = new Label(); Page childRoot = new ContentPage { Content = child }; bool fired = false; nav.Pushed += (sender, e) => fired = true; await nav.PushAsync(childRoot); Assert.True(fired); }
public async Task DoesNotNavigatesBackWhenBackButtonPressedIfHandled(bool useMaui) { var root = new BackButtonPage { Title = "Root" }; var second = new BackButtonPage() { Handle = true }; var navPage = new TestNavigationPage(useMaui, root); await navPage.PushAsync(second); await navPage.SendBackButtonPressedAsync(); Assert.AreEqual(second, navPage.CurrentPage); }
public async Task TestPushRoot(bool useMaui) { NavigationPage nav = new TestNavigationPage(useMaui); Assert.IsNull(nav.RootPage); Assert.IsNull(nav.CurrentPage); Label child = new Label { Text = "Label" }; Page childRoot = new ContentPage { Content = child }; await nav.PushAsync(childRoot); Assert.AreSame(childRoot, nav.RootPage); Assert.AreSame(childRoot, nav.CurrentPage); Assert.AreSame(nav.RootPage, nav.CurrentPage); }
public async Task ReleasesPoppedPage(bool useMaui) { var root = new ContentPage { Title = "Root" }; var navPage = new TestNavigationPage(useMaui, root); var isFinalized = false; await navPage.PushAsync(new PageWithFinalizer(() => isFinalized = true)); await navPage.PopAsync(); await Task.Delay(100); GC.Collect(); GC.WaitForPendingFinalizers(); Assert.IsTrue(isFinalized); }
public async Task CurrentPageChanged(bool useMaui) { var root = new ContentPage { Title = "Root" }; var navPage = new TestNavigationPage(useMaui, root); bool changing = false; navPage.PropertyChanging += (object sender, PropertyChangingEventArgs e) => { if (e.PropertyName == NavigationPage.CurrentPageProperty.PropertyName) { Assert.That(navPage.CurrentPage, Is.SameAs(root)); changing = true; } }; var next = new ContentPage { Title = "Next" }; bool changed = false; navPage.PropertyChanged += (sender, e) => { if (e.PropertyName == NavigationPage.CurrentPageProperty.PropertyName) { Assert.That(navPage.CurrentPage, Is.SameAs(next)); changed = true; } }; await navPage.PushAsync(next); Assert.That(changing, Is.True, "PropertyChanging was not raised for 'CurrentPage'"); Assert.That(changed, Is.True, "PropertyChanged was not raised for 'CurrentPage'"); }
public async Task PushLifeCycle(bool useMaui) { ContentPage initialPage = new ContentPage(); ContentPage pushedPage = new ContentPage(); ContentPage initialPageDisappear = null; ContentPage pageAppearing = null; initialPage.Disappearing += (sender, _) => initialPageDisappear = (ContentPage)sender; pushedPage.Appearing += (sender, _) => pageAppearing = (ContentPage)sender; NavigationPage nav = new TestNavigationPage(useMaui, initialPage); _ = new Window(nav); nav.SendAppearing(); await nav.PushAsync(pushedPage); Assert.AreEqual(initialPageDisappear, initialPage); Assert.AreEqual(pageAppearing, pushedPage); }