Two tests built through the full MarkupDocument.Build parse -> bind ->
draw (recording renderer) -> click pipeline, transcribing the two real
VTank list shapes named in the fix round brief
(refs/vtank/uTank2.ViewXML.mainView.xml):
- EndToEnd_MetaShapedSixColumnList: lstMetaRules's shape (3 icon
columns, a 150px text column, then two width="*" text columns, the
second with an onclick) at a list width (703) chosen so the two auto
columns' 505px leftover does NOT divide evenly (252/253) — proving
the last one absorbs the rounding slack. Asserts each column kind
draws inside its own x-range and a click in each of the six columns
reaches its own bound callback with the right row (icon columns
fire their own onclick; the plain text column still selects; the
onclick-bearing trailing text column fires that instead).
- EndToEnd_MonstersShapedTwentyThreeColumnList: lstMonsters's shape
(14 check columns, 7 text columns each given an onclick per fix item
1, 2 icon columns) built from real fixedwidth values with NO "*"
anywhere, at a list width (724) equal to the exact sum of every
column's declared width — the "no auto column, last absorbs the
remainder as today" case. Asserts the column-kind counts, each drawn
kind's x-range, and one representative click per kind reaches its own
callback (other same-kind columns share a dummy callback, proving the
bound-per-column dispatch, not just "some column of that kind fired").
Both use iconkind="item" for their icon columns (not the default
"did") so the fake resolver's echoed id is the literal texture drawn,
sidestepping PluginIcons.Normalize's did-namespace OR — an incidental
discovery while writing these (the first draft asserted on raw ids and
failed against the normalized 0x06000000-tagged textures).
Verified meaningful two ways: both failed first against the pre-fix
raw-id assumption (texture ids came back normalized), and — a stronger
check specific to these integration tests, since the underlying
mechanics were already covered by earlier fix-round commits — a
temporary mutation of ColumnLayout's auto-column share computation
(forcing share=0) made EndToEnd_MetaShapedSixColumnList fail exactly as
expected before being reverted.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>