mirror of
https://github.com/ppy/osu.git
synced 2025-02-13 03:02:56 +08:00
Merge pull request #16637 from bdach/editor-changes-not-resetting
Fix changes to beatmap info made in editor persisting after exit without save
This commit is contained in:
commit
29a4ec949f
@ -4,11 +4,13 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Screens;
|
||||||
using osu.Framework.Testing;
|
using osu.Framework.Testing;
|
||||||
using osu.Framework.Utils;
|
using osu.Framework.Utils;
|
||||||
using osu.Game.Beatmaps.ControlPoints;
|
using osu.Game.Beatmaps.ControlPoints;
|
||||||
using osu.Game.Screens.Edit;
|
using osu.Game.Screens.Edit;
|
||||||
using osu.Game.Screens.Edit.Compose.Components.Timeline;
|
using osu.Game.Screens.Edit.Compose.Components.Timeline;
|
||||||
|
using osu.Game.Screens.Select;
|
||||||
using osuTK.Input;
|
using osuTK.Input;
|
||||||
|
|
||||||
namespace osu.Game.Tests.Visual.Editing
|
namespace osu.Game.Tests.Visual.Editing
|
||||||
@ -116,5 +118,24 @@ namespace osu.Game.Tests.Visual.Editing
|
|||||||
EditorBeatmap.HitObjects[0].SampleControlPoint != SampleControlPoint.DEFAULT &&
|
EditorBeatmap.HitObjects[0].SampleControlPoint != SampleControlPoint.DEFAULT &&
|
||||||
EditorBeatmap.HitObjects[0].DifficultyControlPoint != DifficultyControlPoint.DEFAULT);
|
EditorBeatmap.HitObjects[0].DifficultyControlPoint != DifficultyControlPoint.DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestExitWithoutSaveFromExistingBeatmap()
|
||||||
|
{
|
||||||
|
const string tags_to_save = "these tags will be saved";
|
||||||
|
const string tags_to_discard = "these tags should be discarded";
|
||||||
|
|
||||||
|
AddStep("Set tags", () => EditorBeatmap.BeatmapInfo.Metadata.Tags = tags_to_save);
|
||||||
|
SaveEditor();
|
||||||
|
AddAssert("Tags saved correctly", () => EditorBeatmap.BeatmapInfo.Metadata.Tags == tags_to_save);
|
||||||
|
|
||||||
|
ReloadEditorToSameBeatmap();
|
||||||
|
AddAssert("Tags saved correctly", () => EditorBeatmap.BeatmapInfo.Metadata.Tags == tags_to_save);
|
||||||
|
AddStep("Set tags again", () => EditorBeatmap.BeatmapInfo.Metadata.Tags = tags_to_discard);
|
||||||
|
|
||||||
|
AddStep("Exit editor", () => Editor.Exit());
|
||||||
|
AddUntilStep("Wait for song select", () => Game.ScreenStack.CurrentScreen is PlaySongSelect);
|
||||||
|
AddAssert("Tags reverted correctly", () => Game.Beatmap.Value.BeatmapInfo.Metadata.Tags == tags_to_save);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,11 @@ namespace osu.Game.Tests.Visual.Editing
|
|||||||
AddUntilStep("current screen is editor", () => Stack.CurrentScreen is Editor);
|
AddUntilStep("current screen is editor", () => Stack.CurrentScreen is Editor);
|
||||||
AddUntilStep("background has correct params", () =>
|
AddUntilStep("background has correct params", () =>
|
||||||
{
|
{
|
||||||
var background = this.ChildrenOfType<BackgroundScreenBeatmap>().Single();
|
// the test gameplay player's beatmap may be the "same" beatmap as the one being edited, *but* the `BeatmapInfo` references may differ
|
||||||
|
// due to the beatmap refetch logic ran on editor suspend.
|
||||||
|
// this test cares about checking the background belonging to the editor specifically, so check that using reference equality
|
||||||
|
// (as `.Equals()` cannot discern between the two, as they technically share the same database GUID).
|
||||||
|
var background = this.ChildrenOfType<BackgroundScreenBeatmap>().Single(b => ReferenceEquals(b.Beatmap.BeatmapInfo, EditorBeatmap.BeatmapInfo));
|
||||||
return background.Colour == Color4.DarkGray && background.BlurAmount.Value == 0;
|
return background.Colour == Color4.DarkGray && background.BlurAmount.Value == 0;
|
||||||
});
|
});
|
||||||
AddAssert("no mods selected", () => SelectedMods.Value.Count == 0);
|
AddAssert("no mods selected", () => SelectedMods.Value.Count == 0);
|
||||||
@ -99,7 +103,11 @@ namespace osu.Game.Tests.Visual.Editing
|
|||||||
AddUntilStep("current screen is editor", () => Stack.CurrentScreen is Editor);
|
AddUntilStep("current screen is editor", () => Stack.CurrentScreen is Editor);
|
||||||
AddUntilStep("background has correct params", () =>
|
AddUntilStep("background has correct params", () =>
|
||||||
{
|
{
|
||||||
var background = this.ChildrenOfType<BackgroundScreenBeatmap>().Single();
|
// the test gameplay player's beatmap may be the "same" beatmap as the one being edited, *but* the `BeatmapInfo` references may differ
|
||||||
|
// due to the beatmap refetch logic ran on editor suspend.
|
||||||
|
// this test cares about checking the background belonging to the editor specifically, so check that using reference equality
|
||||||
|
// (as `.Equals()` cannot discern between the two, as they technically share the same database GUID).
|
||||||
|
var background = this.ChildrenOfType<BackgroundScreenBeatmap>().Single(b => ReferenceEquals(b.Beatmap.BeatmapInfo, EditorBeatmap.BeatmapInfo));
|
||||||
return background.Colour == Color4.DarkGray && background.BlurAmount.Value == 0;
|
return background.Colour == Color4.DarkGray && background.BlurAmount.Value == 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -574,7 +574,9 @@ namespace osu.Game.Screens.Edit
|
|||||||
// To update the game-wide beatmap with any changes, perform a re-fetch on exit/suspend.
|
// To update the game-wide beatmap with any changes, perform a re-fetch on exit/suspend.
|
||||||
// This is required as the editor makes its local changes via EditorBeatmap
|
// This is required as the editor makes its local changes via EditorBeatmap
|
||||||
// (which are not propagated outwards to a potentially cached WorkingBeatmap).
|
// (which are not propagated outwards to a potentially cached WorkingBeatmap).
|
||||||
var refetchedBeatmap = beatmapManager.GetWorkingBeatmap(Beatmap.Value.BeatmapInfo);
|
((IWorkingBeatmapCache)beatmapManager).Invalidate(Beatmap.Value.BeatmapInfo);
|
||||||
|
var refetchedBeatmapInfo = beatmapManager.QueryBeatmap(b => b.ID == Beatmap.Value.BeatmapInfo.ID);
|
||||||
|
var refetchedBeatmap = beatmapManager.GetWorkingBeatmap(refetchedBeatmapInfo);
|
||||||
|
|
||||||
if (!(refetchedBeatmap is DummyWorkingBeatmap))
|
if (!(refetchedBeatmap is DummyWorkingBeatmap))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user