From f11682d44f769fe480ae1bfcfc7f324208fd49a7 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Wed, 17 Jan 2024 08:10:02 +0300 Subject: [PATCH 1/4] Add failing test case --- .../Visual/Editing/TestSceneTimingScreen.cs | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/osu.Game.Tests/Visual/Editing/TestSceneTimingScreen.cs b/osu.Game.Tests/Visual/Editing/TestSceneTimingScreen.cs index 40aadc8164..56c8c05fe6 100644 --- a/osu.Game.Tests/Visual/Editing/TestSceneTimingScreen.cs +++ b/osu.Game.Tests/Visual/Editing/TestSceneTimingScreen.cs @@ -4,11 +4,13 @@ #nullable disable using System; +using System.Diagnostics; using System.Linq; using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.UserInterface; using osu.Framework.Testing; using osu.Game.Beatmaps.ControlPoints; using osu.Game.Graphics.Containers; @@ -177,6 +179,43 @@ namespace osu.Game.Tests.Visual.Editing AddUntilStep("Scrolled to end", () => timingScreen.ChildrenOfType().First().IsScrolledToEnd()); } + [Test] + public void TestEditThenClickAway() + { + AddStep("Add two control points", () => + { + editorBeatmap.ControlPointInfo.Clear(); + editorBeatmap.ControlPointInfo.Add(1000, new TimingControlPoint()); + editorBeatmap.ControlPointInfo.Add(2000, new TimingControlPoint()); + }); + + AddStep("Select second timing point", () => + { + InputManager.MoveMouseTo(Child.ChildrenOfType().Last()); + InputManager.Click(MouseButton.Left); + }); + + AddStep("Scroll to end", () => timingScreen.ChildrenOfType().Single().ChildrenOfType().Single().ScrollToEnd(false)); + AddStep("Modify time signature", () => + { + var timeSignatureTextBox = Child.ChildrenOfType().Single().ChildrenOfType().Single(); + InputManager.MoveMouseTo(timeSignatureTextBox); + InputManager.Click(MouseButton.Left); + + Debug.Assert(!timeSignatureTextBox.Current.Value.Equals("1")); + timeSignatureTextBox.Current.Value = "1"; + }); + + AddStep("Select first timing point", () => + { + InputManager.MoveMouseTo(Child.ChildrenOfType().First()); + InputManager.Click(MouseButton.Left); + }); + + AddAssert("Second timing point changed time signature", () => editorBeatmap.ControlPointInfo.TimingPoints.Last().TimeSignature.Numerator == 1); + AddAssert("First timing point preserved time signature", () => editorBeatmap.ControlPointInfo.TimingPoints.First().TimeSignature.Numerator == 4); + } + protected override void Dispose(bool isDisposing) { Beatmap.Disabled = false; From 46429c5074b05447f8934dd25bd26fcce5e46dec Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Wed, 17 Jan 2024 08:10:37 +0300 Subject: [PATCH 2/4] Schedule control point switch for settings modifications to apply first --- osu.Game/Screens/Edit/Timing/ControlPointTable.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/osu.Game/Screens/Edit/Timing/ControlPointTable.cs b/osu.Game/Screens/Edit/Timing/ControlPointTable.cs index 7a27056da3..219575a380 100644 --- a/osu.Game/Screens/Edit/Timing/ControlPointTable.cs +++ b/osu.Game/Screens/Edit/Timing/ControlPointTable.cs @@ -44,11 +44,12 @@ namespace osu.Game.Screens.Edit.Timing { BackgroundFlow.Add(new RowBackground(group) { - Action = () => + // schedule to give time for any modified focused text box to lose focus and commit changes (e.g. BPM / time signature textboxes) before switching to new point. + Action = () => Schedule(() => { SetSelectedRow(group); clock.SeekSmoothlyTo(group.Time); - } + }) }); } From 05729706eb2633b74dbb97d3e2615f85cd2721e5 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Wed, 17 Jan 2024 08:53:24 +0300 Subject: [PATCH 3/4] Fix android build CI failing No idea why this is only in android, but okay. --- osu.Game.Tests/Visual/Editing/TestSceneTimingScreen.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/Editing/TestSceneTimingScreen.cs b/osu.Game.Tests/Visual/Editing/TestSceneTimingScreen.cs index 56c8c05fe6..f3d2b5d518 100644 --- a/osu.Game.Tests/Visual/Editing/TestSceneTimingScreen.cs +++ b/osu.Game.Tests/Visual/Editing/TestSceneTimingScreen.cs @@ -202,7 +202,7 @@ namespace osu.Game.Tests.Visual.Editing InputManager.MoveMouseTo(timeSignatureTextBox); InputManager.Click(MouseButton.Left); - Debug.Assert(!timeSignatureTextBox.Current.Value.Equals("1")); + Debug.Assert(!timeSignatureTextBox.Current.Value.Equals("1", StringComparison.Ordinal)); timeSignatureTextBox.Current.Value = "1"; }); From 1af5d1434c0abc615984fb64ef72d9d83d803740 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 17 Jan 2024 19:53:23 +0900 Subject: [PATCH 4/4] Rename test method slightly --- osu.Game.Tests/Visual/Editing/TestSceneTimingScreen.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/Editing/TestSceneTimingScreen.cs b/osu.Game.Tests/Visual/Editing/TestSceneTimingScreen.cs index f3d2b5d518..6181024230 100644 --- a/osu.Game.Tests/Visual/Editing/TestSceneTimingScreen.cs +++ b/osu.Game.Tests/Visual/Editing/TestSceneTimingScreen.cs @@ -180,7 +180,7 @@ namespace osu.Game.Tests.Visual.Editing } [Test] - public void TestEditThenClickAway() + public void TestEditThenClickAwayAppliesChanges() { AddStep("Add two control points", () => {