mirror of
https://github.com/ppy/osu.git
synced 2024-12-14 13:22:55 +08:00
Merge pull request #14999 from smoogipoo/fix-score-async
Fix intermittent playlist results screen test failures
This commit is contained in:
commit
a16ffd2976
@ -32,12 +32,14 @@ namespace osu.Game.Tests.Visual.Playlists
|
|||||||
private TestResultsScreen resultsScreen;
|
private TestResultsScreen resultsScreen;
|
||||||
private int currentScoreId;
|
private int currentScoreId;
|
||||||
private bool requestComplete;
|
private bool requestComplete;
|
||||||
|
private int totalCount;
|
||||||
|
|
||||||
[SetUp]
|
[SetUp]
|
||||||
public void Setup() => Schedule(() =>
|
public void Setup() => Schedule(() =>
|
||||||
{
|
{
|
||||||
currentScoreId = 0;
|
currentScoreId = 0;
|
||||||
requestComplete = false;
|
requestComplete = false;
|
||||||
|
totalCount = 0;
|
||||||
bindHandler();
|
bindHandler();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -53,7 +55,6 @@ namespace osu.Game.Tests.Visual.Playlists
|
|||||||
});
|
});
|
||||||
|
|
||||||
createResults(() => userScore);
|
createResults(() => userScore);
|
||||||
waitForDisplay();
|
|
||||||
|
|
||||||
AddAssert("user score selected", () => this.ChildrenOfType<ScorePanel>().Single(p => p.Score.OnlineScoreID == userScore.OnlineScoreID).State == PanelState.Expanded);
|
AddAssert("user score selected", () => this.ChildrenOfType<ScorePanel>().Single(p => p.Score.OnlineScoreID == userScore.OnlineScoreID).State == PanelState.Expanded);
|
||||||
}
|
}
|
||||||
@ -62,7 +63,6 @@ namespace osu.Game.Tests.Visual.Playlists
|
|||||||
public void TestShowNullUserScore()
|
public void TestShowNullUserScore()
|
||||||
{
|
{
|
||||||
createResults();
|
createResults();
|
||||||
waitForDisplay();
|
|
||||||
|
|
||||||
AddAssert("top score selected", () => this.ChildrenOfType<ScorePanel>().OrderByDescending(p => p.Score.TotalScore).First().State == PanelState.Expanded);
|
AddAssert("top score selected", () => this.ChildrenOfType<ScorePanel>().OrderByDescending(p => p.Score.TotalScore).First().State == PanelState.Expanded);
|
||||||
}
|
}
|
||||||
@ -79,7 +79,6 @@ namespace osu.Game.Tests.Visual.Playlists
|
|||||||
});
|
});
|
||||||
|
|
||||||
createResults(() => userScore);
|
createResults(() => userScore);
|
||||||
waitForDisplay();
|
|
||||||
|
|
||||||
AddAssert("more than 1 panel displayed", () => this.ChildrenOfType<ScorePanel>().Count() > 1);
|
AddAssert("more than 1 panel displayed", () => this.ChildrenOfType<ScorePanel>().Count() > 1);
|
||||||
AddAssert("user score selected", () => this.ChildrenOfType<ScorePanel>().Single(p => p.Score.OnlineScoreID == userScore.OnlineScoreID).State == PanelState.Expanded);
|
AddAssert("user score selected", () => this.ChildrenOfType<ScorePanel>().Single(p => p.Score.OnlineScoreID == userScore.OnlineScoreID).State == PanelState.Expanded);
|
||||||
@ -91,7 +90,6 @@ namespace osu.Game.Tests.Visual.Playlists
|
|||||||
AddStep("bind delayed handler", () => bindHandler(true));
|
AddStep("bind delayed handler", () => bindHandler(true));
|
||||||
|
|
||||||
createResults();
|
createResults();
|
||||||
waitForDisplay();
|
|
||||||
|
|
||||||
AddAssert("top score selected", () => this.ChildrenOfType<ScorePanel>().OrderByDescending(p => p.Score.TotalScore).First().State == PanelState.Expanded);
|
AddAssert("top score selected", () => this.ChildrenOfType<ScorePanel>().OrderByDescending(p => p.Score.TotalScore).First().State == PanelState.Expanded);
|
||||||
}
|
}
|
||||||
@ -100,7 +98,6 @@ namespace osu.Game.Tests.Visual.Playlists
|
|||||||
public void TestFetchWhenScrolledToTheRight()
|
public void TestFetchWhenScrolledToTheRight()
|
||||||
{
|
{
|
||||||
createResults();
|
createResults();
|
||||||
waitForDisplay();
|
|
||||||
|
|
||||||
AddStep("bind delayed handler", () => bindHandler(true));
|
AddStep("bind delayed handler", () => bindHandler(true));
|
||||||
|
|
||||||
@ -131,7 +128,6 @@ namespace osu.Game.Tests.Visual.Playlists
|
|||||||
});
|
});
|
||||||
|
|
||||||
createResults(() => userScore);
|
createResults(() => userScore);
|
||||||
waitForDisplay();
|
|
||||||
|
|
||||||
AddStep("bind delayed handler", () => bindHandler(true));
|
AddStep("bind delayed handler", () => bindHandler(true));
|
||||||
|
|
||||||
@ -161,13 +157,15 @@ namespace osu.Game.Tests.Visual.Playlists
|
|||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
AddUntilStep("wait for load", () => resultsScreen.ChildrenOfType<ScorePanelList>().FirstOrDefault()?.AllPanelsVisible == true);
|
waitForDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void waitForDisplay()
|
private void waitForDisplay()
|
||||||
{
|
{
|
||||||
AddUntilStep("wait for request to complete", () => requestComplete);
|
AddUntilStep("wait for load to complete", () =>
|
||||||
AddUntilStep("wait for panels to be visible", () => resultsScreen.ChildrenOfType<ScorePanelList>().FirstOrDefault()?.AllPanelsVisible == true);
|
requestComplete
|
||||||
|
&& resultsScreen.ScorePanelList.GetScorePanels().Count() == totalCount
|
||||||
|
&& resultsScreen.ScorePanelList.AllPanelsVisible);
|
||||||
AddWaitStep("wait for display", 5);
|
AddWaitStep("wait for display", 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,6 +201,7 @@ namespace osu.Game.Tests.Visual.Playlists
|
|||||||
triggerFail(s);
|
triggerFail(s);
|
||||||
else
|
else
|
||||||
triggerSuccess(s, createUserResponse(userScore));
|
triggerSuccess(s, createUserResponse(userScore));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IndexPlaylistScoresRequest i:
|
case IndexPlaylistScoresRequest i:
|
||||||
@ -248,6 +247,8 @@ namespace osu.Game.Tests.Visual.Playlists
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
totalCount++;
|
||||||
|
|
||||||
for (int i = 1; i <= scores_per_result; i++)
|
for (int i = 1; i <= scores_per_result; i++)
|
||||||
{
|
{
|
||||||
multiplayerUserScore.ScoresAround.Lower.Scores.Add(new MultiplayerScore
|
multiplayerUserScore.ScoresAround.Lower.Scores.Add(new MultiplayerScore
|
||||||
@ -285,6 +286,8 @@ namespace osu.Game.Tests.Visual.Playlists
|
|||||||
},
|
},
|
||||||
Statistics = userScore.Statistics
|
Statistics = userScore.Statistics
|
||||||
});
|
});
|
||||||
|
|
||||||
|
totalCount += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
addCursor(multiplayerUserScore.ScoresAround.Lower);
|
addCursor(multiplayerUserScore.ScoresAround.Lower);
|
||||||
@ -325,6 +328,8 @@ namespace osu.Game.Tests.Visual.Playlists
|
|||||||
{ HitResult.Great, 300 }
|
{ HitResult.Great, 300 }
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
totalCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
addCursor(result);
|
addCursor(result);
|
||||||
|
@ -163,7 +163,6 @@ namespace osu.Game.Tests.Visual.UserInterface
|
|||||||
});
|
});
|
||||||
|
|
||||||
AddUntilStep("wait for fetch", () => leaderboard.Scores != null);
|
AddUntilStep("wait for fetch", () => leaderboard.Scores != null);
|
||||||
|
|
||||||
AddUntilStep("score removed from leaderboard", () => leaderboard.Scores.All(s => s.OnlineScoreID != scoreBeingDeleted.OnlineScoreID));
|
AddUntilStep("score removed from leaderboard", () => leaderboard.Scores.All(s => s.OnlineScoreID != scoreBeingDeleted.OnlineScoreID));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,6 +170,7 @@ namespace osu.Game.Tests.Visual.UserInterface
|
|||||||
public void TestDeleteViaDatabase()
|
public void TestDeleteViaDatabase()
|
||||||
{
|
{
|
||||||
AddStep("delete top score", () => scoreManager.Delete(importedScores[0]));
|
AddStep("delete top score", () => scoreManager.Delete(importedScores[0]));
|
||||||
|
AddUntilStep("wait for fetch", () => leaderboard.Scores != null);
|
||||||
AddUntilStep("score removed from leaderboard", () => leaderboard.Scores.All(s => s.OnlineScoreID != importedScores[0].OnlineScoreID));
|
AddUntilStep("score removed from leaderboard", () => leaderboard.Scores.All(s => s.OnlineScoreID != importedScores[0].OnlineScoreID));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,9 +72,12 @@ namespace osu.Game.Scoring
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// We're calling .Result, but this should not be a blocking call due to the above GetDifficultyAsync() calls.
|
var totalScores = await Task.WhenAll(scores.Select(s => GetTotalScoreAsync(s, cancellationToken: cancellationToken))).ConfigureAwait(false);
|
||||||
return scores.OrderByDescending(s => GetTotalScoreAsync(s, cancellationToken: cancellationToken).Result)
|
|
||||||
.ThenBy(s => s.OnlineScoreID)
|
return scores.Select((score, index) => (score, totalScore: totalScores[index]))
|
||||||
|
.OrderByDescending(g => g.totalScore)
|
||||||
|
.ThenBy(g => g.score.OnlineScoreID)
|
||||||
|
.Select(g => g.score)
|
||||||
.ToArray();
|
.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user