77 lines
2.4 KiB
Python
Executable File
77 lines
2.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Behavioral smoke tests for build_pinmux_csv.py."""
|
|
|
|
import csv
|
|
import json
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
|
|
SCRIPT = Path(__file__).with_name("build_pinmux_csv.py")
|
|
HEADERS = ["引脚号", "功能名称", "引脚名称", "有效电平", "FMUX寄存器", "FMUX当前值", "FMUX默认值", "FMUX_list"]
|
|
|
|
|
|
def run(payload):
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
root = Path(tmp)
|
|
source = root / "input.json"
|
|
output = root / "out.csv"
|
|
source.write_text(json.dumps(payload, ensure_ascii=False), encoding="utf-8")
|
|
result = subprocess.run(
|
|
[sys.executable, str(SCRIPT), "--input", str(source), "--output", str(output)],
|
|
text=True,
|
|
capture_output=True,
|
|
check=False,
|
|
)
|
|
data = output.read_bytes() if output.exists() else b""
|
|
return result, data
|
|
|
|
|
|
def valid_row():
|
|
return {
|
|
"pin_number": "A12",
|
|
"function_name": "CAM_RST0",
|
|
"pin_name": "PAD_MIPI_TXM4",
|
|
"is_gpio": True,
|
|
"active_level": "低有效",
|
|
"fmux_register": "0x030010A4",
|
|
"fmux_current": "3",
|
|
"fmux_default": "0",
|
|
"fmux_list": "0:XGPIOA_20; 1:CAM_MCLK0; 3:GPIOA_20",
|
|
}
|
|
|
|
|
|
def main():
|
|
result, data = run({"project_name": "测试 项目", "rows": [valid_row()]})
|
|
assert result.returncode == 0, result.stderr
|
|
assert data.startswith(b"\xef\xbb\xbf")
|
|
rows = list(csv.reader(data.decode("utf-8-sig").splitlines()))
|
|
assert rows[0] == HEADERS
|
|
assert len(rows) == 2 and rows[1][0] == "A12"
|
|
|
|
bad = valid_row()
|
|
bad["active_level"] = None
|
|
result, data = run({"project_name": "bad", "rows": [bad]})
|
|
assert result.returncode == 2 and not data
|
|
assert "GPIO 有效电平无效" in result.stderr
|
|
|
|
duplicate = valid_row()
|
|
result, data = run({"project_name": "dup", "rows": [valid_row(), duplicate]})
|
|
assert result.returncode == 2 and not data
|
|
assert "引脚号重复" in result.stderr
|
|
|
|
mismatched_mux = valid_row()
|
|
mismatched_mux["fmux_current"] = "7"
|
|
result, data = run({"project_name": "mux", "rows": [mismatched_mux]})
|
|
assert result.returncode == 2 and not data
|
|
assert "FMUX当前值 7 未出现在 FMUX_list" in result.stderr
|
|
|
|
print("Pinmux CSV behavioral tests passed")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|