Parfait ! Voici un plan de tests complet et structuré ! 🧪

## 📋 Plan de tests exhaustif

### 🧹 Phase 1 : Préparation

```bash
# 1. Nettoyer complètement
make clean

# Vérifier :
# ✅ Plus de dossier build/ ou bin/
# ✅ Plus de dossier doc/
# ✅ Plus de fichiers *.jar
# ✅ Plus de sources.txt

ls -la
```

---

### ⚙️ Phase 2 : Tests des commandes Make

#### **Test 1 : Compilation seule**
```bash
make compile
```
**Vérifier :**
- ✅ Dossier `build/` créé
- ✅ Tous les `.class` présents dans `build/fr/iutfbleau/sae/`
- ✅ Pas d'erreurs de compilation
- ✅ Message "Compilation terminée !"

```bash
# Compter les fichiers compilés
find build -name "*.class" | wc -l
# Doit correspondre au nombre de fichiers .java
```

---

#### **Test 2 : Création JAR Convertisseur uniquement**
```bash
make jar-conv
```
**Vérifier :**
- ✅ Fichier `pifConverter.jar` créé
- ✅ Message "Création de pifConverter.jar..."
- ✅ Pas d'erreur

```bash
ls -lh pifConverter.jar
# Vérifier que le fichier existe et a une taille raisonnable (> 10 Ko)
```

---

#### **Test 3 : Création JAR Viewer uniquement**
```bash
make jar-view
```
**Vérifier :**
- ✅ Fichier `pifViewer.jar` créé
- ✅ Message "Création de pifViewer.jar..."

```bash
ls -lh pifViewer.jar
```

---

#### **Test 4 : Création des deux JARs**
```bash
make clean
make jar
```
**Vérifier :**
- ✅ Les deux JARs créés
- ✅ Message "JARs créés avec succès !"

```bash
ls -lh *.jar
# Doit afficher pifConverter.jar et pifViewer.jar
```

---

#### **Test 5 : But par défaut**
```bash
make clean
make
```
**Vérifier :**
- ✅ Si `all: jar` est défini, doit créer les deux JARs
- ✅ Comportement identique à `make jar`

---

#### **Test 6 : Documentation**
```bash
make doc
```
**Vérifier :**
- ✅ Dossier `doc/` créé
- ✅ Fichier `doc/index.html` existe
- ✅ Sous-dossiers créés pour chaque package
- ✅ Message "Documentation disponible : doc/index.html"

```bash
# Ouvrir la documentation
xdg-open doc/index.html  # Linux
open doc/index.html      # macOS
start doc/index.html     # Windows Git Bash
```

**Dans le navigateur, vérifier :**
- ✅ Toutes les classes documentées
- ✅ JavaDoc visible pour chaque méthode
- ✅ Pas d'erreurs d'affichage

---

#### **Test 7 : Exécution sans JAR (debug) - Convertisseur**
```bash
# Préparer une image de test
cp quelque_part/test.jpg ./temp/

make runnotjar-conv ARGS="./temp/test.jpg"
```
**Vérifier :**
- ✅ Application démarre
- ✅ JFileChooser s'ouvre pour choisir où sauvegarder
- ✅ Pas d'erreur de ClassPath
- ✅ Pas de création de JAR (plus rapide)

---

#### **Test 8 : Exécution sans JAR (debug) - Viewer**
```bash
# Préparer un fichier PIF de test
make runnotjar-view ARGS="./temp/test.pif"
```
**Vérifier :**
- ✅ Application démarre
- ✅ Image affichée si le fichier existe
- ✅ Sinon, message d'erreur approprié

---

#### **Test 9 : Exécution avec JAR - Convertisseur**
```bash
make run-conv ARGS="./temp/test.jpg"
```
**Vérifier :**
- ✅ JAR créé automatiquement si nécessaire
- ✅ Application démarre via le JAR

---

#### **Test 10 : Exécution avec JAR - Viewer**
```bash
make run-view ARGS="./temp/test.pif"
```
**Vérifier :**
- ✅ JAR créé automatiquement si nécessaire
- ✅ Application démarre

---

### 🎯 Phase 3 : Tests des extensions de fichiers

#### **Test 11 : Sans arguments (JFileChooser)**
```bash
make run-conv
```
**Dans JFileChooser, tester :**

**Test 11a : Sans extension**
- Taper : `monimage`
- ✅ Fichier créé : `monimage.pif`

**Test 11b : Extension minuscule**
- Taper : `monimage.pif`
- ✅ Fichier créé : `monimage.pif` (pas de doublon)

**Test 11c : Extension majuscule**
- Taper : `monimage.PIF`
- ✅ Fichier créé : `monimage.pif` (converti)

**Test 11d : Extension mixte**
- Taper : `monimage.Pif`
- ✅ Fichier créé : `monimage.pif` (converti)

**Test 11e : Autre extension**
- Taper : `monimage.jpg`
- ✅ Fichier créé : `monimage.jpg.pif`

---

#### **Test 12 : Avec 1 argument (image seulement)**
```bash
make run-conv ARGS="./temp/test.jpg"
```
**Puis dans JFileChooser, refaire les tests 11a à 11e**

---

#### **Test 13 : Avec 2 arguments - Sans extension**
```bash
make run-conv ARGS="./temp/test.jpg ./temp/output"
```
**Cliquer sur "Exporter en .pif" :**
- ✅ Sauvegarde directe (pas de JFileChooser)
- ✅ Popup "Sauvegarde en cours..."
- ✅ Fichier créé : `./temp/output.pif`
- ✅ Message de confirmation
- ✅ Bouton disparaît

```bash
ls -lh ./temp/output.pif
```

---

#### **Test 14 : Avec 2 arguments - Extension minuscule**
```bash
make run-conv ARGS="./temp/test.jpg ./temp/output.pif"
```
**Vérifier :**
- ✅ Fichier créé : `./temp/output.pif`
- ✅ Pas de doublon (.pif.pif)

---

#### **Test 15 : Avec 2 arguments - Extension majuscule**
```bash
make run-conv ARGS="./temp/test.jpg ./temp/OUTPUT.PIF"
```
**Vérifier :**
- ✅ Fichier créé : `./temp/OUTPUT.pif` (corrigé en minuscule)

```bash
ls -lh ./temp/OUTPUT.pif
```

---

#### **Test 16 : Avec 2 arguments - Extension mixte**
```bash
make run-conv ARGS="./temp/test.jpg ./temp/MixedCase.Pif"
```
**Vérifier :**
- ✅ Fichier créé : `./temp/MixedCase.pif`

---

#### **Test 17 : Avec 2 arguments - Autre extension**
```bash
make run-conv ARGS="./temp/test.jpg ./temp/output.png"
```
**Vérifier :**
- ✅ Fichier créé : `./temp/output.png.pif`

---

#### **Test 18 : Chemins avec espaces**
```bash
# Créer un dossier avec espace
mkdir -p "./temp/mon dossier"
cp ./temp/test.jpg "./temp/mon dossier/"

make run-conv ARGS="./temp/mon dossier/test.jpg ./temp/mon dossier/sortie.pif"
```
**Vérifier :**
- ✅ Image chargée
- ✅ Fichier sauvegardé correctement

---

#### **Test 19 : Chemins avec caractères spéciaux**
```bash
mkdir -p "./temp/dossier-test_123"
make run-conv ARGS="./temp/test.jpg ./temp/dossier-test_123/output.pif"
```
**Vérifier :**
- ✅ Pas d'erreur
- ✅ Fichier créé

---

### 🧪 Phase 4 : Tests de robustesse

#### **Test 20 : Fichier inexistant**
```bash
make run-conv ARGS="./fichier_inexistant.jpg"
```
**Vérifier :**
- ✅ Message d'erreur : "Le fichier n'existe pas"
- ✅ Programme s'arrête proprement

---

#### **Test 21 : Fichier invalide**
```bash
echo "fake image" > ./temp/fake.jpg
make run-conv ARGS="./temp/fake.jpg"
```
**Vérifier :**
- ✅ Message d'erreur approprié
- ✅ Pas de crash

---

#### **Test 22 : Chemin de sortie invalide**
```bash
make run-conv ARGS="./temp/test.jpg /root/impossible.pif"
```
**Vérifier :**
- ✅ Message d'erreur lors de la sauvegarde
- ✅ Popup se ferme

---

#### **Test 23 : Viewer avec fichier non-PIF**
```bash
make run-view ARGS="./temp/test.jpg"
```
**Vérifier :**
- ✅ Message : "Le fichier fourni n'est pas au format PIF"

---

#### **Test 24 : Viewer avec PIF corrompu**
```bash
echo "fake pif data" > ./temp/corrupt.pif
make run-view ARGS="./temp/corrupt.pif"
```
**Vérifier :**
- ✅ Message d'erreur approprié
- ✅ Pas de crash

---

### 🏆 Phase 5 : Tests critiques pour le prof

#### **Test 25 : JARs autonomes (TRÈS IMPORTANT)**
```bash
# Sans Make, juste java -jar
java -jar pifConverter.jar ./temp/test.jpg ./temp/final.pif
```
**Vérifier :**
- ✅ Fonctionne sans Make
- ✅ Pas d'erreur ClassNotFoundException
- ✅ Fichier PIF créé

```bash
java -jar pifViewer.jar ./temp/final.pif
```
**Vérifier :**
- ✅ Image affichée correctement
- ✅ Pas d'erreur

---

#### **Test 26 : Recompilation incrémentale**
```bash
# Modifier un fichier source
echo "// commentaire" >> src/fr/iutfbleau/sae/Convertisseur.java

# Recompiler
make jar
```
**Vérifier :**
- ✅ Seuls les fichiers modifiés sont recompilés
- ✅ JAR mis à jour

---

#### **Test 27 : Test complet de bout en bout**
```bash
make clean
make
make run-conv ARGS="./temp/original.jpg ./temp/compressed.pif"
# Cliquer sur Exporter
make run-view ARGS="./temp/compressed.pif"
# Vérifier visuellement que l'image est identique
```

---

### 📊 Phase 6 : Tests de performance

#### **Test 28 : Petite image**
```bash
# Image 100x100
make run-conv ARGS="./temp/small.jpg ./temp/small.pif"
```
**Mesurer :**
- ✅ Temps de compression < 2 secondes
- ✅ Popup visible mais court

---

#### **Test 29 : Grande image**
```bash
# Image 4000x3000
make run-conv ARGS="./temp/large.jpg ./temp/large.pif"
```
**Mesurer :**
- ✅ Popup "Sauvegarde en cours..." bien visible
- ✅ Pas de freeze de l'interface
- ✅ Message de confirmation à la fin

---

## 📝 Checklist finale

Avant de rendre le projet, vérifier :

```bash
# 1. Nettoyage complet
make clean

# 2. Compilation
make

# 3. JARs créés
ls -lh *.jar

# 4. JARs autonomes fonctionnels
java -jar pifConverter.jar ./temp/test.jpg ./temp/test.pif
java -jar pifViewer.jar ./temp/test.pif

# 5. Documentation générée
make doc
xdg-open doc/index.html

# 6. Pas de fichiers .class dans Git
git status

# 7. hernand est collaborateur
# Vérifier sur Gitea

# 8. Commits équilibrés
git log --oneline --graph --all
```

---

## ✅ Tableau récapitulatif

| Test | Commande | Résultat attendu |
|------|----------|------------------|
| Compilation | `make compile` | ✅ `.class` créés |
| JAR Conv | `make jar-conv` | ✅ `pifConverter.jar` |
| JAR View | `make jar-view` | ✅ `pifViewer.jar` |
| Les deux | `make jar` | ✅ Les deux JARs |
| Doc | `make doc` | ✅ Dossier `doc/` |
| Clean | `make clean` | ✅ Tout supprimé |
| Sans extension | `monimage` | ✅ `monimage.pif` |
| Avec .PIF | `image.PIF` | ✅ `image.pif` |
| JAR autonome | `java -jar *.jar` | ✅ Fonctionne |

Bonne chance pour les tests ! 🚀