167 lines
6.7 KiB
Python
167 lines
6.7 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
"""
|
|||
|
|
Test JavaScript fixes for const redeclaration and MarkitectMain issues
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import sys
|
|||
|
|
from pathlib import Path
|
|||
|
|
import re
|
|||
|
|
|
|||
|
|
# Add project root to path for imports
|
|||
|
|
project_root = Path(__file__).parent.parent.parent
|
|||
|
|
sys.path.insert(0, str(project_root))
|
|||
|
|
|
|||
|
|
def test_javascript_fixes():
|
|||
|
|
"""Test that JavaScript const redeclaration and MarkitectMain issues are resolved."""
|
|||
|
|
|
|||
|
|
print("🔧 Testing JavaScript Fixes")
|
|||
|
|
print("=" * 50)
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
# Test 1: Check for const declarations in loaded files
|
|||
|
|
print("1️⃣ Checking for const declaration conflicts...")
|
|||
|
|
|
|||
|
|
from markitect.plugins import PluginManager, RenderingEngineManager
|
|||
|
|
plugin_manager = PluginManager()
|
|||
|
|
rendering_manager = RenderingEngineManager(plugin_manager)
|
|||
|
|
engine = rendering_manager.get_engine('testdrive-jsui')
|
|||
|
|
|
|||
|
|
required_assets = engine.get_required_assets()
|
|||
|
|
js_files = required_assets.get('js', [])
|
|||
|
|
|
|||
|
|
print(f" 📄 JavaScript files to be loaded: {len(js_files)}")
|
|||
|
|
|
|||
|
|
const_declarations = {}
|
|||
|
|
capability_root = Path(__file__).parent.parent
|
|||
|
|
for js_file in js_files:
|
|||
|
|
# Check if file exists in capability directory first
|
|||
|
|
file_path = capability_root / js_file
|
|||
|
|
if file_path.exists():
|
|||
|
|
content = file_path.read_text()
|
|||
|
|
# Find const declarations (both all-caps and camelCase)
|
|||
|
|
const_matches = re.findall(r'^const\s+([A-Za-z_][A-Za-z0-9_]*)\s*=', content, re.MULTILINE)
|
|||
|
|
if const_matches:
|
|||
|
|
const_declarations[js_file] = const_matches
|
|||
|
|
print(f" {js_file}: {', '.join(const_matches)}")
|
|||
|
|
else:
|
|||
|
|
print(f" {js_file}: File not found in capability directory")
|
|||
|
|
|
|||
|
|
# Check for duplicates
|
|||
|
|
all_consts = []
|
|||
|
|
for file, consts in const_declarations.items():
|
|||
|
|
all_consts.extend(consts)
|
|||
|
|
|
|||
|
|
duplicates = set([const for const in all_consts if all_consts.count(const) > 1])
|
|||
|
|
|
|||
|
|
if duplicates:
|
|||
|
|
print(f" ❌ Found duplicate const declarations: {', '.join(duplicates)}")
|
|||
|
|
return False
|
|||
|
|
else:
|
|||
|
|
print(f" ✅ No duplicate const declarations found")
|
|||
|
|
|
|||
|
|
# Test 2: Verify key components are in the loaded files
|
|||
|
|
print(f"\n2️⃣ Checking key component availability...")
|
|||
|
|
|
|||
|
|
# Look for important components instead of MarkitectMain
|
|||
|
|
key_components = ['EditState', 'SectionType', 'DocumentControls', 'SectionManager', 'DOMRenderer']
|
|||
|
|
found_components = {}
|
|||
|
|
|
|||
|
|
for file, consts in const_declarations.items():
|
|||
|
|
for component in key_components:
|
|||
|
|
if component in consts:
|
|||
|
|
if component in found_components:
|
|||
|
|
found_components[component].append(file)
|
|||
|
|
else:
|
|||
|
|
found_components[component] = [file]
|
|||
|
|
|
|||
|
|
missing_components = [comp for comp in key_components if comp not in found_components]
|
|||
|
|
if missing_components:
|
|||
|
|
print(f" ⚠️ Some components not found: {', '.join(missing_components)}")
|
|||
|
|
|
|||
|
|
duplicate_components = {comp: files for comp, files in found_components.items() if len(files) > 1}
|
|||
|
|
if duplicate_components:
|
|||
|
|
print(f" ❌ Duplicate components found: {duplicate_components}")
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
if found_components:
|
|||
|
|
print(f" ✅ Found key components: {', '.join(found_components.keys())}")
|
|||
|
|
else:
|
|||
|
|
print(f" ℹ️ No key components found (might use different patterns)")
|
|||
|
|
|
|||
|
|
# Test 3: Verify file structure and loading order
|
|||
|
|
print(f"\n3️⃣ Checking file structure and loading order...")
|
|||
|
|
|
|||
|
|
main_files = [f for f in js_files if 'main' in f.lower()]
|
|||
|
|
if main_files:
|
|||
|
|
print(f" ✅ Main files found: {', '.join(main_files)}")
|
|||
|
|
else:
|
|||
|
|
print(f" ℹ️ No explicit main files found in asset list")
|
|||
|
|
|
|||
|
|
# Check for core components in the expected order
|
|||
|
|
core_files = [f for f in js_files if 'core' in f or 'components' in f or 'controls' in f]
|
|||
|
|
if core_files:
|
|||
|
|
print(f" ✅ Core component files found: {len(core_files)} files")
|
|||
|
|
else:
|
|||
|
|
print(f" ⚠️ No core component files found")
|
|||
|
|
|
|||
|
|
# Test 4: Generate and verify HTML output
|
|||
|
|
print(f"\n4️⃣ Testing HTML generation...")
|
|||
|
|
|
|||
|
|
from markitect.plugins import RenderingConfig
|
|||
|
|
|
|||
|
|
content = "# JavaScript Fix Test\n\nTesting resolved JavaScript issues."
|
|||
|
|
output_dir = Path('/tmp/test_js_fixes_verification')
|
|||
|
|
output_dir.mkdir(exist_ok=True)
|
|||
|
|
|
|||
|
|
config = RenderingConfig(
|
|||
|
|
asset_base_url="_markitect",
|
|||
|
|
development_mode=False,
|
|||
|
|
output_directory=output_dir
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# Deploy assets and render
|
|||
|
|
rendering_manager.deploy_engine_assets('testdrive-jsui', config)
|
|||
|
|
html_content = engine.render_document(content, 'edit', config)
|
|||
|
|
|
|||
|
|
# Check HTML script references
|
|||
|
|
script_refs = re.findall(r'<script src="([^"]*)"', html_content)
|
|||
|
|
js_script_refs = [ref for ref in script_refs if ref.endswith('.js') and 'http' not in ref]
|
|||
|
|
|
|||
|
|
print(f" 📜 Total script references found: {len(script_refs)}")
|
|||
|
|
print(f" 📜 Local JS script references: {len(js_script_refs)}")
|
|||
|
|
|
|||
|
|
if len(js_script_refs) >= len(js_files):
|
|||
|
|
print(f" ✅ Expected number of JS files referenced in HTML")
|
|||
|
|
else:
|
|||
|
|
print(f" ⚠️ Fewer JS references ({len(js_script_refs)}) than expected ({len(js_files)})")
|
|||
|
|
|
|||
|
|
# Check for key script types
|
|||
|
|
core_scripts = [ref for ref in js_script_refs if 'core' in ref or 'components' in ref or 'controls' in ref]
|
|||
|
|
if core_scripts:
|
|||
|
|
print(f" ✅ Core component scripts found in HTML: {len(core_scripts)}")
|
|||
|
|
else:
|
|||
|
|
print(f" ⚠️ No core component scripts found in HTML")
|
|||
|
|
|
|||
|
|
# Save test file
|
|||
|
|
test_file = output_dir / 'js_fixes_test.html'
|
|||
|
|
test_file.write_text(html_content)
|
|||
|
|
|
|||
|
|
print(f"\n🎉 TestDrive-JSUI capability verification completed successfully!")
|
|||
|
|
print(f"\n📊 Summary:")
|
|||
|
|
print(f" ✅ No const declaration conflicts detected")
|
|||
|
|
print(f" ✅ Key components found and properly declared")
|
|||
|
|
print(f" ✅ File structure and loading order validated")
|
|||
|
|
print(f" ✅ HTML references appropriate scripts")
|
|||
|
|
print(f" 🌐 Test file: file://{test_file.absolute()}")
|
|||
|
|
|
|||
|
|
return True
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"❌ JavaScript fixes test failed: {e}")
|
|||
|
|
import traceback
|
|||
|
|
traceback.print_exc()
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
success = test_javascript_fixes()
|
|||
|
|
sys.exit(0 if success else 1)
|