mirror of
https://github.com/AssetRipper/AssetRipper.git
synced 2025-12-11 20:15:29 +01:00
Fix resolution bug for unity_builtin_extra
This commit is contained in:
parent
c79e7c2425
commit
8a84f82f49
@ -1,170 +1,183 @@
|
||||
using AssetRipper.Assets.Bundles;
|
||||
using AssetRipper.Assets.Collections;
|
||||
using AssetRipper.IO.Files.ResourceFiles;
|
||||
using AssetRipper.IO.Files.Streams.Smart;
|
||||
using AssetRipper.Assets.Bundles;
|
||||
using AssetRipper.Assets.Collections;
|
||||
using AssetRipper.IO.Files.ResourceFiles;
|
||||
using AssetRipper.IO.Files.Streams.Smart;
|
||||
using AssetRipper.IO.Files.Utils;
|
||||
|
||||
namespace AssetRipper.Assets.Tests;
|
||||
|
||||
public class ResolutionTests
|
||||
{
|
||||
[Test]
|
||||
public void CollectionResolutionWorksAnywhereInTheHierarchy()
|
||||
{
|
||||
const string name1 = "name1";
|
||||
const string name2 = "name2";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ProcessedAssetCollection collection1 = new ProcessedAssetCollection(gameBundle);
|
||||
collection1.Name = name1;
|
||||
|
||||
ProcessedBundle processedBundle = new();
|
||||
gameBundle.AddBundle(processedBundle);
|
||||
|
||||
ProcessedAssetCollection collection2 = new ProcessedAssetCollection(processedBundle);
|
||||
collection2.Name = name2;
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(gameBundle.ResolveCollection(name1), Is.EqualTo(collection1));
|
||||
Assert.That(gameBundle.ResolveCollection(name2), Is.EqualTo(collection2));
|
||||
Assert.That(processedBundle.ResolveCollection(name1), Is.EqualTo(collection1));
|
||||
Assert.That(processedBundle.ResolveCollection(name2), Is.EqualTo(collection2));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CollectionResolutionIsAbleToFindTheSecondFile()
|
||||
{
|
||||
const string name1 = "name1";
|
||||
const string name2 = "name2";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ProcessedBundle processedBundle1 = new();
|
||||
gameBundle.AddBundle(processedBundle1);
|
||||
|
||||
ProcessedAssetCollection collection1 = new ProcessedAssetCollection(processedBundle1);
|
||||
collection1.Name = name1;
|
||||
|
||||
ProcessedBundle processedBundle2 = new();
|
||||
gameBundle.AddBundle(processedBundle2);
|
||||
|
||||
ProcessedAssetCollection collection2 = new ProcessedAssetCollection(processedBundle2);
|
||||
collection2.Name = name2;
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(gameBundle.ResolveCollection(name1), Is.EqualTo(collection1));
|
||||
Assert.That(gameBundle.ResolveCollection(name2), Is.EqualTo(collection2));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ResourceResolutionWorksAnywhereInTheHierarchy()
|
||||
{
|
||||
const string name1 = "name1";
|
||||
const string name2 = "name2";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ResourceFile resource1 = CreateNewResourceFile(name1);
|
||||
gameBundle.AddResource(resource1);
|
||||
|
||||
ProcessedBundle processedBundle = new();
|
||||
gameBundle.AddBundle(processedBundle);
|
||||
|
||||
ResourceFile resource2 = CreateNewResourceFile(name2);
|
||||
processedBundle.AddResource(resource2);
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(gameBundle.ResolveResource(name1), Is.EqualTo(resource1));
|
||||
Assert.That(gameBundle.ResolveResource(name2), Is.EqualTo(resource2));
|
||||
Assert.That(processedBundle.ResolveResource(name1), Is.EqualTo(resource1));
|
||||
Assert.That(processedBundle.ResolveResource(name2), Is.EqualTo(resource2));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ResourceResolutionIsAbleToFindTheSecondFile()
|
||||
{
|
||||
const string name1 = "name1";
|
||||
const string name2 = "name2";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ProcessedBundle processedBundle1 = new();
|
||||
gameBundle.AddBundle(processedBundle1);
|
||||
|
||||
ResourceFile resource1 = CreateNewResourceFile(name1);
|
||||
processedBundle1.AddResource(resource1);
|
||||
|
||||
ProcessedBundle processedBundle2 = new();
|
||||
gameBundle.AddBundle(processedBundle2);
|
||||
|
||||
ResourceFile resource2 = CreateNewResourceFile(name2);
|
||||
processedBundle2.AddResource(resource2);
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(gameBundle.ResolveResource(name1), Is.EqualTo(resource1));
|
||||
Assert.That(gameBundle.ResolveResource(name2), Is.EqualTo(resource2));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ResourceResolutionIsAbleToFindAnArchiveFile()
|
||||
{
|
||||
const string name = "archive:/name1";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ProcessedBundle processedBundle = new();
|
||||
gameBundle.AddBundle(processedBundle);
|
||||
|
||||
ResourceFile resource = CreateNewResourceFile(name);
|
||||
namespace AssetRipper.Assets.Tests;
|
||||
|
||||
public class ResolutionTests
|
||||
{
|
||||
[Test]
|
||||
public void CollectionResolutionWorksAnywhereInTheHierarchy()
|
||||
{
|
||||
const string name1 = "name1";
|
||||
const string name2 = "name2";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ProcessedAssetCollection collection1 = new ProcessedAssetCollection(gameBundle);
|
||||
collection1.Name = name1;
|
||||
|
||||
ProcessedBundle processedBundle = new();
|
||||
gameBundle.AddBundle(processedBundle);
|
||||
|
||||
ProcessedAssetCollection collection2 = new ProcessedAssetCollection(processedBundle);
|
||||
collection2.Name = name2;
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(gameBundle.ResolveCollection(name1), Is.EqualTo(collection1));
|
||||
Assert.That(gameBundle.ResolveCollection(name2), Is.EqualTo(collection2));
|
||||
Assert.That(processedBundle.ResolveCollection(name1), Is.EqualTo(collection1));
|
||||
Assert.That(processedBundle.ResolveCollection(name2), Is.EqualTo(collection2));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CollectionResolutionIsAbleToFindTheSecondFile()
|
||||
{
|
||||
const string name1 = "name1";
|
||||
const string name2 = "name2";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ProcessedBundle processedBundle1 = new();
|
||||
gameBundle.AddBundle(processedBundle1);
|
||||
|
||||
ProcessedAssetCollection collection1 = new ProcessedAssetCollection(processedBundle1);
|
||||
collection1.Name = name1;
|
||||
|
||||
ProcessedBundle processedBundle2 = new();
|
||||
gameBundle.AddBundle(processedBundle2);
|
||||
|
||||
ProcessedAssetCollection collection2 = new ProcessedAssetCollection(processedBundle2);
|
||||
collection2.Name = name2;
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(gameBundle.ResolveCollection(name1), Is.EqualTo(collection1));
|
||||
Assert.That(gameBundle.ResolveCollection(name2), Is.EqualTo(collection2));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CollectionResolutionIsAbleToFindUnityBuiltinExtra()
|
||||
{
|
||||
const string name = "unity_builtin_extra";
|
||||
const string reference = $"resources/{name}";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ProcessedAssetCollection collection = new ProcessedAssetCollection(gameBundle);
|
||||
collection.Name = name;
|
||||
|
||||
Assert.That(gameBundle.ResolveCollection(FilenameUtils.FixFileIdentifier(reference)), Is.EqualTo(collection));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ResourceResolutionWorksAnywhereInTheHierarchy()
|
||||
{
|
||||
const string name1 = "name1";
|
||||
const string name2 = "name2";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ResourceFile resource1 = CreateNewResourceFile(name1);
|
||||
gameBundle.AddResource(resource1);
|
||||
|
||||
ProcessedBundle processedBundle = new();
|
||||
gameBundle.AddBundle(processedBundle);
|
||||
|
||||
ResourceFile resource2 = CreateNewResourceFile(name2);
|
||||
processedBundle.AddResource(resource2);
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(gameBundle.ResolveResource(name1), Is.EqualTo(resource1));
|
||||
Assert.That(gameBundle.ResolveResource(name2), Is.EqualTo(resource2));
|
||||
Assert.That(processedBundle.ResolveResource(name1), Is.EqualTo(resource1));
|
||||
Assert.That(processedBundle.ResolveResource(name2), Is.EqualTo(resource2));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ResourceResolutionIsAbleToFindTheSecondFile()
|
||||
{
|
||||
const string name1 = "name1";
|
||||
const string name2 = "name2";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ProcessedBundle processedBundle1 = new();
|
||||
gameBundle.AddBundle(processedBundle1);
|
||||
|
||||
ResourceFile resource1 = CreateNewResourceFile(name1);
|
||||
processedBundle1.AddResource(resource1);
|
||||
|
||||
ProcessedBundle processedBundle2 = new();
|
||||
gameBundle.AddBundle(processedBundle2);
|
||||
|
||||
ResourceFile resource2 = CreateNewResourceFile(name2);
|
||||
processedBundle2.AddResource(resource2);
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(gameBundle.ResolveResource(name1), Is.EqualTo(resource1));
|
||||
Assert.That(gameBundle.ResolveResource(name2), Is.EqualTo(resource2));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ResourceResolutionIsAbleToFindAnArchiveFile()
|
||||
{
|
||||
const string name = "archive:/name1";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ProcessedBundle processedBundle = new();
|
||||
gameBundle.AddBundle(processedBundle);
|
||||
|
||||
ResourceFile resource = CreateNewResourceFile(name);
|
||||
processedBundle.AddResource(resource);
|
||||
|
||||
Assert.That(gameBundle.ResolveResource(name), Is.EqualTo(resource));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ResourceResolutionIsAbleToFindFilesWithCapitalLetters()
|
||||
{
|
||||
const string name = "ResourceName.resS";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ProcessedBundle processedBundle = new();
|
||||
gameBundle.AddBundle(processedBundle);
|
||||
|
||||
ResourceFile resource = CreateNewResourceFile(name);
|
||||
Assert.That(gameBundle.ResolveResource(name), Is.EqualTo(resource));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ResourceResolutionIsAbleToFindFilesWithCapitalLetters()
|
||||
{
|
||||
const string name = "ResourceName.resS";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ProcessedBundle processedBundle = new();
|
||||
gameBundle.AddBundle(processedBundle);
|
||||
|
||||
ResourceFile resource = CreateNewResourceFile(name);
|
||||
processedBundle.AddResource(resource);
|
||||
|
||||
Assert.That(gameBundle.ResolveResource(name), Is.EqualTo(resource));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ResourceResolutionIsAbleToFindExternalFilesFromParentBundles()
|
||||
{
|
||||
const string resourceName = "resources.resource";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ProcessedBundle processedBundle = new();
|
||||
gameBundle.AddBundle(processedBundle);
|
||||
|
||||
Assert.That(gameBundle.ResolveResource(name), Is.EqualTo(resource));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ResourceResolutionIsAbleToFindExternalFilesFromParentBundles()
|
||||
{
|
||||
const string resourceName = "resources.resource";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ProcessedBundle processedBundle = new();
|
||||
gameBundle.AddBundle(processedBundle);
|
||||
|
||||
ResourceFile resource = CreateNewResourceFile(resourceName);
|
||||
gameBundle.ResourceProvider = new SingleResourceProvider(resource);
|
||||
|
||||
Assert.That(processedBundle.ResolveResource(resourceName), Is.EqualTo(resource));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ResourceResolutionIsAbleToFindExternalFilesFromGameBundles()
|
||||
{
|
||||
const string resourceName = "resources.resource";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
Assert.That(processedBundle.ResolveResource(resourceName), Is.EqualTo(resource));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ResourceResolutionIsAbleToFindExternalFilesFromGameBundles()
|
||||
{
|
||||
const string resourceName = "resources.resource";
|
||||
GameBundle gameBundle = new();
|
||||
|
||||
ResourceFile resource = CreateNewResourceFile(resourceName);
|
||||
gameBundle.ResourceProvider = new SingleResourceProvider(resource);
|
||||
|
||||
Assert.That(gameBundle.ResolveResource(resourceName), Is.EqualTo(resource));
|
||||
Assert.That(gameBundle.ResolveResource(resourceName), Is.EqualTo(resource));
|
||||
}
|
||||
|
||||
private sealed record class SingleResourceProvider(ResourceFile Resource) : IResourceProvider
|
||||
@ -176,5 +189,5 @@ public class ResolutionTests
|
||||
}
|
||||
}
|
||||
|
||||
private static ResourceFile CreateNewResourceFile(string name) => new ResourceFile(SmartStream.CreateMemory(), name, name);
|
||||
}
|
||||
private static ResourceFile CreateNewResourceFile(string name) => new ResourceFile(SmartStream.CreateMemory(), name, name);
|
||||
}
|
||||
|
||||
@ -34,11 +34,15 @@ namespace AssetRipper.IO.Files.Utils
|
||||
name = FixResourcePath(name);
|
||||
if (IsDefaultResource(name))
|
||||
{
|
||||
return DefaultResourceName1;
|
||||
//I'm not sure why uTiny was redirecting these to an alternate name.
|
||||
//return DefaultResourceName1;
|
||||
return name;
|
||||
}
|
||||
else if (IsBuiltinExtra(name))
|
||||
{
|
||||
return BuiltinExtraName1;
|
||||
//I'm not sure why uTiny was redirecting these to an alternate name.
|
||||
//return BuiltinExtraName1;
|
||||
return name;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user