Now that CI actually runs the test projects (previous commits), it exposed
that the UOContent.Tests bootstrap force-loaded UO client tile data
(tiledata.mul) unconditionally in the collection-fixture constructor. On
CI the copyrighted client files are absent, so TileData.Load() threw and
xUnit failed every test in the collection with the same
FileNotFoundException - 337 failures, most of them collateral (packet,
scheduler, spawner tests that don't need tile data at all).
Mirror the graceful pattern Server.Tests already uses:
- TestServerInitializer now probes for tiledata.mul (Core.FindDataFile +
File.Exists) and only force-loads tile data / runs the tile-dependent
configure steps (MultiData.Configure, VerifyTrammelTileDataLoaded) when
present. It exposes TileDataLoaded so the fixture constructor no longer
throws when the files are missing.
- Add a shared TileDataRequirement.SkipIfMissing() guard and apply it to
exactly the 31 pathfinding/multi/AI tests that genuinely require real
tile/multi data, converting them to [SkippableFact]/[SkippableTheory].
Result: with client data absent (CI) the suite is 0 failed / 32 skipped /
469 passed; with data present (dev) it is 0 failed / 0 skipped / 501
passed. The 306 collateral failures are gone because the fixture no longer
throws.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>