public void TestEventOrder() { List <int> order = new List <int>(); var screen1 = new TestScreen { Entered = () => order.Add(1), Suspended = () => order.Add(2), Resumed = () => order.Add(5), }; var screen2 = new TestScreen { Entered = () => order.Add(3), Exited = () => order.Add(4), }; AddStep("push screen1", () => stack.Push(screen1)); AddUntilStep("ensure current", () => screen1.IsCurrentScreen()); AddStep("preload screen2", () => LoadComponentAsync(screen2)); AddUntilStep("wait for load", () => screen2.LoadState == LoadState.Ready); AddStep("push screen2", () => screen1.Push(screen2)); AddUntilStep("ensure current", () => screen2.IsCurrentScreen()); AddStep("exit screen2", () => screen2.Exit()); AddUntilStep("ensure exited", () => !screen2.IsCurrentScreen()); AddStep("push screen2", () => screen1.Exit()); AddUntilStep("ensure exited", () => !screen1.IsCurrentScreen()); AddAssert("order is correct", () => order.SequenceEqual(order.OrderBy(i => i))); }
public void TestCallingExitFromBlockingExit() { TestScreen screen1 = null; TestScreen screen2 = null; int screen1ResumedCount = 0; bool blocking = true; pushAndEnsureCurrent(() => screen1 = new TestScreen(id: 1) { Resumed = () => screen1ResumedCount++ }); pushAndEnsureCurrent(() => screen2 = new TestScreen(id: 2) { Exiting = () => { if (blocking) { blocking = false; // ReSharper disable once AccessToModifiedClosure screen2.Exit(); return(true); } // this call should fail in a way the user can understand. return(false); } }, () => screen1); AddStep("make screen 1 current", () => screen1.MakeCurrent()); AddAssert("screen 1 resumed only once", () => screen1ResumedCount == 1); }