headroom/e2e/_lib/make_shim.ps1
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

24 lines
603 B
PowerShell

# Create a noop executable shim at $Dir\$Name.cmd for use in PATH during
# native (non-Docker) e2e tests on Windows. Mirrors e2e/_lib/shims.py
# make_shim(noop).
#
# Usage: make_shim.ps1 -Name <name> -Dir <dir>
param(
[Parameter(Mandatory = $true)][string]$Name,
[Parameter(Mandatory = $true)][string]$Dir
)
$ErrorActionPreference = "Stop"
if (-not (Test-Path $Dir)) {
New-Item -ItemType Directory -Path $Dir -Force | Out-Null
}
$path = Join-Path $Dir "$Name.cmd"
$content = @"
@echo off
exit /b 0
"@
Set-Content -Path $path -Value $content -Encoding ASCII -NoNewline
Write-Output $path