#!/usr/bin/env python3
"" "
Regression tests for quick skill validation.
"" "
import tempfile
from pathlib import Path
from unittest import TestCase, main
import quick_validate
class TestQuickValidate(TestCase):
def setUp(self):
self.temp_dir = Path(tempfile.mkdtemp(prefix="test_quick_validate_" ))
def tearDown(self):
import shutil
if self.temp_dir.exists():
shutil.rmtree(self.temp_dir)
def test_accepts_crlf_frontmatter(self):
skill_dir = self.temp_dir / "crlf-skill"
skill_dir.mkdir(parents=True , exist_ok=True )
content = "---\r\nname: crlf-skill\r\ndescription: ok\r\n---\r\n# Skill\r\n"
(skill_dir / "SKILL.md" ).write_text(content, encoding="utf-8" )
valid, message = quick_validate.validate_skill(skill_dir)
self.assertTrue(valid, message)
def test_rejects_missing_frontmatter_closing_fence(self):
skill_dir = self.temp_dir / "bad-skill"
skill_dir.mkdir(parents=True , exist_ok=True )
content = "---\nname: bad-skill\ndescription: missing end\n# no closing fence\n"
(skill_dir / "SKILL.md" ).write_text(content, encoding="utf-8" )
valid, message = quick_validate.validate_skill(skill_dir)
self.assertFalse(valid)
self.assertEqual(message, "Invalid frontmatter format" )
def test_fallback_parser_handles_multiline_frontmatter_without_pyyaml(self):
skill_dir = self.temp_dir / "multiline-skill"
skill_dir.mkdir(parents=True , exist_ok=True )
content = "" "---
name: multiline-skill
description: Works without pyyaml
allowed-tools:
- gh
metadata: |
{
"owners" : ["team-openclaw" ]
}
---
# Skill
"" "
(skill_dir / "SKILL.md" ).write_text(content, encoding="utf-8" )
previous_yaml = quick_validate.yaml
quick_validate.yaml = None
try :
valid, message = quick_validate.validate_skill(skill_dir)
finally :
quick_validate.yaml = previous_yaml
self.assertTrue(valid, message)
if __name__ == "__main__" :
main()
Messung V0.5 in Prozent C=98 H=96 G=96
¤ Dauer der Verarbeitung: 0.2 Sekunden
¤
*© Formatika GbR, Deutschland