mirror of
https://github.com/ppy/osu
synced 2024-12-24 15:53:37 +00:00
Add coverage of case where skin.ini doesn't specify name/author
This commit is contained in:
parent
62e5c9d263
commit
ef77658311
@ -66,6 +66,32 @@ namespace osu.Game.Tests.Skins.IO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task TestImportTwiceWithNoMetadata()
|
||||||
|
{
|
||||||
|
using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var osu = await loadOsu(host);
|
||||||
|
|
||||||
|
// if a user downloads two skins that do have skin.ini files but don't have any creator metadata in the skin.ini, they should both import separately just for safety.
|
||||||
|
var imported = await loadIntoOsu(osu, new ZipArchiveReader(createOsk(string.Empty, string.Empty), "download.osk"));
|
||||||
|
var imported2 = await loadIntoOsu(osu, new ZipArchiveReader(createOsk(string.Empty, string.Empty), "download.osk"));
|
||||||
|
|
||||||
|
Assert.That(imported2.ID, Is.Not.EqualTo(imported.ID));
|
||||||
|
Assert.That(osu.Dependencies.Get<SkinManager>().GetAllUserSkins().Count, Is.EqualTo(2));
|
||||||
|
|
||||||
|
Assert.That(osu.Dependencies.Get<SkinManager>().GetAllUserSkins().First().Files.First().FileInfoID, Is.EqualTo(imported.Files.First().FileInfoID));
|
||||||
|
Assert.That(osu.Dependencies.Get<SkinManager>().GetAllUserSkins().Last().Files.First().FileInfoID, Is.EqualTo(imported2.Files.First().FileInfoID));
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
host.Exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public async Task TestImportTwiceWithDifferentMetadata()
|
public async Task TestImportTwiceWithDifferentMetadata()
|
||||||
{
|
{
|
||||||
|
@ -87,11 +87,19 @@ namespace osu.Game.Skinning
|
|||||||
|
|
||||||
protected override SkinInfo CreateModel(ArchiveReader archive) => new SkinInfo { Name = archive.Name };
|
protected override SkinInfo CreateModel(ArchiveReader archive) => new SkinInfo { Name = archive.Name };
|
||||||
|
|
||||||
|
private const string unknown_creator_string = "Unknown";
|
||||||
|
|
||||||
protected override string ComputeHash(SkinInfo item, ArchiveReader reader = null)
|
protected override string ComputeHash(SkinInfo item, ArchiveReader reader = null)
|
||||||
{
|
{
|
||||||
// this is the optimal way to hash legacy skins, but will need to be reconsidered when we move forward with skin implementation.
|
if (item.Creator != null && item.Creator != unknown_creator_string)
|
||||||
// likely, the skin should expose a real version (ie. the version of the skin, not the skin.ini version it's targeting).
|
{
|
||||||
return item.ToString().ComputeSHA2Hash();
|
// this is the optimal way to hash legacy skins, but will need to be reconsidered when we move forward with skin implementation.
|
||||||
|
// likely, the skin should expose a real version (ie. the version of the skin, not the skin.ini version it's targeting).
|
||||||
|
return item.ToString().ComputeSHA2Hash();
|
||||||
|
}
|
||||||
|
|
||||||
|
// if there was no creator, the ToString above would give the filename, which along isn't really enough to base any decisions on.
|
||||||
|
return base.ComputeHash(item, reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async Task Populate(SkinInfo model, ArchiveReader archive, CancellationToken cancellationToken = default)
|
protected override async Task Populate(SkinInfo model, ArchiveReader archive, CancellationToken cancellationToken = default)
|
||||||
@ -108,7 +116,7 @@ namespace osu.Game.Skinning
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
model.Name = model.Name.Replace(".osk", "");
|
model.Name = model.Name.Replace(".osk", "");
|
||||||
model.Creator ??= "Unknown";
|
model.Creator ??= unknown_creator_string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user