67 lines
2.6 KiB
Python
67 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
import json
|
|
import shutil
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parent.parent
|
|
sys.path.insert(0, str(ROOT / "scripts"))
|
|
|
|
from skill_ir_paths import candidate_paths, find_skill_ir, find_skill_ir_path # noqa: E402
|
|
|
|
|
|
TMP = ROOT / "tests" / "tmp_skill_ir_paths"
|
|
|
|
|
|
def write_json(path: Path, payload: dict) -> None:
|
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
path.write_text(json.dumps(payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
|
|
|
|
|
def main() -> None:
|
|
shutil.rmtree(TMP, ignore_errors=True)
|
|
TMP.mkdir(parents=True, exist_ok=True)
|
|
|
|
root_ir, root_path = find_skill_ir(ROOT, "yao-meta-skill", require_schema=True)
|
|
assert root_path == "skill-ir/examples/yao-meta-skill.json", root_path
|
|
assert root_ir["schema_version"] == "2.0.0", root_ir
|
|
assert find_skill_ir_path(ROOT, "yao-meta-skill", require_schema=True) == root_path
|
|
|
|
preferred = TMP / "reports" / "skill-ir.json"
|
|
example = TMP / "skill-ir" / "examples" / "demo-skill.json"
|
|
write_json(preferred, {"schema_version": "2.0.0", "name": "reports-copy"})
|
|
write_json(example, {"schema_version": "2.0.0", "name": "example-copy"})
|
|
payload, source = find_skill_ir(TMP, "demo-skill", require_schema=True)
|
|
assert source == "reports/skill-ir.json", source
|
|
assert payload["name"] == "reports-copy", payload
|
|
|
|
preferred.unlink()
|
|
payload, source = find_skill_ir(TMP, "demo-skill", require_schema=True)
|
|
assert source == "skill-ir/examples/demo-skill.json", source
|
|
assert payload["name"] == "example-copy", payload
|
|
|
|
example.unlink()
|
|
write_json(TMP / "skill-ir" / "examples" / "zzz-extra.json", {"schema_version": "2.0.0", "name": "wildcard"})
|
|
payload, source = find_skill_ir(TMP, "missing-name", require_schema=True)
|
|
assert source == "skill-ir/examples/zzz-extra.json", source
|
|
assert payload["name"] == "wildcard", payload
|
|
|
|
(TMP / "skill-ir" / "examples" / "zzz-extra.json").unlink()
|
|
write_json(TMP / "reports" / "skill-ir.json", {"name": "no-schema"})
|
|
assert find_skill_ir_path(TMP, "demo-skill", require_schema=True, fallback_source="missing") == "missing"
|
|
assert find_skill_ir_path(TMP, "demo-skill", require_schema=False) == "reports/skill-ir.json"
|
|
|
|
paths = [str(path.relative_to(TMP)) for path in candidate_paths(TMP, "demo-skill")]
|
|
assert paths[:3] == [
|
|
"reports/skill-ir.json",
|
|
"skill-ir/examples/demo-skill.json",
|
|
"skill-ir/examples/tmp_skill_ir_paths.json",
|
|
], paths
|
|
|
|
print(json.dumps({"ok": True}, ensure_ascii=False, indent=2))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|