Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        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);
            });
        }
Ejemplo n.º 10
0
        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);
            });
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
0
        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]);
        }
Ejemplo n.º 15
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);
        }
Ejemplo n.º 16
0
        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);
        }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        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);
        }
Ejemplo n.º 19
0
        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));
        }
Ejemplo n.º 20
0
        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);
        }
Ejemplo n.º 21
0
        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);
        }
Ejemplo n.º 22
0
        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);
        }
Ejemplo n.º 23
0
        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);
        }
Ejemplo n.º 24
0
        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);
        }
Ejemplo n.º 25
0
        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);
        }
Ejemplo n.º 26
0
        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);
        }
Ejemplo n.º 27
0
        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);
        }
Ejemplo n.º 28
0
        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);
        }
Ejemplo n.º 29
0
        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);
        }
Ejemplo n.º 30
0
        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);
        }