mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-06-19 12:25:05 +00:00
* Optional internal pull-ups for SD/MMC pins in DTS * Selectable on‑chip LDO channel for SD/MMC power (can be disabled) * Added several sensor/driver modules to generic ESP32 device configurations so that they become part of the SDKs * SD card mount now prints card information for clearer diagnostics * Fix for bug DTS boolean parsing. Improved tests to catch these issues. * Expanded SDK integration test to include new modules and headers * Modularized packaging to generate per‑module build files and include driver assets
113 lines
3.7 KiB
Python
113 lines
3.7 KiB
Python
import os
|
|
import subprocess
|
|
import shutil
|
|
import sys
|
|
import tempfile
|
|
|
|
# Path to the compile.py script
|
|
# We assume this script is in Buildscripts/DevicetreeCompiler/tests/
|
|
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
PROJECT_ROOT = os.path.abspath(os.path.join(SCRIPT_DIR, ".."))
|
|
COMPILE_SCRIPT = os.path.join(PROJECT_ROOT, "compile.py")
|
|
TEST_DATA_DIR = os.path.join(SCRIPT_DIR, "data")
|
|
|
|
def run_compiler(config_path, output_path):
|
|
result = subprocess.run(
|
|
[sys.executable, COMPILE_SCRIPT, config_path, output_path],
|
|
capture_output=True,
|
|
text=True,
|
|
cwd=PROJECT_ROOT,
|
|
timeout=60
|
|
)
|
|
return result
|
|
|
|
def test_compile_success():
|
|
print("Running test_compile_success...")
|
|
with tempfile.TemporaryDirectory() as output_dir:
|
|
result = run_compiler(TEST_DATA_DIR, output_dir)
|
|
|
|
if result.returncode != 0:
|
|
print(f"FAILED: Compilation failed: {result.stderr} {result.stdout}")
|
|
return False
|
|
|
|
for filename in ["devicetree.c", "devicetree.h"]:
|
|
generated_path = os.path.join(output_dir, filename)
|
|
expected_path = os.path.join(TEST_DATA_DIR, f"expected_{filename}")
|
|
|
|
if not os.path.exists(generated_path):
|
|
print(f"FAILED: {filename} not generated")
|
|
return False
|
|
|
|
if not os.path.exists(expected_path):
|
|
print(f"FAILED: {os.path.basename(expected_path)} not found in test data")
|
|
return False
|
|
|
|
diff_result = subprocess.run(["diff", "-u", expected_path, generated_path], capture_output=True, text=True)
|
|
if diff_result.returncode != 0:
|
|
print(f"FAILED: {filename} does not match expected_{filename}")
|
|
print(diff_result.stdout)
|
|
return False
|
|
|
|
print("PASSED")
|
|
return True
|
|
|
|
def test_compile_invalid_dts():
|
|
print("Running test_compile_invalid_dts...")
|
|
with tempfile.TemporaryDirectory() as tmp_dir:
|
|
bad_data_dir = os.path.join(tmp_dir, "bad_data")
|
|
os.makedirs(bad_data_dir)
|
|
output_dir = os.path.join(tmp_dir, "output")
|
|
os.makedirs(output_dir)
|
|
|
|
with open(os.path.join(bad_data_dir, "devicetree.yaml"), "w") as f:
|
|
f.write("dts: bad.dts\nbindings: bindings")
|
|
|
|
with open(os.path.join(bad_data_dir, "bad.dts"), "w") as f:
|
|
f.write("/dts-v1/;\n / { invalid syntax }")
|
|
|
|
os.makedirs(os.path.join(bad_data_dir, "bindings"))
|
|
|
|
result = run_compiler(bad_data_dir, output_dir)
|
|
|
|
if result.returncode == 0:
|
|
print("FAILED: Compilation should have failed but succeeded")
|
|
return False
|
|
|
|
print("PASSED")
|
|
return True
|
|
|
|
def test_compile_missing_config():
|
|
print("Running test_compile_missing_config...")
|
|
with tempfile.TemporaryDirectory() as output_dir:
|
|
result = run_compiler("/non/existent/path", output_dir)
|
|
|
|
if result.returncode == 0:
|
|
print("FAILED: Compilation should have failed for non-existent path")
|
|
return False
|
|
|
|
if "Directory not found" not in result.stdout:
|
|
print(f"FAILED: Expected 'Directory not found' error message, got: {result.stdout}")
|
|
return False
|
|
|
|
print("PASSED")
|
|
return True
|
|
|
|
if __name__ == "__main__":
|
|
tests = [
|
|
test_compile_success,
|
|
test_compile_invalid_dts,
|
|
test_compile_missing_config
|
|
]
|
|
|
|
failed = 0
|
|
for test in tests:
|
|
if not test():
|
|
failed += 1
|
|
|
|
if failed > 0:
|
|
print(f"\n{failed} tests failed")
|
|
sys.exit(1)
|
|
else:
|
|
print("\nAll tests passed")
|
|
sys.exit(0)
|