# Test 4 : Compilation où le résultat existe déjà OU est modifier ## 📌 Description Ce test vérifie que si l’exécutable `Main.class` est déjà présent et que `Main.java` n'a pas été modifié, alors `bake` ne doit **pas recompiler** inutilement. Cela permet d’optimiser la compilation en évitant de perdre du temps et des ressources à recompiler des fichiers inchangés, comme `make` en C. --- ## 📂 **Fichiers utilisés** - **`Main.java`** : Fichier source contenant le programme principal. - **`Bakefile`** : Contient les règles de compilation. - **`Main.class`** : Fichier compilé qui doit exister avant le test. --- ## ✅ **Résultat attendu** 1️⃣ **Première exécution de `bake`** - Si `Main.class` **n’existe pas**, `bake` doit **compiler** `Main.java`. - **Commande exécutée :** ```sh javac Main.java ``` - `Main.class` est généré. 2️⃣ **Seconde exécution de `bake` sans modification** - Si `Main.class` est **déjà à jour**, `bake` **ne doit rien faire**. - **Aucune commande `javac` ne doit être exécutée**. 3️⃣ **Modification de `Main.java` et recompilation** - Si `Main.java` est **modifié**, `bake` doit **détecter le changement** et recompiler uniquement `Main.java`. - **Commande exécutée :** ```sh javac Main.java ``` --- ## 🔬 **Procédure de test** ### **1️⃣ Étape 1 : Compilation initiale** 1. Supprimer `Main.class` s’il existe déjà : ```sh rm -f Main.class ``` 2. Exécuter `bake` : ```sh java -cp bakefile.jar fr.monlouyan.bakefile.Main javac Main.java ``` 3. **Attendu** : - `bake` doit exécuter `javac Main.java` et créer `Main.class`. ### **2️⃣ Étape 2 : Vérification sans modification** 1. Exécuter `bake` une seconde fois : ```sh java -cp bakefile.jar fr.monlouyan.bakefile.Main javac Main.java ``` 2. **Attendu** : - **Aucune recompilation** ne doit avoir lieu. - `bake` **ne doit afficher aucun message de compilation**. ### **3️⃣ Étape 3 : Modifier `Main.java`** 1. Modifier `Main.java`, par exemple en ajoutant une ligne : ```java System.out.println("Nouvelle ligne ajoutée !"); ``` 2. Exécuter `bake` : ```sh java -cp bakefile.jar fr.monlouyan.bakefile.Main javac Main.java ``` 3. **Attendu** : - `bake` détecte la modification et exécute `javac Main.java`. - `Main.class` est mis à jour. --- ## 🛠 **Fichier `Bakefile` utilisé** ```make # Bakefile Main.class: Main.java javac Main.java all: Main.class ``` ➡ Ce `Bakefile` garantit que `bake` **ne recompile `Main.java` que si nécessaire**. --- ## 🎯 **Validation du test** | Situation | Comportement attendu | |-----------|----------------------| | **Première compilation (`bake`)** | `javac Main.java` est exécuté ✅ | | **Seconde exécution sans modification (`bake`)** | **Aucune recompilation** ✅ | | **Modification de `Main.java`** | `javac Main.java` est exécuté à nouveau ✅ | --- ## 📌 **Conclusion** - Si `bake` **ne recompile pas sans raison** et ne recompile `Main.java` **que si modifié**, alors **le test est réussi !** ✅ - Cela assure une **optimisation de la compilation** et empêche le gaspillage de ressources. 🚀 **Lance le test et vérifie que `bake` fonctionne correctement !**