<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ida-tui.git/tests/test_scenarios.py, branch main</title>
<subtitle>tui for headless ida</subtitle>
<id>https://git.sl0p.foo/ida-tui.git/atom/tests/test_scenarios.py?h=main</id>
<link rel='self' href='https://git.sl0p.foo/ida-tui.git/atom/tests/test_scenarios.py?h=main'/>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/'/>
<updated>2026-07-10T14:43:32Z</updated>
<entry>
<title>app: multi-line comments via literal \\n (long notes were clipping)</title>
<updated>2026-07-10T14:43:32Z</updated>
<author>
<name>blasty</name>
<email>blasty@local</email>
</author>
<published>2026-07-10T14:43:32Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/commit/?id=7ae37ba3b432bbb2482df9c99864350e685b0241'/>
<id>urn:sha1:7ae37ba3b432bbb2482df9c99864350e685b0241</id>
<content type='text'>
The comment prompt is single-line, so a long note rendered as one giant
'//' line that ran off the right edge and got clipped. Interpret a literal
'\\n' (backslash-n) in the comment text as a real newline in _do_comment
(the single choke point for the ';' prompt and the RPC 'comment' verb) —
Hex-Rays renders each as its own '//' line. Verified live and locked in
the comment_func scenario (multi-line render); suite 104 green.
</content>
</entry>
<entry>
<title>app: comment on a no-address line -&gt; function comment (was refused)</title>
<updated>2026-07-10T14:12:22Z</updated>
<author>
<name>blasty</name>
<email>blasty@local</email>
</author>
<published>2026-07-10T14:12:22Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/commit/?id=3b4e397f48e4519c6b5a24fede2e41707e355a92'/>
<id>urn:sha1:3b4e397f48e4519c6b5a24fede2e41707e355a92</id>
<content type='text'>
Pressing ';' on the decompiler's signature or local-declaration lines did
nothing ('no address on this line to comment') because those lines carry
no /*0xEA*/ marker. Fall back to the current function's entry ea so
commenting the header annotates the function itself; the prompt says
'function comment @ ...'. Body-line comments are unchanged.

New scenario comment_func locks it (suite 104 green).
</content>
</entry>
<entry>
<title>sync: extract shared settle/wait helpers (idatui/_sync.py)</title>
<updated>2026-07-10T13:05:34Z</updated>
<author>
<name>blasty</name>
<email>blasty@local</email>
</author>
<published>2026-07-10T13:05:34Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/commit/?id=39e4cb487e3540b45dba7fa912e60c1da9c1499b'/>
<id>urn:sha1:39e4cb487e3540b45dba7fa912e60c1da9c1499b</id>
<content type='text'>
Factor the pilot suite's ad-hoc 'poll until the UI reacted' loop into one
reusable module so the upcoming RPC driver and the tests share a single
source of truth for quiescence. wait_for() takes the yield strategy
(pilot.pause vs asyncio.sleep); drain()/workers_idle()/settle() give the
live driver a 'block until quiescent, then until pred holds' primitive
built on Textual's own _wait_for_screen + the worker manager.

Ctx.wait now delegates to wait_for; suite unchanged (101 green).
</content>
</entry>
<entry>
<title>tests: isolated scenario suite (parity with the monolith, fast --only)</title>
<updated>2026-07-10T12:53:54Z</updated>
<author>
<name>blasty</name>
<email>blasty@local</email>
</author>
<published>2026-07-10T12:53:54Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/commit/?id=8e68f8b27721a7f52ad01e15513ac9184a195936'/>
<id>urn:sha1:8e68f8b27721a7f52ad01e15513ac9184a195936</id>
<content type='text'>
Replace the 1200-line monolithic run() — one giant pilot session whose
100 checks shared mutable app state, so a single break cascaded and every
edit meant re-running the whole ~49s suite — with independent @scenario
functions over one shared boot.

Each scenario re-establishes its own function context and is wrapped so a
crash (or a check failure) fails that scenario alone instead of aborting
the rest. A reset() baselines between scenarios: dismiss modals, hide the
names pane and input widgets, clear the filter, default _pref=decomp.

A Ctx helper wraps app+pilot (check/wait/press/open/goto_ui, biggest(),
pick_decomp_ref(), ...). CLI: --only &lt;substr,...&gt; runs a subset in a few
seconds (structs in ~1.5s vs 49s), --stop-after, --list. Per-scenario
timing is printed, which is what surfaced a decomp-default view-flip that
had been passing a jump+back check trivially.

Full run: 101 checks green in ~41s.
</content>
</entry>
</feed>
