diff --git a/osu.Game.Tests/Visual/UserInterface/TestSceneDialogOverlay.cs b/osu.Game.Tests/Visual/UserInterface/TestSceneDialogOverlay.cs index 405461eec8..aecb3f6c71 100644 --- a/osu.Game.Tests/Visual/UserInterface/TestSceneDialogOverlay.cs +++ b/osu.Game.Tests/Visual/UserInterface/TestSceneDialogOverlay.cs @@ -1,10 +1,12 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. +using System; +using System.Threading; using NUnit.Framework; +using osu.Framework.Allocation; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; -using osu.Framework.Testing; using osu.Game.Overlays; using osu.Game.Overlays.Dialog; @@ -15,15 +17,11 @@ namespace osu.Game.Tests.Visual.UserInterface { private DialogOverlay overlay; - [SetUpSteps] - public void SetUpSteps() - { - AddStep("create dialog overlay", () => Child = overlay = new DialogOverlay()); - } - [Test] public void TestBasic() { + AddStep("create dialog overlay", () => Child = overlay = new DialogOverlay()); + TestPopupDialog firstDialog = null; TestPopupDialog secondDialog = null; @@ -37,12 +35,12 @@ namespace osu.Game.Tests.Visual.UserInterface new PopupDialogOkButton { Text = @"I never want to see this again.", - Action = () => System.Console.WriteLine(@"OK"), + Action = () => Console.WriteLine(@"OK"), }, new PopupDialogCancelButton { Text = @"Firetruck, I still want quick ranks!", - Action = () => System.Console.WriteLine(@"Cancel"), + Action = () => Console.WriteLine(@"Cancel"), }, }, })); @@ -87,9 +85,51 @@ namespace osu.Game.Tests.Visual.UserInterface AddAssert("first dialog is not part of hierarchy", () => firstDialog.Parent == null); } + [Test] + public void TestPushBeforeLoad() + { + PopupDialog dialog = null; + + AddStep("create dialog overlay", () => overlay = new SlowLoadingDialogOverlay()); + + AddStep("start loading overlay", () => LoadComponentAsync(overlay, Add)); + + AddStep("push dialog before loaded", () => + { + overlay.Push(dialog = new TestPopupDialog + { + Buttons = new PopupDialogButton[] + { + new PopupDialogOkButton { Text = @"OK" }, + }, + }); + }); + + AddAssert("dialog not displayed", () => overlay.CurrentDialog != dialog); + + AddStep("complete load", () => ((SlowLoadingDialogOverlay)overlay).LoadEvent.Set()); + + AddUntilStep("wait for load", () => overlay.IsLoaded); + + AddAssert("dialog displayed", () => overlay.CurrentDialog == dialog); + } + + public class SlowLoadingDialogOverlay : DialogOverlay + { + public ManualResetEventSlim LoadEvent = new ManualResetEventSlim(); + + [BackgroundDependencyLoader] + private void load() + { + LoadEvent.Wait(10000); + } + } + [Test] public void TestDismissBeforePush() { + AddStep("create dialog overlay", () => Child = overlay = new DialogOverlay()); + TestPopupDialog testDialog = null; AddStep("dismissed dialog push", () => { @@ -106,6 +146,8 @@ namespace osu.Game.Tests.Visual.UserInterface [Test] public void TestDismissBeforePushViaButtonPress() { + AddStep("create dialog overlay", () => Child = overlay = new DialogOverlay()); + TestPopupDialog testDialog = null; AddStep("dismissed dialog push", () => {