From c0a8758839b1dd81cd4ae92f18c1034a3f94e548 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 21 Dec 2021 15:14:49 +0900 Subject: [PATCH] Fix intermittent test failures on `TestSceneResultsScreen` due to long delay step Using real time delays of 3 seconds doesn't play well with headless runs. --- .../Visual/Ranking/TestSceneResultsScreen.cs | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/osu.Game.Tests/Visual/Ranking/TestSceneResultsScreen.cs b/osu.Game.Tests/Visual/Ranking/TestSceneResultsScreen.cs index d0bd5a6e66..666cbf02b5 100644 --- a/osu.Game.Tests/Visual/Ranking/TestSceneResultsScreen.cs +++ b/osu.Game.Tests/Visual/Ranking/TestSceneResultsScreen.cs @@ -203,8 +203,12 @@ namespace osu.Game.Tests.Visual.Ranking { DelayedFetchResultsScreen screen = null; - AddStep("load results", () => Child = new TestResultsContainer(screen = new DelayedFetchResultsScreen(TestResources.CreateTestScoreInfo(), 3000))); + var tcs = new TaskCompletionSource(); + + AddStep("load results", () => Child = new TestResultsContainer(screen = new DelayedFetchResultsScreen(TestResources.CreateTestScoreInfo(), tcs.Task))); + AddUntilStep("wait for loaded", () => screen.IsLoaded); + AddStep("click expanded panel", () => { var expandedPanel = this.ChildrenOfType().Single(p => p.State == PanelState.Expanded); @@ -212,6 +216,10 @@ namespace osu.Game.Tests.Visual.Ranking InputManager.Click(MouseButton.Left); }); + AddAssert("no fetch yet", () => !screen.FetchCompleted); + + AddStep("allow fetch", () => tcs.SetResult()); + AddUntilStep("wait for fetch", () => screen.FetchCompleted); AddAssert("expanded panel still on screen", () => this.ChildrenOfType().Single(p => p.State == PanelState.Expanded).ScreenSpaceDrawQuad.TopLeft.X > 0); } @@ -295,21 +303,21 @@ namespace osu.Game.Tests.Visual.Ranking private class DelayedFetchResultsScreen : TestResultsScreen { + private readonly Task fetchWaitTask; + public bool FetchCompleted { get; private set; } - private readonly double delay; - - public DelayedFetchResultsScreen(ScoreInfo score, double delay) + public DelayedFetchResultsScreen(ScoreInfo score, Task fetchWaitTask = null) : base(score) { - this.delay = delay; + this.fetchWaitTask = fetchWaitTask ?? Task.CompletedTask; } protected override APIRequest FetchScores(Action> scoresCallback) { Task.Run(async () => { - await Task.Delay(TimeSpan.FromMilliseconds(delay)); + await fetchWaitTask; var scores = new List();