acdream/tests/AcDream.App.Tests/UI
Erik 2d626971d9 fix(vtank): slice 7 round D item 4 — resizable panel, larger default
Owner live report 2026-09-07: "The size of the entire window needs to
be enlarged for default and should also be resizeable." mosstank.xml's
main panel is now resizable="true" with minw/minh floored at the
PRE-round-D authored size (856x236) and a new default authored size
~15% larger in both directions (984x271) — every one of the nine tab
groups grows by the identical 128px-wide/35px-tall delta (848x194 ->
976x229), preserving the original 0px group-to-panel margin design
exactly.

Every tab <group> gets anchor="left top right bottom" so a future
manual drag-resize keeps growing it. The two single-list tabs with
nothing beside their list (Monsters, Meta) give their list the SAME
full stretch, widened AND heightened by the same 128x35 delta at
author time — anchors only react to CHANGE from their first-draw
baseline, so bumping only the outer group while leaving the list's own
geometry untouched would leave it visually unchanged at the new
default (the growth invisibly reserved as margin until a further
manual resize). Every other tab's list(s) grow in HEIGHT only (+35),
pinned to whichever horizontal edge doesn't have a sibling list/button
column in the way (Items/Consumables/Buffs/Route all have one) — a
right-pinned sibling (Consumables' Excluded Scarab list, Buffs'
Blacklisted Buff Families list) is repositioned +128 at author time so
it already sits flush against the enlarged default's right edge.
Trailing "Add" rows/status labels below a taller list shift down by
the same +35 and get anchor="bottom" to keep tracking. Options/
Profiles/Vitals need no internal changes — only their own group grows.

Deviations, both documented in mosstank.xml's own Round D item 4
comment: Monsters' extra 128px of list width lands in its LAST column
(the MoveDown icon, which always absorbs the remainder per the markup
grammar) — a wider icon cell, not a redesigned grid; seven of nine
tabs' groups grow wider than their content uses, leaving harmless
empty space on the right at the enlarged default rather than
redesigning nine tabs' pixel geometry in one pass (a deliberate,
minimal-risk choice — nothing moved INTO another control's space, only
into previously-empty margin, so every existing AssertNoSiblingOverlap/
AssertWithinParent guarantee still holds).

Tests added:
- MossTankMarkupContractTests.AuthoredShellFitsTheMinimumCanvasAnd...
  updated to the new 984x271 default.
- PanelIsResizableFlooredAtThePreRoundDAuthoredSize (resizable="true",
  minw/minh = 856/236).
- EveryStretchingListDeclaresARealAnchor (contract pin: every list in
  Monsters/Items/Consumables/Buffs/Route/Meta declares a real anchor
  attribute, not the silent left-top default).
- MossTankMarkupBuildOverRealFilesTests.
  WideningTheRealMainPanelWidensTheRealMonstersList (App.Tests): builds
  the REAL mosstank.xml against a real MossTankPanel, widens the built
  root by 100px, and confirms the Monsters list's own Width grows in
  turn — the same mechanism MarkupResizableAnchorTests already proves
  against synthetic markup, now proven against the shipped file.

Mutation shown to fail: temporarily removing the Monsters list's own
anchor attribute failed the new re-layout test (976 -> 976, no growth);
restored and confirmed green. A build-copy gotcha surfaced while
writing these tests: dotnet build's default incremental copy did NOT
refresh the test projects' deployed mosstank.xml after editing the
source file (PreserveNewest apparently didn't see it as newer under
normal incremental evaluation) — dotnet build --no-incremental was
needed to get a fresh copy into bin/ before the size/anchor tests
would actually exercise the new markup instead of a stale cached copy.

Verified: dotnet build AcDream.slnx -c Release (clean, --no-incremental)
green; MossTank suite 715/715 (713 -> 715, two new markup contract
pins); App markup/plugin filter 243/243 (242 -> 243, one new re-layout
test).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-07 17:24:31 +02:00
..
Layout feat(rendering): port retail building degrade walk 2026-09-04 22:29:18 +02:00
AutoWieldGenerationTests.cs fix(client): restore retail interaction parity 2026-08-26 20:45:11 +02:00
ChatMainWindowFilterSeedTests.cs fix(ui): OP5 review fixes — thumb sync, batched opacity writes, cull register row, tests 2026-08-11 07:36:54 +02:00
ChatTranscriptLogWriterTests.cs feat(chat): CT-B4 — @log, and the research block that was a wrong question 2026-08-21 11:28:20 +02:00
ClientCommandControllerTests.cs fix: complete retail parity stability pass 2026-08-28 20:01:39 +02:00
ControlsIniTests.cs feat(D.2b): controls.ini stylesheet loader + apply title color 2026-06-14 17:31:55 +02:00
CursorFeedbackControllerTests.cs fix(ui): restore retail vitals and window interactions 2026-08-20 13:26:35 +02:00
DatWidgetFactoryZOrderTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
DragDropSpineTests.cs fix(client): restore retail interaction parity 2026-08-26 20:45:11 +02:00
GameplayConfirmationControllerTests.cs fix: social gate round 2, part 2 - confirmation-dialog sentences + the 2026-08-13 21:10:42 +02:00
IconComposerTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
ItemInteractionControllerTests.cs feat(mosstank): add VTank-style automation PoC 2026-08-27 18:57:21 +02:00
JournalPersistenceTests.cs feat(journal): QJ3/QJ4/QJ5 — both remaining tabs are live 2026-08-21 15:42:05 +02:00
KeyedIconInstalledDatTests.cs fix(plugin-ui): plugin did icons use retail's keyed-white recolor, not a raw blit 2026-09-06 17:40:39 +02:00
LayoutImporterMountTests.cs feat(ui): D.2b-B — sub-window mount (inheritor attaches base subtree) 2026-06-20 22:36:20 +02:00
MarkupDocumentTests.cs merge(vt): bring in retail scrollbar chrome + resizable/anchor markup 2026-09-07 16:01:51 +02:00
MarkupIconTests.cs fix(plugin-ui): Slice B residuals - shelf icon sink without magenta, validated icon bindings, negative ids, memoized DID resolves 2026-09-06 16:28:13 +02:00
MarkupListColumnsTests.cs fix(app): slice 7 fix round B item 10 — no row-selection band on column grids 2026-09-07 12:59:43 +02:00
MarkupPanelClickTests.cs fix(mosstank): unclickable button, empty skill list, dev font, and chat output 2026-08-20 18:27:28 +02:00
MarkupResizableAnchorTests.cs feat(ui): add resizable/minw/minh + anchor grammar to plugin markup 2026-09-07 15:35:14 +02:00
MossTankIconInstalledDatTests.cs fix(plugin-ui): plugin did icons use retail's keyed-white recolor, not a raw blit 2026-09-06 17:40:39 +02:00
MossTankMarkupBuildOverRealFilesTests.cs fix(vtank): slice 7 round D item 4 — resizable panel, larger default 2026-09-07 17:24:31 +02:00
PluginSidePanelTests.cs fix(plugin-ui): Slice B residuals - shelf icon sink without magenta, validated icon bindings, negative ids, memoized DID resolves 2026-09-06 16:28:13 +02:00
PluginSidePanelToggleGlyphClipTests.cs fix(plugin-ui): shelf children must not anchor — the per-draw anchor pass was undoing collapse/reflow geometry 2026-09-06 16:04:04 +02:00
RetailCursorCatalogTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
RetailCursorManagerTests.cs feat(ui): complete retail cursor state machine 2026-07-11 08:31:40 +02:00
RetailItemConfirmationControllerTests.cs refactor(runtime): own interaction transactions 2026-07-26 11:13:09 +02:00
RetailMarkupIconResolverInstalledDatTests.cs fix(plugin-ui): plugin did icons use retail's keyed-white recolor, not a raw blit 2026-09-06 17:40:39 +02:00
RetailMarkupIconResolverMemoizationTests.cs fix(plugin-ui): plugin did icons use retail's keyed-white recolor, not a raw blit 2026-09-06 17:40:39 +02:00
RetailPanelCatalogTests.cs test(ui): FA3 -- social panel fixture dump, live-mount probe, conformance tests 2026-08-12 02:58:28 +02:00
RetailSkillTrainingConfirmationControllerTests.cs fix(ui): restore retail skill training confirmation 2026-07-13 17:57:29 +02:00
RetailUiAutomationProbeTests.cs fix(overhaul): integrate reviewed resize capture sequencing 2026-09-05 13:26:06 +02:00
RetailUiInteractionFlowTests.cs fix(client): restore retail interaction parity 2026-08-26 20:45:11 +02:00
RetailUiRuntimeLeaseTests.cs refactor(lifetime): own render resource prefixes 2026-07-22 14:42:14 +02:00
RetailWindowLayoutPersistenceTests.cs test(ui): cover resizable plugin windows through RetailWindowManager + persistence 2026-09-07 15:40:31 +02:00
RetailWindowLockPresentationControllerTests.cs fix(ui): restore retail vitals and window interactions 2026-08-20 13:26:35 +02:00
RetailWindowManagerTests.cs test(ui): cover resizable plugin windows through RetailWindowManager + persistence 2026-09-07 15:40:31 +02:00
RetailWindowOpacityControllerTests.cs fix #379: chat opacity fade was scoped to every window, not just chat 2026-08-11 23:00:57 +02:00
RetainedPanelControllerGroupTests.cs refactor(ui): own retained controller lifetimes 2026-07-10 23:35:26 +02:00
RetainedUiInputBindingTests.cs refactor(input): own pointer and callback lifetime 2026-07-22 11:59:33 +02:00
SpewBoxControllerTests.cs feat(chat): retail text style — two-plane glyph outlines, authored SpewBox/chat styles 2026-08-10 19:28:34 +02:00
SpewBoxLayoutDumpDiagnostic.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
UiAncestorClipTests.cs fix(CT-GF1): UiLabel opts out of the self-clip — plugin markup text restored 2026-08-25 07:28:26 +02:00
UiButtonStateMachineTests.cs feat(ui): port retained widget foundations 2026-07-10 17:55:41 +02:00
UiButtonTests.cs fix: complete retail parity stability pass 2026-08-28 20:01:39 +02:00
UiClipRectTests.cs fix(ui): complete retail inventory scroll polish 2026-07-11 10:56:33 +02:00
UiCollapsibleFrameTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
UiCompositeShutdownTests.cs test(runtime): add unattended connected R6 soak 2026-07-20 12:12:08 +02:00
UiDatFontBorderPixelTests.cs fix(plugin-ui): Slice A review fixes - real grip/toggle children, dialog z-order, persisted collapse/hide intent 2026-09-06 13:51:25 +02:00
UiDatFontTests.cs test(app): measure the warmed path, not the path being warmed (#250) 2026-07-29 03:42:08 +02:00
UiElementChildOrderTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
UiFieldTests.cs feat(chat): CT-C2 Escape leaves the entry; CT-C3 the timestamp is grey 2026-08-21 08:28:45 +02:00
UiItemListGridTests.cs feat(ui): D.2b item interaction + retail cursors + live character sheet 2026-07-03 09:18:43 +02:00
UiItemListScrollTests.cs fix(ui): complete retail inventory scroll polish 2026-07-11 10:56:33 +02:00
UiItemListTests.cs feat(items): port retail shared cooldown overlays 2026-07-23 10:41:16 +02:00
UiItemSlotTests.cs fix(vendor): Slice 6 review corrections — ownership-checked retire, live slider display, drag-proof shop rows, hardened buy reservation 2026-08-07 23:12:50 +02:00
UiLayoutPolicyTests.cs fix(ui): preserve cropped chat and button faces 2026-07-10 18:11:14 +02:00
UiMarkupListScrollbarTests.cs feat: retail scrollbar chrome for markup <menu> overflow and <list> overflow 2026-09-07 15:43:00 +02:00
UiMenuPlainStyleTests.cs fix: plain <menu> popup scrollbar draws retail chrome, not a flat bar 2026-09-07 15:42:25 +02:00
UiMenuPopupRoutingTests.cs fix #374: open dropdown popups get first claim on pointer routing 2026-08-11 15:17:17 +02:00
UiMenuTests.cs fix: complete retail parity stability pass 2026-08-28 20:01:39 +02:00
UiMeterTests.cs feat(D.2b): UiMeter vital bar + fill-geometry tests 2026-06-14 16:38:07 +02:00
UiMeterVerticalTests.cs feat(ui): D.2b-B — UiMeter vertical fill (burden bar, retail m_eDirection 2/4) 2026-06-21 08:58:37 +02:00
UiNineSlicePanelTests.cs feat(D.2b): UiNineSlicePanel — 8-piece retail window frame + geometry test 2026-06-14 16:36:11 +02:00
UiRadarTests.cs feat(ui): port retail radar and compass 2026-07-10 16:14:37 +02:00
UiRectOutlinePainterOrderTests.cs chore(plugin-ui): review cleanup — hermetic memo tests, shelf button anchors, outline pin, bounded miss cache; file #486/#487; correct #461 2026-09-06 17:09:46 +02:00
UiRenderContextAlphaTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
UiRenderContextDrawStringDatOutlineTests.cs feat(chat): retail text style — two-plane glyph outlines, authored SpewBox/chat styles 2026-08-10 19:28:34 +02:00
UiRootFixedCanvasTests.cs fix(ui,runtime): Campaign LA gate-round-2 batch-review fixes F1,F3-F8; file #401 2026-08-15 12:28:06 +02:00
UiRootInputTests.cs fix(client): restore retail interaction parity 2026-08-26 20:45:11 +02:00
UiScrollablePanelTests.cs fix #371: straddling rows clip at the viewport edge instead of vanishing whole 2026-08-11 17:08:21 +02:00
UiScrollableTests.cs feat(ui): unify retained window mounts 2026-07-10 22:22:25 +02:00
UiScrollbarTests.cs fix(ui): disabled scrollbars keep retail hover hot-tracking 2026-08-24 19:54:28 +02:00
UiTemplateListBoxFlushPreservingScrollTests.cs feat(ui): FA4 -- fellowship page fully live 2026-08-12 04:40:53 +02:00
UiTemplateListBoxViewportTests.cs feat(render): implement Campaign AR and terrain fidelity 2026-08-22 13:13:29 +02:00
UiTextDatFontTests.cs feat(D.2b): UiText (Type 12) -- generic text + Type-12 flip; transcript factory-built (widget-generalization Task 5) 2026-06-16 17:39:02 +02:00
UiTextTests.cs feat(ui): CT-A1 — multi-line text elements can carry coloured runs 2026-08-21 07:18:55 +02:00