#!/bin/bash # Test automatisé pour la Tâche 32 - Améliorer l'accessibilité # Valide l'implémentation des fonctionnalités d'accessibilité echo "🚀 Test de la Tâche 32 - Améliorer l'accessibilité" echo "==================================================" # Couleurs pour l'affichage RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Compteurs TESTS_PASSED=0 TESTS_TOTAL=0 # Fonction pour afficher les résultats print_result() { local test_name="$1" local result="$2" TESTS_TOTAL=$((TESTS_TOTAL + 1)) if [ "$result" = "PASS" ]; then echo -e "${GREEN}✅ $test_name${NC}" TESTS_PASSED=$((TESTS_PASSED + 1)) else echo -e "${RED}❌ $test_name${NC}" fi } echo -e "${BLUE}📋 Vérification des fichiers d'accessibilité...${NC}" # Test 1: Hook useAccessibility if [ -f "frontend/src/hooks/useAccessibility.ts" ]; then if grep -q "AccessibilityOptions" "frontend/src/hooks/useAccessibility.ts" && \ grep -q "toggleHighContrast" "frontend/src/hooks/useAccessibility.ts" && \ grep -q "announceToScreenReader" "frontend/src/hooks/useAccessibility.ts" && \ grep -q "getAriaLabel" "frontend/src/hooks/useAccessibility.ts"; then print_result "Hook useAccessibility complet" "PASS" else print_result "Hook useAccessibility incomplet" "FAIL" fi else print_result "Hook useAccessibility manquant" "FAIL" fi # Test 2: AccessibilityProvider if [ -f "frontend/src/components/AccessibilityProvider/index.tsx" ]; then if grep -q "AccessibilityContext" "frontend/src/components/AccessibilityProvider/index.tsx" && \ grep -q "skip-links" "frontend/src/components/AccessibilityProvider/index.tsx" && \ grep -q "aria-live" "frontend/src/components/AccessibilityProvider/index.tsx"; then print_result "AccessibilityProvider complet" "PASS" else print_result "AccessibilityProvider incomplet" "FAIL" fi else print_result "AccessibilityProvider manquant" "FAIL" fi # Test 3: AccessibilityToolbar if [ -f "frontend/src/components/AccessibilityToolbar/index.tsx" ]; then if grep -q "toolbar" "frontend/src/components/AccessibilityToolbar/index.tsx" && \ grep -q "aria-expanded" "frontend/src/components/AccessibilityToolbar/index.tsx" && \ grep -q "toggleHighContrast" "frontend/src/components/AccessibilityToolbar/index.tsx"; then print_result "AccessibilityToolbar complet" "PASS" else print_result "AccessibilityToolbar incomplet" "FAIL" fi else print_result "AccessibilityToolbar manquant" "FAIL" fi # Test 4: Styles AccessibilityToolbar if [ -f "frontend/src/components/AccessibilityToolbar/AccessibilityToolbar.css" ]; then if grep -q "high-contrast" "frontend/src/components/AccessibilityToolbar/AccessibilityToolbar.css" && \ grep -q "focus" "frontend/src/components/AccessibilityToolbar/AccessibilityToolbar.css" && \ grep -q "prefers-reduced-motion" "frontend/src/components/AccessibilityToolbar/AccessibilityToolbar.css"; then print_result "Styles AccessibilityToolbar complets" "PASS" else print_result "Styles AccessibilityToolbar incomplets" "FAIL" fi else print_result "Styles AccessibilityToolbar manquants" "FAIL" fi # Test 5: CanvasAccessible if [ -f "frontend/src/components/Canvas/CanvasAccessible.tsx" ]; then if grep -q "role=\"application\"" "frontend/src/components/Canvas/CanvasAccessible.tsx" && \ grep -q "aria-label" "frontend/src/components/Canvas/CanvasAccessible.tsx" && \ grep -q "handleKeyDown" "frontend/src/components/Canvas/CanvasAccessible.tsx" && \ grep -q "announceToScreenReader" "frontend/src/components/Canvas/CanvasAccessible.tsx"; then print_result "CanvasAccessible complet" "PASS" else print_result "CanvasAccessible incomplet" "FAIL" fi else print_result "CanvasAccessible manquant" "FAIL" fi # Test 6: Styles CanvasAccessible if [ -f "frontend/src/components/Canvas/CanvasAccessible.css" ]; then if grep -q "high-contrast" "frontend/src/components/Canvas/CanvasAccessible.css" && \ grep -q "focus" "frontend/src/components/Canvas/CanvasAccessible.css" && \ grep -q "sr-only" "frontend/src/components/Canvas/CanvasAccessible.css"; then print_result "Styles CanvasAccessible complets" "PASS" else print_result "Styles CanvasAccessible incomplets" "FAIL" fi else print_result "Styles CanvasAccessible manquants" "FAIL" fi # Test 7: PaletteAccessible if [ -f "frontend/src/components/Palette/PaletteAccessible.tsx" ]; then if grep -q "role=\"listbox\"" "frontend/src/components/Palette/PaletteAccessible.tsx" && \ grep -q "aria-activedescendant" "frontend/src/components/Palette/PaletteAccessible.tsx" && \ grep -q "handleKeyDown" "frontend/src/components/Palette/PaletteAccessible.tsx" && \ grep -q "ArrowDown" "frontend/src/components/Palette/PaletteAccessible.tsx"; then print_result "PaletteAccessible complet" "PASS" else print_result "PaletteAccessible incomplet" "FAIL" fi else print_result "PaletteAccessible manquant" "FAIL" fi # Test 8: Styles PaletteAccessible if [ -f "frontend/src/components/Palette/PaletteAccessible.css" ]; then if grep -q "high-contrast" "frontend/src/components/Palette/PaletteAccessible.css" && \ grep -q "focus" "frontend/src/components/Palette/PaletteAccessible.css" && \ grep -q "prefers-reduced-motion" "frontend/src/components/Palette/PaletteAccessible.css"; then print_result "Styles PaletteAccessible complets" "PASS" else print_result "Styles PaletteAccessible incomplets" "FAIL" fi else print_result "Styles PaletteAccessible manquants" "FAIL" fi echo -e "\n${BLUE}🧪 Vérification du contenu des composants...${NC}" # Test 9: Attributs ARIA dans useAccessibility if [ -f "frontend/src/hooks/useAccessibility.ts" ]; then aria_count=$(grep -c "aria-" "frontend/src/hooks/useAccessibility.ts" || echo "0") if [ "$aria_count" -ge 5 ]; then print_result "Attributs ARIA suffisants dans useAccessibility ($aria_count)" "PASS" else print_result "Attributs ARIA insuffisants dans useAccessibility ($aria_count)" "FAIL" fi fi # Test 10: Navigation clavier dans CanvasAccessible if [ -f "frontend/src/components/Canvas/CanvasAccessible.tsx" ]; then if grep -q "ArrowRight\|ArrowLeft\|ArrowUp\|ArrowDown" "frontend/src/components/Canvas/CanvasAccessible.tsx" && \ grep -q "Enter\|Space" "frontend/src/components/Canvas/CanvasAccessible.tsx" && \ grep -q "Escape" "frontend/src/components/Canvas/CanvasAccessible.tsx"; then print_result "Navigation clavier Canvas complète" "PASS" else print_result "Navigation clavier Canvas incomplète" "FAIL" fi fi # Test 11: Support screen reader if [ -f "frontend/src/hooks/useAccessibility.ts" ]; then if grep -q "screenReader" "frontend/src/hooks/useAccessibility.ts" && \ grep -q "announceToScreenReader" "frontend/src/hooks/useAccessibility.ts" && \ grep -q "aria-live" "frontend/src/hooks/useAccessibility.ts"; then print_result "Support screen reader implémenté" "PASS" else print_result "Support screen reader manquant" "FAIL" fi fi # Test 12: Mode high contrast if [ -f "frontend/src/hooks/useAccessibility.ts" ]; then if grep -q "toggleHighContrast" "frontend/src/hooks/useAccessibility.ts" && \ grep -q "high-contrast" "frontend/src/hooks/useAccessibility.ts"; then print_result "Mode high contrast implémenté" "PASS" else print_result "Mode high contrast manquant" "FAIL" fi fi echo -e "\n${BLUE}🔍 Vérification des tests d'accessibilité...${NC}" # Test 13: Script de test d'accessibilité if [ -f "test_accessibility.py" ]; then if grep -q "test_aria_attributes" "test_accessibility.py" && \ grep -q "test_keyboard_navigation" "test_accessibility.py" && \ grep -q "test_screen_reader_support" "test_accessibility.py" && \ grep -q "axe" "test_accessibility.py"; then print_result "Script de test d'accessibilité complet" "PASS" else print_result "Script de test d'accessibilité incomplet" "FAIL" fi else print_result "Script de test d'accessibilité manquant" "FAIL" fi echo -e "\n${BLUE}📊 Vérification de la qualité du code...${NC}" # Test 14: TypeScript sans erreurs (si tsc est disponible) if command -v npx >/dev/null 2>&1; then cd frontend 2>/dev/null if [ -f "package.json" ] && [ -f "tsconfig.json" ]; then echo "🔄 Vérification TypeScript..." if npx tsc --noEmit --skipLibCheck 2>/dev/null; then print_result "Compilation TypeScript sans erreurs" "PASS" else print_result "Erreurs de compilation TypeScript" "FAIL" fi else print_result "Configuration TypeScript manquante" "FAIL" fi cd .. 2>/dev/null else echo -e "${YELLOW}⚠️ npx non disponible, skip vérification TypeScript${NC}" fi # Test 15: Cohérence des imports echo "🔄 Vérification des imports..." import_errors=0 for file in frontend/src/components/AccessibilityProvider/index.tsx \ frontend/src/components/AccessibilityToolbar/index.tsx \ frontend/src/components/Canvas/CanvasAccessible.tsx \ frontend/src/components/Palette/PaletteAccessible.tsx; do if [ -f "$file" ]; then if ! grep -q "useAccessibilityContext\|useAccessibility" "$file"; then import_errors=$((import_errors + 1)) fi fi done if [ "$import_errors" -eq 0 ]; then print_result "Imports d'accessibilité cohérents" "PASS" else print_result "Imports d'accessibilité incohérents ($import_errors erreurs)" "FAIL" fi echo -e "\n${BLUE}🎯 Vérification des fonctionnalités spécifiques...${NC}" # Test 16: Skip links if grep -r "skip-link" frontend/src/ >/dev/null 2>&1; then print_result "Skip links implémentés" "PASS" else print_result "Skip links manquants" "FAIL" fi # Test 17: Raccourcis clavier if grep -r "Alt.*[hH]" frontend/src/ >/dev/null 2>&1 && \ grep -r "Ctrl.*[fF]" frontend/src/ >/dev/null 2>&1; then print_result "Raccourcis clavier implémentés" "PASS" else print_result "Raccourcis clavier manquants" "FAIL" fi # Test 18: Gestion du focus if grep -r "setFocusedElement\|focus()" frontend/src/ >/dev/null 2>&1; then print_result "Gestion du focus implémentée" "PASS" else print_result "Gestion du focus manquante" "FAIL" fi # Test 19: Responsive design dans les CSS responsive_files=0 for css_file in frontend/src/components/AccessibilityToolbar/AccessibilityToolbar.css \ frontend/src/components/Canvas/CanvasAccessible.css \ frontend/src/components/Palette/PaletteAccessible.css; do if [ -f "$css_file" ] && grep -q "@media" "$css_file"; then responsive_files=$((responsive_files + 1)) fi done if [ "$responsive_files" -ge 2 ]; then print_result "Design responsive dans les CSS" "PASS" else print_result "Design responsive insuffisant" "FAIL" fi # Test 20: Préférences utilisateur (prefers-reduced-motion, prefers-color-scheme) preference_files=0 for css_file in frontend/src/components/AccessibilityToolbar/AccessibilityToolbar.css \ frontend/src/components/Canvas/CanvasAccessible.css \ frontend/src/components/Palette/PaletteAccessible.css; do if [ -f "$css_file" ] && (grep -q "prefers-reduced-motion\|prefers-color-scheme" "$css_file"); then preference_files=$((preference_files + 1)) fi done if [ "$preference_files" -ge 2 ]; then print_result "Préférences utilisateur respectées" "PASS" else print_result "Préférences utilisateur insuffisantes" "FAIL" fi # Résultats finaux echo -e "\n==================================================" echo -e "${BLUE}📊 RÉSULTATS DES TESTS - TÂCHE 32${NC}" echo -e "==================================================" percentage=$((TESTS_PASSED * 100 / TESTS_TOTAL)) echo -e "Tests passés: ${GREEN}$TESTS_PASSED${NC}/$TESTS_TOTAL" echo -e "Pourcentage: ${GREEN}$percentage%${NC}" if [ $percentage -ge 90 ]; then echo -e "\n${GREEN}🎉 TÂCHE 32 RÉUSSIE !${NC}" echo -e "${GREEN}✅ L'accessibilité est correctement implémentée${NC}" exit 0 elif [ $percentage -ge 75 ]; then echo -e "\n${YELLOW}⚠️ TÂCHE 32 PARTIELLEMENT RÉUSSIE${NC}" echo -e "${YELLOW}🔧 Quelques améliorations nécessaires${NC}" exit 1 else echo -e "\n${RED}❌ TÂCHE 32 ÉCHOUÉE${NC}" echo -e "${RED}🚨 Implémentation d'accessibilité insuffisante${NC}" exit 1 fi