test(rawcli): guard Ctrl-t breadcrumb flips 0x<->0b + redraw
Closes the last loose end from the byte-line autocomplete fix: the entry-mode toggle correctly flips the breadcrumb prefix (0x <-> 0b) and requests a redraw. Adds test_toggle_updates_breadcrumb_prefix and updates the roadmap. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -23,8 +23,10 @@ appends (optionally after an auto-space) or drops, so the change is always a pur
|
|||||||
key handler: the menu now populates on every digit in both modes. Regression:
|
key handler: the menu now populates on every digit in both modes. Regression:
|
||||||
`TestKeyBindings::test_digit_binding_fires_completion_trigger_for_raw_bytes`.
|
`TestKeyBindings::test_digit_binding_fires_completion_trigger_for_raw_bytes`.
|
||||||
|
|
||||||
Still worth a quick live-REPL eyeball with a tag on the antenna, and confirming the Ctrl-t / Ctrl-_
|
The Ctrl-t / Ctrl-_ toggle correctly flips the breadcrumb `0x` <-> `0b` and requests a redraw
|
||||||
toggle flips the breadcrumb to `0b` (separate from the completion trigger, not yet re-verified).
|
(verified, guarded by `test_toggle_updates_breadcrumb_prefix`). An end-to-end live-session test
|
||||||
|
(`TestRawcliLiveSession`) drives the real PromptSession via a pipe input. A human eyeball of the
|
||||||
|
rendered dropdown on a real terminal is the only thing left unautomated.
|
||||||
|
|
||||||
## Priority 1 — MIFARE Classic (do this first)
|
## Priority 1 — MIFARE Classic (do this first)
|
||||||
|
|
||||||
|
|||||||
@@ -886,6 +886,26 @@ class TestKeyBindings:
|
|||||||
toggle.handler(event)
|
toggle.handler(event)
|
||||||
assert s.entry_mode == "bin" and buf.text == "30" # mode flipped, buffer intact
|
assert s.entry_mode == "bin" and buf.text == "30" # mode flipped, buffer intact
|
||||||
|
|
||||||
|
def test_toggle_updates_breadcrumb_prefix(self):
|
||||||
|
# the toggle flips the breadcrumb entry prefix 0x <-> 0b and requests a redraw
|
||||||
|
from types import SimpleNamespace
|
||||||
|
from prompt_toolkit.key_binding import KeyBindings
|
||||||
|
from prompt_toolkit.buffer import Buffer
|
||||||
|
from pm3py.cli.rawcli.entry import install_key_bindings
|
||||||
|
s = RawSession()
|
||||||
|
kb = KeyBindings()
|
||||||
|
install_key_bindings(kb, s)
|
||||||
|
toggle = next(b for b in kb.bindings
|
||||||
|
if getattr(b.keys[0], "value", b.keys[0]) in ("c-t", "c-_"))
|
||||||
|
redraws = []
|
||||||
|
ev = SimpleNamespace(current_buffer=Buffer(), data="",
|
||||||
|
app=SimpleNamespace(invalidate=lambda: redraws.append(1)))
|
||||||
|
assert "0x" in s.breadcrumb() and "0b" not in s.breadcrumb()
|
||||||
|
toggle.handler(ev)
|
||||||
|
assert "0b" in s.breadcrumb() and s.entry_prefix == "0b" and redraws # flipped + redraw
|
||||||
|
toggle.handler(ev)
|
||||||
|
assert "0x" in s.breadcrumb() and "0b" not in s.breadcrumb() # and back
|
||||||
|
|
||||||
def test_digit_binding_tracks_per_byte_base(self):
|
def test_digit_binding_tracks_per_byte_base(self):
|
||||||
# replay keystrokes through the real digit binding: 30 (hex) then binary -> 30 00000100
|
# replay keystrokes through the real digit binding: 30 (hex) then binary -> 30 00000100
|
||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
|
|||||||
Reference in New Issue
Block a user