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";