Ken Van Hoeylandt 26c17986c6
GPIO refactored (#495)
* **Refactor**
  * GPIO subsystem moved to a descriptor-based model for per-pin ownership and runtime pin management; many platform drivers now acquire/release descriptors.
  * Device trees and drivers now use GPIO phandle-style pin specifications across all boards and all drivers.

* **Behavior**
  * Device list now encodes per-device status (ok/disabled); boot will skip disabled devices accordingly.

* **Deprecation**
  * Legacy GPIO HAL marked deprecated and replaced with descriptor-based interfaces.

* **Chores**
  * Bindings and platform configs updated to the new GPIO pin-spec format.
2026-02-11 20:34:54 +01:00

103 lines
3.2 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
if not os.path.exists(os.path.join(output_dir, "devicetree.c")):
print("FAILED: devicetree.c not generated")
return False
if not os.path.exists(os.path.join(output_dir, "devicetree.h")):
print("FAILED: devicetree.h not generated")
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)