Cut 8b. tests/Aetheria.Shared.Tests (xunit, net10.0) builds a temp-directory catalog through AetheriaStores.Open(catalogWritable: true) per test: - OpenThenFlushLeavesEveryFileByteIdentical: the catalog, plus run and player stores seeded with their globals, a SavedZone and an InputLayout. - WeaponWrittenThroughGearHandleReloadsAsWeapon - CatalogRefusesWrites: bytes unchanged too. - SavedZoneNeverLandsInCatalog: no home without a run store; the snapshot schemas show where it landed. - FactionIsASingletonInstance: through a ref, a ref-keyed map key, and the name index. - MissingCatalogGlobalIsLoud: uses a test-only [CultGlobal] routed to the catalog. The game has no catalog globals yet. The first test found a real defect. PlayerInputSettings.InputActionMap was keyed by (string, int), and CultLib's untrusted-data MessagePack security has no hash-resistant comparer for a tuple, so a player store could never be read back. It is now action name to binding index to path; its two Unity readers change in the Unity commit. Each test was checked to fail with the rule it pins removed; see the report. Builds: Aetheria.Shared, AetherDb, Aetheria.Shared.Tests (6/6 pass). Unity does not build yet. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
15 lines
662 B
XML
15 lines
662 B
XML
<Project Sdk="Microsoft.NET.Sdk">
|
|
<!-- Pins AetheriaStores' routing and the document model against CultLib's CultCache, headless. -->
|
|
<PropertyGroup>
|
|
<TargetFramework>net10.0</TargetFramework>
|
|
<IsPackable>false</IsPackable>
|
|
<Nullable>disable</Nullable>
|
|
<ImplicitUsings>disable</ImplicitUsings>
|
|
</PropertyGroup>
|
|
<ItemGroup>
|
|
<ProjectReference Include="..\..\Aetheria.Shared\Aetheria.Shared.csproj" />
|
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.4.0" />
|
|
<PackageReference Include="xunit" Version="2.9.3" />
|
|
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5" />
|
|
</ItemGroup>
|
|
</Project>
|