164 lines
4.7 KiB
Python
164 lines
4.7 KiB
Python
#!/usr/bin/env python3
|
|
"""Test that API documentation generator works correctly."""
|
|
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
def test_api_docs_exist():
|
|
"""Test that API documentation was generated."""
|
|
docs_path = Path("docs/API_REFERENCE.md")
|
|
|
|
if not docs_path.exists():
|
|
print("ERROR: API documentation not found at docs/API_REFERENCE.md")
|
|
return False
|
|
|
|
print("✓ API documentation file exists")
|
|
|
|
# Check file size
|
|
size = docs_path.stat().st_size
|
|
if size < 1000:
|
|
print(f"ERROR: API documentation seems too small ({size} bytes)")
|
|
return False
|
|
|
|
print(f"✓ API documentation has reasonable size ({size} bytes)")
|
|
|
|
# Read content
|
|
with open(docs_path, 'r') as f:
|
|
content = f.read()
|
|
|
|
# Check for expected sections
|
|
expected_sections = [
|
|
"# McRogueFace API Reference",
|
|
"## Overview",
|
|
"## Classes",
|
|
"## Functions",
|
|
"## Automation Module"
|
|
]
|
|
|
|
missing = []
|
|
for section in expected_sections:
|
|
if section not in content:
|
|
missing.append(section)
|
|
|
|
if missing:
|
|
print(f"ERROR: Missing sections: {missing}")
|
|
return False
|
|
|
|
print("✓ All expected sections present")
|
|
|
|
# Check for key classes
|
|
key_classes = ["Frame", "Caption", "Sprite", "Grid", "Entity", "Scene"]
|
|
missing_classes = []
|
|
for cls in key_classes:
|
|
if f"### class {cls}" not in content:
|
|
missing_classes.append(cls)
|
|
|
|
if missing_classes:
|
|
print(f"ERROR: Missing classes: {missing_classes}")
|
|
return False
|
|
|
|
print("✓ All key classes documented")
|
|
|
|
# Check for key functions
|
|
key_functions = ["createScene", "setScene", "currentScene", "find", "setTimer"]
|
|
missing_funcs = []
|
|
for func in key_functions:
|
|
if f"### {func}" not in content:
|
|
missing_funcs.append(func)
|
|
|
|
if missing_funcs:
|
|
print(f"ERROR: Missing functions: {missing_funcs}")
|
|
return False
|
|
|
|
print("✓ All key functions documented")
|
|
|
|
# Check automation module
|
|
if "automation.screenshot" in content:
|
|
print("✓ Automation module documented")
|
|
else:
|
|
print("ERROR: Automation module not properly documented")
|
|
return False
|
|
|
|
# Count documentation entries
|
|
class_count = content.count("### class ")
|
|
func_count = content.count("### ") - class_count - content.count("### automation.")
|
|
auto_count = content.count("### automation.")
|
|
|
|
print(f"\nDocumentation Coverage:")
|
|
print(f"- Classes: {class_count}")
|
|
print(f"- Functions: {func_count}")
|
|
print(f"- Automation methods: {auto_count}")
|
|
|
|
return True
|
|
|
|
def test_doc_accuracy():
|
|
"""Test that documentation matches actual API."""
|
|
# Import mcrfpy to check
|
|
import mcrfpy
|
|
|
|
print("\nVerifying documentation accuracy...")
|
|
|
|
# Read documentation
|
|
with open("docs/API_REFERENCE.md", 'r') as f:
|
|
content = f.read()
|
|
|
|
# Check that all public classes are documented
|
|
actual_classes = [name for name in dir(mcrfpy)
|
|
if isinstance(getattr(mcrfpy, name), type) and not name.startswith('_')]
|
|
|
|
undocumented = []
|
|
for cls in actual_classes:
|
|
if f"### class {cls}" not in content:
|
|
undocumented.append(cls)
|
|
|
|
if undocumented:
|
|
print(f"WARNING: Undocumented classes: {undocumented}")
|
|
else:
|
|
print("✓ All public classes are documented")
|
|
|
|
# Check functions
|
|
actual_funcs = [name for name in dir(mcrfpy)
|
|
if callable(getattr(mcrfpy, name)) and not name.startswith('_')
|
|
and not isinstance(getattr(mcrfpy, name), type)]
|
|
|
|
undoc_funcs = []
|
|
for func in actual_funcs:
|
|
if f"### {func}" not in content:
|
|
undoc_funcs.append(func)
|
|
|
|
if undoc_funcs:
|
|
print(f"WARNING: Undocumented functions: {undoc_funcs}")
|
|
else:
|
|
print("✓ All public functions are documented")
|
|
|
|
return True
|
|
|
|
def main():
|
|
"""Run all API documentation tests."""
|
|
print("API Documentation Tests")
|
|
print("======================\n")
|
|
|
|
all_passed = True
|
|
|
|
# Test 1: Documentation exists and is complete
|
|
print("Test 1: Documentation Generation")
|
|
if not test_api_docs_exist():
|
|
all_passed = False
|
|
print()
|
|
|
|
# Test 2: Documentation accuracy
|
|
print("Test 2: Documentation Accuracy")
|
|
if not test_doc_accuracy():
|
|
all_passed = False
|
|
print()
|
|
|
|
if all_passed:
|
|
print("✅ All API documentation tests passed!")
|
|
sys.exit(0)
|
|
else:
|
|
print("❌ Some tests failed.")
|
|
sys.exit(1)
|
|
|
|
if __name__ == '__main__':
|
|
main() |