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 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 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 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 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 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 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 void TestInsertPage(bool useMaui) { var root = new ContentPage { Title = "Root" }; var newPage = new ContentPage(); var navPage = new TestNavigationPage(useMaui, root); navPage.Navigation.InsertPageBefore(newPage, navPage.RootPage); Assert.AreSame(newPage, navPage.RootPage); Assert.AreNotSame(newPage, navPage.CurrentPage); Assert.AreNotSame(navPage.RootPage, navPage.CurrentPage); Assert.AreSame(root, navPage.CurrentPage); Assert.Throws <ArgumentException>(() => { navPage.Navigation.InsertPageBefore(new ContentPage(), new ContentPage()); }); Assert.Throws <ArgumentException>(() => { navPage.Navigation.InsertPageBefore(navPage.RootPage, navPage.CurrentPage); }); Assert.Throws <ArgumentNullException>(() => { navPage.Navigation.InsertPageBefore(null, navPage.CurrentPage); }); Assert.Throws <ArgumentNullException>(() => { navPage.Navigation.InsertPageBefore(new ContentPage(), null); }); }
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 void TabBarSetsOnWindowWithFlyoutPageNestedInTabbedPage() { // TabbedPage => FlyoutPage => NavigationPage var contentPage1 = new ContentPage(); var navigationPage = new TestNavigationPage(true, contentPage1); var flyoutPage = new FlyoutPage() { Detail = navigationPage, Flyout = new ContentPage() { Title = "Flyout" } }; var tabbedPage = new TabbedPage() { Children = { flyoutPage } }; var window = new TestWindow(tabbedPage); Assert.IsNotNull(window.Toolbar); Assert.IsNull(contentPage1.Toolbar); Assert.IsNull(navigationPage.Toolbar); Assert.IsNull(flyoutPage.Toolbar); Assert.IsNull(tabbedPage.Toolbar); }
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 TabBarSetsOnModalPageWithFlyoutPageNestedInTabbedPage() { // ModalPage => TabbedPage => FlyoutPage => NavigationPage var window = new TestWindow(new ContentPage()); var contentPage1 = new ContentPage(); var navigationPage = new TestNavigationPage(true, contentPage1); var flyoutPage = new FlyoutPage() { Detail = navigationPage, Flyout = new ContentPage() { Title = "Flyout" } }; var tabbedPage = new TabbedPage() { Children = { flyoutPage } }; await window.Navigation.PushModalAsync(tabbedPage); Assert.IsNull(window.Toolbar); Assert.IsNull(contentPage1.Toolbar); Assert.IsNull(navigationPage.Toolbar); Assert.IsNull(flyoutPage.Toolbar); Assert.IsNotNull(tabbedPage.Toolbar); }
public void ConstructWithRoot(bool useMaui) { var root = new ContentPage(); var nav = new TestNavigationPage(useMaui, root); Assert.AreEqual(1, ((INavigationPageController)nav).StackDepth); Assert.AreEqual(root, ((IElementController)nav).LogicalChildren[0]); }
public void TabBarSetsOnWindowForSingleNavigationPage() { var contentPage1 = new ContentPage(); var navigationPage = new TestNavigationPage(true, contentPage1); var window = new TestWindow(navigationPage); Assert.IsNotNull(window.Toolbar); Assert.IsNull(contentPage1.Toolbar); Assert.IsNull(navigationPage.Toolbar); }
public async Task PeekEmpty([Values(true, false)] bool useMaui, [Range(0, 3)] int depth) { var nav = new TestNavigationPage(useMaui); bool signaled = false; nav.PoppedToRoot += (sender, args) => signaled = true; Assert.AreEqual(((INavigationPageController)nav).Peek(depth), null); }
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 void TitleViewSetsParentWhenAdded(bool useMaui) { var root = new ContentPage(); var nav = new TestNavigationPage(useMaui, root); View target = new View(); NavigationPage.SetTitleView(root, target); Assert.AreSame(root, target.Parent); }
public async Task CurrentPageNotNullPoppingRoot(bool useMaui) { var root = new ContentPage { Title = "Root" }; var navPage = new TestNavigationPage(useMaui, root); var popped = await navPage.PopAsync(); Assert.That(popped, Is.Null); Assert.That(navPage.CurrentPage, Is.SameAs(root)); }
public void NavigationPageInitialPage(bool useMaui) { var lcPage = new LCPage(); NavigationPage navigationPage = new TestNavigationPage(useMaui, lcPage); navigationPage.InitialNativeNavigationStackLoaded(); Assert.IsNull(lcPage.NavigatingFromArgs); Assert.IsNull(lcPage.NavigatedFromArgs); Assert.NotNull(lcPage.NavigatedToArgs); Assert.IsNull(lcPage.NavigatedToArgs.PreviousPage); }
public async Task DoesNotHandleBackButtonWhenNoNavStack(bool useMaui) { var root = new ContentPage { Title = "Root" }; var navPage = new TestNavigationPage(useMaui, root); var result = await navPage.SendBackButtonPressedAsync(); Assert.False(result); }
public async Task TabBarSetsOnModalPageForSingleNavigationPage() { var window = new TestWindow(new ContentPage()); var contentPage1 = new ContentPage(); var navigationPage = new TestNavigationPage(true, contentPage1); await window.Navigation.PushModalAsync(navigationPage); Assert.IsNull(window.Toolbar); Assert.IsNull(contentPage1.Toolbar); Assert.IsNotNull(navigationPage.Toolbar); }
public async Task InsertPageBeforeRootPageShowsBackButton() { var window = new TestWindow(); IToolbarElement toolbarElement = window; var startingPage = new TestNavigationPage(true, new ContentPage()); window.Page = startingPage; startingPage.Navigation.InsertPageBefore(new ContentPage(), startingPage.RootPage); await Task.Delay(50); Assert.True(toolbarElement.Toolbar.BackButtonVisible); }
public void TitleViewSetProperty(bool useMaui) { var root = new ContentPage(); var nav = new TestNavigationPage(useMaui, root); View target = new View(); NavigationPage.SetTitleView(root, target); var result = NavigationPage.GetTitleView(root); Assert.AreSame(result, target); }
public void TitleViewClearsParentWhenRemoved(bool useMaui) { var root = new ContentPage(); var nav = new TestNavigationPage(useMaui, root); View target = new View(); NavigationPage.SetTitleView(root, target); NavigationPage.SetTitleView(root, null); Assert.IsNull(target.Parent); }
public async Task SendsBackButtonEventToCurrentPage(bool useMaui) { var current = new BackButtonPage(); var navPage = new TestNavigationPage(useMaui, current); var emitted = false; current.BackPressed += (sender, args) => emitted = true; await navPage.SendBackButtonPressedAsync(); Assert.True(emitted); }
public async Task HandlerUpdatesDontFireForLegacy(bool withPage) { TestNavigationPage nav = new TestNavigationPage(false, (withPage) ? new ContentPage() : null); var handler = new TestNavigationHandler(); (nav as IView).Handler = handler; Assert.IsNull(nav.CurrentNavigationTask); Assert.IsNull(handler.CurrentNavigationRequest); }
public async Task RemoveRootPageHidesBackButton() { var window = new TestWindow(); IToolbarElement toolbarElement = window; var startingPage = new TestNavigationPage(true, new ContentPage()); window.Page = startingPage; startingPage.Navigation.PushAsync(new ContentPage()); startingPage.Navigation.RemovePage(startingPage.RootPage); await Task.Delay(50); Assert.False(toolbarElement.Toolbar.BackButtonVisible); }
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 AppearingFiresForInitialPage(bool useMaui) { ContentPage contentPage = new ContentPage(); ContentPage resultPage = null; contentPage.Appearing += (sender, _) => resultPage = (ContentPage)sender; NavigationPage nav = new TestNavigationPage(useMaui, contentPage); Assert.IsNull(resultPage); _ = new Window(nav); Assert.AreEqual(resultPage, contentPage); }