Repository navigation
v0.3.3
Fixed
-
RESUME_AFTERdiscarded the run's accumulatedETST:ARGS. They were
folded intoRUN,RUN_ALLandRUN:, but aRESUME_AFTER:command
matched neither branch and fell through to the passthrough, silently
dropping them. Every deep-sleep test forces a resume cycle, so on any suite
that sleeps, the first cycle honoured the run's filters and environment and
every cycle after it ran without them. The failure runs in the dangerous
direction: coverage quietly changes while the run still exits green, because
a test that skips counts as a test that passed. Measured on ESP32-S3
hardware, a 19-cycle suite applied--envon the first cycle only, and all
five environment-gated cases then skipped while the suite reported
218 ran / 218 passed. Filters travel the same path, so a focused--tsrun
over-reported for the same reason.The folding logic is extracted to
include/etst/doctest/command_args.hso it
can be covered natively rather than fixed in place — it had no native
coverage precisely because it was tangled with Arduino dependencies. Ten
cases now exercise the real function; three of them failed before the fix. -
A plain
pytestrun could not collect this project's own test suite.
Two separate defects, both hidden by CI's
--ignore=tests/integration --ignore=tests/acceptance. First,tests/and
tests/acceptance/both hold aconftest.py, and pytest imports each under
the bare module nameconftest, so the seven unit-test modules doing
from conftest import MockProjectConfiggot whichever loaded first —
acceptance, alphabetically — and failed to import. The shared mocks moved to
tests/pio_mocks.py, an ordinary importable module;conftest.pykeeps only
theinstall_pio_mocks()side effect that must happen at collection time.
Second,pytest_addoptionfor--port/--baudsat in the acceptance
conftest, and pytest only calls that hook on initial conftests, so a
whole-tree run never declared the options and every acceptance fixture died
onValueError: no option named 'port'. The declaration moved to
tests/conftest.pyand droppedrequired=True, which pytest had been
applying to the entire session rather than the directory that asked for it.
Acceptance tests now skip without a--portinstead of breaking the run,
CI runspytest tests/ -vwith no ignore flags, and
tests/test_suite_hygiene.pyfails if plain collection ever breaks again.
Added
scripts/release.sh --publish <version>— finishes a release left local
by--no-push: pushesmainand the tag, then creates the GitHub release
from the CHANGELOG section for that version.--no-pushpreviously exited
with no way back into the script, so the publish half had to be retyped by
hand — which is how v0.3.2's GitHub release was actually created. The pushes
are no-ops if the tag went out by hand first, and the run refuses if the
GitHub release already exists.