- RetailLayoutFixtureGenerator dumps LayoutDesc 0x2100006E slot 0x1000018F to the committed social_panel_2100006E_1000018F.json fixture, closing lane-A unknowns U3/U4/U6/U7/U10 with real DAT data (geometry/media/fonts/base refs, the fellowship empty/full frame containment, the panel/page P0x57 properties, the row-template arrays). - SocialPanelLiveMountProbeTests exercises the PRODUCTION mount path against the live DATs (ACDREAM_PROBE_LIVE_MOUNT=1): the tab host resolves as UiTabPanel with its 4-entry table, all four pages resolve, the fellowship frame pair and allegiance signature elements resolve, 0x10000492 is confirmed authored twice under the allegiance page, and every tab button caption is non-empty (the #375 resolver class). - SocialPanelControllerTests pins the fixture-driven conformance: the real (coordinator-addendum-correcting) tab table and default entry, the Fellowship/Allegiance empty-state gates, Friends/Squelch row population and revision-driven rebuilds, and the D1 INERT-button contract (AD-79) via FriendsAndSquelchActionButtons_AreClickable_ButHaveNoHandler. - RetailPanelCatalogTests gains the SocialPanel id/window-name/ Mounted-not-Toolbar pins (lane A §6.1: no toolbar button). Note: the ACDREAM_REGENERATE_UI_FIXTURES=1 run used to produce the new fixture also touched keyboard_config_21000009.json and options_2100002B.json on this machine (unrelated installed-DAT drift, likely from local DAT-editing tooling) -- both were reverted to HEAD before this commit; only the new social panel fixture is included. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
76 lines
3 KiB
C#
76 lines
3 KiB
C#
using AcDream.App.UI;
|
|
|
|
namespace AcDream.App.Tests.UI;
|
|
|
|
/// <summary>
|
|
/// Campaign OP slice OP3: pins the Options panel's entry in
|
|
/// <see cref="RetailPanelCatalog"/> — the data the toolbar's ALREADY-GENERIC
|
|
/// panel-button mechanism (<c>ToolbarController.PanelButtonIds</c> already
|
|
/// includes <c>0x1000019B</c>, byte-verified authored panel id 10 —
|
|
/// <c>tests/AcDream.App.Tests/UI/Layout/ToolbarControllerTests.cs</c>'s own
|
|
/// <c>PanelButtons</c> fixture at <c>(0x1000019Bu, 10u)</c>) reads to route
|
|
/// the toolbar Options button and <c>RetailUiRuntime.OnWindowVisibilityChanged</c>
|
|
/// to the retail Options window. No new toolbar wiring was needed — only
|
|
/// this catalog entry, which the existing generic mechanism (
|
|
/// <c>RetailUiRuntime.BindToolbarPanelButtons</c>,
|
|
/// <c>RetailPanelUiController</c>) picks up automatically.
|
|
/// </summary>
|
|
public sealed class RetailPanelCatalogTests
|
|
{
|
|
[Fact]
|
|
public void Options_PanelId_Is10_MatchingTheToolbarButtonsAuthoredProperty()
|
|
=> Assert.Equal(10u, RetailPanelCatalog.Options);
|
|
|
|
[Fact]
|
|
public void Options_ResolvesToTheOptionsWindowName()
|
|
{
|
|
Assert.True(RetailPanelCatalog.TryGetWindowName(RetailPanelCatalog.Options, out string name));
|
|
Assert.Equal(WindowNames.Options, name);
|
|
}
|
|
|
|
[Fact]
|
|
public void OptionsWindowName_ResolvesBackToThePanelId()
|
|
{
|
|
Assert.True(RetailPanelCatalog.TryGetPanelId(WindowNames.Options, out uint panelId));
|
|
Assert.Equal(RetailPanelCatalog.Options, panelId);
|
|
}
|
|
|
|
[Fact]
|
|
public void Options_IsListedInMountedPanels()
|
|
=> Assert.Contains(
|
|
(RetailPanelCatalog.Options, WindowNames.Options),
|
|
RetailPanelCatalog.MountedPanels);
|
|
|
|
[Fact]
|
|
public void Options_IsListedInToolbarPanels()
|
|
=> Assert.Contains(
|
|
(RetailPanelCatalog.Options, WindowNames.Options),
|
|
RetailPanelCatalog.ToolbarPanels);
|
|
|
|
// ── Campaign FA slice FA3 ────────────────────────────────────────────
|
|
|
|
[Fact]
|
|
public void SocialPanel_PanelId_Is12_MatchingTheLiveDatSlotProperty()
|
|
=> Assert.Equal(12u, RetailPanelCatalog.SocialPanel);
|
|
|
|
[Fact]
|
|
public void SocialPanel_ResolvesToTheSocialPanelWindowName()
|
|
{
|
|
Assert.True(RetailPanelCatalog.TryGetWindowName(RetailPanelCatalog.SocialPanel, out string name));
|
|
Assert.Equal(WindowNames.SocialPanel, name);
|
|
}
|
|
|
|
[Fact]
|
|
public void SocialPanel_IsListedInMountedPanels()
|
|
=> Assert.Contains(
|
|
(RetailPanelCatalog.SocialPanel, WindowNames.SocialPanel),
|
|
RetailPanelCatalog.MountedPanels);
|
|
|
|
/// <summary>Lane A §6.1: the open path is keyboard-only (F3/F4); retail
|
|
/// authors no toolbar button for either action.</summary>
|
|
[Fact]
|
|
public void SocialPanel_IsNotListedInToolbarPanels()
|
|
=> Assert.DoesNotContain(
|
|
(RetailPanelCatalog.SocialPanel, WindowNames.SocialPanel),
|
|
RetailPanelCatalog.ToolbarPanels);
|
|
}
|