mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2026-06-15 12:26:33 +03: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
|
// load the tests
|
||||||
// this is generated from this file when compiled with -DEMSESP_UNITY_CREATE
|
// this is generated from this file when compiled with -DEMSESP_UNITY_CREATE
|
||||||
// copy the output to the test_api.h file
|
// copy the output to the test_api.h file
|
||||||
|
#ifndef EMSESP_UNITY_CREATE
|
||||||
#include "test_api.h"
|
#include "test_api.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
// Unity's setup call - is called before each test - empty for now
|
// Unity's setup call - is called before each test - empty for now
|
||||||
void setUp() {
|
void setUp() {
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user