mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2026-06-09 18:19:36 +00:00
update tests
This commit is contained in:
76
scripts/generate_test_api.py
Normal file
76
scripts/generate_test_api.py
Normal file
@@ -0,0 +1,76 @@
|
||||
#!/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`.
|
||||
"""
|
||||
|
||||
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())
|
||||
@@ -68,7 +68,9 @@ static TestStream stream;
|
||||
// load the tests
|
||||
// this is generated from this file when compiled with -DEMSESP_UNITY_CREATE
|
||||
// copy the output to the test_api.h file
|
||||
#ifndef EMSESP_UNITY_CREATE
|
||||
#include "test_api.h"
|
||||
#endif
|
||||
|
||||
// Unity's setup call - is called before each test - empty for now
|
||||
void setUp() {
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user