public async Task NavigationTaskCompletesAfterDeferalHasFinished(string testCase) { Routing.RegisterRoute(nameof(NavigationTaskCompletesAfterDeferalHasFinished), typeof(ContentPage)); var shell = new TestShell() { Items = { CreateShellItem<FlyoutItem>() } }; ShellNavigatingDeferral _token = null; shell.Navigating += async (_, args) => { _token = args.GetDeferral(); await Task.Delay(500); _token.Complete(); }; switch (testCase) { case "PopToRoot": await shell.Navigation.PopToRootAsync(); break; case "Pop": await shell.Navigation.PopAsync(); break; case "GoToAsync": await shell.GoToAsync(nameof(NavigationTaskCompletesAfterDeferalHasFinished)); break; case "Push": await shell.Navigation.PushAsync(new ContentPage()); break; } Assert.IsTrue(_token.IsCompleted); }
public async Task DeferPopNavigation(string testCase) { TestShell shell = new TestShell() { Items = { CreateShellItem <FlyoutItem>() } }; await shell.Navigation.PushAsync(new ContentPage()); await shell.Navigation.PushAsync(new ContentPage()); ShellNavigatingDeferral _token = null; shell.Navigating += async(_, args) => { _token = args.GetDeferral(); await Task.Delay(500); Assert.AreEqual(3, shell.Navigation.NavigationStack.Count); _token.Complete(); }; var source = new TaskCompletionSource <object>(); shell.Navigated += (_, args) => { source.SetResult(true); }; if (testCase == "Pop") { await shell.Navigation.PopAsync(); await source.Task; Assert.AreEqual(2, shell.Navigation.NavigationStack.Count); } else { await shell.Navigation.PopToRootAsync(); await source.Task; Assert.AreEqual(1, shell.Navigation.NavigationStack.Count); } }