test: make prerequisite lanes fail honestly
This commit is contained in:
parent
dfc841b779
commit
6faeb4a103
113 changed files with 424 additions and 336 deletions
|
|
@ -50,7 +50,7 @@ public sealed class EnvCellSoundEmitterInventoryTests
|
|||
{
|
||||
string? datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null)
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(new DatCollectionOptions
|
||||
{
|
||||
|
|
@ -133,7 +133,7 @@ public sealed class EnvCellSoundEmitterInventoryTests
|
|||
{
|
||||
string? datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null)
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(new DatCollectionOptions
|
||||
{
|
||||
|
|
@ -191,7 +191,7 @@ public sealed class EnvCellSoundEmitterInventoryTests
|
|||
{
|
||||
string? datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null)
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(new DatCollectionOptions
|
||||
{
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ public sealed class UiSoundTableResolutionTests
|
|||
{
|
||||
string? datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null)
|
||||
return; // dats absent (CI) — nothing to resolve
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // dats absent (CI) — nothing to resolve
|
||||
|
||||
using var dats = new DatCollection(new DatCollectionOptions
|
||||
{
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ public class CottageDoorwayCharacterizationTests
|
|||
public void Characterize_CottageNeighborhood_PrintStructure()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
|
|
@ -71,7 +71,7 @@ public class CottageDoorwayCharacterizationTests
|
|||
public void Characterize_Doorway_FindInteriorPoints()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
foreach (var id in new[] { Vestibule0170, Room0171 })
|
||||
|
|
@ -114,7 +114,7 @@ public class CottageDoorwayCharacterizationTests
|
|||
public void Doorway_Topology_IsPinned()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = new PhysicsDataCache();
|
||||
|
||||
|
|
@ -140,7 +140,7 @@ public class CottageDoorwayCharacterizationTests
|
|||
public void Doorway_InteriorPoints_ArePinned()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = new PhysicsDataCache();
|
||||
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ public class DatConcurrencyStressTests
|
|||
public void ConcurrentRawReads_MatchSingleThreadedGolden()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return; // dats absent (CI) — skip, matching suite convention
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // dats absent (CI) — skip, matching suite convention
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var refs = BuildIdSet(dats);
|
||||
|
|
@ -83,7 +83,7 @@ public class DatConcurrencyStressTests
|
|||
public void ConcurrentTypedReads_MatchSingleThreadedGolden()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return; // dats absent (CI) — skip
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // dats absent (CI) — skip
|
||||
|
||||
// FileCachingStrategy.Never: every TryGet<T> re-reads + re-unpacks from disk,
|
||||
// matching the worst-case production path and keeping the hammer honest
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ public sealed class DungeonLandblockDatProbeTests
|
|||
public void Probe_Dungeon0125_vs_Holtburg_A9B4()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
foreach (uint lb in new uint[] { 0x0125u, 0xA9B4u })
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ public class FindCellListConformanceTests
|
|||
public void FindCellList_DeepInsideRoom0171_Returns0171()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = LoadThresholdBuilding(dats);
|
||||
|
||||
|
|
@ -52,7 +52,7 @@ public class FindCellListConformanceTests
|
|||
public void FindCellList_DeepInsideVestibule0170_Returns0170()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = LoadThresholdBuilding(dats);
|
||||
|
||||
|
|
@ -76,7 +76,7 @@ public class FindCellListConformanceTests
|
|||
public void FindCellList_InVestibule_SeededFromRoom_Returns0170()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = LoadThresholdBuilding(dats);
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ public sealed class HoltburgTorchFalloffProbeTests
|
|||
public void Dump_Holtburg_StaticLight_Falloffs()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
// The meeting hall sits in the Holtburg town landblocks. Sweep a small
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ public sealed class Issue107SpawnDiagnosticTests
|
|||
public void SpawnPosition_IsInside0171_NotInside0162_PickRecoversFromGoodSeed()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = new PhysicsDataCache();
|
||||
|
||||
|
|
@ -91,7 +91,7 @@ public sealed class Issue107SpawnDiagnosticTests
|
|||
public void SeenOutside_IsPopulated_ForGroundFloorInteriors()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = new PhysicsDataCache();
|
||||
|
||||
|
|
@ -123,7 +123,7 @@ public sealed class Issue107SpawnDiagnosticTests
|
|||
// mid-population "any cell present" disambiguator, since removed) —
|
||||
// this test pins the hydrated-path correctness.
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = new PhysicsDataCache();
|
||||
for (uint low = 0x0100; low <= 0x01FF; low++)
|
||||
|
|
@ -145,7 +145,7 @@ public sealed class Issue107SpawnDiagnosticTests
|
|||
public void PoisonedClaim_IsADifferentBuilding_55mAway()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
var claim = dats.Get<DatReaderWriter.DBObjs.EnvCell>(PoisonedClaim);
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ public sealed class Issue112MembershipTests
|
|||
public void A9B3CottageGap_AtDoorway_StraddlesExitPlane_DemotesRetailFaithfully()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = LoadLandblockInteriors(dats, 0xA9B30000u);
|
||||
|
||||
|
|
@ -76,7 +76,7 @@ public sealed class Issue112MembershipTests
|
|||
public void A9B3Cottage_GapBeyondStraddleDistance_KeepsCurrCell_RetailGate()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = LoadLandblockInteriors(dats, 0xA9B30000u);
|
||||
|
||||
|
|
@ -98,7 +98,7 @@ public sealed class Issue112MembershipTests
|
|||
public void FindTransitCellsSphere_ExitPortalStraddleGate_MatchesRetail()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = LoadLandblockInteriors(dats, 0xA9B30000u);
|
||||
|
||||
|
|
@ -177,7 +177,7 @@ public sealed class Issue112MembershipTests
|
|||
// interior (the transparent cottage), promoting only on touching a
|
||||
// portal-adjacent cell's own volume (the captured late 0x102 flip).
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = LoadLandblockInteriors(dats, 0xA9B30000u);
|
||||
RegisterBuildings(dats, cache, 0xA9B30000u);
|
||||
|
|
@ -201,7 +201,7 @@ public sealed class Issue112MembershipTests
|
|||
// absorbing outdoor-deep-inside state the user sat in (transparent
|
||||
// cottage until randomly touching a portal-adjacent room).
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = LoadLandblockInteriors(dats, 0xA9B30000u);
|
||||
RegisterBuildings(dats, cache, 0xA9B30000u);
|
||||
|
|
@ -233,7 +233,7 @@ public sealed class Issue112MembershipTests
|
|||
// evolving pick, and which landcells had buildings. Names the first
|
||||
// step where retail would promote vs where ours does.
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = LoadLandblockInteriors(dats, 0xA9B30000u);
|
||||
RegisterBuildings(dats, cache, 0xA9B30000u);
|
||||
|
|
@ -278,7 +278,7 @@ public sealed class Issue112MembershipTests
|
|||
// is the only container). The transparency at THIS exact spot is a
|
||||
// RENDER question (outdoor root at a doorway), not membership.
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = LoadLandblockInteriors(dats, 0xA9B30000u);
|
||||
RegisterBuildings(dats, cache, 0xA9B30000u);
|
||||
|
|
@ -293,7 +293,7 @@ public sealed class Issue112MembershipTests
|
|||
public void ThresholdCottage_AdjacentClaim_LaterallyRecovers_ViaStabGraph()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = LoadLandblockInteriors(dats, 0xA9B40000u);
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ public sealed class Issue113DoorVanishDiagnosticTests
|
|||
public void DumpDoorSetup_DrawingBspCoverage()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
var setup = dats.Get<DatReaderWriter.DBObjs.Setup>(DoorSetupId);
|
||||
|
|
@ -75,7 +75,7 @@ public sealed class Issue113DoorVanishDiagnosticTests
|
|||
public void DumpHoltburgBuildings_OrphanGeometry()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
var modelIds = new SortedSet<uint>();
|
||||
|
|
@ -197,7 +197,7 @@ public sealed class Issue113DoorVanishDiagnosticTests
|
|||
public void Diagnostic_ReplicateProductionEmission_OnPortalFills()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
foreach (uint mid in new uint[] { 0x010014C3u, 0x01000827u })
|
||||
|
|
@ -244,7 +244,7 @@ public sealed class Issue113DoorVanishDiagnosticTests
|
|||
public void DumpPortalFillSurfaceTypes()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
foreach (uint mid in new uint[] { 0x010014C3u, 0x01000827u, 0x0100082Eu, 0x01000C17u })
|
||||
|
|
@ -290,7 +290,7 @@ public sealed class Issue113DoorVanishDiagnosticTests
|
|||
public void DumpControls_HallAndCottage()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
DumpGfxObjBspCoverage(dats, 0x010014C3u); // meeting hall shell
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ public sealed class Issue113PhantomStairsDumpTests
|
|||
public void DumpA9B3_Buildings_And_InteriorCells()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
var lbi = dats.Get<DatLandBlockInfo>(Landblock | 0xFFFEu);
|
||||
|
|
@ -199,7 +199,7 @@ public sealed class Issue113PhantomStairsDumpTests
|
|||
public void DumpA9B3_Statics_OutdoorStabs_And_ShellModel()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
var lbi = dats.Get<DatLandBlockInfo>(Landblock | 0xFFFEu);
|
||||
|
|
@ -292,7 +292,7 @@ public sealed class Issue113PhantomStairsDumpTests
|
|||
public void Dump_Cell104_ExteriorPortalPlane_Vs_GapPoint()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
foreach (uint low in new uint[] { 0x0104, 0x0102, 0x0105, 0x0100 })
|
||||
|
|
@ -345,7 +345,7 @@ public sealed class Issue113PhantomStairsDumpTests
|
|||
public void DumpAAB3_Buildings_And_StairScan()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
const uint lb = 0xAAB30000u;
|
||||
|
|
@ -444,7 +444,7 @@ public sealed class Issue113PhantomStairsDumpTests
|
|||
public void DumpAAB3_Watchtower_DoorAlignment_And_RampFaces()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
const uint lb = 0xAAB30000u;
|
||||
|
|
@ -565,7 +565,7 @@ public sealed class Issue113PhantomStairsDumpTests
|
|||
public void DumpAAB3_Watchtower_TopDownMap()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
const uint lb = 0xAAB30000u;
|
||||
|
|
@ -686,7 +686,7 @@ public sealed class Issue113PhantomStairsDumpTests
|
|||
public void DumpHallModel_PolyFlagHistogram()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
foreach (uint mid in new uint[] { 0x010014C3u, 0x01000827u })
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ public sealed class Issue119TowerDumpTests
|
|||
public void DumpTowerCellNeighbourhood()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
var lbi = dats.Get<DatLandBlockInfo>(Landblock | 0xFFFEu);
|
||||
|
|
@ -149,7 +149,7 @@ public sealed class Issue119TowerDumpTests
|
|||
public void DumpTowerStairSetups(uint setupId)
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
Assert.True(dats.Portal.TryGet<DatReaderWriter.DBObjs.Setup>(setupId, out var setup) && setup is not null,
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ public sealed class Issue119UpNullGfxObjDumpTests
|
|||
public void DumpUpNullGfxObj(uint id)
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
Assert.True(dats.Portal.TryGet<GfxObj>(id, out var gfx) && gfx is not null,
|
||||
|
|
@ -101,7 +101,7 @@ public sealed class Issue119UpNullGfxObjDumpTests
|
|||
public void ShellModel_NoTexturedPolyIsDropped(uint id)
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
Assert.True(dats.Portal.TryGet<GfxObj>(id, out var gfx) && gfx is not null,
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ public sealed class StipplingSurfaceEquivalenceTests
|
|||
public void NoPosStippling_Equals_UntexturedSurface_OnBuildingsAndCells()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); return; }
|
||||
if (datDir is null) { _out.WriteLine("dats unavailable — skipped"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
int polysChecked = 0;
|
||||
|
|
|
|||
|
|
@ -24,9 +24,9 @@ public class ThresholdDivergenceDiagnosticTests
|
|||
public void Diagnose_ThresholdTransitions()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
var fixturePath = System.IO.Path.Combine(ConformanceDats.FixturesDir, "find-cell-list-threshold.log");
|
||||
if (!System.IO.File.Exists(fixturePath)) { _out.WriteLine("SKIP: capture pending"); return; }
|
||||
if (!System.IO.File.Exists(fixturePath)) { _out.WriteLine("SKIP: capture pending"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var cache = new PhysicsDataCache();
|
||||
|
|
|
|||
|
|
@ -108,9 +108,9 @@ public class ThresholdPortalCrossingReplayTests
|
|||
public void ProductionPath_IndoorCrossings_MatchRetail()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
var fixturePath = Path.Combine(ConformanceDats.FixturesDir, "find-cell-list-threshold.log");
|
||||
if (!File.Exists(fixturePath)) { _out.WriteLine("SKIP: capture pending"); return; }
|
||||
if (!File.Exists(fixturePath)) { _out.WriteLine("SKIP: capture pending"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var (engine, _) = BuildBuildingEngine(dats);
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ public sealed class RetailActionIdentityRoundTripTests
|
|||
public void MappedActions_DatUnionDefaultBindings_MatchRetailDefaults()
|
||||
{
|
||||
string? datDir = Conformance.ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDir);
|
||||
var source = new DatCollectionAdapter(dats);
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ public sealed class RetailActionMapReader_LiveDatTests
|
|||
public void Read_AgainstInstalledDats_MatchesPinnedShape()
|
||||
{
|
||||
string? datDir = Conformance.ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return; // CI / no local install — skip cleanly.
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // CI / no local install — skip cleanly.
|
||||
|
||||
using var dats = new DatCollection(datDir);
|
||||
var source = new DatCollectionAdapter(dats);
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ public sealed class Ap157SortingSphereFloodMeasurementTests
|
|||
if (datDir is null)
|
||||
{
|
||||
Console.WriteLine("SKIP: installed retail DAT directory is unavailable.");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
|
|||
|
|
@ -194,7 +194,7 @@ public sealed class BoxIntersectsCellBspDifferentialTests
|
|||
{
|
||||
string? datDirectory = ConformanceDats.ResolveDatDir();
|
||||
if (datDirectory is null)
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDirectory, DatAccessType.Read);
|
||||
var random = new Random(0x4230_5820);
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ public class CameraCornerSealReplayTests
|
|||
public void Diagnostic_DispatchTrace_LeakPath_vs_Controls()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var (engine, cache, envCells) = BuildBuildingEngine(dats);
|
||||
|
|
@ -258,7 +258,7 @@ public class CameraCornerSealReplayTests
|
|||
public void ViewerSweep_ThroughOpenings_PassesWithoutCollision()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var (engine, _, _) = BuildBuildingEngine(dats);
|
||||
|
|
@ -297,7 +297,7 @@ public class CameraCornerSealReplayTests
|
|||
public void HoltburgCottageExit_ViewerSweep_AdvancesFromAlcoveToOutdoor()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var graphCache = new PhysicsDataCache();
|
||||
|
|
|
|||
|
|
@ -268,7 +268,7 @@ public sealed class CellTransitFindTransitCellsBoxTests
|
|||
{
|
||||
string? datDirectory = ConformanceDats.ResolveDatDir();
|
||||
if (datDirectory is null)
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDirectory, DatAccessType.Read);
|
||||
var cache = new PhysicsDataCache();
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ public class CellTransitTests
|
|||
public void DeepInteriorSphere_NoStraddle_AddsNoOutdoorCells()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
// Hydrate the cells in the portal chain.
|
||||
// 0xA9B4013F — deep interior cell (the old over-penetration tick)
|
||||
|
|
@ -72,7 +72,7 @@ public class CellTransitTests
|
|||
public void AlcoveSphere_StraddlesExitPortal_ReachesDoorOutdoorCell()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
// The alcove cell 0xA9B40150 IS the cell with the exit portal, and
|
||||
// at this captured position the foot sphere straddles its plane
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ public class DoorBugTrajectoryReplayTests
|
|||
public void LiveCompare_DoorOffCenterWalkthrough_Tick13558()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
// BR-7 / A6.P4 (2026-06-11) — FLIPPED from match-the-capture to
|
||||
// assert-the-fix. The capture IS the #99 bug (live walked through:
|
||||
|
|
@ -122,7 +122,7 @@ public class DoorBugTrajectoryReplayTests
|
|||
public void LiveCompare_DoorBlocksFromOutside_Tick22760()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
// BR-7 / A6.P4 (2026-06-11) — narrowed from full-capture match to
|
||||
// the blocking invariant. The capture (the WORKING outdoor side)
|
||||
|
|
@ -165,7 +165,7 @@ public class DoorBugTrajectoryReplayTests
|
|||
public void Diagnostic_Tick22760_DumpEngineInternals()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
PhysicsDiagnostics.ProbeResolveEnabled = true;
|
||||
PhysicsDiagnostics.ProbeBuildingEnabled = true;
|
||||
|
|
@ -218,7 +218,7 @@ public class DoorBugTrajectoryReplayTests
|
|||
public void Diagnostic_Tick13558_DumpEngineInternals()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
PhysicsDiagnostics.ProbeResolveEnabled = true;
|
||||
PhysicsDiagnostics.ProbeBuildingEnabled = true;
|
||||
|
|
@ -280,7 +280,7 @@ public class DoorBugTrajectoryReplayTests
|
|||
public void FindTransitCellsSphere_IndoorExitPortal_AddsOutsideForCapturedSpherePos()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
// ── 1. Hydrate cell 0xA9B40150 from the real dat ────────────
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -481,7 +481,7 @@ public class DoorBugTrajectoryReplayTests
|
|||
public void InsideOut_Tick3254_WithCottageWalls_ShouldBlock()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
var (engine, cache) = BuildFaithfulDoorEngine(datDir);
|
||||
|
||||
|
|
@ -553,7 +553,7 @@ public class DoorBugTrajectoryReplayTests
|
|||
public void CornerSlide_AlcoveEastToCottageNorth_ShouldBlock()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
var (engine, cache) = BuildFaithfulDoorEngine(datDir);
|
||||
|
||||
|
|
@ -781,7 +781,7 @@ public class DoorBugTrajectoryReplayTests
|
|||
public void Geometric_DoorSlabAtSphereHeight_OverlapsInZ()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
DatReaderWriter.Types.Frame partFrame;
|
||||
float slabLocalZMin = float.MaxValue;
|
||||
|
|
@ -833,7 +833,7 @@ public class DoorBugTrajectoryReplayTests
|
|||
public void Directional_OutsideIn_SouthApproach_BlocksAtSlabSouthFace()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
var (engine, _) = BuildFaithfulDoorEngine(datDir);
|
||||
|
||||
|
|
@ -861,7 +861,7 @@ public class DoorBugTrajectoryReplayTests
|
|||
public void Directional_InsideOut_NorthApproach_BlocksAtSlabNorthFace()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
var (engine, _) = BuildFaithfulDoorEngine(datDir);
|
||||
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ public class DoorCollisionApparatusTests
|
|||
[Fact]
|
||||
public void Apparatus_DeadCenter_FrontApproach_BlocksOnBSP()
|
||||
{
|
||||
if (!TryBuildScenario(out var ctx)) return;
|
||||
if (!TryBuildScenario(out var ctx)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
// Door at world (12, 12, 0). The frame's BSP slab extends
|
||||
// entity-local Y∈[-0.009, 0.252] (poly Y range plus frame[0] offset).
|
||||
|
|
@ -109,7 +109,7 @@ public class DoorCollisionApparatusTests
|
|||
[Fact]
|
||||
public void Apparatus_SingleLargeTickJump_DeadCenter_StillBlocksOnBSP()
|
||||
{
|
||||
if (!TryBuildScenario(out var ctx)) return;
|
||||
if (!TryBuildScenario(out var ctx)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
var start = new Vector3(12f, 11f, 0.5f);
|
||||
// The full 20-tick × 0.10 m approach in ONE resolve call.
|
||||
|
|
@ -145,7 +145,7 @@ public class DoorCollisionApparatusTests
|
|||
[Fact]
|
||||
public void Apparatus_50cmOffCenter_FrontApproach_BlocksOnBSP()
|
||||
{
|
||||
if (!TryBuildScenario(out var ctx)) return;
|
||||
if (!TryBuildScenario(out var ctx)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
// Same setup, but start 0.5 m off-center in X. Slab X range
|
||||
// is approximately [11.05, 12.97] (frame[0].X offset = -0.006).
|
||||
|
|
@ -175,7 +175,7 @@ public class DoorCollisionApparatusTests
|
|||
[Fact]
|
||||
public void Apparatus_DeadCenter_BackApproach_BlocksOnBSP()
|
||||
{
|
||||
if (!TryBuildScenario(out var ctx)) return;
|
||||
if (!TryBuildScenario(out var ctx)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
// Start past the door at Y=13, walk back toward -Y.
|
||||
var start = new Vector3(12f, 13f, 0.5f);
|
||||
|
|
@ -205,7 +205,7 @@ public class DoorCollisionApparatusTests
|
|||
[Fact]
|
||||
public void Apparatus_DiagnosticDump_FrontApproach()
|
||||
{
|
||||
if (!TryBuildScenario(out var ctx)) return;
|
||||
if (!TryBuildScenario(out var ctx)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
PhysicsDiagnostics.ProbeResolveEnabled = true;
|
||||
PhysicsDiagnostics.ProbeBuildingEnabled = true;
|
||||
|
|
@ -263,7 +263,7 @@ public class DoorCollisionApparatusTests
|
|||
[Fact]
|
||||
public void Apparatus_Grounded_50cmOffCenter_FrontApproach_Blocks()
|
||||
{
|
||||
if (!TryBuildScenario(out var ctx)) return;
|
||||
if (!TryBuildScenario(out var ctx)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
PhysicsDiagnostics.ProbeResolveEnabled = true;
|
||||
PhysicsDiagnostics.ProbeBuildingEnabled = true;
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ public class DoorSetupGfxObjInspectionTests
|
|||
if (!Directory.Exists(datDir))
|
||||
{
|
||||
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -247,7 +247,7 @@ public class DoorSetupGfxObjInspectionTests
|
|||
if (!Directory.Exists(datDir))
|
||||
{
|
||||
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -282,7 +282,7 @@ public class DoorSetupGfxObjInspectionTests
|
|||
if (!Directory.Exists(datDir))
|
||||
{
|
||||
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
|
|||
|
|
@ -417,7 +417,7 @@ public sealed class FlatBspQueryDifferentialTests
|
|||
{
|
||||
string? datDirectory = ConformanceDats.ResolveDatDir();
|
||||
if (datDirectory is null)
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDirectory, DatAccessType.Read);
|
||||
var random = new Random(0x4934_4253);
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ public sealed class FlatCollisionInstalledDatTests
|
|||
if (datDir is null)
|
||||
{
|
||||
_output.WriteLine("SKIP: installed retail DAT directory is unavailable.");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -118,7 +118,7 @@ public sealed class FlatCollisionInstalledDatTests
|
|||
if (datDir is null)
|
||||
{
|
||||
_output.WriteLine("SKIP: installed retail DAT directory is unavailable.");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ public sealed class HumanoidMotionTableRootMotionTests
|
|||
{
|
||||
string? datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null)
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
MotionTable table = Assert.IsType<MotionTable>(dats.Get<MotionTable>(HumanoidMotionTable));
|
||||
|
|
@ -49,7 +49,7 @@ public sealed class HumanoidMotionTableRootMotionTests
|
|||
{
|
||||
string? datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null)
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
using var boundedDats = new DatCollectionAdapter(dats);
|
||||
|
|
@ -85,7 +85,7 @@ public sealed class HumanoidMotionTableRootMotionTests
|
|||
{
|
||||
string? datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null)
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
MotionTable table = Assert.IsType<MotionTable>(dats.Get<MotionTable>(HumanoidMotionTable));
|
||||
|
|
|
|||
|
|
@ -284,7 +284,7 @@ public class Issue108CellarAscentViewerReplayTests
|
|||
public void Diagnostic_CellarAscent_PerStepTable()
|
||||
{
|
||||
var steps = RunAscent(BoomDistance, pathLagMeters: 0f);
|
||||
if (steps is null) return;
|
||||
if (steps is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
uint lastPlayer = 0; uint lastViewer = 0xFFFFFFFFu; var lastBranch = (ViewerBranch)(-1);
|
||||
int suspicious = 0;
|
||||
|
|
@ -309,7 +309,7 @@ public class Issue108CellarAscentViewerReplayTests
|
|||
foreach (float lag in new[] { 0f, 0.30f })
|
||||
{
|
||||
var steps = RunAscent(dist, lag);
|
||||
if (steps is null) return;
|
||||
if (steps is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
int grass = steps.FindAll(s => s.EyeBelowGrade && s.ViewerOutdoorOrNull).Count;
|
||||
int okFalse = steps.FindAll(s => !s.Viewer.Sweep.Ok).Count;
|
||||
int fb = steps.FindAll(s => s.Viewer.Branch != ViewerBranch.Sweep).Count;
|
||||
|
|
@ -330,7 +330,7 @@ public class Issue108CellarAscentViewerReplayTests
|
|||
public void CellarAscent_ViewerStaysInterior_WhileEyeBelowGrade()
|
||||
{
|
||||
var steps = RunAscent(BoomDistance, pathLagMeters: 0f);
|
||||
if (steps is null) return;
|
||||
if (steps is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
var failures = steps.FindAll(s => s.EyeBelowGrade && s.ViewerOutdoorOrNull);
|
||||
if (failures.Count > 0)
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ public class Issue137CorridorSeamInspectionTests
|
|||
if (!Directory.Exists(datDir))
|
||||
{
|
||||
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -116,7 +116,7 @@ public class Issue137CorridorSeamInspectionTests
|
|||
if (!Directory.Exists(datDir))
|
||||
{
|
||||
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -196,7 +196,7 @@ public class Issue137CorridorSeamInspectionTests
|
|||
if (!Directory.Exists(datDir))
|
||||
{
|
||||
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -228,7 +228,7 @@ public class Issue137CorridorSeamInspectionTests
|
|||
if (!Directory.Exists(datDir))
|
||||
{
|
||||
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -290,7 +290,7 @@ public class Issue137CorridorSeamInspectionTests
|
|||
if (!Directory.Exists(datDir))
|
||||
{
|
||||
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -394,7 +394,7 @@ public class Issue137CorridorSeamInspectionTests
|
|||
if (!Directory.Exists(datDir))
|
||||
{
|
||||
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -475,7 +475,7 @@ public class Issue137CorridorSeamInspectionTests
|
|||
if (!Directory.Exists(datDir))
|
||||
{
|
||||
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@ public class Issue137CorridorSeamReplayTests
|
|||
if (datDir is null)
|
||||
{
|
||||
_out.WriteLine("SKIP: dat directory not found");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -265,7 +265,7 @@ public class Issue137CorridorSeamReplayTests
|
|||
if (datDir is null)
|
||||
{
|
||||
_out.WriteLine("SKIP: dat directory not found");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -361,7 +361,7 @@ public class Issue137CorridorSeamReplayTests
|
|||
if (datDir is null)
|
||||
{
|
||||
_out.WriteLine("SKIP: dat directory not found");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -422,7 +422,7 @@ public class Issue137CorridorSeamReplayTests
|
|||
if (datDir is null)
|
||||
{
|
||||
_out.WriteLine("SKIP: dat directory not found");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -452,7 +452,7 @@ public class Issue137CorridorSeamReplayTests
|
|||
if (datDir is null)
|
||||
{
|
||||
_out.WriteLine("SKIP: dat directory not found");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ public sealed class Issue147ArwicBuildingsDumpTests
|
|||
var datDir = Env.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(Env.GetFolderPath(Env.SpecialFolder.UserProfile),
|
||||
"Documents", "Asheron's Call");
|
||||
if (!Directory.Exists(datDir)) { _out.WriteLine($"SKIP: no dats at {datDir}"); return; }
|
||||
if (!Directory.Exists(datDir)) { _out.WriteLine($"SKIP: no dats at {datDir}"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var info = dats.Get<LandBlockInfo>(0xC6A9FFFEu); // Arwic landblock info
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ public class Issue175HubDoorPoseInspectionTests
|
|||
if (!Directory.Exists(datDir))
|
||||
{
|
||||
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -171,7 +171,7 @@ public class Issue175HubDoorPoseInspectionTests
|
|||
if (!Directory.Exists(datDir))
|
||||
{
|
||||
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ public class Issue176177SeamTransitLagTests
|
|||
public void RunAcrossSeam_CellFlipPosition(int direction)
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var engine = BuildEngine(dats);
|
||||
var body = GroundedBody();
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ public class Issue180CorridorSweepHysteresisReplayTests
|
|||
public void ClippedStop_IsTheContactPoint_NotAStepBoundary()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var (engine, _) = BuildCorridorEngine(dats);
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ public class Issue186ConnectorCellGeometryInspectionTests
|
|||
public void Dump_ConnectorCells_ShellAndCollision()
|
||||
{
|
||||
var datDir = DatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
foreach (uint cellId in new[] { 0xF6820116u, 0xF6820117u, 0xF6820118u })
|
||||
|
|
@ -95,7 +95,7 @@ public class Issue186ConnectorCellGeometryInspectionTests
|
|||
public void PortalSide_CentroidVsDatBit_AtGreyEye()
|
||||
{
|
||||
var datDir = DatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
// Live grey-pose eye (fresh HEAD capture + retail cdb trace both ~here).
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ public class Issue188FadingDoorMotionTableInspectionTests
|
|||
public void Dump_PedestalWeakSpot_MotionTable_HookContents()
|
||||
{
|
||||
var datDir = DatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
const uint MotionTableId = 0x090000F9u; // live-captured from the Pedestal Weak Spot entity
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ public sealed class Issue337NeftetRockGeometryInspectionTests
|
|||
if (datDir is null)
|
||||
{
|
||||
_out.WriteLine("SKIP: installed retail DAT directory is unavailable.");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -402,7 +402,7 @@ public sealed class Issue337NeftetRockGeometryInspectionTests
|
|||
if (datDir is null)
|
||||
{
|
||||
_out.WriteLine("SKIP: installed retail DAT directory is unavailable.");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
@ -554,7 +554,7 @@ public sealed class Issue337NeftetRockGeometryInspectionTests
|
|||
public void TheBspQueryReturnsAHitAtThePositionTheClientFellThrough()
|
||||
{
|
||||
string? datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return; // CI without dats — the sibling dumps skip too.
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // CI without dats — the sibling dumps skip too.
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var info = dats.Get<LandBlockInfo>((Landblock & 0xFFFF0000u) | 0xFFFEu);
|
||||
|
|
@ -627,7 +627,7 @@ public sealed class Issue337NeftetRockGeometryInspectionTests
|
|||
public void TheOldBroadphaseMeasuredToTheOriginAndSoRejectedGeometryItStoodOn()
|
||||
{
|
||||
string? datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var info = dats.Get<LandBlockInfo>((Landblock & 0xFFFF0000u) | 0xFFFEu);
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ public class MotionCommandCatalogDatTests
|
|||
public void AceShiftedRecallCommands_ExistInLocalMotionTables()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
|
|
@ -87,7 +87,7 @@ public class MotionCommandCatalogDatTests
|
|||
public void TwoThousandThirteenLifestoneAndHouseRecall_AlsoExist()
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
|
|
@ -106,7 +106,7 @@ public class MotionCommandCatalogDatTests
|
|||
public void AceOnlyCommands_ExistOnlyUnderShiftedIds(uint aceFullCommand)
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
|
|
@ -121,7 +121,7 @@ public class MotionCommandCatalogDatTests
|
|||
public void TwoThousandThirteenOnlyValues_HaveZeroLinkHits(uint retail2013FullCommand)
|
||||
{
|
||||
var datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null) return;
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ public sealed class RestrictionObjPrevalenceInspectionTests
|
|||
{
|
||||
string? datDir = ConformanceDats.ResolveDatDir();
|
||||
if (datDir is null)
|
||||
return; // installed dats absent (CI) — skip cleanly
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // installed dats absent (CI) — skip cleanly
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ public class Issue176177DungeonSeamInspectionTests
|
|||
public void PortalPolys_SurfaceAndDrawVerdict_Dump(uint cellId)
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
var loaded = LoadCell(dats, cellId);
|
||||
|
|
@ -182,7 +182,7 @@ public class Issue176177DungeonSeamInspectionTests
|
|||
public void ReciprocalPortalPolys_CoincidenceAndDrawVerdict(uint cellA, uint cellB)
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
var la = LoadCell(dats, cellA);
|
||||
|
|
@ -249,7 +249,7 @@ public class Issue176177DungeonSeamInspectionTests
|
|||
public void Diagnostic_CorridorNeighborhood_CoplanarOverlappingDrawnPolyPairs()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
// Seed cells around the screenshot location (the 016E/017A seam) +
|
||||
|
|
@ -342,7 +342,7 @@ public class Issue176177DungeonSeamInspectionTests
|
|||
public void FloorSurface_DecodedAlphaHistogram(uint surfaceId)
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
var surface = dats.Get<Surface>(surfaceId);
|
||||
|
|
@ -476,7 +476,7 @@ public class Issue176177DungeonSeamInspectionTests
|
|||
public void Diagnostic_UnderHall_DrawnPolys_SurfaceColors(uint cellId)
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
var loaded = LoadCell(dats, cellId);
|
||||
|
|
@ -519,7 +519,7 @@ public class Issue176177DungeonSeamInspectionTests
|
|||
uint cellAId, uint cellBId, float planeX, float y, float z)
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
var la = LoadCell(dats, cellAId);
|
||||
|
|
@ -568,7 +568,7 @@ public class Issue176177DungeonSeamInspectionTests
|
|||
public void StairTransit_GeometryOwnerAndPortalOrientation(uint cellId)
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
var loaded = LoadCell(dats, cellId);
|
||||
|
|
@ -642,7 +642,7 @@ public class Issue176177DungeonSeamInspectionTests
|
|||
public void CellVertexNormals_SmoothOrFaceted_Dump(uint cellId)
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
var loaded = LoadCell(dats, cellId);
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ public class Issue93TownNetworkFountainRoomLightInspectionTests
|
|||
public void StaticObjects_SetupLightsCount_Dump(uint cellId)
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
var envCell = dats.Get<EnvCell>(cellId);
|
||||
|
|
@ -101,7 +101,7 @@ public class Issue93TownNetworkFountainRoomLightInspectionTests
|
|||
public void CeilingFixtureSetup_MeshFlattenSurvivorCount_Dump()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
using var boundedDats = new DatCollectionAdapter(dats);
|
||||
|
||||
|
|
@ -166,7 +166,7 @@ public class Issue93TownNetworkFountainRoomLightInspectionTests
|
|||
public void FountainAndCandleSetup_DefaultScriptAndMeshSurvivorCount_Dump(uint setupId)
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
|
||||
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
using var boundedDats = new DatCollectionAdapter(dats);
|
||||
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ public class TerrainModernConformanceTests
|
|||
if (!Directory.Exists(datDir))
|
||||
{
|
||||
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
}
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue