1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-28 07:23:14 +08:00

Add tests

This commit is contained in:
Cootz 2023-02-16 16:26:57 +03:00
parent 3057ccb635
commit f1da213bea
2 changed files with 88 additions and 3 deletions

View File

@ -0,0 +1,85 @@
// 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.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text;
using NUnit.Framework;
using osu.Framework.Platform;
using osu.Framework.Testing;
using osu.Game.Database;
namespace osu.Game.Tests.Database
{
public class LegacyExporterTest
{
private TestLegacyExporter? legacyExporter;
private TemporaryNativeStorage? storage;
[SetUp]
public void SetupLegacyExporter()
{
storage = new TemporaryNativeStorage("export-storage");
legacyExporter = new TestLegacyExporter(storage);
}
[Test]
public void ExportFileWithNormalName()
{
var exportStorage = storage?.GetStorageForDirectory(@"exports");
string filename = "normal file name";
var item = new TestPathInfo(filename);
Assert.That(item.FileName.Length < TestLegacyExporter.GetMaxPath(), Is.True);
Assert.DoesNotThrow(() => legacyExporter?.Export(item));
Assert.That(exportStorage?.Exists($"{filename}{legacyExporter?.GetExtension()}"), Is.True);
}
[Test]
public void ExportFileWithSuperLongName()
{
var exportStorage = storage?.GetStorageForDirectory(@"exports");
string fullname = "some file with super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name super long name";
int capacity = TestLegacyExporter.GetMaxPath() - (legacyExporter?.GetExtension().Length ?? 0);
string expectedName = fullname.Remove(capacity);
var item = new TestPathInfo(fullname);
Assert.That(item.FileName.Length > TestLegacyExporter.GetMaxPath(), Is.True);
Assert.DoesNotThrow(() => legacyExporter?.Export(item));
Assert.That(exportStorage?.Exists($"{expectedName}{legacyExporter?.GetExtension()}"), Is.True);
}
[TearDown]
public void CleanupAfterTest()
{
storage?.Dispose();
}
private class TestPathInfo : IHasNamedFiles
{
public string FileName { get; set; } = string.Empty;
public TestPathInfo(string fileName) => FileName = fileName;
public IEnumerable<INamedFileUsage> Files { get; set; } = new List<INamedFileUsage>();
public override string ToString() => FileName;
}
private class TestLegacyExporter : LegacyExporter<IHasNamedFiles>
{
public TestLegacyExporter(Storage storage) : base(storage) { }
public static int GetMaxPath() => MAX_PATH;
public string GetExtension() => FileExtension;
protected override string FileExtension => ".ots";
}
}
}

View File

@ -26,7 +26,7 @@ namespace osu.Game.Database
/// <remarks>
/// This constant is smaller 256 because <see cref="Storage.CreateFileSafely(string)"/> adds additional "_<see cref="Guid"/>" to the end of the path
/// </remarks>
private const int max_path = 255 - (32 + 4 + 2); //max path - (Guid + Guid "D" format chars + Storage.CreateFileSafely chars)
protected const int MAX_PATH = 255 - (32 + 4 + 2); //max path - (Guid + Guid "D" format chars + Storage.CreateFileSafely chars)
/// <summary>
/// The file extension for exports (including the leading '.').
@ -60,11 +60,11 @@ namespace osu.Game.Database
string filename = NamingUtils.GetNextBestFilename(existingExports, $"{itemFilename}{FileExtension}");
if (filename.Length > max_path)
if (filename.Length > MAX_PATH)
{
string filenameWithoutExtension = Path.GetFileNameWithoutExtension(filename);
filenameWithoutExtension = filenameWithoutExtension.Remove(max_path - FileExtension.Length); //Truncating the name to fit the path limit
filenameWithoutExtension = filenameWithoutExtension.Remove(MAX_PATH - FileExtension.Length); //Truncating the name to fit the path limit
filename = $"{filenameWithoutExtension}{FileExtension}";
}