feat: 发布固件底层开发 Skill 套件
This commit is contained in:
commit
c7ae3b4ce1
72 files changed
+10212
No files matched your search
@@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Behavioral tests for the bundled CV18 GPIO pinout catalog."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib.util
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
SCRIPT = Path(__file__).with_name("query_builtin_pinout.py")
|
||||
SPEC = importlib.util.spec_from_file_location("query_builtin_pinout", SCRIPT)
|
||||
assert SPEC is not None and SPEC.loader is not None
|
||||
MODULE = importlib.util.module_from_spec(SPEC)
|
||||
SPEC.loader.exec_module(MODULE)
|
||||
|
||||
|
||||
def selected_id(chip: str) -> str:
|
||||
return str(MODULE.select_document(chip)["id"])
|
||||
|
||||
|
||||
def main() -> int:
|
||||
expected = {
|
||||
"CV1810": "cv181xc",
|
||||
"CV1811C": "cv181xc",
|
||||
"CV1812CPA": "cv181xc",
|
||||
"CV1812HP": "cv181xh",
|
||||
"CV1815JA": "cv1815j",
|
||||
"CV1841CP": "cv184xc",
|
||||
"CV1842CP": "cv184xc",
|
||||
"CV1842HP": "cv184xh",
|
||||
"CV1843HP": "cv184xh",
|
||||
}
|
||||
for chip, identifier in expected.items():
|
||||
assert selected_id(chip) == identifier, chip
|
||||
|
||||
try:
|
||||
MODULE.select_document("CV1801B")
|
||||
except MODULE.PinoutError as exc:
|
||||
assert "没有对应" in str(exc)
|
||||
else:
|
||||
raise AssertionError("unsupported chips must fail closed")
|
||||
|
||||
manifest = MODULE.load_manifest()
|
||||
assert len(manifest) == 5
|
||||
for document in manifest:
|
||||
sheet, rows = MODULE.load_pin_rows(document["path"])
|
||||
assert "管腳信息表" in sheet or "管脚信息表" in sheet
|
||||
assert rows
|
||||
results, unmatched = MODULE.query_rows(rows, ["SD0_CLK", "GPIOA_7"], "exact")
|
||||
assert not unmatched, document["id"]
|
||||
assert [item["query"] for item in results] == ["SD0_CLK", "GPIOA_7"]
|
||||
gpio_matches = results[1]["matches"]
|
||||
assert any(
|
||||
mux.get("function") == "XGPIOA[7]"
|
||||
for row in gpio_matches
|
||||
for mux in row["muxes"]
|
||||
)
|
||||
|
||||
with tempfile.TemporaryDirectory() as temporary:
|
||||
project = Path(temporary) / "CV1815JA-misleading-name"
|
||||
project.mkdir()
|
||||
config = project / "buildEnvConfig.sh"
|
||||
config.write_text("export EP_CHIP='CV1842HP'\n", encoding="utf-8")
|
||||
result = MODULE.run(project, None, ["SD0_CLK"], "exact")
|
||||
assert result["passed"] is True
|
||||
assert result["chip"] == "CV1842HP"
|
||||
assert result["pinout"]["id"] == "cv184xh"
|
||||
assert result["chip_evidence"]["source"] == "project-buildEnvConfig"
|
||||
|
||||
config.write_text("EP_CHIP=CV1811C\nEP_CHIP=CV1841CP\n", encoding="utf-8")
|
||||
try:
|
||||
MODULE.project_chip(project)
|
||||
except MODULE.PinoutError as exc:
|
||||
assert "唯一确定" in str(exc)
|
||||
else:
|
||||
raise AssertionError("ambiguous EP_CHIP must fail closed")
|
||||
|
||||
config.write_text("EP_CHIP=$CV1841CP\n", encoding="utf-8")
|
||||
try:
|
||||
MODULE.project_chip(project)
|
||||
except MODULE.PinoutError as exc:
|
||||
assert "静态芯片名称" in str(exc)
|
||||
else:
|
||||
raise AssertionError("dynamic EP_CHIP must fail closed")
|
||||
|
||||
result = MODULE.run(None, "CV1841CP", ["NOT_A_REAL_PIN"], "exact")
|
||||
assert result["passed"] is False
|
||||
assert result["unmatched"] == ["NOT_A_REAL_PIN"]
|
||||
|
||||
print("Bundled CV18 GPIO pinout behavioral tests passed")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in new issue
Block a user