Test 4 : Compilation où le résultat existe déjà OU est modifier

📌 Description

Ce test vérifie que si lexé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 doptimiser 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 nexiste pas, bake doit compiler Main.java.
  • Commande exécutée :
    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 :
    javac Main.java
    

🔬 Procédure de test

1 Étape 1 : Compilation initiale

  1. Supprimer Main.class sil existe déjà :
    rm -f Main.class
    
  2. Exécuter bake :
    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
  1. 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 :
    System.out.println("Nouvelle ligne ajoutée !");
    
  2. Exécuter bake :
    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 !