Class_generator/test-compatibility-system.html
StillHammer fe7153d28b Fix compatibility system and improve UX
- Add intelligent content-game compatibility system with visual badges
- Fix Adventure Reader to work with Dragon's Pearl content structure
- Implement multi-column games grid for faster navigation
- Add pronunciation display for Chinese vocabulary and sentences
- Fix navigation breadcrumb to show proper hierarchy (Home > Levels > Content)
- Add back buttons to all navigation pages
- Improve JSONContentLoader to preserve story structure
- Add comprehensive debugging and diagnostic tools

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-18 19:29:21 +08:00

222 lines
7.6 KiB
HTML

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Test Système de Compatibilité</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 1200px;
margin: 0 auto;
padding: 20px;
background: #f5f5f5;
}
.test-container {
background: white;
padding: 20px;
border-radius: 8px;
margin-bottom: 20px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.test-result {
padding: 10px;
margin: 10px 0;
border-radius: 4px;
}
.compatible {
background: #d4edda;
border: 1px solid #c3e6cb;
color: #155724;
}
.incompatible {
background: #f8d7da;
border: 1px solid #f5c6cb;
color: #721c24;
}
.score {
font-weight: bold;
}
button {
background: #007bff;
color: white;
border: none;
padding: 10px 20px;
border-radius: 4px;
cursor: pointer;
margin: 5px;
}
button:hover {
background: #0056b3;
}
.log {
background: #f8f9fa;
border: 1px solid #dee2e6;
padding: 15px;
border-radius: 4px;
max-height: 300px;
overflow-y: auto;
font-family: monospace;
white-space: pre-wrap;
}
</style>
</head>
<body>
<h1>🎯 Test du Système de Compatibilité Content-Game</h1>
<div class="test-container">
<h2>Chargement des modules</h2>
<button onclick="loadModules()">Charger les modules</button>
<div id="loading-status"></div>
</div>
<div class="test-container">
<h2>Tests de compatibilité</h2>
<button onclick="runCompatibilityTests()">Lancer les tests</button>
<div id="test-results"></div>
</div>
<div class="test-container">
<h2>Log des opérations</h2>
<button onclick="clearLog()">Effacer le log</button>
<div id="log" class="log"></div>
</div>
<!-- Scripts nécessaires -->
<script src="js/core/utils.js"></script>
<script src="js/core/content-scanner.js"></script>
<script src="js/core/content-game-compatibility.js"></script>
<script src="js/content/test-compatibility.js"></script>
<script>
let contentScanner;
let compatibilityChecker;
let testContent = [];
// Logger simple pour les tests
function logSh(message, level = 'INFO') {
const logDiv = document.getElementById('log');
const timestamp = new Date().toLocaleTimeString();
logDiv.textContent += `[${timestamp}] ${level}: ${message}\n`;
logDiv.scrollTop = logDiv.scrollHeight;
console.log(`[${level}] ${message}`);
}
function clearLog() {
document.getElementById('log').textContent = '';
}
async function loadModules() {
const statusDiv = document.getElementById('loading-status');
statusDiv.innerHTML = '⏳ Chargement en cours...';
try {
// Initialiser le scanner de contenu
contentScanner = new ContentScanner();
logSh('✅ ContentScanner initialisé');
// Initialiser le vérificateur de compatibilité
compatibilityChecker = new ContentGameCompatibility();
logSh('✅ ContentGameCompatibility initialisé');
// Scanner le contenu (nos modules de test devraient être trouvés)
const scannedContent = await contentScanner.scanAllContent();
logSh(`📦 ${scannedContent.found.length} modules de contenu trouvés`);
// Récupérer nos modules de test spécifiquement
testContent = scannedContent.found.filter(content =>
content.id.includes('test-') || content.name.includes('Test')
);
statusDiv.innerHTML = `
<div style="color: green;">
✅ Modules chargés avec succès<br>
📊 ${scannedContent.found.length} modules total<br>
🧪 ${testContent.length} modules de test trouvés
</div>
`;
logSh(`🧪 Modules de test: ${testContent.map(c => c.name).join(', ')}`);
} catch (error) {
statusDiv.innerHTML = `<div style="color: red;">❌ Erreur: ${error.message}</div>`;
logSh(`❌ Erreur lors du chargement: ${error.message}`, 'ERROR');
}
}
function runCompatibilityTests() {
const resultsDiv = document.getElementById('test-results');
if (!compatibilityChecker || testContent.length === 0) {
resultsDiv.innerHTML = '<div style="color: red;">❌ Modules non chargés. Cliquez d\'abord sur "Charger les modules"</div>';
return;
}
logSh('🧪 Début des tests de compatibilité');
const games = [
'whack-a-mole',
'whack-a-mole-hard',
'memory-match',
'quiz-game',
'fill-the-blank',
'text-reader',
'adventure-reader'
];
let resultsHTML = '<h3>Résultats des tests</h3>';
testContent.forEach(content => {
resultsHTML += `<h4>📦 ${content.name}</h4>`;
games.forEach(game => {
const compatibility = compatibilityChecker.checkCompatibility(content, game);
const cssClass = compatibility.compatible ? 'compatible' : 'incompatible';
const icon = compatibility.compatible ? '✅' : '❌';
resultsHTML += `
<div class="test-result ${cssClass}">
<strong>${icon} ${game}</strong><br>
<span class="score">Score: ${compatibility.score}%</span><br>
Raison: ${compatibility.reason}<br>
Recommandation: ${compatibility.details?.recommendation || 'N/A'}
</div>
`;
logSh(`🎮 ${content.name}${game}: ${compatibility.compatible ? 'COMPATIBLE' : 'INCOMPATIBLE'} (${compatibility.score}%)`);
});
});
resultsDiv.innerHTML = resultsHTML;
logSh('✅ Tests de compatibilité terminés');
}
// Fonctions utilitaires manquantes pour les tests
window.Utils = {
storage: {
get: (key, defaultValue) => {
try {
const value = localStorage.getItem(key);
return value ? JSON.parse(value) : defaultValue;
} catch {
return defaultValue;
}
},
set: (key, value) => {
try {
localStorage.setItem(key, JSON.stringify(value));
} catch (e) {
console.warn('Cannot save to localStorage:', e);
}
}
}
};
// Auto-charger au démarrage
window.addEventListener('load', () => {
logSh('🚀 Page de test chargée');
loadModules();
});
</script>
</body>
</html>