diff --git a/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneEditor.cs b/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneEditor.cs index 762238be47..ef4e09c26b 100644 --- a/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneEditor.cs +++ b/osu.Game.Rulesets.Mania.Tests/Editor/TestSceneEditor.cs @@ -1,13 +1,18 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. +using System.Linq; using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Extensions.ObjectExtensions; +using osu.Framework.Testing; +using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Mania.Configuration; using osu.Game.Rulesets.Mania.UI; +using osu.Game.Screens.Edit.Timing; using osu.Game.Tests.Visual; +using osuTK.Input; namespace osu.Game.Rulesets.Mania.Tests.Editor { @@ -30,5 +35,43 @@ private void load() var config = (ManiaRulesetConfigManager)RulesetConfigs.GetConfigFor(Ruleset.Value.CreateInstance()).AsNonNull(); config.BindWith(ManiaRulesetSetting.ScrollDirection, direction); } + + [Test] + public void TestReloadOnBPMChange() + { + HitObjectComposer oldComposer = null!; + + AddStep("store composer", () => oldComposer = this.ChildrenOfType().Single()); + AddUntilStep("composer stored", () => oldComposer, () => Is.Not.Null); + AddStep("switch to timing tab", () => InputManager.Key(Key.F3)); + AddUntilStep("wait for loaded", () => this.ChildrenOfType().ElementAtOrDefault(1), () => Is.Not.Null); + AddStep("change timing point BPM", () => + { + var bpmControl = this.ChildrenOfType().ElementAt(1); + InputManager.MoveMouseTo(bpmControl); + InputManager.Click(MouseButton.Left); + }); + + AddStep("switch back to composer", () => InputManager.Key(Key.F1)); + AddUntilStep("composer reloaded", () => + { + var composer = this.ChildrenOfType().SingleOrDefault(); + return composer != null && composer != oldComposer; + }); + + AddStep("store composer", () => oldComposer = this.ChildrenOfType().Single()); + AddUntilStep("composer stored", () => oldComposer, () => Is.Not.Null); + AddStep("undo", () => + { + InputManager.PressKey(Key.ControlLeft); + InputManager.Key(Key.Z); + InputManager.ReleaseKey(Key.ControlLeft); + }); + AddUntilStep("composer reloaded", () => + { + var composer = this.ChildrenOfType().SingleOrDefault(); + return composer != null && composer != oldComposer; + }); + } } }