forgetest: laser.py's unused motion imports, and the two helpers no test calls

laser.py imported wait_state, wait_state_text, wait_left_state and
drain_text from motion.py and used none of them. wait_state and
drain_text stay in motion.py, which uses them; wait_state_text and
wait_left_state had no caller anywhere, so they go.

Proof: pyflakes no longer reports laser.py's four unused imports and
adds no finding. The coverage lint reports 0 uncovered paths and 0
host-tested row problems over 108 tests (its one failure is
setup.check-lens's src/lensfind.* entry, which the forgectrl pin bump
clears); the gate self-check refuses an empty artifact cleanly; the
forgetest host suite passes under Linux (539 tests).

Acceptance: the shared text of laser.py and motion.py moves, and with
motion.py's the tests of every module that imports it (motion, laser,
tray, updlock, and bedsize through homeoff). Against the image on the
bench that adds no run: 6a434bb already changed both files' shared
text.
This commit is contained in:
ScottW514
2026-10-13 18:14:26 -04:00
parent 35add7cad0
commit 0350b943d7
2 changed files with 1 additions and 35 deletions
+1 -2
View File
@@ -28,8 +28,7 @@ import time
from ..catalog import test
from .. import hw
from ..runner import Failed
from .motion import (kernel_xy_mm, kernel_start, check_kernel_returned, wait_state,
wait_state_text, wait_left_state, drain_text, Watch, machine_idle,
from .motion import (kernel_xy_mm, kernel_start, check_kernel_returned, Watch, machine_idle,
_job, _job_post, _job_wait, _lease_holder, _port_state, _words)
_LASER_COVERS = [("grblhal-glowforge", "src/**"), ("kernel-module-glowforge", "**"),
-33
View File
@@ -63,39 +63,6 @@ def wait_state(ctx, g, prefix, timeout):
return None
def wait_state_text(ctx, g, prefix, timeout):
"""wait_state, keeping everything the controller said while polling.
The driver reports a press with a [MSG:] line the moment it acts on it -
inside the poll window - so a test that wants both the state and the
message has to collect them together."""
end = time.time() + timeout
text = ""
while time.time() < end:
ctx.checkpoint()
st = g.status_report()
text += g.drain()
if st["state"].startswith(prefix):
return st, text
time.sleep(0.1)
return None, text + g.drain()
def wait_left_state(ctx, g, prefix, timeout):
"""The first report whose state is no longer `prefix`, with the text.
Leaving a state is what proves a command was acted on; catching the
state it moves INTO is a race whenever the remaining work is short."""
end = time.time() + timeout
text = ""
while time.time() < end:
ctx.checkpoint()
st = g.status_report()
text += g.drain()
if not st["state"].startswith(prefix):
return st, text
time.sleep(0.1)
return None, text + g.drain()
def wait_idle(ctx, g, timeout=30.0, poll=0.05, grace=0.3):
"""Poll until Idle; returns (peak_feed_mm_min, states_seen, final_report).
An Idle report inside the first `grace` seconds counts only once a