diff --git a/tests/Java/test-04-edited/README.md b/tests/Java/test-04-edited/README.md new file mode 100644 index 0000000..b3325f1 --- /dev/null +++ b/tests/Java/test-04-edited/README.md @@ -0,0 +1,105 @@ +# Test 2 : Compilation où le résultat existe déjà + +## 📌 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 + bake + ``` +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 + bake + ``` +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 + bake + ``` +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 !** diff --git a/tests/Java/test-04-edited/bake/Bakefile b/tests/Java/test-04-edited/bake/Bakefile new file mode 100644 index 0000000..17f67d2 --- /dev/null +++ b/tests/Java/test-04-edited/bake/Bakefile @@ -0,0 +1,4 @@ +Main.class: Main.java + javac Main.java + +all: Main.class diff --git a/tests/Java/test-04-edited/bake/Main.java b/tests/Java/test-04-edited/bake/Main.java new file mode 100644 index 0000000..8153ee1 --- /dev/null +++ b/tests/Java/test-04-edited/bake/Main.java @@ -0,0 +1,6 @@ +public class Main { + public static void main(String[] args) { + System.out.println("Ceci est un programme de test du Bakefile !"); + System.out.println("On essaye de voir si le programme recompile après une modification...."); + } +} diff --git a/tests/Java/test-04-edited/make/Main.java b/tests/Java/test-04-edited/make/Main.java new file mode 100644 index 0000000..8153ee1 --- /dev/null +++ b/tests/Java/test-04-edited/make/Main.java @@ -0,0 +1,6 @@ +public class Main { + public static void main(String[] args) { + System.out.println("Ceci est un programme de test du Bakefile !"); + System.out.println("On essaye de voir si le programme recompile après une modification...."); + } +} diff --git a/tests/Java/test-04-edited/make/Makefile b/tests/Java/test-04-edited/make/Makefile new file mode 100644 index 0000000..17f67d2 --- /dev/null +++ b/tests/Java/test-04-edited/make/Makefile @@ -0,0 +1,4 @@ +Main.class: Main.java + javac Main.java + +all: Main.class