Add test helper functions to promote code share

This commit is contained in:
Dean Herbert 2020-10-27 18:32:05 +09:00
parent b3d793a505
commit a289b7034f

View File

@ -59,21 +59,20 @@ namespace osu.Game.Tests.Visual.Gameplay
AddAssert("screen hasn't changed", () => Stack.CurrentScreen is Spectator); AddAssert("screen hasn't changed", () => Stack.CurrentScreen is Spectator);
AddStep("start play", () => testSpectatorStreamingClient.StartPlay()); start();
sendFrames(); sendFrames();
AddUntilStep("wait for player", () => Stack.CurrentScreen is Player); waitForPlayer();
AddAssert("ensure frames arrived", () => replayHandler.HasFrames); AddAssert("ensure frames arrived", () => replayHandler.HasFrames);
AddUntilStep("wait for frame starvation", () => replayHandler.NextFrame == null); AddUntilStep("wait for frame starvation", () => replayHandler.NextFrame == null);
AddAssert("game is paused", () => player.ChildrenOfType<DrawableRuleset>().First().IsPaused.Value); checkPaused(true);
sendFrames();
AddUntilStep("game resumed", () => !player.ChildrenOfType<DrawableRuleset>().First().IsPaused.Value);
sendFrames();
checkPaused(false);
AddUntilStep("wait for frame starvation", () => replayHandler.NextFrame == null); AddUntilStep("wait for frame starvation", () => replayHandler.NextFrame == null);
AddAssert("game is paused", () => player.ChildrenOfType<DrawableRuleset>().First().IsPaused.Value); checkPaused(true);
} }
[Test] [Test]
@ -81,17 +80,19 @@ namespace osu.Game.Tests.Visual.Gameplay
{ {
loadSpectatingScreen(); loadSpectatingScreen();
AddStep("start play", () => testSpectatorStreamingClient.StartPlay()); start();
waitForPlayer();
AddUntilStep("wait for player", () => Stack.CurrentScreen is Player);
AddUntilStep("game is paused", () => player.ChildrenOfType<DrawableRuleset>().First().IsPaused.Value); AddUntilStep("game is paused", () => player.ChildrenOfType<DrawableRuleset>().First().IsPaused.Value);
sendFrames();
checkPaused(false);
} }
[Test] [Test]
public void TestSpectatingDuringGameplay() public void TestSpectatingDuringGameplay()
{ {
AddStep("start play", () => testSpectatorStreamingClient.StartPlay()); start();
sendFrames(); sendFrames();
// should seek immediately to available frames // should seek immediately to available frames
loadSpectatingScreen(); loadSpectatingScreen();
@ -102,9 +103,9 @@ namespace osu.Game.Tests.Visual.Gameplay
{ {
loadSpectatingScreen(); loadSpectatingScreen();
AddStep("start play", () => testSpectatorStreamingClient.StartPlay()); start();
sendFrames(); sendFrames();
AddStep("start play", () => testSpectatorStreamingClient.StartPlay()); start();
sendFrames(); sendFrames();
} }
@ -113,10 +114,10 @@ namespace osu.Game.Tests.Visual.Gameplay
{ {
loadSpectatingScreen(); loadSpectatingScreen();
AddStep("start play", () => testSpectatorStreamingClient.StartPlay()); start();
sendFrames(); sendFrames();
// should replay until running out of frames then fail // TODO: should replay until running out of frames then fail
} }
[Test] [Test]
@ -124,10 +125,9 @@ namespace osu.Game.Tests.Visual.Gameplay
{ {
loadSpectatingScreen(); loadSpectatingScreen();
AddStep("start play", () => testSpectatorStreamingClient.StartPlay()); start();
sendFrames(); sendFrames();
AddUntilStep("wait for player", () => Stack.CurrentScreen is Player); waitForPlayer();
// should immediately exit and unbind from streaming client // should immediately exit and unbind from streaming client
AddStep("stop spectating", () => (Stack.CurrentScreen as Player)?.Exit()); AddStep("stop spectating", () => (Stack.CurrentScreen as Player)?.Exit());
@ -139,11 +139,18 @@ namespace osu.Game.Tests.Visual.Gameplay
{ {
loadSpectatingScreen(); loadSpectatingScreen();
AddStep("start play", () => testSpectatorStreamingClient.StartPlay()); start();
sendFrames(); sendFrames();
// player should never arrive. // player should never arrive.
} }
private void waitForPlayer() => AddUntilStep("wait for player", () => Stack.CurrentScreen is Player);
private void start() => AddStep("start play", () => testSpectatorStreamingClient.StartPlay());
private void checkPaused(bool state) =>
AddAssert($"game is {(state ? "paused" : "playing")}", () => player.ChildrenOfType<DrawableRuleset>().First().IsPaused.Value == state);
private void sendFrames(int count = 10) private void sendFrames(int count = 10)
{ {
AddStep("send frames", () => AddStep("send frames", () =>