headroom/e2e/_lib
JerrettDavis 3ca2ce08ae refactor(e2e): extract reusable harness into e2e/_lib
Centralize Docker / CI e2e test helpers so per-command suites can be
declarative and future commands (install, wrap, ...) can reuse the same
shim/PATH/assertion primitives without duplicating infrastructure.

The harness provides:

* Case dataclass describing one test as argv + shims + expected exit /
  stdout / stderr / files / custom callbacks
* make_shim() factory producing cross-platform executable shims (.sh on
  POSIX, .cmd on Windows) with noop / fail / record-args behaviors
* with_clean_path() context manager that isolates PATH to a minimal
  known-good value plus any extras supplied by the case
* agent_settings_path() locator mirroring headroom.cli.init so tests can
  assert the right file was written without touching private init state
* run_cases() for independent cases and run_case_sequence() for cases
  that must share scratch state (e.g. manifest-merge scenarios)

Shell / PowerShell shim-creation scripts are also shipped for CI steps
that need to drop a shim without spinning up Python first.

No behavior change in this commit - pure infrastructure. The init suite
and new subcommand suites consume the harness in follow-up commits.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 15:50:12 -05:00
..
__init__.py refactor(e2e): extract reusable harness into e2e/_lib 2026-04-23 15:50:12 -05:00
assertions.py refactor(e2e): extract reusable harness into e2e/_lib 2026-04-23 15:50:12 -05:00
harness.py refactor(e2e): extract reusable harness into e2e/_lib 2026-04-23 15:50:12 -05:00
make_shim.ps1 refactor(e2e): extract reusable harness into e2e/_lib 2026-04-23 15:50:12 -05:00
make_shim.sh refactor(e2e): extract reusable harness into e2e/_lib 2026-04-23 15:50:12 -05:00
path_env.py refactor(e2e): extract reusable harness into e2e/_lib 2026-04-23 15:50:12 -05:00
paths.py refactor(e2e): extract reusable harness into e2e/_lib 2026-04-23 15:50:12 -05:00
shims.py refactor(e2e): extract reusable harness into e2e/_lib 2026-04-23 15:50:12 -05:00