109 lines
3.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 :**
```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` sil 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 !**