diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneSpectator.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneSpectator.cs index e95f7a50a4..98bd90b3b5 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneSpectator.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneSpectator.cs @@ -30,10 +30,14 @@ namespace osu.Game.Tests.Visual.Gameplay [Resolved] private OsuGameBase game { get; set; } + private int nextFrame = 0; + public override void SetUpSteps() { base.SetUpSteps(); + AddStep("reset sent frames", () => nextFrame = 0); + AddStep("import beatmap", () => ImportBeatmapTest.LoadOszIntoOsu(game, virtualTrack: true).Wait()); AddStep("add streaming client", () => @@ -53,18 +57,20 @@ namespace osu.Game.Tests.Visual.Gameplay { loadSpectatingScreen(); AddStep("start play", () => testSpectatorStreamingClient.StartPlay()); + sendFrames(); + AddUntilStep("wait for player", () => Stack.CurrentScreen is Player); AddAssert("ensure frames arrived", () => replayHandler.HasFrames); AddUntilStep("wait for frame starvation", () => replayHandler.NextFrame == null); AddAssert("game is paused", () => player.ChildrenOfType().First().IsPaused.Value); - } + sendFrames(); + AddUntilStep("game resumed", () => !player.ChildrenOfType().First().IsPaused.Value); - private void sendFrames(int count = 10) - { - AddStep("send frames", () => testSpectatorStreamingClient.SendFrames(count)); + AddUntilStep("wait for frame starvation", () => replayHandler.NextFrame == null); + AddAssert("game is paused", () => player.ChildrenOfType().First().IsPaused.Value); } [Test] @@ -123,6 +129,15 @@ namespace osu.Game.Tests.Visual.Gameplay // player should never arrive. } + private void sendFrames(int count = 10) + { + AddStep("send frames", () => + { + testSpectatorStreamingClient.SendFrames(nextFrame, count); + nextFrame += count; + }); + } + private void loadSpectatingScreen() => AddStep("load screen", () => LoadScreen(spectatorScreen = new Spectator(testSpectatorStreamingClient.StreamingUser))); @@ -146,16 +161,16 @@ namespace osu.Game.Tests.Visual.Gameplay private bool sentState; - public void SendFrames(int count) + public void SendFrames(int index, int count) { var frames = new List(); - for (int i = 0; i < count; i++) + for (int i = index; i < index + count; i++) { - frames.Add(new LegacyReplayFrame(i * 100, RNG.Next(0, 512), RNG.Next(0, 512), ReplayButtonState.Left1)); - } + var buttonState = i == index + count - 1 ? ReplayButtonState.None : ReplayButtonState.Left1; - frames.Add(new LegacyReplayFrame(count * 100, 0, 0, ReplayButtonState.None)); + frames.Add(new LegacyReplayFrame(i * 100, RNG.Next(0, 512), RNG.Next(0, 512), buttonState)); + } var bundle = new FrameDataBundle(frames); ((ISpectatorClient)this).UserSentFrames((int)StreamingUser.Id, bundle);