1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-22 01:27:29 +08:00

Add test coverage of external editing

This commit is contained in:
Dean Herbert 2024-07-10 14:51:34 +09:00
parent 72091b43df
commit aa16c72e06
No known key found for this signature in database
2 changed files with 56 additions and 6 deletions

View File

@ -1,6 +1,7 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using System.IO;
using System.Linq;
using NUnit.Framework;
using osu.Framework.Extensions;
@ -13,6 +14,7 @@ using osu.Framework.Testing;
using osu.Game.Beatmaps;
using osu.Game.Configuration;
using osu.Game.Database;
using osu.Game.Graphics.UserInterface;
using osu.Game.Overlays;
using osu.Game.Rulesets.Mania;
using osu.Game.Rulesets.Osu;
@ -31,6 +33,54 @@ namespace osu.Game.Tests.Visual.Navigation
{
private BeatmapSetInfo beatmapSet = null!;
[Test]
public void TestExternalEditingNoChange()
{
prepareBeatmap();
openEditor();
AddStep("open file menu", () => getEditor().ChildrenOfType<Menu.DrawableMenuItem>().Single(m => m.Item.Text.Value.ToString() == "File").TriggerClick());
AddStep("click external edit", () => getEditor().ChildrenOfType<Menu.DrawableMenuItem>().Single(m => m.Item.Text.Value.ToString() == "Edit externally").TriggerClick());
AddUntilStep("wait for external edit screen", () => Game.ScreenStack.CurrentScreen is ExternalEditScreen externalEditScreen && externalEditScreen.IsLoaded);
AddUntilStep("wait for button ready", () => ((ExternalEditScreen)Game.ScreenStack.CurrentScreen).ChildrenOfType<DangerousRoundedButton>().FirstOrDefault()?.Enabled.Value == true);
AddStep("finish external edit", () => ((ExternalEditScreen)Game.ScreenStack.CurrentScreen).ChildrenOfType<DangerousRoundedButton>().First().TriggerClick());
AddUntilStep("wait for editor", () => Game.ScreenStack.CurrentScreen is Editor editor && editor.ReadyForUse);
AddAssert("beatmap didn't change", () => getEditor().Beatmap.Value.BeatmapSetInfo.Equals(beatmapSet));
AddAssert("old beatmapset not deleted", () => Game.BeatmapManager.QueryBeatmapSet(s => s.ID == beatmapSet.ID), () => Is.Not.Null);
}
[Test]
public void TestExternalEditingWithChange()
{
prepareBeatmap();
openEditor();
AddStep("open file menu", () => getEditor().ChildrenOfType<Menu.DrawableMenuItem>().Single(m => m.Item.Text.Value.ToString() == "File").TriggerClick());
AddStep("click external edit", () => getEditor().ChildrenOfType<Menu.DrawableMenuItem>().Single(m => m.Item.Text.Value.ToString() == "Edit externally").TriggerClick());
AddUntilStep("wait for external edit screen", () => Game.ScreenStack.CurrentScreen is ExternalEditScreen externalEditScreen && externalEditScreen.IsLoaded);
AddUntilStep("wait for button ready", () => ((ExternalEditScreen)Game.ScreenStack.CurrentScreen).ChildrenOfType<DangerousRoundedButton>().FirstOrDefault()?.Enabled.Value == true);
AddStep("add file externally", () =>
{
var op = ((ExternalEditScreen)Game.ScreenStack.CurrentScreen).EditOperation!;
File.WriteAllText(Path.Combine(op.MountedPath, "test.txt"), "test");
});
AddStep("finish external edit", () => ((ExternalEditScreen)Game.ScreenStack.CurrentScreen).ChildrenOfType<DangerousRoundedButton>().First().TriggerClick());
AddUntilStep("wait for editor", () => Game.ScreenStack.CurrentScreen is Editor editor && editor.ReadyForUse);
AddAssert("beatmap changed", () => !getEditor().Beatmap.Value.BeatmapSetInfo.Equals(beatmapSet));
AddAssert("old beatmapset deleted", () => Game.BeatmapManager.QueryBeatmapSet(s => s.ID == beatmapSet.ID), () => Is.Null);
}
[Test]
public void TestSaveThenDeleteActuallyDeletesAtSongSelect()
{

View File

@ -38,7 +38,7 @@ namespace osu.Game.Screens.Edit
private readonly Editor editor;
private ExternalEditOperation<BeatmapSetInfo>? operation;
public ExternalEditOperation<BeatmapSetInfo>? EditOperation;
private double timeLoaded;
@ -92,7 +92,7 @@ namespace osu.Game.Screens.Edit
fileMountOperation.ContinueWith(t =>
{
operation = t.GetResultSafely();
EditOperation = t.GetResultSafely();
Scheduler.AddDelayed(() =>
{
@ -146,11 +146,11 @@ namespace osu.Game.Screens.Edit
private void open()
{
if (operation == null)
if (EditOperation == null)
return;
// Ensure the trailing separator is present in order to show the folder contents.
gameHost.OpenFileExternally(operation.MountedPath.TrimDirectorySeparator() + Path.DirectorySeparatorChar);
gameHost.OpenFileExternally(EditOperation.MountedPath.TrimDirectorySeparator() + Path.DirectorySeparatorChar);
}
public override bool OnExiting(ScreenExitEvent e)
@ -158,7 +158,7 @@ namespace osu.Game.Screens.Edit
if (!fileMountOperation.IsCompleted)
return false;
if (operation != null)
if (EditOperation != null)
{
finish();
return false;
@ -178,7 +178,7 @@ namespace osu.Game.Screens.Edit
Schedule(() =>
{
// Setting to null will allow exit to succeed.
operation = null;
EditOperation = null;
Live<BeatmapSetInfo>? beatmap = t.GetResultSafely();