public void TestListViewMenuOnItemSelectedNavigatesToNewPage([Values] MenuItemType start,
                                                                     [Values] MenuItemType end)
        {
            SelectedItemChangedEventArgs arg =
                new SelectedItemChangedEventArgs(new HomeMenuItem {
                Id = end, Title = "Title"
            }, 0);

            MainPage mainPage  = new MainPageForTest(null);
            Page     startPage = null;
            Type     expected  = null;

            switch (start)
            {
            case MenuItemType.Tests:
                startPage = new TestsPage(null, null, false);
                expected  = typeof(TestsPage);
                break;

            case MenuItemType.About:
                startPage = new AboutPage(false);
                expected  = typeof(AboutPage);
                break;

            default:
                Assert.Fail($" MenuItemType {start} is not supported by this test.");
                break;
            }

            switch (end)
            {
            case MenuItemType.Tests:
                expected = typeof(TestsPage);
                break;

            case MenuItemType.About:
                expected = typeof(AboutPage);
                break;

            default:
                Assert.Fail($" MenuItemType {end} is not supported by this test.");
                break;
            }

            mainPage.Detail = new NavigationPage(startPage);

            MenuPageForTest page = new MenuPageForTest(mainPage);

            Task task = page.InvokeListViewMenuOnItemSelected(this, arg);

            Assert.IsNotNull(task);
            task.Wait();

            Page navPage = (mainPage.Detail as NavigationPage)?.RootPage;

            Assert.IsNotNull(navPage);
            Assert.AreEqual(expected, navPage.GetType());
        }
        public void TestListViewMenuOnItemSelectedWithRootPageNullReturnsImmediately()
        {
            SelectedItemChangedEventArgs arg =
                new SelectedItemChangedEventArgs(new HomeMenuItem {
                Id = MenuItemType.About, Title = "Title"
            }, 0);

            MenuPageForTest page = new MenuPageForTest(null);

            Task task = page.InvokeListViewMenuOnItemSelected(this, arg);

            Assert.IsNotNull(task);
            task.Wait();
        }
        public void TestListViewMenuOnItemSelectedWithArgsNotHomeMenuItemReturnsImmediately()
        {
            SelectedItemChangedEventArgs arg = new SelectedItemChangedEventArgs("Title", 0);

            MainPage mainPage      = new MainPage(null, false);
            Page     currentDetail = mainPage.Detail;
            Page     navPage       = (currentDetail as NavigationPage)?.RootPage;

            Assert.IsNotNull(navPage);
            Assert.IsTrue(navPage is TestsPage);

            MenuPageForTest page = new MenuPageForTest(mainPage);

            Task task = page.InvokeListViewMenuOnItemSelected(this, arg);

            Assert.IsNotNull(task);
            task.Wait();

            Assert.AreSame(currentDetail, mainPage.Detail);
        }