Files
markitect-main/test_plugin_discovery.py
tegwick 8f1cc0faf9 feat: complete CLI integration with plugin system
**CLI Integration:**
- Added --engine parameter to md-render command
- Default engine selection: testdrive-jsui for edit/insert, standard for view
- Graceful fallback to standard rendering when plugin unavailable
- Engine validation and mode compatibility checking

**Plugin Discovery:**
- Enhanced RenderingEngineManager with builtin plugin registration
- Automatic discovery and registration of testdrive-jsui engine
- Support for both plugin system discovery and direct registration

**Configuration Management:**
- Production-ready RenderingConfig for CLI usage
- Asset deployment to _markitect/plugins/ structure
- Configurable asset base URLs and deployment strategies

**Testing Infrastructure:**
- Comprehensive test suite for plugin discovery
- CLI integration testing without Click framework dependencies
- Complete scenario testing (default, explicit, fallback, unknown engines)
- Integration verification scripts

**Documentation:**
- Complete PLUGIN_SYSTEM.md documentation
- Architecture overview and development workflows
- JavaScript-first development guide
- Asset management and deployment strategies
- CLI usage examples and troubleshooting guide

**Key Features:**
- `markitect md-render --edit` now uses testdrive-jsui by default
- `markitect md-render --engine testdrive-jsui --edit` for explicit selection
- `markitect md-render --engine standard --edit` for legacy behavior
- Automatic fallback with user-friendly error messages

This completes the plugin infrastructure implementation, enabling
independent JavaScript development with seamless CLI integration.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-14 08:47:30 +01:00

80 lines
2.8 KiB
Python
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
Test plugin discovery and basic integration
"""
import sys
from pathlib import Path
# Add current directory to path for imports
sys.path.insert(0, str(Path(__file__).parent))
def test_plugin_discovery():
"""Test that the plugin system can discover testdrive-jsui."""
print("🔍 Testing Plugin Discovery")
print("=" * 50)
try:
# Test basic plugin imports
print("1⃣ Testing plugin imports...")
from markitect.plugins import PluginManager, RenderingEngineManager, RenderingConfig
print(" ✅ Plugin classes imported successfully")
# Test plugin manager initialization
print("\n2⃣ Testing plugin manager initialization...")
plugin_manager = PluginManager()
print(" ✅ Plugin manager initialized")
# Test rendering engine manager
print("\n3⃣ Testing rendering engine manager...")
rendering_manager = RenderingEngineManager(plugin_manager)
print(" ✅ Rendering engine manager initialized")
# List available engines
print("\n4⃣ Testing engine discovery...")
engines = rendering_manager.list_engines()
print(f" 📋 Found engines: {engines}")
# Test testdrive-jsui specifically
print("\n5⃣ Testing testdrive-jsui engine...")
engine = rendering_manager.get_engine('testdrive-jsui')
if engine:
print(f" ✅ TestDrive JSUI engine found!")
print(f" 📝 Name: {engine.metadata.name}")
print(f" 📄 Description: {engine.metadata.description}")
print(f" 🎯 Supported modes: {engine.get_supported_modes()}")
# Test render capabilities
print("\n6⃣ Testing render capabilities...")
test_content = "# Test\n\nThis is a test document."
config = RenderingConfig(
asset_base_url="_markitect",
development_mode=False,
output_directory=Path("/tmp")
)
html_output = engine.render_document(test_content, 'edit', config)
print(f" ✅ Rendered HTML ({len(html_output):,} characters)")
# Save test output
test_file = Path("/tmp/plugin_discovery_test.html")
test_file.write_text(html_output)
print(f" 📄 Saved test output: {test_file}")
else:
print(" ❌ TestDrive JSUI engine not found")
return False
print(f"\n🎉 Plugin discovery test completed successfully!")
return True
except Exception as e:
print(f"❌ Plugin discovery test failed: {e}")
import traceback
traceback.print_exc()
return False
if __name__ == "__main__":
success = test_plugin_discovery()
sys.exit(0 if success else 1)