Files
caveman/tests/test_validate_inline.py
T
Julius BrusseeandClaude Opus 4.7 086c43077d refactor: consolidate caveman-compress into skills/caveman-compress, eliminate compress mirror
- Move caveman-compress/ source (SKILL.md, scripts/, README.md, SECURITY.md) to skills/caveman-compress/.
- Delete skills/compress/ — the CI-generated rename mirror that caused dual-source confusion.
- Move plugins/caveman/skills/compress/ to plugins/caveman/skills/caveman-compress/. Plugin keeps the consolidated name; CI no longer rewrites the frontmatter.
- Replace the two sed-heavy CI sync steps with one verbatim cp -r from source to plugin.
- Update verify_repo.py, test_compress_safety.py, test_validate_inline.py, GEMINI.md, AGENTS.md, CONTRIBUTING.md, README.md, and the workflow paths to reference the new location.
- Use Path.resolve().parents[N] for the benchmark.py repo-root walk now that the directory depth changed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 14:07:58 +02:00

87 lines
2.7 KiB
Python

import sys
import tempfile
import unittest
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(REPO_ROOT / "skills" / "caveman-compress"))
from scripts.validate import ( # noqa: E402
ValidationResult,
extract_inline_codes,
validate,
validate_inline_codes,
)
class TestExtractInlineCodes(unittest.TestCase):
def test_fenced_blocks_excluded(self):
text = "```\ncode here\n```\n`inline code`"
result = extract_inline_codes(text)
self.assertEqual(result, ["inline code"])
def test_inline_only(self):
text = "Use `rm -rf /` to delete everything"
result = extract_inline_codes(text)
self.assertEqual(result, ["rm -rf /"])
def test_mixed_content(self):
text = """
Some text with `inline1` and `inline2`.
```
code block
```
More text with `inline3`.
"""
result = extract_inline_codes(text)
self.assertEqual(set(result), {"inline1", "inline2", "inline3"})
def test_empty(self):
self.assertEqual(extract_inline_codes("no backticks here"), [])
class TestValidateInlineCodes(unittest.TestCase):
def test_match(self):
result = ValidationResult()
validate_inline_codes("use `cmd` here", "use `cmd` here", result)
self.assertTrue(result.is_valid)
def test_lost(self):
result = ValidationResult()
validate_inline_codes("use `cmd` here", "use here", result)
self.assertFalse(result.is_valid)
self.assertIn("Inline code lost", result.errors[0])
def test_added(self):
result = ValidationResult()
validate_inline_codes("use here", "use `new` here", result)
self.assertTrue(result.is_valid)
self.assertIn("Inline code added", result.warnings[0])
def test_empty_orig(self):
result = ValidationResult()
validate_inline_codes("no codes", "use `new` here", result)
self.assertTrue(result.is_valid)
def test_both_empty(self):
result = ValidationResult()
validate_inline_codes("plain text", "also plain", result)
self.assertTrue(result.is_valid)
class TestValidateIntegration(unittest.TestCase):
def test_validate_inline_codes_wired(self):
with tempfile.TemporaryDirectory() as tmp:
orig = Path(tmp) / "original.md"
comp = Path(tmp) / "compressed.md"
orig.write_text("Run `rm -rf /` to delete")
comp.write_text("Run to delete")
result = validate(orig, comp)
self.assertFalse(result.is_valid)
self.assertTrue(any("Inline code lost" in e for e in result.errors))
if __name__ == "__main__":
unittest.main()