Files
michaelschiemer/tests/debug/test-component-scanner.php
Michael Schiemer 9b74ade5b0 feat: Fix discovery system critical issues
Resolved multiple critical discovery system issues:

## Discovery System Fixes
- Fixed console commands not being discovered on first run
- Implemented fallback discovery for empty caches
- Added context-aware caching with separate cache keys
- Fixed object serialization preventing __PHP_Incomplete_Class

## Cache System Improvements
- Smart caching that only caches meaningful results
- Separate caches for different execution contexts (console, web, test)
- Proper array serialization/deserialization for cache compatibility
- Cache hit logging for debugging and monitoring

## Object Serialization Fixes
- Fixed DiscoveredAttribute serialization with proper string conversion
- Sanitized additional data to prevent object reference issues
- Added fallback for corrupted cache entries

## Performance & Reliability
- All 69 console commands properly discovered and cached
- 534 total discovery items successfully cached and restored
- No more __PHP_Incomplete_Class cache corruption
- Improved error handling and graceful fallbacks

## Testing & Quality
- Fixed code style issues across discovery components
- Enhanced logging for better debugging capabilities
- Improved cache validation and error recovery

Ready for production deployment with stable discovery system.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-13 12:04:17 +02:00

111 lines
3.0 KiB
PHP

<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use App\Framework\Design\ComponentScanner;
$scanner = new ComponentScanner();
// Test with a simple CSS file
$testCss = <<<CSS
.card {
background: white;
padding: 1rem;
border-radius: 8px;
}
.card:hover {
transform: translateY(-2px);
}
.btn {
background: blue;
color: white;
padding: 0.5rem 1rem;
}
.btn-primary {
background: #3b82f6;
}
.sidebar {
width: 250px;
background: #f3f4f6;
}
.alert-success {
background: green;
color: white;
}
CSS;
// Write test CSS to a temporary file
$tempFile = __DIR__ . '/../tmp/test-components.css';
@mkdir(dirname($tempFile), 0777, true);
file_put_contents($tempFile, $testCss);
try {
// Scan the test file
$registry = $scanner->scanComponents([$tempFile]);
echo "Total components found: " . $registry->getTotalComponents() . "\n\n";
$components = $registry->getAllComponents();
foreach ($components as $component) {
echo "Component: " . $component->name . "\n";
echo " - Display Name: " . $component->getDisplayName() . "\n";
echo " - Category: " . $component->category->value . "\n";
echo " - Pattern: " . $component->pattern->value . "\n";
echo " - State: " . $component->state->value . "\n";
echo " - Selector: " . $component->selector . "\n";
echo "\n";
}
// Now test with real CSS files
echo "\n--- Scanning Real CSS Files ---\n\n";
$cssFiles = [
__DIR__ . '/../../resources/css/components/card.css',
__DIR__ . '/../../resources/css/components/buttons.css',
__DIR__ . '/../../resources/css/components/sidebar.css',
];
$existingFiles = array_filter($cssFiles, 'file_exists');
if (! empty($existingFiles)) {
$realRegistry = $scanner->scanComponents($existingFiles);
echo "Total components found in real files: " . $realRegistry->getTotalComponents() . "\n\n";
$realComponents = $realRegistry->getAllComponents();
foreach (array_slice($realComponents, 0, 10) as $component) {
echo "Component: " . $component->name . "\n";
echo " - Display Name: " . $component->getDisplayName() . "\n";
echo " - Category: " . $component->category->value . "\n";
echo " - Pattern: " . $component->pattern->value . "\n";
echo " - File: " . basename($component->filePath) . "\n";
echo "\n";
}
// Show category counts
echo "\nCategory Distribution:\n";
$categoryCounts = $realRegistry->getCategoryCounts();
foreach ($categoryCounts as $category => $count) {
if ($count > 0) {
echo " - $category: $count components\n";
}
}
} else {
echo "No real CSS files found to scan.\n";
}
} catch (\Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
echo "Trace: " . $e->getTraceAsString() . "\n";
} finally {
// Clean up temp file
@unlink($tempFile);
}