mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-02-18 19:03:16 +00:00
Add DevicetreeCompiler tests
This commit is contained in:
parent
26b4ea360e
commit
cc7d6d7674
13
.github/workflows/tests.yml
vendored
13
.github/workflows/tests.yml
vendored
@ -6,7 +6,7 @@ on:
|
||||
pull_request:
|
||||
types: [ opened, synchronize, reopened ]
|
||||
jobs:
|
||||
run:
|
||||
TactilityTests:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Checkout repo"
|
||||
@ -27,3 +27,14 @@ jobs:
|
||||
run: build/Tests/Tactility/TactilityTests
|
||||
- name: "Run TactilityKernel Tests"
|
||||
run: build/Tests/TactilityKernel/TactilityKernelTests
|
||||
DevicetreeTests:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Checkout repo"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: "Run Devicetree Tests"
|
||||
shell: bash
|
||||
working-directory: Buildscripts/DevicetreeCompiler/Tests
|
||||
run: python test_integration.py
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
description: Test device binding
|
||||
compatible: "test,device"
|
||||
properties:
|
||||
reg:
|
||||
type: int
|
||||
required: true
|
||||
status:
|
||||
type: string
|
||||
boolean-prop:
|
||||
type: boolean
|
||||
int-prop:
|
||||
type: int
|
||||
string-prop:
|
||||
type: string
|
||||
@ -0,0 +1,5 @@
|
||||
description: Test root binding
|
||||
compatible: "test,root"
|
||||
properties:
|
||||
model:
|
||||
type: string
|
||||
@ -0,0 +1,2 @@
|
||||
dts: test.dts
|
||||
bindings: bindings
|
||||
17
Buildscripts/DevicetreeCompiler/tests/data/test.dts
Normal file
17
Buildscripts/DevicetreeCompiler/tests/data/test.dts
Normal file
@ -0,0 +1,17 @@
|
||||
/dts-v1/;
|
||||
|
||||
#include <test_include.h>
|
||||
|
||||
/ {
|
||||
compatible = "test,root";
|
||||
model = "Test Model";
|
||||
|
||||
test_device: test-device@0 {
|
||||
compatible = "test,device";
|
||||
reg = <0>;
|
||||
status = "okay";
|
||||
boolean-prop;
|
||||
int-prop = <42>;
|
||||
string-prop = "hello";
|
||||
};
|
||||
};
|
||||
101
Buildscripts/DevicetreeCompiler/tests/test_integration.py
Normal file
101
Buildscripts/DevicetreeCompiler/tests/test_integration.py
Normal file
@ -0,0 +1,101 @@
|
||||
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
|
||||
)
|
||||
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}")
|
||||
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)
|
||||
Loading…
x
Reference in New Issue
Block a user