Match native asset fallback behavior

This commit is contained in:
gamer147
2026-08-15 09:49:04 -04:00
parent b27a5ff43d
commit d38511665a
8 changed files with 120 additions and 38 deletions

View File

@@ -307,6 +307,10 @@ public class Sys4AssetStoreTests
File.Delete(Path.Combine(loose, "TEST.BIN"));
Assert.Equal(new byte[] { 1, 2, 3 }, store.ReadAll(entry));
Directory.CreateDirectory(Path.Combine(loose, "TEST.BIN"));
Assert.Equal(new byte[] { 1, 2, 3 }, store.ReadAll(entry));
Directory.Delete(Path.Combine(loose, "TEST.BIN"));
var reads = await Task.WhenAll(Enumerable.Range(0, 8).Select(_ => Task.Run(() => store.ReadAll(entry))));
Assert.All(reads, bytes => Assert.Equal(new byte[] { 1, 2, 3 }, bytes));
Assert.Throws<InvalidDataException>(() => store.Open(entry with { Name = "../TEST.BIN" }));
@@ -319,6 +323,28 @@ public class Sys4AssetStoreTests
}
}
[Fact]
public void TypedResolutionReportsInvalidAndMismatchedPackedIdsOnce()
{
var catalog = Sys4AssetCatalog.Parse(Sys4StartupSettingsTests.BuildCatalog(
includeTrailer: true, fileName: "TEST.BIN"));
var diagnostics = new List<string>();
var resources = new ResourceMap(catalog, diagnostic: diagnostics.Add);
Assert.Null(resources.ResolveTexture(0x02000000));
Assert.Null(resources.ResolveTexture(0x02000000));
Assert.Null(resources.ResolveTexture(0));
Assert.Null(resources.ResolveTexture(0));
Assert.Collection(diagnostics,
message => Assert.Equal(
"[asset-resolution] texture resource 0x2000000 does not select a mounted SYS4INI/AAI record",
message),
message => Assert.Equal(
"[asset-resolution] texture resource 0x0 selects TEST.BIN, expected an AGF record",
message));
}
private static byte[] ReadToEnd(Stream stream)
{
using var copy = new MemoryStream();