test: classify prerequisite lanes and own Avalonia sessions

This commit is contained in:
Erik 2026-08-18 11:30:47 +02:00
parent c1a905004a
commit 3684e7b5e7
113 changed files with 273 additions and 22 deletions

View file

@ -131,6 +131,7 @@ public sealed class AppCredentialResolverTests
}
[Fact]
[Trait("Lane", "Linux")]
public void LinuxRejectsGroupOrOtherCredentialPermissions()
{
if (!OperatingSystem.IsLinux())

View file

@ -20,6 +20,7 @@ namespace AcDream.App.Tests.Rendering;
/// is resolving Setup/GfxObj/Surface/Animation dat data that
/// <see cref="DollEntityBuilder"/> receives pre-resolved).
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class ChargenPreviewEntityBuilderTests
{
private readonly ITestOutputHelper _out;

View file

@ -198,6 +198,7 @@ public class CornerFloodReplayTests
/// exact gate that flips.
/// </summary>
[Fact]
[Trait("Lane", "InstalledDat")]
public void Diagnostic_TraceGoodVsGlitchStep()
{
var datDir = ResolveDatDir();
@ -266,6 +267,7 @@ public class CornerFloodReplayTests
/// transition background strobe). Guards the ApplyReciprocalClip pipeline.
/// </summary>
[Fact]
[Trait("Lane", "InstalledDat")]
public void CornerSweep_FloodIsCompleteAndMonotone()
{
var datDir = ResolveDatDir();
@ -363,6 +365,7 @@ public class CornerFloodReplayTests
/// the tripwire count stays 0.
/// </summary>
[Fact]
[Trait("Lane", "InstalledDat")]
public void PortalPlaneCrossings_InPlacePropagationConverges()
{
var datDir = ResolveDatDir();
@ -433,6 +436,7 @@ public class CornerFloodReplayTests
/// stays 0 across every Build.
/// </summary>
[Fact]
[Trait("Lane", "InstalledDat")]
public void InCellDirectionSweep_InPlacePropagationConverges()
{
var datDir = ResolveDatDir();
@ -495,6 +499,7 @@ public class CornerFloodReplayTests
/// the collapsing intersection.
/// </summary>
[Fact]
[Trait("Lane", "InstalledDat")]
public void Diagnostic_Hop2Microscope()
{
var datDir = ResolveDatDir();
@ -625,6 +630,7 @@ public class CornerFloodReplayTests
/// 0171/0173 — the screen area where the player stands then shows background.
/// </summary>
[Fact]
[Trait("Lane", "InstalledDat")]
public void Diagnostic_CornerPress_FloodAcrossDoorwayPlane()
{
var datDir = ResolveDatDir();

View file

@ -119,6 +119,7 @@ public sealed class FramePacingControllerTests
}
[Fact]
[Trait("Lane", "Windows")]
public void Windows_high_resolution_timer_arms_and_disposes_its_handle()
{
if (!OperatingSystem.IsWindowsVersionAtLeast(10, 0, 17134))

View file

@ -49,6 +49,7 @@ namespace AcDream.App.Tests.Rendering;
/// OutsideView ⇒ outdoor dynamics trivially cone-pass).
/// </summary>
[Collection(CameraDiagnosticsCollection.Name)]
[Trait("Lane", "InstalledDat")]
public class HouseExitWalkReplayTests
{
private readonly ITestOutputHelper _out;

View file

@ -19,6 +19,7 @@ namespace AcDream.App.Tests.Rendering;
/// iterated the dictionary and drew the "phantom staircase". These pins hold
/// ObjectMeshManager.CollectDrawingBspPolygonIds to the dat facts.
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue113DrawingBspFilterTests
{
private readonly ITestOutputHelper _out;

View file

@ -29,6 +29,7 @@ namespace AcDream.App.Tests.Rendering;
/// production assembler from the user's click-time viewpoint and pins which
/// hall cells draw and with what clip.
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue113MeetingHallFloodTests
{
private readonly ITestOutputHelper _out;

View file

@ -34,6 +34,7 @@ namespace AcDream.App.Tests.Rendering;
/// contained polygons, which makes union growth strictly area-increasing and
/// the flood convergent regardless of clip-numerics drift.
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue120ReciprocalPingPongTests
{
private readonly ITestOutputHelper _out;

View file

@ -18,6 +18,7 @@ namespace AcDream.App.Tests.Rendering;
/// seedRegion parameter — the port of that installed-view clip — against the
/// real Holtburg corner-building door.
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue124LookInSeedRegionTests
{
private readonly ITestOutputHelper _out;

View file

@ -38,6 +38,7 @@ namespace AcDream.App.Tests.Rendering;
/// cut). Fixed by the conservative NdcScissorRect bound; the assertions below
/// pin both properties.
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue130DoorwayStripTests
{
private readonly ITestOutputHelper _out;

View file

@ -15,6 +15,7 @@ namespace AcDream.App.Tests.Rendering;
/// translucent swirl; lamp posts / creatures / signs identify by part shape.
/// </summary>
[Trait("Purpose", "Diagnostic")]
[Trait("Lane", "InstalledDat")]
public class Issue131SetupProbeTests
{
private readonly ITestOutputHelper _out;

View file

@ -33,6 +33,7 @@ namespace AcDream.App.Tests.Rendering;
/// D. #176 walk — eye tracks down the corridor across two seams, gaze
/// locked +X: per-step admitted-set diffs (drop-for-one-step churn).
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue176177FacilityHubFloodReplayTests
{
private const uint FacilityHub = 0x8A020000u;

View file

@ -32,6 +32,7 @@ namespace AcDream.App.Tests.Rendering;
/// admitted, the flood is exonerated and the artifact lives downstream.
/// </summary>
[Collection(CameraDiagnosticsCollection.Name)]
[Trait("Lane", "InstalledDat")]
public class Issue177StairDescentCameraFloodTests
{
private const uint FacilityHub = 0x8A020000u;

View file

@ -22,6 +22,7 @@ namespace AcDream.App.Tests.Rendering;
/// axis; ANY admitted-set difference at sub-mm perturbation is the #181
/// instability, and the symmetric difference names the flapping cell.
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue181VisFlapReplayTests
{
private const uint FacilityHub = 0x8A020000u;

View file

@ -33,6 +33,7 @@ namespace AcDream.App.Tests.Rendering;
/// </summary>
[Collection(CameraDiagnosticsCollection.Name)]
[Trait("Purpose", "Diagnostic")]
[Trait("Lane", "InstalledDat")]
public class Issue181WallPressEquilibriumTests
{
private const uint FacilityHubLandblock = 0x8A020000u;

View file

@ -25,6 +25,7 @@ namespace AcDream.App.Tests.Rendering;
/// root's stab_list size (<see cref="LoadedCell.VisibleCells"/>), plus how many visited cells
/// cross landblocks. The single assertion just guarantees the test ran; the VALUE is the output.
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue95DungeonFloodDiagnosticTests
{
private const uint TownNetwork = 0x00070000u;

View file

@ -48,6 +48,7 @@ public sealed class LinuxMonotonicFramePacingWaiterTests
}
[Fact]
[Trait("Lane", "Linux")]
public void LinuxWaitBlocksUntilRequestedMonotonicDeadline()
{
if (!OperatingSystem.IsLinux())
@ -70,6 +71,7 @@ public sealed class LinuxMonotonicFramePacingWaiterTests
}
[Fact]
[Trait("Lane", "Linux")]
public void LinuxWaiterRejectsUseAfterDisposal()
{
if (!OperatingSystem.IsLinux())

View file

@ -52,6 +52,7 @@ public sealed class PortalTunnelAssetTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void InstalledDat_ResolvesRetailPortalSetupAndAnimation()
{
string? datDir = ResolveDatDir();

View file

@ -206,6 +206,7 @@ public sealed class RetailParticleGeometryClassifierTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void InstalledArmorSelfShieldPieces_areModeOneMeshesWithAuthoredApexFaces()
{
string? datDir = ResolveDatDir();
@ -264,6 +265,7 @@ public sealed class RetailParticleGeometryClassifierTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void InstalledHumanEffectTable_MapsPortalVisibilityScripts()
{
string? datDir = ResolveDatDir();
@ -278,6 +280,7 @@ public sealed class RetailParticleGeometryClassifierTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void InstalledAerlintheSwarmEmitter_UsesItsHardwareGfxDegradeDistance()
{
string? datDir = ResolveDatDir();

View file

@ -16,6 +16,7 @@ namespace AcDream.App.Tests.Rendering;
public sealed class RetailSelectionAssetTests
{
[Fact]
[Trait("Lane", "InstalledDat")]
public void InstalledDat_ResolvesAllTwelveVividTargetImages()
{
string datDir = ResolveDatDir();
@ -58,6 +59,7 @@ public sealed class RetailSelectionAssetTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void DoorSelectionGeometry_UsesDrawingBspRootSphereAndDatPolygonOrder()
{
const uint doorGfxObjId = 0x010044B5u;

View file

@ -318,6 +318,7 @@ public sealed class LandblockBuildFactoryTests
}
[Fact]
[Trait("Lane", "PreparedPackage")]
public void InstalledDatNearBuild_IsDeterministicAndClosesEntityPhysicsPayload()
{
string? datDirectory = ResolveDatDirectory();

View file

@ -75,6 +75,7 @@ public class IconComposerTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void ResolveUnderlayDid_goldenValues_matchDat()
{
var datDir = ResolveDatDir();
@ -103,6 +104,7 @@ public class IconComposerTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void ResolveEffectDid_goldenValues_matchDat()
{
var datDir = ResolveDatDir();
@ -128,6 +130,7 @@ public class IconComposerTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void TryGetEffectTile_noEffectBlack_magicalTextured()
{
var datDir = ResolveDatDir();

View file

@ -11,6 +11,7 @@ using Xunit;
namespace AcDream.App.Tests.UI.Layout;
[Trait("Lane", "InstalledDat")]
public sealed class CharacterLayoutImportProbe
{
private const uint CharacterLayout = 0x2100002Eu;

View file

@ -54,6 +54,7 @@ namespace AcDream.App.Tests.UI.Layout;
/// see its own class doc) are unaffected.
/// </para>
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class ChatIndicatorButtonLiveMountProbeTests
{
[Fact]

View file

@ -16,6 +16,7 @@ namespace AcDream.App.Tests.UI.Layout;
public sealed class ChatOptionsDatDefaultsTests
{
[Fact]
[Trait("Lane", "InstalledDat")]
public void InstalledDat_ResolvesTheByteVerifiedSliderDefaults()
{
string datDir = ResolveDatDir();

View file

@ -15,6 +15,7 @@ namespace AcDream.App.Tests.UI.Layout;
/// and 0x10000263 (swear-allegiance button). Env-gated like the other probes.
/// </summary>
[Trait("Purpose", "Diagnostic")]
[Trait("Lane", "InstalledDat")]
public sealed class FaPanelSlotProbeTests
{
[Fact]

View file

@ -18,6 +18,7 @@ namespace AcDream.App.Tests.UI.Layout;
/// backdrop (ZLevel 100 → ≈ 1,000,000), and the backdrop washed out the panels' captions,
/// burden meter, and item cells. Skips when the live dat directory is absent (CI).
/// </summary>
[Trait("Lane", "InstalledDat")]
public class InventoryFrameImportProbe
{
private const uint Frame = 0x21000023u;

View file

@ -749,6 +749,7 @@ public sealed class ItemAppraisalTextFormatterTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void EndOfRetailDatNameResolver_LoadsMaterialAndCreatureNames()
{
string? datDirectory = ResolveDatDirectory();

View file

@ -15,6 +15,7 @@ namespace AcDream.App.Tests.UI.Layout;
/// square 0x060074CF. Also PRINTS the resolved ids — the "pin the exact asset" record.
/// Skips when the live dat directory is absent (CI).
/// </summary>
[Trait("Lane", "InstalledDat")]
public class ItemListCellTemplateTests
{
private const uint Generic = 0x060074CFu; // generic toolbar-shortcut empty square (the bug)

View file

@ -16,6 +16,7 @@ namespace AcDream.App.Tests.UI.Layout;
/// rect + caption evidence for each observation. Env-gated like the other
/// live probes so CI/dat-less runs skip it.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class KeyboardConfigLiveMountProbeTests
{
[Fact]

View file

@ -26,6 +26,7 @@ namespace AcDream.App.Tests.UI.Layout;
/// </para>
/// </summary>
[Trait("Purpose", "Diagnostic")]
[Trait("Lane", "InstalledDat")]
public sealed class MapHousePanelSlotProbeTests
{
private const uint HostLayoutId = 0x2100006Eu;

View file

@ -16,6 +16,7 @@ namespace AcDream.App.Tests.UI.Layout;
/// page controller actually resolves. Env-gated like the fixture
/// generator so CI/dat-less runs skip it.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class OptionsPanelLiveMountProbeTests
{
[Fact]

View file

@ -45,6 +45,7 @@ public sealed class PaperdollClickMapTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void LiveDat_resolvesRetailClickMapAndAllNineBodyRegions()
{
string datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")

View file

@ -47,6 +47,7 @@ public class PaperdollSlotBackgroundTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void Live_dat_resolves_all_pinned_retail_backgrounds()
{
string datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")

View file

@ -15,6 +15,7 @@ namespace AcDream.App.Tests.UI.Layout;
/// INSTALLED DAT, so the "Height"/"Power"/"Accuracy" fix binds exactly what
/// retail authors instead of guessing.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class PowerbarLayoutProbeTests
{
[Fact]

View file

@ -18,6 +18,7 @@ namespace AcDream.App.Tests.UI.Layout;
/// its button→page pairing + default entry can be recorded — coordinator
/// addendum, docs/research/2026-08-11-fa-panel-structure.md §10.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class SocialPanelLiveMountProbeTests
{
[Fact]

View file

@ -4,6 +4,7 @@ using DatReaderWriter.Options;
namespace AcDream.App.Tests.UI.Layout;
[Trait("Lane", "InstalledDat")]
public sealed class SpellbookRowStyleTests
{
[Fact]

View file

@ -24,6 +24,7 @@ public sealed class RetailCursorCatalogTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void WindowControlCursorSpecs_resolveGoldenDatSurfaces()
{
string? datDir = ResolveDatDir();
@ -82,6 +83,7 @@ public sealed class RetailCursorCatalogTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void ReachableGlobalCursorSpecs_resolveGoldenDatSurfaces()
{
string? datDir = ResolveDatDir();

View file

@ -76,6 +76,7 @@ namespace AcDream.App.Tests.UI;
/// </para>
/// </summary>
[Trait("Purpose", "Diagnostic")]
[Trait("Lane", "InstalledDat")]
public sealed class SpewBoxLayoutDumpDiagnostic
{
private readonly ITestOutputHelper _out;

View file

@ -35,6 +35,7 @@ public sealed class UiDatFontBorderPixelTests
[InlineData(0x40000001u, 4u, 4u)] // 18px bold serif — SpewBox face (round 4)
[InlineData(0x40000002u, 3u, 3u)] // 14px bold serif
[InlineData(0x40000025u, 3u, 3u)] // 11px — the pre-round-4 SpewBox placeholder face
[Trait("Lane", "InstalledDat")]
public void RealDatFont_HasExpectedBorderPixels(uint fontId, uint expectedHorizontal, uint expectedVertical)
{
string? datDir = ResolveDatDir();
@ -49,6 +50,7 @@ public sealed class UiDatFontBorderPixelTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void RealDatFont_EveryFontWithABackgroundAtlas_HasANonZeroBorder()
{
// docs/research/2026-08-10-retail-ui-text-style.md §1.2: "every font that

View file

@ -237,6 +237,7 @@ public sealed class UiRenderContextAlphaTests
// -- DrawString (BitmapFont path): the same alpha chokepoint, guarded ---
[Fact]
[Trait("Lane", "SystemFont")]
public void FullOpacity_DrawString_BitmapFontPath_MatchesRequestedAlpha_Identity()
{
// CH6c review NIT: DrawStringDat (retail dat-font glyphs) had its own
@ -258,6 +259,7 @@ public sealed class UiRenderContextAlphaTests
}
[Fact]
[Trait("Lane", "SystemFont")]
public void HalfOpacityWindow_MultipliesBitmapFontGlyphAlpha()
{
var device = new RecordingGpuDevice();

View file

@ -145,6 +145,7 @@ public sealed class LiveEntityPresentationControllerTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void SpellRecall_HiddenAndUnHide_RetireMagicTimelineThroughController()
{
const uint humanSetup = 0x02000001u;

View file

@ -185,6 +185,7 @@ public sealed class RecallTeleportAnimationTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void InstalledRecall_HiddenEnterWorldPublishesFinishedCyclicPoseWithoutAdvancingTime()
{
string datDir = @"C:\Turbine\Asheron's Call";

View file

@ -15,6 +15,7 @@ namespace AcDream.Bake.Tests;
/// are absent (CI), same convention as
/// tests/AcDream.Core.Tests/Conformance/DatConcurrencyStressTests.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class BakeDeterminismTests : IDisposable {
private readonly List<string> _tempFiles = new();

View file

@ -23,6 +23,7 @@ namespace AcDream.Content.Tests;
/// of the 3,605 "sphere-only, no cylinder" Setups the reachability sweep
/// already counted fall into exactly that trap.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class Ap155StaticSpherePopulationMeasurementTests
{
[Fact]

View file

@ -22,6 +22,7 @@ namespace AcDream.Content.Tests.CharGen;
/// <c>ChargenAppearanceCatalogInstalledDatTests</c>): returns green with a
/// console SKIP note when no installed dat directory is configured.</para>
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class ChargenAppearanceCatalogColorTests
{
private readonly ITestOutputHelper _out;

View file

@ -28,6 +28,7 @@ namespace AcDream.Content.Tests.CharGen;
/// consistent with the rest of the suite rather than introducing a new
/// convention.</para>
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class ChargenAppearanceCatalogInstalledDatTests
{
private readonly ITestOutputHelper _out;

View file

@ -14,6 +14,7 @@ namespace AcDream.Content.Tests.CharGen;
/// cleanly (with a console note) when no DAT directory is configured,
/// matching e.g. <c>PakEquivalenceTests</c> / <c>RetailDatLoaderTests</c>.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class ChargenTableReaderInstalledDatTests
{
// ACE ACE.Entity.Enum.HeritageGroup — the four heritages CC1's spec

View file

@ -4,6 +4,7 @@ using DatReaderWriter.Options;
namespace AcDream.Content.Tests;
[Trait("Lane", "PreparedPackage")]
public sealed class InstalledPreparedCollisionCatalogTests
{
[Fact]

View file

@ -33,6 +33,7 @@ namespace AcDream.Content.Tests;
/// predicate used here.
/// </para>
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class InstalledSetupBspPrimitiveDispatchTests
{
// EXTERNAL constants. The four bucket controls are the ones already

View file

@ -12,6 +12,7 @@ namespace AcDream.Content.Tests;
/// asserts no such Setup exists, so the deletion cannot remove collision from
/// any real object.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class InstalledSetupCollisionReachabilityTests
{
// Positive controls. These are EXTERNAL constants, measured on 2026-08-06

View file

@ -42,6 +42,7 @@ namespace AcDream.Content.Tests;
/// columns 0..4 on both axes.
/// </para>
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class Issue334NeftetFormationCellMembershipTests
{
private const uint NeftetLandblock = 0x87640000u;

View file

@ -20,6 +20,7 @@ namespace AcDream.Content.Tests;
/// Skips cleanly when the real dats are absent (CI), matching
/// DatConcurrencyStressTests' convention.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class PakEquivalenceTests {
// Known-tricky GfxObj ids reused from existing conformance fixtures:
// 0x010002B4 / 0x010008A8 — #119 "[up-null] upload returned null" dump

View file

@ -17,6 +17,7 @@ namespace AcDream.Content.Tests;
/// construct (its ctor builds a RetailPhysicsScriptLoader from dats.Portal).
/// Skips cleanly when dats are absent, matching ContentConformanceDats convention.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class SolidColorTextureCacheTests {
[Fact]
public void GetOrCreateSolidColorTexture_SameColor_ReturnsSameSharedArray() {

View file

@ -73,6 +73,7 @@ public sealed class RetailSpellMetadataProjectorTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void Load_EndOfRetailDat_ResolvesEveryLateLearnedSpellMissingFromCsv()
{
string? datDir = ResolveDatDir();
@ -101,6 +102,7 @@ public sealed class RetailSpellMetadataProjectorTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void Load_EndOfRetailDat_UsesRetailFormulaTargetsInsteadOfLegacyExportMasks()
{
string? datDir = ResolveDatDir();

View file

@ -432,6 +432,7 @@ public sealed class RetailDatLoaderTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void InstalledBlockingScripts_ParseThroughRetailShape_WhenDatsAvailable()
{
string? datDir = ResolveDatDirectory();

View file

@ -29,6 +29,7 @@ namespace AcDream.Core.Net.Tests;
/// the env-var setup are distinguishable from server errors.
/// </para>
/// </summary>
[Trait("Lane", "Live")]
public class LiveHandshakeTests
{
[Fact]

View file

@ -38,6 +38,7 @@ namespace AcDream.Core.Tests.Audio;
/// absent.
/// </para>
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class EnvCellSoundEmitterInventoryTests
{
private readonly ITestOutputHelper _out;

View file

@ -38,6 +38,7 @@ namespace AcDream.Core.Tests.Audio;
/// installed-dat test in this suite.
/// </para>
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class UiSoundTableResolutionTests
{
/// <summary>

View file

@ -15,6 +15,7 @@ namespace AcDream.Core.Tests.Conformance;
/// not the master plan's loose "0031↔0170↔0171". The cottage cellar is the
/// 0x014x range (#98 fixtures); the doorway room/vestibule is in 0x017x.
/// </summary>
[Trait("Lane", "InstalledDat")]
public class CottageDoorwayCharacterizationTests
{
private readonly ITestOutputHelper _out;

View file

@ -39,6 +39,7 @@ namespace AcDream.Core.Tests.Conformance;
/// (e.g. dispose-during-read at teardown) or layers above the dat reader.
/// </summary>
[Trait("Category", "Conformance")]
[Trait("Lane", "InstalledDat")]
public class DatConcurrencyStressTests
{
private const int HammerThreads = 8;

View file

@ -17,6 +17,7 @@ namespace AcDream.Core.Tests.Conformance;
/// LandBlockInfo + EnvCells? Output-only — no assertions.
/// </summary>
[Trait("Purpose", "Diagnostic")]
[Trait("Lane", "InstalledDat")]
public sealed class DungeonLandblockDatProbeTests
{
private readonly ITestOutputHelper _out;

View file

@ -30,6 +30,7 @@ public class FindCellListConformanceTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void FindCellList_DeepInsideRoom0171_Returns0171()
{
var datDir = ConformanceDats.ResolveDatDir();
@ -47,6 +48,7 @@ public class FindCellListConformanceTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void FindCellList_DeepInsideVestibule0170_Returns0170()
{
var datDir = ConformanceDats.ResolveDatDir();
@ -70,6 +72,7 @@ public class FindCellListConformanceTests
/// property P1 must preserve.
/// </summary>
[Fact]
[Trait("Lane", "InstalledDat")]
public void FindCellList_InVestibule_SeededFromRoom_Returns0170()
{
var datDir = ConformanceDats.ResolveDatDir();

View file

@ -21,6 +21,7 @@ namespace AcDream.Core.Tests.Conformance;
/// separately in the decomp). Output-only — no assertions; read the log.
/// </summary>
[Trait("Purpose", "Diagnostic")]
[Trait("Lane", "InstalledDat")]
public sealed class HoltburgTorchFalloffProbeTests
{
private readonly ITestOutputHelper _out;

View file

@ -27,6 +27,7 @@ namespace AcDream.Core.Tests.Conformance;
/// find_visible_child_cell also cannot recover a cross-building claim and
/// falls to seen_outside → adjust_to_outside, acclient :280037).
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class Issue107SpawnDiagnosticTests
{
private readonly ITestOutputHelper _out;

View file

@ -19,6 +19,7 @@ namespace AcDream.Core.Tests.Conformance;
/// (pc:308788-308825). These tests pin the replacement semantics against the
/// real dats.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class Issue112MembershipTests
{
private readonly ITestOutputHelper _out;

View file

@ -21,6 +21,7 @@ namespace AcDream.Core.Tests.Conformance;
/// carry polygon references in properties the walk missed (portal-type
/// nodes / leaf subclasses)? Pure diagnostic — no production code.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class Issue113DoorVanishDiagnosticTests
{
private readonly ITestOutputHelper _out;

View file

@ -24,6 +24,7 @@ namespace AcDream.Core.Tests.Conformance;
/// interior cell's Position + world AABB + SeenOutside flag + stair signature
/// (distinct horizontal-face heights), and containment of the two key points.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class Issue113PhantomStairsDumpTests
{
private readonly ITestOutputHelper _out;

View file

@ -24,6 +24,7 @@ namespace AcDream.Core.Tests.Conformance;
/// static object (id + position) — the barrel candidate and the stair
/// owners read directly off the output.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class Issue119TowerDumpTests
{
private readonly ITestOutputHelper _out;

View file

@ -23,6 +23,7 @@ namespace AcDream.Core.Tests.Conformance;
/// ObjectMeshManager in MP1a)
/// so the zeroing gate reads directly off the output.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class Issue119UpNullGfxObjDumpTests
{
private readonly ITestOutputHelper _out;

View file

@ -30,6 +30,7 @@ namespace AcDream.Core.Tests.Conformance;
/// Violations of (b) on PLAIN OBJECT GfxObjs are allowed — retail's bypass
/// draws solid batches for non-building/non-cell meshes, and so do we.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class StipplingSurfaceEquivalenceTests
{
private readonly ITestOutputHelper _out;

View file

@ -14,6 +14,7 @@ namespace AcDream.Core.Tests.Conformance;
/// (real pick-criterion divergence vs a test/sphere artifact).
/// </summary>
[Trait("Purpose", "Diagnostic")]
[Trait("Lane", "InstalledDat")]
public class ThresholdDivergenceDiagnosticTests
{
private readonly ITestOutputHelper _out;

View file

@ -27,6 +27,7 @@ namespace AcDream.Core.Tests.Conformance;
/// building-cell cache. The outdoor-involving segments (0031↔0170) need the landcell +
/// building portal and are a follow-up.
/// </summary>
[Trait("Lane", "InstalledDat")]
public class ThresholdPortalCrossingReplayTests
{
private readonly ITestOutputHelper _out;

View file

@ -54,6 +54,7 @@ namespace AcDream.Core.Tests.Input;
/// here. Reported, not silently resolved either way.</description></item>
/// </list>
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class RetailActionIdentityRoundTripTests
{
/// <summary>Actions with a citation-backed, pre-existing reason their DAT-union

View file

@ -204,6 +204,7 @@ public sealed class RetailActionMapReaderTests
/// <summary>Live-DAT conformance: pins the exact shape of the installed
/// <c>client_portal.dat</c>/<c>client_local_English.dat</c> ActionMap +
/// MasterInputMap objects. Skips cleanly when the dats are unavailable.</summary>
[Trait("Lane", "InstalledDat")]
public sealed class RetailActionMapReader_LiveDatTests
{
[Fact]

View file

@ -59,6 +59,7 @@ namespace AcDream.Core.Tests.Physics;
/// the flood-sphere list, not a subset or approximation of it.
/// </para>
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class Ap157SortingSphereFloodMeasurementTests
{
/// <summary>Arbitrary non-zero landblock id — only its prefix matters for

View file

@ -189,6 +189,7 @@ public sealed class BoxIntersectsCellBspDifferentialTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void InstalledDat_RandomizedBoxSweepOverEnvCellContainmentBsps_HasZeroMismatch()
{
string? datDirectory = ConformanceDats.ResolveDatDir();

View file

@ -38,6 +38,7 @@ namespace AcDream.Core.Tests.Physics;
/// L20104 / L20224 / L20386 (door-exit) + L23035 / L81340 / L87958 (corner press);
/// pivot = player + (0,0,1.5) per RetailChaseCamera.PivotHeight.
/// </summary>
[Trait("Lane", "InstalledDat")]
public class CameraCornerSealReplayTests
{
private readonly ITestOutputHelper _out;

View file

@ -263,6 +263,7 @@ public sealed class CellTransitFindTransitCellsBoxTests
/// for the exact counts from this run.
/// </summary>
[Fact]
[Trait("Lane", "InstalledDat")]
public void InstalledDat_RandomizedPartSweepNearRealPortals_PostFixMembershipIsSubsetOfPreFix()
{
string? datDirectory = ConformanceDats.ResolveDatDir();

View file

@ -28,6 +28,7 @@ namespace AcDream.Core.Tests.Physics;
/// semantics on real Holtburg dat geometry.
/// </para>
/// </summary>
[Trait("Lane", "InstalledDat")]
public class CellTransitTests
{
[Fact]

View file

@ -82,6 +82,7 @@ public class DoorBugTrajectoryReplayTests
/// door's outdoor cell when production's doesn't.
/// </summary>
[Fact]
[Trait("Lane", "InstalledDat")]
public void LiveCompare_DoorOffCenterWalkthrough_Tick13558()
{
var datDir = ResolveDatDir();
@ -117,6 +118,7 @@ public class DoorBugTrajectoryReplayTests
/// registration itself is wrong.
/// </summary>
[Fact]
[Trait("Lane", "InstalledDat")]
public void LiveCompare_DoorBlocksFromOutside_Tick22760()
{
var datDir = ResolveDatDir();
@ -159,6 +161,7 @@ public class DoorBugTrajectoryReplayTests
/// hard-stopped with cn=(0,0,1). Always passes; read the console dump.
/// </summary>
[Fact]
[Trait("Lane", "InstalledDat")]
public void Diagnostic_Tick22760_DumpEngineInternals()
{
var datDir = ResolveDatDir();
@ -211,6 +214,7 @@ public class DoorBugTrajectoryReplayTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void Diagnostic_Tick13558_DumpEngineInternals()
{
var datDir = ResolveDatDir();
@ -272,6 +276,7 @@ public class DoorBugTrajectoryReplayTests
/// portal traversal IS the bug.
/// </summary>
[Fact]
[Trait("Lane", "InstalledDat")]
public void FindTransitCellsSphere_IndoorExitPortal_AddsOutsideForCapturedSpherePos()
{
var datDir = ResolveDatDir();
@ -472,6 +477,7 @@ public class DoorBugTrajectoryReplayTests
/// </para>
/// </summary>
[Fact]
[Trait("Lane", "InstalledDat")]
public void InsideOut_Tick3254_WithCottageWalls_ShouldBlock()
{
var datDir = ResolveDatDir();
@ -543,6 +549,7 @@ public class DoorBugTrajectoryReplayTests
/// (133.5, 17.10) to end up at X > 133.5 Y > 17.10, bug reproduced.
/// </summary>
[Fact]
[Trait("Lane", "InstalledDat")]
public void CornerSlide_AlcoveEastToCottageNorth_ShouldBlock()
{
var datDir = ResolveDatDir();
@ -770,6 +777,7 @@ public class DoorBugTrajectoryReplayTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void Geometric_DoorSlabAtSphereHeight_OverlapsInZ()
{
var datDir = ResolveDatDir();
@ -821,6 +829,7 @@ public class DoorBugTrajectoryReplayTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void Directional_OutsideIn_SouthApproach_BlocksAtSlabSouthFace()
{
var datDir = ResolveDatDir();
@ -848,6 +857,7 @@ public class DoorBugTrajectoryReplayTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void Directional_InsideOut_NorthApproach_BlocksAtSlabNorthFace()
{
var datDir = ResolveDatDir();

View file

@ -40,6 +40,7 @@ namespace AcDream.Core.Tests.Physics;
/// CI stays green. Local developer machines always have it.
/// </para>
/// </summary>
[Trait("Lane", "InstalledDat")]
public class DoorCollisionApparatusTests
{
private readonly ITestOutputHelper _out;

View file

@ -26,6 +26,7 @@ namespace AcDream.Core.Tests.Physics;
/// keeps CI green. Local developer runs always have it.
/// </para>
/// </summary>
[Trait("Lane", "InstalledDat")]
public class DoorSetupGfxObjInspectionTests
{
private readonly ITestOutputHelper _out;

View file

@ -412,6 +412,7 @@ public sealed class FlatBspQueryDifferentialTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void InstalledDat_LargeRandomizedSweep_HasZeroBitMismatch()
{
string? datDirectory = ConformanceDats.ResolveDatDir();

View file

@ -9,6 +9,7 @@ using Xunit.Abstractions;
namespace AcDream.Core.Tests.Physics;
[Trait("Lane", "InstalledDat")]
public sealed class FlatCollisionInstalledDatTests
{
private readonly ITestOutputHelper _output;

View file

@ -15,6 +15,7 @@ namespace AcDream.Core.Tests.Physics;
/// The packet-driven remote mover must use these values, not a velocity guessed
/// from the interpreted command.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class HumanoidMotionTableRootMotionTests
{
private const uint HumanoidMotionTable = 0x09000001u;

View file

@ -66,6 +66,7 @@ namespace AcDream.Core.Tests.Physics;
/// eye projects into the aperture band at y 9.817) paints the doorway.
/// These tests stay as the characterization pin for the healthy layer.
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue108CellarAscentViewerReplayTests
{
private readonly ITestOutputHelper _out;

View file

@ -20,6 +20,7 @@ namespace AcDream.Core.Tests.Physics;
/// (normal ≈ ±X at the portal's local X) — i.e., are portal-sealing polys in
/// our collision set where retail filters them?
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue137CorridorSeamInspectionTests
{
private readonly ITestOutputHelper _out;

View file

@ -38,6 +38,7 @@ namespace AcDream.Core.Tests.Physics;
/// running must keep advancing (no absorbing wedge).
/// </para>
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue137CorridorSeamReplayTests
{
private readonly ITestOutputHelper _out;

View file

@ -17,6 +17,7 @@ namespace AcDream.Core.Tests.Physics;
/// (a separate shadow-object collision path). Dat-data-dependent; SKIPs cleanly
/// without ACDREAM_DAT_DIR / the real dats.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class Issue147ArwicBuildingsDumpTests
{
private readonly ITestOutputHelper _out;

View file

@ -39,6 +39,7 @@ public class Issue175HubDoorPoseInspectionTests
private const uint HubDoorSetupId = 0x02000C9Du;
[Fact]
[Trait("Lane", "InstalledDat")]
public void HubDoorSetup_PlacementVsMotionPose_DatInspection()
{
var datDir = Env.GetEnvironmentVariable("ACDREAM_DAT_DIR")
@ -161,6 +162,7 @@ public class Issue175HubDoorPoseInspectionTests
/// NonCombat/Ready) and asserts the derivation actually resolves a pose.
/// </summary>
[Fact]
[Trait("Lane", "InstalledDat")]
public void MotionTablePose_DefaultState_ResolvesOnRealTable()
{
var datDir = Env.GetEnvironmentVariable("ACDREAM_DAT_DIR")

View file

@ -24,6 +24,7 @@ namespace AcDream.Core.Tests.Physics;
/// stair pop). This replay measures OUR resolver's flip point across the
/// x=85 seam in a controlled run.
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue176177SeamTransitLagTests
{
private const uint SeamCellWest = 0x8A02016Eu; // x 75..85

View file

@ -35,6 +35,7 @@ namespace AcDream.Core.Tests.Physics;
/// 3. the clipped eye is the CONSTANT surface-contact point (pre-fix it
/// tracked the target one step back: eyeBack = s ~0.27).
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue180CorridorSweepHysteresisReplayTests
{
private readonly ITestOutputHelper _out;

View file

@ -20,6 +20,7 @@ namespace AcDream.Core.Tests.Physics;
/// bare connector? And does it carry collision geometry (so the camera sweep would
/// hard-stop) or none (so the boom coasts to a degenerate spot)? Skips without the dat.
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue186ConnectorCellGeometryInspectionTests
{
private readonly ITestOutputHelper _out;

View file

@ -74,6 +74,7 @@ public class Issue188FadingDoorMotionTableInspectionTests
}
[Fact]
[Trait("Lane", "InstalledDat")]
public void Dump_PedestalWeakSpot_MotionTable_HookContents()
{
var datDir = DatDir();

View file

@ -38,6 +38,7 @@ namespace AcDream.Core.Tests.Physics;
///
/// Dat-data dependent; SKIPs cleanly without ACDREAM_DAT_DIR.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class Issue337NeftetRockGeometryInspectionTests
{
private const uint Landblock = 0x8766_0000u;

View file

@ -40,6 +40,7 @@ namespace AcDream.Core.Tests.Physics;
/// present (CI has no local AC install).
/// </para>
/// </summary>
[Trait("Lane", "InstalledDat")]
public class MotionCommandCatalogDatTests
{
/// <summary>

View file

@ -18,6 +18,7 @@ namespace AcDream.Core.Tests.Physics;
/// when the installed DATs are absent (CI), following the
/// DoorSetupGfxObjInspectionTests pattern.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class RestrictionObjPrevalenceInspectionTests
{
private readonly ITestOutputHelper _output;

View file

@ -31,6 +31,7 @@ namespace AcDream.Core.Tests.Rendering;
/// CellPortal.PolygonId indexes CellStruct.Polygons (VISUAL), never
/// PhysicsPolygons — same ids in both tables are unrelated polygons.
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue176177DungeonSeamInspectionTests
{
private readonly ITestOutputHelper _out;

View file

@ -26,6 +26,7 @@ namespace AcDream.Core.Tests.Rendering;
/// fountain room and its immediate neighbors observed this session, so the answer
/// is read from the dat directly instead of inferred from aggregate counts.
/// </summary>
[Trait("Lane", "InstalledDat")]
public class Issue93TownNetworkFountainRoomLightInspectionTests
{
private readonly ITestOutputHelper _out;

Some files were not shown because too many files have changed in this diff Show more