Files
agentskills/skills-ref/tests/test_prompt.py
T
Keith Lazuka 547831f3a2 Add skills-ref library (#2)
Reference library for Agent Skills with CLI and Python API:
- validate: Check skill directories for valid SKILL.md with proper frontmatter
- read-properties: Parse and output skill properties as JSON
- to-prompt: Generate suggested <available_skills> XML for agent prompts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-18 09:39:21 -05:00

71 lines
1.7 KiB
Python

"""Tests for prompt module."""
from skills_ref.prompt import to_prompt
def test_empty_list():
result = to_prompt([])
assert result == "<available_skills>\n</available_skills>"
def test_single_skill(tmp_path):
skill_dir = tmp_path / "my-skill"
skill_dir.mkdir()
(skill_dir / "SKILL.md").write_text("""---
name: my-skill
description: A test skill
---
Body
""")
result = to_prompt([skill_dir])
assert "<available_skills>" in result
assert "</available_skills>" in result
assert "<name>\nmy-skill\n</name>" in result
assert "<description>\nA test skill\n</description>" in result
assert "<location>" in result
assert "SKILL.md" in result
def test_multiple_skills(tmp_path):
skill_a = tmp_path / "skill-a"
skill_a.mkdir()
(skill_a / "SKILL.md").write_text("""---
name: skill-a
description: First skill
---
Body
""")
skill_b = tmp_path / "skill-b"
skill_b.mkdir()
(skill_b / "SKILL.md").write_text("""---
name: skill-b
description: Second skill
---
Body
""")
result = to_prompt([skill_a, skill_b])
assert result.count("<skill>") == 2
assert result.count("</skill>") == 2
assert "skill-a" in result
assert "skill-b" in result
def test_special_characters_escaped(tmp_path):
"""XML special characters in description are escaped."""
skill_dir = tmp_path / "special-skill"
skill_dir.mkdir()
(skill_dir / "SKILL.md").write_text("""---
name: special-skill
description: Use <foo> & <bar> tags
---
Body
""")
result = to_prompt([skill_dir])
assert "&lt;foo&gt;" in result
assert "&amp;" in result
assert "&lt;bar&gt;" in result
assert "<foo>" not in result
assert "<bar>" not in result