acdream/tests/AcDream.App.Tests
Erik 0027690306 fix: stop the advanced-options scrollbar from snapping back every frame
UiMarkupList.OnDraw/DrawColumns re-ran their "keep the selected row
visible" clamp on EVERY draw call, not only when SelectedIndexSource
actually changed. A real bound list (MossTank's Advanced Options,
selected="{SelectedAdvancedOptionIndex}") holds a stable selected index
while the user operates the scrollbar, so the very next frame's OnDraw
saw that (unchanged) row now outside the just-scrolled view and yanked
_topRow straight back to it — undoing the arrow click or thumb drag
before it was ever visible. This is exactly the "sometimes works"
symptom: a scroll that happens to keep the selected row in view
survives; one that moves it out of view gets reverted on the next
frame. Gate the clamp on an observed change in the selected index
(int.MinValue sentinel so the first frame still reveals it), so a
stable selection no longer fights user-driven scrolling while a
genuinely new selection is still auto-revealed once.

New tests build a real nested Panel > Group > List tree at non-zero
offsets and drive it exclusively through UiRoot's public mouse entry
points, ruling out a coordinate-frame bug in the hit-test/dispatch
chain as well as proving the fix for both single-column and
<column>-mode lists (arrow click and thumb drag).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-07 18:20:53 +02:00
..
Architecture test: replace gameplay owner source freezes 2026-08-18 16:49:38 +02:00
Audio feat(audio): Campaign A slice A2 — retail's 2D pan+gain mixer replaces AL 3D 2026-08-08 21:58:50 +02:00
Combat fix #436: combat no-target refusal reaches the SpewBox with retail's exact text 2026-08-24 12:53:11 +02:00
Composition Finish bounded lighting-observer cleanup and record verification 2026-09-05 15:15:59 +02:00
Configuration fix: complete retail parity stability pass 2026-08-28 20:01:39 +02:00
Credentials test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
Diagnostics fix(headless): S1 ACDREAM_HEADLESS_CONSOLE=0 disables even on a real terminal 2026-09-07 07:51:41 +02:00
Input fix(camera): port retail offset adjustment laws 2026-08-31 05:42:23 +02:00
Interaction fix(client): restore retail interaction parity 2026-08-26 20:45:11 +02:00
Net fix: complete retail parity stability pass 2026-08-28 20:01:39 +02:00
Physics fix #482: restore neighboring outdoor wall collision 2026-09-05 18:42:31 +02:00
Platform feat(mosstank): add VTank-style automation PoC 2026-08-27 18:57:21 +02:00
Plugins fix #363: route plugin system text to the chat window, not SpewBox 2026-09-07 08:22:22 +02:00
Rendering chore(plugins): remove the Smoke gate plugin; MossTank shelf icon 0x06002C41 2026-09-06 16:49:17 +02:00
Runtime fix(client): restore retail interaction parity 2026-08-26 20:45:11 +02:00
Settings fix: complete retail parity stability pass 2026-08-28 20:01:39 +02:00
Spells feat(headless): share immutable gameplay content 2026-07-27 09:00:48 +02:00
Streaming fix #483: restore far terrain and close OVERHAUL with #484 deferred 2026-09-06 10:22:51 +02:00
UI fix: stop the advanced-options scrollbar from snapping back every frame 2026-09-07 18:20:53 +02:00
World fix: complete retail parity stability pass 2026-08-28 20:01:39 +02:00
AcDream.App.Tests.csproj fix(rendering): split ordinary transform and sidecar indices 2026-09-05 03:19:55 +02:00
BoundedTestDatCollection.cs perf(content): remove exception-driven setup probes 2026-07-24 15:12:21 +02:00
FramePhaseTestDoubles.cs refactor(runtime): move session lifetime and ordered transport 2026-07-25 19:39:24 +02:00
FrameProfilerReportTests.cs perf(diag): complete trustworthy Slice A capture tooling 2026-07-24 12:46:51 +02:00
FrameStatsBufferTests.cs fix(pipeline): MP0 - profiler toggle-path hygiene + Max() seed (review follow-up) 2026-07-05 19:26:28 +02:00
GameRuntimeTestFactory.cs refactor(runtime): cut graphical host over to canonical root 2026-07-26 19:06:09 +02:00
GlobalUsings.cs feat(runtime): share chat commands and run login sequence 2026-08-14 20:27:45 +02:00
LiveEntityRuntimeFixture.cs test(runtime): restore the world-frame precondition across first-entry fixtures 2026-08-03 13:32:28 +02:00
LiveEntitySpawnFixture.cs feat(runtime): C3c - production placement cutover: both hosts on the residence conductors (routes 1+8) 2026-08-02 18:10:33 +02:00
packages.neutral.lock.json build: make release restore reproducible 2026-08-18 10:29:00 +02:00
RuntimeDatAccessArchitectureTests.cs feat(headless): share immutable process content 2026-07-27 08:37:24 +02:00
RuntimeDatCollectionFactoryTests.cs feat(headless): share immutable process content 2026-07-27 08:37:24 +02:00
RuntimeOptionsRetailUiTests.cs fix: complete retail parity stability pass 2026-08-28 20:01:39 +02:00
RuntimeOptionsTests.cs fix(vt): F host-composed VtankProfiles storage replaces raw path string 2026-09-06 23:03:04 +02:00
RuntimeWorldTransitTestDriver.cs refactor(runtime): own teleport destination correlation 2026-07-26 17:52:34 +02:00
ThreadSchedulingCollection.cs test(ci): harden scheduling and allocation gates 2026-08-27 19:28:10 +02:00
ZeroAllocationProbe.cs test(app): measure the warmed path, not the path being warmed (#250) 2026-07-29 03:42:08 +02:00
ZeroAllocationProbeTests.cs test(app): measure the warmed path, not the path being warmed (#250) 2026-07-29 03:42:08 +02:00