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 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.º 3
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.º 4
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.º 5
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.º 6
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.º 7
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.º 8
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.º 9
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.º 10
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.º 11
0
        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();
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
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.º 14
0
        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);
        }
Ejemplo n.º 15
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.º 16
0
        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);
        }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        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();
        }
Ejemplo n.º 19
0
        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);
        }
Ejemplo n.º 20
0
        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);
        }
Ejemplo n.º 21
0
        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);
        }
Ejemplo n.º 22
0
        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);
        }
Ejemplo n.º 23
0
        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'");
        }
Ejemplo n.º 24
0
        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);
        }