1
0
mirror of https://github.com/ppy/osu.git synced 2025-03-05 10:53:10 +08:00
This commit is contained in:
cdwcgt 2023-04-09 15:40:40 +09:00
parent 52fc6de13f
commit def6da98fc
No known key found for this signature in database
GPG Key ID: 144396D01095C3A2

View File

@ -1,19 +1,26 @@
// 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;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using NUnit.Framework;
using osu.Framework.Extensions;
using osu.Framework.Extensions.ObjectExtensions;
using osu.Framework.Platform;
using osu.Framework.Testing;
using osu.Game.Database;
using osu.Game.Overlays.Notifications;
using Realms;
namespace osu.Game.Tests.Database
{
[TestFixture]
public class LegacyExporterTest
public class LegacyModelExporterTest
{
private TestLegacyExporter legacyExporter = null!;
private TestLegacyModelExporter legacyExporter = null!;
private TemporaryNativeStorage storage = null!;
private const string short_filename = "normal file name";
@ -25,15 +32,15 @@ namespace osu.Game.Tests.Database
public void SetUp()
{
storage = new TemporaryNativeStorage("export-storage");
legacyExporter = new TestLegacyExporter(storage);
legacyExporter = new TestLegacyModelExporter(storage);
}
[Test]
public void ExportFileWithNormalNameTest()
{
var item = new TestPathInfo(short_filename);
var item = new TestRealmObject(short_filename);
Assert.That(item.Filename.Length, Is.LessThan(TestLegacyExporter.MAX_FILENAME_LENGTH));
Assert.That(item.Filename.Length, Is.LessThan(TestLegacyModelExporter.MAX_FILENAME_LENGTH));
exportItemAndAssert(item, short_filename);
}
@ -41,9 +48,9 @@ namespace osu.Game.Tests.Database
[Test]
public void ExportFileWithNormalNameMultipleTimesTest()
{
var item = new TestPathInfo(short_filename);
var item = new TestRealmObject(short_filename);
Assert.That(item.Filename.Length, Is.LessThan(TestLegacyExporter.MAX_FILENAME_LENGTH));
Assert.That(item.Filename.Length, Is.LessThan(TestLegacyModelExporter.MAX_FILENAME_LENGTH));
//Export multiple times
for (int i = 0; i < 100; i++)
@ -56,24 +63,24 @@ namespace osu.Game.Tests.Database
[Test]
public void ExportFileWithSuperLongNameTest()
{
int expectedLength = TestLegacyExporter.MAX_FILENAME_LENGTH - (legacyExporter.GetExtension().Length);
int expectedLength = TestLegacyModelExporter.MAX_FILENAME_LENGTH - (legacyExporter.GetExtension().Length);
string expectedName = long_filename.Remove(expectedLength);
var item = new TestPathInfo(long_filename);
var item = new TestRealmObject(long_filename);
Assert.That(item.Filename.Length, Is.GreaterThan(TestLegacyExporter.MAX_FILENAME_LENGTH));
Assert.That(item.Filename.Length, Is.GreaterThan(TestLegacyModelExporter.MAX_FILENAME_LENGTH));
exportItemAndAssert(item, expectedName);
}
[Test]
public void ExportFileWithSuperLongNameMultipleTimesTest()
{
int expectedLength = TestLegacyExporter.MAX_FILENAME_LENGTH - (legacyExporter.GetExtension().Length);
int expectedLength = TestLegacyModelExporter.MAX_FILENAME_LENGTH - (legacyExporter.GetExtension().Length);
string expectedName = long_filename.Remove(expectedLength);
var item = new TestPathInfo(long_filename);
var item = new TestRealmObject(long_filename);
Assert.That(item.Filename.Length, Is.GreaterThan(TestLegacyExporter.MAX_FILENAME_LENGTH));
Assert.That(item.Filename.Length, Is.GreaterThan(TestLegacyModelExporter.MAX_FILENAME_LENGTH));
//Export multiple times
for (int i = 0; i < 100; i++)
@ -83,9 +90,14 @@ namespace osu.Game.Tests.Database
}
}
private void exportItemAndAssert(IHasNamedFiles item, string expectedName)
private void exportItemAndAssert(TestRealmObject item, string expectedName)
{
Assert.DoesNotThrow(() => legacyExporter.Export(item));
// ReSharper disable once AsyncVoidLambda
Assert.DoesNotThrow(() =>
{
Task t = Task.Run(() => legacyExporter.ExportAsync(new TestRealmLive(item)));
t.WaitSafely();
});
Assert.That(storage.Exists($"exports/{expectedName}{legacyExporter.GetExtension()}"), Is.True);
}
@ -96,21 +108,7 @@ namespace osu.Game.Tests.Database
storage.Dispose();
}
private class TestPathInfo : IHasNamedFiles
{
public string Filename { get; }
public IEnumerable<INamedFileUsage> Files { get; } = new List<INamedFileUsage>();
public TestPathInfo(string filename)
{
Filename = filename;
}
public override string ToString() => Filename;
}
private class TestLegacyModelExporter : LegacyModelExporter<IHasNamedFiles>
private class TestLegacyModelExporter : LegacyModelExporter<TestRealmObject>
{
public TestLegacyModelExporter(Storage storage)
: base(storage)
@ -119,7 +117,45 @@ namespace osu.Game.Tests.Database
public string GetExtension() => FileExtension;
protected override void ExportToStream(TestRealmObject model, Stream outputStream, ProgressNotification? notification, CancellationToken cancellationToken = default)
{
}
protected override string FileExtension => ".test";
}
private class TestRealmObject : RealmObject, IHasNamedFiles, IHasGuidPrimaryKey
{
public Guid ID => throw new NotImplementedException();
public string Filename { get; }
public IEnumerable<INamedFileUsage> Files { get; } = new List<INamedFileUsage>();
public TestRealmObject(string filename)
{
Filename = filename;
}
public override string ToString() => Filename;
}
private class TestRealmLive : Live<TestRealmObject>
{
public override void PerformRead(Action<TestRealmObject> perform) => perform(Value);
public override TReturn PerformRead<TReturn>(Func<TestRealmObject, TReturn> perform) => perform(Value);
public override void PerformWrite(Action<TestRealmObject> perform) => throw new NotImplementedException();
public override bool IsManaged => throw new NotImplementedException();
public override TestRealmObject Value { get; }
public TestRealmLive(TestRealmObject model)
: base(Guid.Empty)
{
Value = model;
}
}
}
}