Exemplo n.º 1
0
		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);
		}
Exemplo n.º 2
0
        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);
            }
        }