diff --git a/osu.Game/Tests/Visual/ModTestScene.cs b/osu.Game/Tests/Visual/ModTestScene.cs
index a71d008eb9..524482237a 100644
--- a/osu.Game/Tests/Visual/ModTestScene.cs
+++ b/osu.Game/Tests/Visual/ModTestScene.cs
@@ -5,8 +5,12 @@ using System;
using System.Collections.Generic;
using JetBrains.Annotations;
using osu.Game.Beatmaps;
+using osu.Game.Online.API.Requests.Responses;
+using osu.Game.Replays;
using osu.Game.Rulesets;
using osu.Game.Rulesets.Mods;
+using osu.Game.Rulesets.Replays;
+using osu.Game.Scoring;
namespace osu.Game.Tests.Visual
{
@@ -50,18 +54,37 @@ namespace osu.Game.Tests.Visual
return CreateModPlayer(ruleset);
}
- protected virtual TestPlayer CreateModPlayer(Ruleset ruleset) => new ModTestPlayer(AllowFail);
+ protected virtual TestPlayer CreateModPlayer(Ruleset ruleset) => new ModTestPlayer(currentTestData, AllowFail);
protected class ModTestPlayer : TestPlayer
{
private readonly bool allowFail;
+ private ModTestData currentTestData;
protected override bool CheckModsAllowFailure() => allowFail;
- public ModTestPlayer(bool allowFail)
+ public ModTestPlayer(ModTestData data, bool allowFail)
: base(false, false)
{
this.allowFail = allowFail;
+ currentTestData = data;
+ }
+
+ protected override void PrepareReplay()
+ {
+ if (currentTestData.Autoplay && currentTestData.Frames?.Count > 0)
+ throw new InvalidOperationException(@$"{nameof(ModTestData.Autoplay)} must be false when {nameof(ModTestData.Frames)} is specified.");
+
+ if (currentTestData.Frames != null)
+ {
+ DrawableRuleset?.SetReplayScore(new Score
+ {
+ Replay = new Replay { Frames = currentTestData.Frames },
+ ScoreInfo = new ScoreInfo { User = new APIUser { Username = @"Test" } },
+ });
+ }
+
+ base.PrepareReplay();
}
}
@@ -72,6 +95,12 @@ namespace osu.Game.Tests.Visual
///
public bool Autoplay = true;
+ ///
+ /// The frames to use for replay. must be set to false.
+ ///
+ [CanBeNull]
+ public List Frames;
+
///
/// The beatmap for this test case.
///