From 7220ca34f7dfc6f8e1eda76975712f02fe621322 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 10 Oct 2023 19:05:01 +0900 Subject: [PATCH 1/2] Add failing test coverage of incorrect default preview time --- .../Formats/LegacyBeatmapDecoderTest.cs | 28 ++++++++++++++++--- .../Resources/beatmap-version-4.osu | 4 +++ ...tmap-version.osu => beatmap-version-6.osu} | 0 3 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 osu.Game.Tests/Resources/beatmap-version-4.osu rename osu.Game.Tests/Resources/{beatmap-version.osu => beatmap-version-6.osu} (100%) diff --git a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs index 3d2de2914a..fec7f86eb2 100644 --- a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs +++ b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs @@ -33,7 +33,7 @@ namespace osu.Game.Tests.Beatmaps.Formats [Test] public void TestDecodeBeatmapVersion() { - using (var resStream = TestResources.OpenResource("beatmap-version.osu")) + using (var resStream = TestResources.OpenResource("beatmap-version-6.osu")) using (var stream = new LineBufferedReader(resStream)) { var decoder = Decoder.GetDecoder(stream); @@ -45,6 +45,25 @@ namespace osu.Game.Tests.Beatmaps.Formats } } + [TestCase(false)] + [TestCase(true)] + public void TestPreviewPointWithOffsets(bool applyOffsets) + { + using (var resStream = TestResources.OpenResource("beatmap-version-4.osu")) + using (var stream = new LineBufferedReader(resStream)) + { + var decoder = Decoder.GetDecoder(stream); + ((LegacyBeatmapDecoder)decoder).ApplyOffsets = applyOffsets; + var working = new TestWorkingBeatmap(decoder.Decode(stream)); + + Assert.AreEqual(4, working.BeatmapInfo.BeatmapVersion); + Assert.AreEqual(4, working.Beatmap.BeatmapInfo.BeatmapVersion); + Assert.AreEqual(4, working.GetPlayableBeatmap(new OsuRuleset().RulesetInfo, Array.Empty()).BeatmapInfo.BeatmapVersion); + + Assert.AreEqual(-1, working.BeatmapInfo.Metadata.PreviewTime); + } + } + [Test] public void TestDecodeBeatmapGeneral() { @@ -915,10 +934,11 @@ namespace osu.Game.Tests.Beatmaps.Formats } } - [Test] - public void TestLegacyDefaultsPreserved() + [TestCase(false)] + [TestCase(true)] + public void TestLegacyDefaultsPreserved(bool applyOffsets) { - var decoder = new LegacyBeatmapDecoder { ApplyOffsets = false }; + var decoder = new LegacyBeatmapDecoder { ApplyOffsets = applyOffsets }; using (var memoryStream = new MemoryStream()) using (var stream = new LineBufferedReader(memoryStream)) diff --git a/osu.Game.Tests/Resources/beatmap-version-4.osu b/osu.Game.Tests/Resources/beatmap-version-4.osu new file mode 100644 index 0000000000..bba4ed46f1 --- /dev/null +++ b/osu.Game.Tests/Resources/beatmap-version-4.osu @@ -0,0 +1,4 @@ +osu file format v4 + +[General] +PreviewTime: -1 diff --git a/osu.Game.Tests/Resources/beatmap-version.osu b/osu.Game.Tests/Resources/beatmap-version-6.osu similarity index 100% rename from osu.Game.Tests/Resources/beatmap-version.osu rename to osu.Game.Tests/Resources/beatmap-version-6.osu From 27818461470c4892a3c5f9e916beffd5929521b9 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 10 Oct 2023 19:02:04 +0900 Subject: [PATCH 2/2] Fix beatmaps with no preview point set getting incorrect default Note that this will require a re-import to fix existing beatmaps becuse.. it's stored to realm. Probably not worth worrying about for now. --- osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs index 37aa7950d3..8559ecfe69 100644 --- a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs @@ -196,7 +196,8 @@ namespace osu.Game.Beatmaps.Formats break; case @"PreviewTime": - metadata.PreviewTime = getOffsetTime(Parsing.ParseInt(pair.Value)); + int time = Parsing.ParseInt(pair.Value); + metadata.PreviewTime = time == -1 ? time : getOffsetTime(time); break; case @"SampleSet":