- Frontend v4 accessible sur réseau local (192.168.1.40) - Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard) - Ollama GPU fonctionnel - Self-healing interactif - Dashboard confiance Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
322 lines
12 KiB
Bash
Executable File
322 lines
12 KiB
Bash
Executable File
#!/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 |