Generated 2026-08-04T15:06:52+00:00.
| Step | pytest code | Emulator output (stderr) | Screen |
|---|---|---|---|
| PASS 0. Boot preamble (common to every fresh-booted scenario below) |
(no test action here -- every fresh-booted scenario below starts from this same state) |
1 lines, common to all 3 fresh-booted scenarios [2026-08-04 15:06:44.466] [lisa_rom] [info] input-server: connection accepted |
![]() |
| PASS 1. Boot menu appears |
@pytest.mark.fresh_boot
def test_boot_menu_appears(lisa_rom_proc: LisaEmuProcess, record_step):
"""The ROM's boot-device-selection screen renders and settles without
any input -- the baseline capture the other scenarios diff against.
Explicitly fresh_boot (not just relying on being first) so this test's
intent is clear even if tests are reordered or run individually."""
out = RESULTS_DIR / "01_boot_menu.png"
with InputClient(str(lisa_rom_proc.uds_path)) as client:
stable = client.wait_stable(timeout_ms=10000, quiet_ms=500)
_capture_and_sync(client, str(out))
record_step("1. Boot menu appears", lisa_rom_proc.current_test_output(), out, stable,
lisa_rom_proc.was_fresh_boot)
assert stable, f"display never settled; stderr:\n{lisa_rom_proc.stderr_text()}"
assert out.exists() and out.stat().st_size > 0
|
10 lines after the common preamble (11 total) [2026-08-04 15:06:44.478] [lisa_rom] [info] display(png): wrote /tmp/pytest-of-runner/pytest-0/test_boot_menu_appears0/frame-000000.png (720x364) [2026-08-04 15:06:44.478] [lisa_rom] [warning] VIA2: unimplemented register PCR at offset 0x18 (read) [2026-08-04 15:06:44.478] [lisa_rom] [warning] VIA2: unimplemented register PCR at offset 0x18 (write) [2026-08-04 15:06:44.484] [lisa_rom] [warning] VIA2: unimplemented register SR at offset 0x14 (write) [2026-08-04 15:06:44.484] [lisa_rom] [warning] SYSCTRL: read from write-only register VERT_RETRACE at offset 0xffc [2026-08-04 15:06:44.484] [lisa_rom] [warning] SYSCTRL: no register at offset 0xffe (read) [2026-08-04 15:06:44.484] [lisa_rom] [warning] SYSCTRL: no register at offset 0x27e5 (read) [2026-08-04 15:06:44.494] [lisa_rom] [info] display(png): wrote /tmp/pytest-of-runner/pytest-0/test_boot_menu_appears0/frame-000001.png (720x364) [2026-08-04 15:06:44.511] [lisa_rom] [info] display(png): wrote /tmp/pytest-of-runner/pytest-0/test_boot_menu_appears0/frame-000002.png (720x364) [2026-08-04 15:06:45.099] [lisa_rom] [info] display: captured /home/runner/work/lisa-source-project/lisa-source-project/tests/system/results/boot_screens/01_boot_menu.png (720x364) |
![]() |
| PASS 2. After reset selected (Cmd/1) |
def test_boot_menu_after_reset_selected(lisa_rom_proc: LisaEmuProcess, record_step):
"""Cmd/1: RESTART (see module docstring). Continues
test_boot_menu_appears's instance rather than rebooting -- safe since
that test never sends input, so its ending state is the pristine menu."""
out = RESULTS_DIR / "02_after_reset_cmd1.png"
with InputClient(str(lisa_rom_proc.uds_path)) as client:
client.wait_stable(timeout_ms=10000, quiet_ms=500) # let the menu settle first
_cmd_digit(client, KEY_1)
stable = client.wait_stable(timeout_ms=10000, quiet_ms=500)
_capture_and_sync(client, str(out))
record_step("2. After reset selected (Cmd/1)", lisa_rom_proc.current_test_output(), out, stable,
lisa_rom_proc.was_fresh_boot)
assert stable, f"display never settled after Cmd/1; stderr:\n{lisa_rom_proc.stderr_text()}"
assert out.exists() and out.stat().st_size > 0
|
6 lines during this test (continuing the previous instance) [2026-08-04 15:06:45.154] [lisa_rom] [info] input-server: connection closed [2026-08-04 15:06:45.154] [lisa_rom] [info] input-server: connection accepted [2026-08-04 15:06:45.677] [lisa_rom] [info] display(png): wrote /tmp/pytest-of-runner/pytest-0/test_boot_menu_appears0/frame-000003.png (720x364) [2026-08-04 15:06:45.694] [lisa_rom] [info] display(png): wrote /tmp/pytest-of-runner/pytest-0/test_boot_menu_appears0/frame-000004.png (720x364) [2026-08-04 15:06:46.230] [lisa_rom] [info] display: captured /home/runner/work/lisa-source-project/lisa-source-project/tests/system/results/boot_screens/02_after_reset_cmd1.png (720x364) [2026-08-04 15:06:46.280] [lisa_rom] [info] input-server: connection closed |
![]() |
| PASS 3. After disk selected (Cmd/3) |
@pytest.mark.fresh_boot
def test_boot_menu_after_disk_selected(lisa_rom_proc: LisaEmuProcess, record_step):
"""Cmd/3: STARTUP FROM... (opens a startup-device submenu; see module
docstring). Two images: before (the pristine menu, same baseline as
test_boot_menu_appears's own capture but taken independently within
this test so the row is self-contained) and after Cmd/3. fresh_boot:
this needs the original pristine menu, not whatever state Cmd/1 (the
previous test) left behind."""
out_before = RESULTS_DIR / "03a_before_disk_select.png"
out_after = RESULTS_DIR / "03b_after_disk_cmd3.png"
with InputClient(str(lisa_rom_proc.uds_path)) as client:
stable_before = client.wait_stable(timeout_ms=10000, quiet_ms=500)
_capture_and_sync(client, str(out_before))
_cmd_digit(client, KEY_3)
stable_after = client.wait_stable(timeout_ms=10000, quiet_ms=500)
_capture_and_sync(client, str(out_after))
all_stable = stable_before and stable_after
record_step("3. After disk selected (Cmd/3)", lisa_rom_proc.current_test_output(),
[out_before, out_after], all_stable, lisa_rom_proc.was_fresh_boot)
assert all_stable, f"display never settled after Cmd/3; stderr:\n{lisa_rom_proc.stderr_text()}"
assert out_before.exists() and out_before.stat().st_size > 0
assert out_after.exists() and out_after.stat().st_size > 0
|
14 lines after the common preamble (15 total) [2026-08-04 15:06:46.315] [lisa_rom] [warning] VIA2: unimplemented register PCR at offset 0x18 (read) [2026-08-04 15:06:46.316] [lisa_rom] [warning] VIA2: unimplemented register PCR at offset 0x18 (write) [2026-08-04 15:06:46.316] [lisa_rom] [info] display(png): wrote /tmp/pytest-of-runner/pytest-0/test_boot_menu_after_disk_sele0/frame-000000.png (720x364) [2026-08-04 15:06:46.321] [lisa_rom] [warning] VIA2: unimplemented register SR at offset 0x14 (write) [2026-08-04 15:06:46.322] [lisa_rom] [warning] SYSCTRL: read from write-only register VERT_RETRACE at offset 0xffc [2026-08-04 15:06:46.322] [lisa_rom] [warning] SYSCTRL: no register at offset 0xffe (read) [2026-08-04 15:06:46.322] [lisa_rom] [warning] SYSCTRL: no register at offset 0x27e5 (read) [2026-08-04 15:06:46.332] [lisa_rom] [info] display(png): wrote /tmp/pytest-of-runner/pytest-0/test_boot_menu_after_disk_sele0/frame-000001.png (720x364) [2026-08-04 15:06:46.349] [lisa_rom] [info] display(png): wrote /tmp/pytest-of-runner/pytest-0/test_boot_menu_after_disk_sele0/frame-000002.png (720x364) [2026-08-04 15:06:47.162] [lisa_rom] [info] display: captured /home/runner/work/lisa-source-project/lisa-source-project/tests/system/results/boot_screens/03a_before_disk_select.png (720x364) [2026-08-04 15:06:47.215] [lisa_rom] [warning] VIA1: unimplemented register PCR at offset 0x60 (read) [2026-08-04 15:06:47.215] [lisa_rom] [warning] VIA1: unimplemented register PCR at offset 0x60 (write) [2026-08-04 15:06:47.233] [lisa_rom] [info] display(png): wrote /tmp/pytest-of-runner/pytest-0/test_boot_menu_after_disk_sele0/frame-000003.png (720x364) [2026-08-04 15:06:47.759] [lisa_rom] [info] display: captured /home/runner/work/lisa-source-project/lisa-source-project/tests/system/results/boot_screens/03b_after_disk_cmd3.png (720x364) |
![]() ![]() |
| PASS 4. Selection via mouse |
@pytest.mark.fresh_boot
def test_mouse_selection(lisa_rom_proc: LisaEmuProcess, record_step):
"""Selection via mouse instead of keyboard: move to the "STARTUP
FROM..." button, press and hold (captured after a short settle -- the
button should be visibly highlighted while held, same as clicking it
for real), then release (captured after a full settle -- same result
Cmd/3 produces in test_boot_menu_after_disk_selected). Three images:
before any mouse action, mid-press, and after release. fresh_boot:
needs the original pristine menu's button layout, not whatever the
previous test's submenu left on screen.
KNOWN BUG, not yet fixed: mouse_move currently makes the cursor
disappear entirely instead of moving it to the target position --
confirmed by sending mouse_move alone (no click) and comparing
before/after captures; root cause not yet isolated (candidates:
cops.hpp's mouse-delta encoding, entry_cli.cpp's delta-splitting, or a
COPS protocol desync). So today: image 2 shows a missing cursor, not a
highlighted button, and image 3 shows the unchanged original menu, not
a disk-selection submenu. The 3-image structure and both settle points
are already correct for when that's fixed -- only the assertions below
(currently just wait_stable()+files-written) would need tightening
then, to actually check the click landed."""
out_before = RESULTS_DIR / "04a_before_click.png"
out_pressed = RESULTS_DIR / "04b_button_highlighted.png"
out_after = RESULTS_DIR / "04c_after_disk_selection.png"
with InputClient(str(lisa_rom_proc.uds_path)) as client:
stable_before = client.wait_stable(timeout_ms=10000, quiet_ms=500)
_capture_and_sync(client, str(out_before))
client.mouse_move(455, 178) # "STARTUP FROM..." button center
client.wait_stable(timeout_ms=2000, quiet_ms=200) # let the move itself settle first
client.mouse_button(0, True)
# Short settle, not the usual 500ms: a highlighted-while-held state
# is exactly the kind of thing a longer quiet window could blow
# past if something else were still animating.
stable_pressed = client.wait_stable(timeout_ms=2000, quiet_ms=150)
_capture_and_sync(client, str(out_pressed))
client.mouse_button(0, False)
stable_after = client.wait_stable(timeout_ms=10000, quiet_ms=500)
_capture_and_sync(client, str(out_after))
all_stable = stable_before and stable_pressed and stable_after
record_step("4. Selection via mouse", lisa_rom_proc.current_test_output(),
[out_before, out_pressed, out_after], all_stable, lisa_rom_proc.was_fresh_boot)
assert all_stable, f"display never settled; stderr:\n{lisa_rom_proc.stderr_text()}"
assert all(p.exists() and p.stat().st_size > 0 for p in (out_before, out_pressed, out_after))
|
13 lines after the common preamble (14 total) [2026-08-04 15:06:47.845] [lisa_rom] [warning] VIA2: unimplemented register PCR at offset 0x18 (read) [2026-08-04 15:06:47.845] [lisa_rom] [warning] VIA2: unimplemented register PCR at offset 0x18 (write) [2026-08-04 15:06:47.846] [lisa_rom] [info] display(png): wrote /tmp/pytest-of-runner/pytest-0/test_mouse_selection0/frame-000000.png (720x364) [2026-08-04 15:06:47.851] [lisa_rom] [warning] VIA2: unimplemented register SR at offset 0x14 (write) [2026-08-04 15:06:47.851] [lisa_rom] [warning] SYSCTRL: read from write-only register VERT_RETRACE at offset 0xffc [2026-08-04 15:06:47.851] [lisa_rom] [warning] SYSCTRL: no register at offset 0xffe (read) [2026-08-04 15:06:47.851] [lisa_rom] [warning] SYSCTRL: no register at offset 0x27e5 (read) [2026-08-04 15:06:47.861] [lisa_rom] [info] display(png): wrote /tmp/pytest-of-runner/pytest-0/test_mouse_selection0/frame-000001.png (720x364) [2026-08-04 15:06:47.878] [lisa_rom] [info] display(png): wrote /tmp/pytest-of-runner/pytest-0/test_mouse_selection0/frame-000002.png (720x364) [2026-08-04 15:06:48.367] [lisa_rom] [info] display: captured /home/runner/work/lisa-source-project/lisa-source-project/tests/system/results/boot_screens/04a_before_click.png (720x364) [2026-08-04 15:06:48.429] [lisa_rom] [info] display(png): wrote /tmp/pytest-of-runner/pytest-0/test_mouse_selection0/frame-000003.png (720x364) [2026-08-04 15:06:48.848] [lisa_rom] [info] display: captured /home/runner/work/lisa-source-project/lisa-source-project/tests/system/results/boot_screens/04b_button_highlighted.png (720x364) [2026-08-04 15:06:49.532] [lisa_rom] [info] display: captured /home/runner/work/lisa-source-project/lisa-source-project/tests/system/results/boot_screens/04c_after_disk_selection.png (720x364) |
![]() ![]() ![]() |