Files
notytex/static/js/class-dashboard-test.js

139 lines
4.8 KiB
JavaScript
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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* NOTYTEX - Class Dashboard Test Script
* Test des fonctionnalités responsive et animations avancées
*/
// Tests de performance et compatibilité
document.addEventListener('DOMContentLoaded', () => {
console.group('🧪 Class Dashboard - Tests de fonctionnalités');
// Test 1: Détection des capacités du navigateur
const capabilities = {
intersectionObserver: 'IntersectionObserver' in window,
resizeObserver: 'ResizeObserver' in window,
performanceObserver: 'PerformanceObserver' in window,
touchEvents: 'ontouchstart' in window,
vibration: 'vibrate' in navigator,
connectionAPI: 'connection' in navigator
};
console.log('✅ Capacités du navigateur:', capabilities);
// Test 2: Détection de device
if (window.ClassDashboard) {
const testDashboard = new window.ClassDashboard('test');
const deviceInfo = testDashboard.detectDevice();
console.log('📱 Informations device:', deviceInfo);
testDashboard.destroy();
}
// Test 3: Performance Timing
if (performance && performance.timing) {
const perfData = {
domReady: performance.timing.domContentLoadedEventEnd - performance.timing.navigationStart,
pageLoad: performance.timing.loadEventEnd - performance.timing.navigationStart
};
console.log('⚡ Performance:', perfData);
}
// Test 4: Détection des animations CSS
const testElement = document.createElement('div');
testElement.style.cssText = 'animation-duration: 0.001s; animation-name: test-animation;';
document.body.appendChild(testElement);
const hasAnimationSupport = window.getComputedStyle(testElement).animationDuration === '0.001s';
console.log('🎨 Support animations CSS:', hasAnimationSupport);
document.body.removeChild(testElement);
// Test 5: Vérification des classes CSS chargées
const testClasses = [
'class-dashboard',
'stats-card',
'trimester-nav',
'ripple-container'
];
const cssLoaded = testClasses.every(className => {
const testEl = document.createElement('div');
testEl.className = className;
document.body.appendChild(testEl);
const styles = window.getComputedStyle(testEl);
const hasStyles = styles.position !== 'static' || styles.display !== 'block' || styles.backgroundColor !== 'rgba(0, 0, 0, 0)';
document.body.removeChild(testEl);
return hasStyles;
});
console.log('🎨 Classes CSS chargées:', cssLoaded);
// Test 6: Test de performance des animations
function testAnimationPerformance() {
const startTime = performance.now();
const testDiv = document.createElement('div');
testDiv.style.cssText = `
position: absolute;
top: -100px;
left: 0;
width: 100px;
height: 100px;
background: red;
transition: transform 0.3s ease;
`;
document.body.appendChild(testDiv);
requestAnimationFrame(() => {
testDiv.style.transform = 'translateX(100px)';
setTimeout(() => {
const endTime = performance.now();
console.log('🎭 Test animation (ms):', endTime - startTime);
document.body.removeChild(testDiv);
}, 350);
});
}
if (performance && performance.now) {
testAnimationPerformance();
}
// Test 7: Test de la mémoire (approximatif)
if (performance && performance.memory) {
console.log('🧠 Mémoire utilisée (MB):', {
used: Math.round(performance.memory.usedJSHeapSize / 1048576),
total: Math.round(performance.memory.totalJSHeapSize / 1048576),
limit: Math.round(performance.memory.jsHeapSizeLimit / 1048576)
});
}
console.groupEnd();
// Affichage des recommandations
console.group('💡 Recommandations d\'optimisation');
if (!capabilities.intersectionObserver) {
console.warn('⚠️ IntersectionObserver non supporté - lazy loading désactivé');
}
if (!capabilities.touchEvents) {
console.info(' Device non-tactile - gestes tactiles désactivés');
}
if (deviceInfo && deviceInfo.isSlowNetwork) {
console.warn('🐌 Réseau lent détecté - mode économie activé');
}
if (deviceInfo && deviceInfo.reducedMotion) {
console.info('♿ Mode accessibilité détecté - animations réduites');
}
console.groupEnd();
});
// Export pour tests unitaires si nécessaire
if (typeof module !== 'undefined' && module.exports) {
module.exports = {
testCapabilities: () => capabilities,
testPerformance: () => perfData
};
}