mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2026-06-13 19:36:26 +03:00
79 lines
2.8 KiB
Python
79 lines
2.8 KiB
Python
#!/usr/bin/env python3
|
|
"""Regenerate test/test_api/test_api.h from the native-test-create build, then run the API tests.
|
|
|
|
Workflow:
|
|
1. Run `pio run -e native-test-create -t exec` and capture its output.
|
|
2. Extract everything between the START/END "CUT HERE" markers.
|
|
3. Write that block to test/test_api/test_api.h.
|
|
4. Run `pio run -e native-test -t exec`.
|
|
|
|
run with `python3 scripts/generate_test_api.py`
|
|
"""
|
|
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
START_MARKER = "// ---------- START - CUT HERE ----------"
|
|
END_MARKER = "// ---------- END - CUT HERE ----------"
|
|
|
|
# project root is the parent of this script's "scripts" directory
|
|
PROJECT_ROOT = Path(__file__).resolve().parent.parent
|
|
OUTPUT_HEADER = PROJECT_ROOT / "test" / "test_api" / "test_api.h"
|
|
|
|
|
|
def run(cmd, capture):
|
|
"""Run a command in the project root. Streams to the console; optionally captures stdout."""
|
|
print(f"\n>>> {' '.join(cmd)}\n", flush=True)
|
|
if capture:
|
|
# capture stdout while still echoing it so the user sees progress
|
|
result = subprocess.run(cmd, cwd=PROJECT_ROOT, text=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
|
print(result.stdout, end="", flush=True)
|
|
return result.returncode, result.stdout
|
|
result = subprocess.run(cmd, cwd=PROJECT_ROOT)
|
|
return result.returncode, None
|
|
|
|
|
|
def extract_between_markers(output):
|
|
"""Return the text strictly between the START and END markers (markers excluded)."""
|
|
lines = output.splitlines()
|
|
start = end = None
|
|
for i, line in enumerate(lines):
|
|
if START_MARKER in line and start is None:
|
|
start = i
|
|
elif END_MARKER in line and start is not None:
|
|
end = i
|
|
break
|
|
if start is None or end is None:
|
|
return None
|
|
return "\n".join(lines[start + 1 : end]) + "\n"
|
|
|
|
|
|
def main():
|
|
# 1. build + exec the generator
|
|
code, output = run(["pio", "run", "-e", "native-test-create", "-t", "exec"], capture=True)
|
|
if code != 0:
|
|
print(f"\nERROR: 'native-test-create' exec failed with exit code {code}", file=sys.stderr)
|
|
return code
|
|
|
|
# 2. extract the header content
|
|
content = extract_between_markers(output)
|
|
if content is None:
|
|
print(f"\nERROR: could not find content between markers:\n {START_MARKER}\n {END_MARKER}", file=sys.stderr)
|
|
return 1
|
|
|
|
# 3. write it to test_api.h
|
|
OUTPUT_HEADER.parent.mkdir(parents=True, exist_ok=True)
|
|
OUTPUT_HEADER.write_text(content, encoding="utf-8")
|
|
print(f"\nWrote {len(content.splitlines())} lines to {OUTPUT_HEADER}", flush=True)
|
|
|
|
# 4. build + exec the actual tests
|
|
code, _ = run(["pio", "run", "-e", "native-test", "-t", "exec"], capture=False)
|
|
if code != 0:
|
|
print(f"\nERROR: 'native-test' exec failed with exit code {code}", file=sys.stderr)
|
|
return code
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|