Files

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())