test: make prerequisite lanes fail honestly
This commit is contained in:
parent
dfc841b779
commit
6faeb4a103
113 changed files with 424 additions and 336 deletions
|
|
@ -80,7 +80,7 @@ public class IconComposerTests
|
|||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null)
|
||||
return; // dats absent (CI) — skip cleanly
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // dats absent (CI) — skip cleanly
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
// TextureCache is not needed for the resolve path; pass a null-safe stub
|
||||
|
|
@ -108,7 +108,7 @@ public class IconComposerTests
|
|||
public void ResolveEffectDid_goldenValues_matchDat()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) return; // dats absent (CI) — skip cleanly
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // dats absent (CI) — skip cleanly
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var composer = new IconComposer(dats, null!);
|
||||
|
|
@ -134,7 +134,7 @@ public class IconComposerTests
|
|||
public void TryGetEffectTile_noEffectBlack_magicalTextured()
|
||||
{
|
||||
var datDir = ResolveDatDir();
|
||||
if (datDir is null) return; // dats absent (CI) — skip cleanly
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // dats absent (CI) — skip cleanly
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var composer = new IconComposer(dats, null!);
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ public sealed class CharacterLayoutImportProbe
|
|||
public void Selected_attribute_shows_raise_buttons_on_visible_footer_state()
|
||||
{
|
||||
var datDir = DatDir();
|
||||
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 layout = LayoutImporter.Import(dats, CharacterLayout, _ => (1u, 30, 26), null);
|
||||
|
|
@ -59,7 +59,7 @@ public sealed class CharacterLayoutImportProbe
|
|||
public void Close_button_resolves_and_invokes_controller_close_callback()
|
||||
{
|
||||
var datDir = DatDir();
|
||||
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 layout = LayoutImporter.Import(dats, CharacterLayout, _ => (1u, 30, 26), null);
|
||||
|
|
@ -81,7 +81,7 @@ public sealed class CharacterLayoutImportProbe
|
|||
public void Footer_title_exposes_retail_append_text_palette()
|
||||
{
|
||||
string? datDir = DatDir();
|
||||
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);
|
||||
ImportedLayout? layout = LayoutImporter.Import(
|
||||
|
|
|
|||
|
|
@ -54,14 +54,15 @@ namespace AcDream.App.Tests.UI.Layout;
|
|||
/// see its own class doc) are unaffected.
|
||||
/// </para>
|
||||
/// </summary>
|
||||
[Trait("Lane", "InstalledDat")]
|
||||
[Trait("Lane", "Manual")]
|
||||
[Trait("ManualTask", "LiveMountProbe")]
|
||||
public sealed class ChatIndicatorButtonLiveMountProbeTests
|
||||
{
|
||||
[Fact]
|
||||
public void IndicatorButtons_ResolveNormalStateAtRest_ThroughTheLiveImportPath()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual live-mount probe requires ACDREAM_PROBE_LIVE_MOUNT=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
using AcDream.App.UI.Layout;
|
||||
using DatReaderWriter;
|
||||
using DatReaderWriter.Options;
|
||||
using Xunit.Sdk;
|
||||
using SysEnv = System.Environment;
|
||||
|
||||
namespace AcDream.App.Tests.UI.Layout;
|
||||
|
|
@ -53,6 +52,7 @@ public sealed class ChatOptionsDatDefaultsTests
|
|||
if (File.Exists(Path.Combine(conventional, "client_portal.dat")))
|
||||
return conventional;
|
||||
|
||||
throw SkipException.ForSkip("Installed client_portal.dat is required.");
|
||||
throw new InvalidOperationException(
|
||||
"Lane=InstalledDat requires client_portal.dat; see docs/release-gate.md.");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,14 +15,15 @@ namespace AcDream.App.Tests.UI.Layout;
|
|||
/// and 0x10000263 (swear-allegiance button). Env-gated like the other probes.
|
||||
/// </summary>
|
||||
[Trait("Purpose", "Diagnostic")]
|
||||
[Trait("Lane", "InstalledDat")]
|
||||
[Trait("Lane", "Manual")]
|
||||
[Trait("ManualTask", "LiveMountProbe")]
|
||||
public sealed class FaPanelSlotProbeTests
|
||||
{
|
||||
[Fact]
|
||||
public void ProbePanelSlotTable()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual live-mount probe requires ACDREAM_PROBE_LIVE_MOUNT=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ public class InventoryFrameImportProbe
|
|||
public void Paperdoll_equip_slots_resolve_to_item_lists()
|
||||
{
|
||||
var datDir = DatDir();
|
||||
if (datDir is null) return; // CI: no live dat — skip
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // CI: no live dat — skip
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var layout = LayoutImporter.Import(dats, Frame, _ => (0u, 0, 0), null);
|
||||
|
|
@ -61,7 +61,7 @@ public class InventoryFrameImportProbe
|
|||
public void Mounted_panels_sit_in_front_of_the_backdrop()
|
||||
{
|
||||
var datDir = DatDir();
|
||||
if (datDir is null) return; // CI: no live dat — skip (this is a smoke test)
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // CI: no live dat — skip (this is a smoke test)
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var layout = LayoutImporter.Import(dats, Frame, _ => (0u, 0, 0), null);
|
||||
|
|
@ -93,7 +93,7 @@ public class InventoryFrameImportProbe
|
|||
public void Close_button_resolves_and_invokes_controller_close_callback()
|
||||
{
|
||||
var datDir = DatDir();
|
||||
if (datDir is null) return; // CI: no live dat - skip
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // CI: no live dat - skip
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
var layout = LayoutImporter.Import(dats, Frame, _ => (0u, 0, 0), null);
|
||||
|
|
|
|||
|
|
@ -754,7 +754,7 @@ public sealed class ItemAppraisalTextFormatterTests
|
|||
{
|
||||
string? datDirectory = ResolveDatDirectory();
|
||||
if (datDirectory is null)
|
||||
return;
|
||||
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats =
|
||||
new AcDream.App.Tests.BoundedTestDatCollection(datDirectory);
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ public class ItemListCellTemplateTests
|
|||
public void Inventory_lists_resolve_a_real_nongeneric_empty_sprite()
|
||||
{
|
||||
var datDir = DatDir();
|
||||
if (datDir is null) return; // CI: no live dat — skip (smoke test)
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // CI: no live dat — skip (smoke test)
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
|
||||
|
|
@ -62,7 +62,7 @@ public class ItemListCellTemplateTests
|
|||
public void Inventory_lists_resolve_the_pinned_retail_sprites()
|
||||
{
|
||||
var datDir = DatDir();
|
||||
if (datDir is null) return; // CI: no live dat — skip
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // CI: no live dat — skip
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
// Pinned from the live dat + the 2026-06-22 visual gate. Contents = the 32x32 prototype's
|
||||
|
|
@ -78,7 +78,7 @@ public class ItemListCellTemplateTests
|
|||
public void Spell_favorite_list_resolves_its_cross_layout_pinned_empty_sprite()
|
||||
{
|
||||
var datDir = DatDir();
|
||||
if (datDir is null) return; // CI: no live dat — skip
|
||||
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // CI: no live dat — skip
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
ElementInfo infos = Assert.IsType<ElementInfo>(
|
||||
|
|
@ -98,7 +98,7 @@ public class ItemListCellTemplateTests
|
|||
public void Shared_UIItem_resolves_all_ten_cooldown_overlays()
|
||||
{
|
||||
var datDir = DatDir();
|
||||
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);
|
||||
ItemCooldownAssets? assets = ItemCooldownAssets.TryLoad(dats);
|
||||
|
|
|
|||
|
|
@ -16,14 +16,15 @@ 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")]
|
||||
[Trait("Lane", "Manual")]
|
||||
[Trait("ManualTask", "LiveMountProbe")]
|
||||
public sealed class KeyboardConfigLiveMountProbeTests
|
||||
{
|
||||
[Fact]
|
||||
public void ProbeKeyboardLiveMount()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual live-mount probe requires ACDREAM_PROBE_LIVE_MOUNT=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
@ -159,7 +160,7 @@ public sealed class KeyboardConfigLiveMountProbeTests
|
|||
public void ProbeKeyboardFontsAndKeyNameStrings()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual live-mount probe requires ACDREAM_PROBE_LIVE_MOUNT=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ namespace AcDream.App.Tests.UI.Layout;
|
|||
/// </para>
|
||||
/// </summary>
|
||||
[Trait("Purpose", "Diagnostic")]
|
||||
[Trait("Lane", "InstalledDat")]
|
||||
[Trait("Lane", "Manual")]
|
||||
[Trait("ManualTask", "LiveMountProbe")]
|
||||
public sealed class MapHousePanelSlotProbeTests
|
||||
{
|
||||
private const uint HostLayoutId = 0x2100006Eu;
|
||||
|
|
@ -48,7 +49,7 @@ public sealed class MapHousePanelSlotProbeTests
|
|||
public void ProbeMapHousePanelSlot()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual live-mount probe requires ACDREAM_PROBE_LIVE_MOUNT=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
|
|||
|
|
@ -16,7 +16,8 @@ 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")]
|
||||
[Trait("Lane", "Manual")]
|
||||
[Trait("ManualTask", "LiveMountProbe")]
|
||||
public sealed class OptionsPanelLiveMountProbeTests
|
||||
{
|
||||
[Fact]
|
||||
|
|
@ -24,7 +25,7 @@ public sealed class OptionsPanelLiveMountProbeTests
|
|||
public void ProbeLiveMountShapes()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual live-mount probe requires ACDREAM_PROBE_LIVE_MOUNT=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
@ -99,7 +100,7 @@ public sealed class OptionsPanelLiveMountProbeTests
|
|||
public void ProbeConfigMenuChrome()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual live-mount probe requires ACDREAM_PROBE_LIVE_MOUNT=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
@ -176,7 +177,7 @@ public sealed class OptionsPanelLiveMountProbeTests
|
|||
public void ProbeConfigMenuPopupChrome()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual live-mount probe requires ACDREAM_PROBE_LIVE_MOUNT=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
@ -320,7 +321,7 @@ public sealed class OptionsPanelLiveMountProbeTests
|
|||
public void ProbeMenuPopupSizingAndTextStyle()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual live-mount probe requires ACDREAM_PROBE_LIVE_MOUNT=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
@ -452,7 +453,7 @@ public sealed class OptionsPanelLiveMountProbeTests
|
|||
public void ProbeChatOpacityCaptions()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual live-mount probe requires ACDREAM_PROBE_LIVE_MOUNT=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
@ -486,7 +487,7 @@ public sealed class OptionsPanelLiveMountProbeTests
|
|||
public void ProbeFilterLabelHome()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual live-mount probe requires ACDREAM_PROBE_LIVE_MOUNT=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ public sealed class PaperdollClickMapTests
|
|||
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
|
||||
"Documents",
|
||||
"Asheron's Call");
|
||||
if (!Directory.Exists(datDir)) return;
|
||||
if (!Directory.Exists(datDir)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
PaperdollClickMap map = Assert.IsType<PaperdollClickMap>(PaperdollClickMap.Load(dats));
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ public class PaperdollSlotBackgroundTests
|
|||
string datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
|
||||
"Documents", "Asheron's Call");
|
||||
if (!Directory.Exists(datDir)) return;
|
||||
if (!Directory.Exists(datDir)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
IReadOnlyDictionary<uint, uint> actual = PaperdollSlotBackgrounds.ResolveEmptySprites(dats);
|
||||
|
|
|
|||
|
|
@ -15,7 +15,8 @@ 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")]
|
||||
[Trait("Lane", "Manual")]
|
||||
[Trait("ManualTask", "PowerbarProbe")]
|
||||
public sealed class PowerbarLayoutProbeTests
|
||||
{
|
||||
[Fact]
|
||||
|
|
@ -23,7 +24,7 @@ public sealed class PowerbarLayoutProbeTests
|
|||
public void ProbePowerbarAuthoredStrings()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_POWERBAR") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual powerbar probe requires ACDREAM_PROBE_POWERBAR=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
@ -44,7 +45,7 @@ public sealed class PowerbarLayoutProbeTests
|
|||
public void ProbeFriendsRowTemplate()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_POWERBAR") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual powerbar probe requires ACDREAM_PROBE_POWERBAR=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
@ -81,7 +82,7 @@ public sealed class PowerbarLayoutProbeTests
|
|||
public void ProbeSecureTradeLayout()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_POWERBAR") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual powerbar probe requires ACDREAM_PROBE_POWERBAR=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
@ -114,7 +115,7 @@ public sealed class PowerbarLayoutProbeTests
|
|||
public void ProbeTotalItemsTemplate()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_POWERBAR") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual powerbar probe requires ACDREAM_PROBE_POWERBAR=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
@ -153,7 +154,7 @@ public sealed class PowerbarLayoutProbeTests
|
|||
public void ProbeUiItemCatalog()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_POWERBAR") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual powerbar probe requires ACDREAM_PROBE_POWERBAR=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
@ -176,7 +177,7 @@ public sealed class PowerbarLayoutProbeTests
|
|||
public void ProbeCharacterSelectRowTemplate()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_POWERBAR") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual powerbar probe requires ACDREAM_PROBE_POWERBAR=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ namespace AcDream.App.Tests.UI.Layout;
|
|||
/// normal test runs deterministic and dat-independent.
|
||||
/// </summary>
|
||||
[Trait("Lane", "Manual")]
|
||||
[Trait("ManualTask", "FixtureGeneration")]
|
||||
public sealed class RetailLayoutFixtureGenerator
|
||||
{
|
||||
private static readonly (uint Id, string FileName)[] Layouts =
|
||||
|
|
|
|||
|
|
@ -18,14 +18,15 @@ 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")]
|
||||
[Trait("Lane", "Manual")]
|
||||
[Trait("ManualTask", "LiveMountProbe")]
|
||||
public sealed class SocialPanelLiveMountProbeTests
|
||||
{
|
||||
[Fact]
|
||||
public void ProbeLiveMountShapes()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual live-mount probe requires ACDREAM_PROBE_LIVE_MOUNT=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
@ -488,7 +489,7 @@ public sealed class SocialPanelLiveMountProbeTests
|
|||
public void ProbeSocialClickRouting()
|
||||
{
|
||||
if (Environment.GetEnvironmentVariable("ACDREAM_PROBE_LIVE_MOUNT") != "1")
|
||||
return;
|
||||
Assert.Fail("Lane=Manual live-mount probe requires ACDREAM_PROBE_LIVE_MOUNT=1.");
|
||||
|
||||
var datDir = Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ public sealed class SpellbookRowStyleTests
|
|||
string datDir = System.Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.UserProfile),
|
||||
"Documents", "Asheron's Call");
|
||||
if (!Directory.Exists(datDir)) return;
|
||||
if (!Directory.Exists(datDir)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
SpellbookRowStyle style = Assert.IsType<SpellbookRowStyle>(
|
||||
|
|
@ -37,7 +37,7 @@ public sealed class SpellbookRowStyleTests
|
|||
string datDir = System.Environment.GetEnvironmentVariable("ACDREAM_DAT_DIR")
|
||||
?? Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.UserProfile),
|
||||
"Documents", "Asheron's Call");
|
||||
if (!Directory.Exists(datDir)) return;
|
||||
if (!Directory.Exists(datDir)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
|
||||
|
||||
using var dats = new DatCollection(datDir, DatAccessType.Read);
|
||||
ElementInfo root = Assert.IsType<ElementInfo>(LayoutImporter.ImportInfos(
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ public sealed class RetailCursorCatalogTests
|
|||
{
|
||||
string? datDir = 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);
|
||||
CursorFeedbackKind[] kinds =
|
||||
|
|
@ -88,7 +88,7 @@ public sealed class RetailCursorCatalogTests
|
|||
{
|
||||
string? datDir = 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);
|
||||
var resolver = new RetailCursorResolver(dats, new object());
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ public sealed class SpewBoxLayoutDumpDiagnostic
|
|||
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);
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ public sealed class UiDatFontBorderPixelTests
|
|||
{
|
||||
string? datDir = 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);
|
||||
Assert.True(dats.TryGet<Font>(fontId, out Font? font), $"Font 0x{fontId:X8} not found");
|
||||
|
|
@ -60,7 +60,7 @@ public sealed class UiDatFontBorderPixelTests
|
|||
// correlation. Sweep the documented populated range (0x40000000-0x40000032).
|
||||
string? datDir = 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);
|
||||
int checkedCount = 0;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ using AcDream.App.Rendering.Gpu;
|
|||
using AcDream.App.Tests.Rendering.Gpu;
|
||||
using AcDream.App.UI;
|
||||
using DatReaderWriter.Types;
|
||||
using Xunit.Sdk;
|
||||
|
||||
namespace AcDream.App.Tests.UI;
|
||||
|
||||
|
|
@ -96,7 +95,8 @@ public sealed class UiRenderContextAlphaTests
|
|||
{
|
||||
byte[]? ttf = BitmapFont.TryLoadSystemMonospaceFont();
|
||||
if (ttf is null)
|
||||
throw SkipException.ForSkip("No system TTF font found for BitmapFont construction.");
|
||||
throw new InvalidOperationException(
|
||||
"Lane=SystemFont requires a host system TTF font; see docs/release-gate.md.");
|
||||
return new BitmapFont(device, ttf, pixelHeight: 16f);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue