Skip to content

v0.3.3

Choose a tag to compare

@m-mcgowan m-mcgowan released this 11 Sep 21:33
· 3 commits to main since this release

Fixed

  • RESUME_AFTER discarded the run's accumulated ETST:ARGS. They were
    folded into RUN, RUN_ALL and RUN:, but a RESUME_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 --env on 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 --ts run
    over-reported for the same reason.

    The folding logic is extracted to include/etst/doctest/command_args.h so 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 pytest run 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 a conftest.py, and pytest imports each under
    the bare module name conftest, so the seven unit-test modules doing
    from conftest import MockProjectConfig got whichever loaded first —
    acceptance, alphabetically — and failed to import. The shared mocks moved to
    tests/pio_mocks.py, an ordinary importable module; conftest.py keeps only
    the install_pio_mocks() side effect that must happen at collection time.
    Second, pytest_addoption for --port/--baud sat 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
    on ValueError: no option named 'port'. The declaration moved to
    tests/conftest.py and dropped required=True, which pytest had been
    applying to the entire session rather than the directory that asked for it.
    Acceptance tests now skip without a --port instead of breaking the run,
    CI runs pytest tests/ -v with no ignore flags, and
    tests/test_suite_hygiene.py fails if plain collection ever breaks again.

Added

  • scripts/release.sh --publish <version> — finishes a release left local
    by --no-push: pushes main and the tag, then creates the GitHub release
    from the CHANGELOG section for that version. --no-push previously 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.