1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-06 21:52:58 +08:00

Factor out general file presence checking

This allows us to use the same method of checking for other files that should exist, for example the audio file.

By using the same method, they all share test cases too.
This commit is contained in:
Naxess 2021-04-18 02:07:33 +02:00
parent 0502fbb429
commit 010720de74
4 changed files with 41 additions and 19 deletions

View File

@ -12,15 +12,15 @@ using osu.Game.Tests.Beatmaps;
namespace osu.Game.Tests.Editing.Checks namespace osu.Game.Tests.Editing.Checks
{ {
[TestFixture] [TestFixture]
public class CheckBackgroundTest public class CheckFilePresenceTest
{ {
private CheckBackground check; private CheckBackgroundPresence check;
private WorkingBeatmap beatmap; private WorkingBeatmap beatmap;
[SetUp] [SetUp]
public void Setup() public void Setup()
{ {
check = new CheckBackground(); check = new CheckBackgroundPresence();
beatmap = new TestWorkingBeatmap(new Beatmap<HitObject> beatmap = new TestWorkingBeatmap(new Beatmap<HitObject>
{ {
BeatmapInfo = new BeatmapInfo BeatmapInfo = new BeatmapInfo
@ -51,7 +51,7 @@ namespace osu.Game.Tests.Editing.Checks
var issues = check.Run(beatmap).ToList(); var issues = check.Run(beatmap).ToList();
Assert.That(issues, Has.Count.EqualTo(1)); Assert.That(issues, Has.Count.EqualTo(1));
Assert.That(issues.Single().Template is CheckBackground.IssueTemplateDoesNotExist); Assert.That(issues.Single().Template is CheckFilePresence.IssueTemplateDoesNotExist);
} }
[Test] [Test]
@ -62,7 +62,7 @@ namespace osu.Game.Tests.Editing.Checks
var issues = check.Run(beatmap).ToList(); var issues = check.Run(beatmap).ToList();
Assert.That(issues, Has.Count.EqualTo(1)); Assert.That(issues, Has.Count.EqualTo(1));
Assert.That(issues.Single().Template is CheckBackground.IssueTemplateNoneSet); Assert.That(issues.Single().Template is CheckFilePresence.IssueTemplateNoneSet);
} }
} }
} }

View File

@ -16,8 +16,11 @@ namespace osu.Game.Rulesets.Edit
{ {
private readonly List<ICheck> checks = new List<ICheck> private readonly List<ICheck> checks = new List<ICheck>
{ {
new CheckBackground(), // Resources
new CheckBackgroundQuality() new CheckBackgroundPresence(),
new CheckBackgroundQuality(),
// Audio
new CheckAudioPresence(),
}; };
public IEnumerable<Issue> Run(WorkingBeatmap workingBeatmap) => checks.SelectMany(check => check.Run(workingBeatmap)); public IEnumerable<Issue> Run(WorkingBeatmap workingBeatmap) => checks.SelectMany(check => check.Run(workingBeatmap));

View File

@ -0,0 +1,15 @@
// 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 osu.Game.Beatmaps;
using osu.Game.Rulesets.Edit.Checks.Components;
namespace osu.Game.Rulesets.Edit.Checks
{
public class CheckBackgroundPresence : CheckFilePresence
{
protected override CheckCategory Category => CheckCategory.Resources;
protected override string TypeOfFile => "background";
protected override string GetFilename(IWorkingBeatmap workingBeatmap) => workingBeatmap.Beatmap.Metadata?.BackgroundFile;
}
}

View File

@ -7,9 +7,13 @@ using osu.Game.Rulesets.Edit.Checks.Components;
namespace osu.Game.Rulesets.Edit.Checks namespace osu.Game.Rulesets.Edit.Checks
{ {
public class CheckBackground : ICheck public abstract class CheckFilePresence : ICheck
{ {
public CheckMetadata Metadata { get; } = new CheckMetadata(CheckCategory.Resources, "Missing background"); protected abstract CheckCategory Category { get; }
protected abstract string TypeOfFile { get; }
protected abstract string GetFilename(IWorkingBeatmap workingBeatmap);
public CheckMetadata Metadata => new CheckMetadata(Category, $"Missing {TypeOfFile}");
public IEnumerable<IssueTemplate> PossibleTemplates => new IssueTemplate[] public IEnumerable<IssueTemplate> PossibleTemplates => new IssueTemplate[]
{ {
@ -19,41 +23,41 @@ namespace osu.Game.Rulesets.Edit.Checks
public IEnumerable<Issue> Run(IWorkingBeatmap workingBeatmap) public IEnumerable<Issue> Run(IWorkingBeatmap workingBeatmap)
{ {
string backgroundFile = workingBeatmap.Beatmap.Metadata?.BackgroundFile; var filename = GetFilename(workingBeatmap);
if (backgroundFile == null) if (filename == null)
{ {
yield return new IssueTemplateNoneSet(this).Create(); yield return new IssueTemplateNoneSet(this).Create(TypeOfFile);
yield break; yield break;
} }
// If the background is set, also make sure it still exists. // If the file is set, also make sure it still exists.
var storagePath = workingBeatmap.Beatmap.BeatmapInfo.BeatmapSet.GetPathForFile(backgroundFile); var storagePath = workingBeatmap.Beatmap.BeatmapInfo.BeatmapSet.GetPathForFile(filename);
if (storagePath != null) if (storagePath != null)
yield break; yield break;
yield return new IssueTemplateDoesNotExist(this).Create(backgroundFile); yield return new IssueTemplateDoesNotExist(this).Create(TypeOfFile, filename);
} }
public class IssueTemplateNoneSet : IssueTemplate public class IssueTemplateNoneSet : IssueTemplate
{ {
public IssueTemplateNoneSet(ICheck check) public IssueTemplateNoneSet(ICheck check)
: base(check, IssueType.Problem, "No background has been set.") : base(check, IssueType.Problem, "No {0} has been set.")
{ {
} }
public Issue Create() => new Issue(this); public Issue Create(string typeOfFile) => new Issue(this, typeOfFile);
} }
public class IssueTemplateDoesNotExist : IssueTemplate public class IssueTemplateDoesNotExist : IssueTemplate
{ {
public IssueTemplateDoesNotExist(ICheck check) public IssueTemplateDoesNotExist(ICheck check)
: base(check, IssueType.Problem, "The background file \"{0}\" does not exist.") : base(check, IssueType.Problem, "The {0} file \"{1}\" does not exist.")
{ {
} }
public Issue Create(string filename) => new Issue(this, filename); public Issue Create(string typeOfFile, string filename) => new Issue(this, typeOfFile, filename);
} }
} }
} }