test: separate diagnostic apparatus from release gates

This commit is contained in:
Erik 2026-08-18 11:06:08 +02:00
parent 8f490240d4
commit c1a905004a
33 changed files with 527 additions and 24 deletions

View file

@ -541,6 +541,7 @@ public class CornerFloodReplayTests
/// <summary>Scratch: the homogeneous reciprocal primitive in isolation, on the
/// synthetic fixture geometry that Build_AppliesReciprocalOtherPortalClip uses.</summary>
[Fact]
[Trait("Purpose", "Diagnostic")]
public void Scratch_ReciprocalPrimitive_SyntheticPair()
{
var view = Matrix4x4.CreateLookAt(Vector3.Zero, new Vector3(0, 0, -1), Vector3.UnitY);

View file

@ -14,6 +14,7 @@ namespace AcDream.App.Tests.Rendering;
/// candidate setup's parts + bounds from the dat. The portal's setup is the
/// translucent swirl; lamp posts / creatures / signs identify by part shape.
/// </summary>
[Trait("Purpose", "Diagnostic")]
public class Issue131SetupProbeTests
{
private readonly ITestOutputHelper _out;

View file

@ -98,7 +98,8 @@ public class Issue176177FacilityHubFloodReplayTests
}
[Fact]
public void ScenarioB_StairDescent_RampCellRetention()
[Trait("Purpose", "Diagnostic")]
public void Diagnostic_ScenarioB_StairDescent_RampCellRetention()
{
var datDir = CornerFloodReplayTests.ResolveDatDir();
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
@ -140,7 +141,8 @@ public class Issue176177FacilityHubFloodReplayTests
}
[Fact]
public void ScenarioC_CorridorSeamGazeSweep_Bistability()
[Trait("Purpose", "Diagnostic")]
public void Diagnostic_ScenarioC_CorridorSeamGazeSweep_Bistability()
{
var datDir = CornerFloodReplayTests.ResolveDatDir();
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
@ -212,9 +214,10 @@ public class Issue176177FacilityHubFloodReplayTests
/// #177(a)/(c) at the stair transit.
/// </summary>
[Theory]
[Trait("Purpose", "Diagnostic")]
[InlineData(0x016Eu, 0x017Au, 85.00f, -4.3f)] // corridor seam, plane x=85
[InlineData(0x0182u, 0x0183u, 98.333f, -7.3f)] // stair-bottom transit, plane x=98.33
public void ScenarioE_RootLagWindow_ForwardChainRetention(
public void Diagnostic_ScenarioE_RootLagWindow_ForwardChainRetention(
uint rootLow, uint forwardLow, float planeX, float eyeZ)
{
var datDir = CornerFloodReplayTests.ResolveDatDir();
@ -239,7 +242,8 @@ public class Issue176177FacilityHubFloodReplayTests
}
[Fact]
public void ScenarioD_CorridorWalk_PerStepChurn()
[Trait("Purpose", "Diagnostic")]
public void Diagnostic_ScenarioD_CorridorWalk_PerStepChurn()
{
var datDir = CornerFloodReplayTests.ResolveDatDir();
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }

View file

@ -105,7 +105,8 @@ public class Issue177StairDescentCameraFloodTests
=> string.Join(" ", ids.Select(id => $"{id & 0xFFFFu:X4}"));
[Fact]
public void StairCellComposition_ShellVsStatics()
[Trait("Purpose", "Diagnostic")]
public void Diagnostic_StairCellComposition_ShellVsStatics()
{
var datDir = ResolveDatDir();
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
@ -166,7 +167,8 @@ public class Issue177StairDescentCameraFloodTests
/// locate the knife-edge and which cell flips.
/// </summary>
[Fact]
public void RealStaircase_FineYawZoomSweep_FindKnifeEdge()
[Trait("Purpose", "Diagnostic")]
public void Diagnostic_RealStaircase_FineYawZoomSweep_FindKnifeEdge()
{
var datDir = ResolveDatDir();
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
@ -228,7 +230,8 @@ public class Issue177StairDescentCameraFloodTests
/// caps well below retail's 26, our flood truncates the spiral (the vanish).
/// </summary>
[Fact]
public void FloodDepthFrom015E_VsRetail26()
[Trait("Purpose", "Diagnostic")]
public void Diagnostic_FloodDepthFrom015E_VsRetail26()
{
var datDir = ResolveDatDir();
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
@ -349,7 +352,8 @@ public class Issue177StairDescentCameraFloodTests
/// contact leaving the eye on the surface vs free-space boom geometry.
/// </summary>
[Fact]
public void StaircaseSweep_EyeClearanceFromCeilingPortal()
[Trait("Purpose", "Diagnostic")]
public void Diagnostic_StaircaseSweep_EyeClearanceFromCeilingPortal()
{
var datDir = ResolveDatDir();
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
@ -392,10 +396,11 @@ public class Issue177StairDescentCameraFloodTests
}
[Theory]
[Trait("Purpose", "Diagnostic")]
// spot label, player x, player cell, description
[InlineData(90.0f, 0x0178u, "TOP corridor 0178 (approach view)")]
[InlineData(100.0f, 0x0183u, "BOTTOM room 0183 (look-back view)")]
public void ParkedYawZoomSweep_StairAdmission(float px, uint pcell, string label)
public void Diagnostic_ParkedYawZoomSweep_StairAdmission(float px, uint pcell, string label)
{
var datDir = ResolveDatDir();
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
@ -451,7 +456,8 @@ public class Issue177StairDescentCameraFloodTests
}
[Fact]
public void Descent_RealCameraSweep_StairCellRetention()
[Trait("Purpose", "Diagnostic")]
public void Diagnostic_Descent_RealCameraSweep_StairCellRetention()
{
var datDir = ResolveDatDir();
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }

View file

@ -56,6 +56,7 @@ public class Issue181VisFlapReplayTests
=> string.Join(" ", ids.Select(id => $"{id & 0xFFFFu:X4}"));
[Fact]
[Trait("Purpose", "Diagnostic")]
public void Diagnostic_FlappingCellViewRegion_SliverOrLarge()
{
var datDir = CornerFloodReplayTests.ResolveDatDir();

View file

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

View file

@ -14,6 +14,7 @@ namespace AcDream.App.Tests.UI.Layout;
/// identify the two FA slots definitively: 0x1000026F (fellowship name field)
/// and 0x10000263 (swear-allegiance button). Env-gated like the other probes.
/// </summary>
[Trait("Purpose", "Diagnostic")]
public sealed class FaPanelSlotProbeTests
{
[Fact]

View file

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

View file

@ -19,6 +19,7 @@ namespace AcDream.App.Tests.UI.Layout;
public sealed class OptionsPanelLiveMountProbeTests
{
[Fact]
[Trait("Purpose", "Diagnostic")]
public void ProbeLiveMountShapes()
{
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")
@ -314,6 +315,7 @@ public sealed class OptionsPanelLiveMountProbeTests
/// FIXED 6-row + scrollbar popup in retail, user-gated during the vendor
/// campaign) as the contrast control.</summary>
[Fact]
[Trait("Purpose", "Diagnostic")]
public void ProbeMenuPopupSizingAndTextStyle()
{
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")
@ -479,6 +481,7 @@ public sealed class OptionsPanelLiveMountProbeTests
/// to resolve in table 0x23000003 — sweep the plausible tables and key
/// spellings against the live DAT to find their real home.</summary>
[Fact]
[Trait("Purpose", "Diagnostic")]
public void ProbeFilterLabelHome()
{
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")

View file

@ -18,6 +18,7 @@ namespace AcDream.App.Tests.UI.Layout;
public sealed class PowerbarLayoutProbeTests
{
[Fact]
[Trait("Purpose", "Diagnostic")]
public void ProbePowerbarAuthoredStrings()
{
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_POWERBAR") != "1")
@ -75,6 +76,7 @@ public sealed class PowerbarLayoutProbeTests
/// gmSecureTradeUI's element tree (lane A gave element ids 0x10000085-8B
/// but not the layout id) and dump it.</summary>
[Fact]
[Trait("Purpose", "Diagnostic")]
public void ProbeSecureTradeLayout()
{
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_POWERBAR") != "1")
@ -107,6 +109,7 @@ public sealed class PowerbarLayoutProbeTests
/// ID_SecureTrade_TotalItemsLabel's fragments + variable hashes so the
/// count text can use ResolveTemplate if token-free (AD-95).</summary>
[Fact]
[Trait("Purpose", "Diagnostic")]
public void ProbeTotalItemsTemplate()
{
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_POWERBAR") != "1")

View file

@ -75,6 +75,7 @@ namespace AcDream.App.Tests.UI;
/// <c>States</c> dictionary was not walked) remain open.
/// </para>
/// </summary>
[Trait("Purpose", "Diagnostic")]
public sealed class SpewBoxLayoutDumpDiagnostic
{
private readonly ITestOutputHelper _out;