From 29ad274f287eb053586db2a571bf9aabcce00501 Mon Sep 17 00:00:00 2001
From: Yanis HAMOUDI <yanis.hamoudi@etu.u-pec.fr>
Date: Thu, 6 Feb 2025 21:09:09 +0100
Subject: [PATCH] =?UTF-8?q?Ajout=20d'un=20script=20de=20test=20automatis?=
 =?UTF-8?q?=C3=A9=20et=20mise=20=C3=A0=20jour=20du=20Makefile=20pour=20ex?=
 =?UTF-8?q?=C3=A9cuter=20le=20script?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Makefile |   1 +
 test.sh  | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 111 insertions(+)
 create mode 100755 test.sh

diff --git a/Makefile b/Makefile
index c667e80..b2770b9 100644
--- a/Makefile
+++ b/Makefile
@@ -12,6 +12,7 @@ TESTDIR = ./tests/
 SOURCES := $(shell find $(SOURCEDIR) -name '*.java')
 
 all:
+	@chmod +x test.sh
 	@make clean
 	@make compile
 	@make jar
diff --git a/test.sh b/test.sh
new file mode 100755
index 0000000..f4c1065
--- /dev/null
+++ b/test.sh
@@ -0,0 +1,110 @@
+#!/bin/bash
+
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+LOGS_DIR="${SCRIPT_DIR}/logs"
+mkdir -p "$LOGS_DIR"
+BAKE_JAR="${SCRIPT_DIR}/bakefile.jar"
+
+executer_cas_de_test() {
+    local langue=$1
+    local cas_de_test=$2
+    local repertoire_test="${SCRIPT_DIR}/tests/${langue}/${cas_de_test}"
+    local repertoire_make="${repertoire_test}/make"
+    local repertoire_bake="${repertoire_test}/bake"
+    local repertoire_logs="${LOGS_DIR}/${langue}_${cas_de_test}"
+    mkdir -p "$repertoire_logs"
+    local fichier_resultat="${repertoire_logs}/resultat.txt"
+
+    echo "Test de ${langue} - ${cas_de_test}"
+
+    if [ ! -d "$repertoire_make" ] || [ ! -d "$repertoire_bake" ]; then
+        echo "❌ Manque un répertoire pour ${langue} - ${cas_de_test}" > "$fichier_resultat"
+        return 1
+    fi
+
+    executer_et_journaliser() {
+        local repertoire=$1
+        local outil=$2
+        local fichier_journal="${repertoire_logs}/details_${outil}.log"
+        local fichier_sortie="${repertoire_logs}/sortie_${outil}.txt"
+
+        echo "Début du Test : $(date)" > "$fichier_journal"
+        echo "Outil : ${outil}" >> "$fichier_journal"
+
+        cd "$repertoire" || return 1
+
+        if [ "$outil" = "make" ]; then
+            sortie=$(make 2>&1)
+        else
+            sortie=$(java -cp "${BAKE_JAR}" fr.monlouyan.bakefile.Main 2>&1)
+        fi
+        code_sortie=$?
+
+        sortie_normalisee=$(echo "$sortie" | sed 's/make: .main. is up to date./TARGET_UP_TO_DATE/' | sed 's/bake: .main. is up to date./TARGET_UP_TO_DATE/')
+        
+        echo "$sortie" > "$fichier_sortie"
+        echo "Sortie ${outil} :" >> "$fichier_journal"
+        echo "$sortie" >> "$fichier_journal"
+        echo "Code de Sortie : $code_sortie" >> "$fichier_journal"
+
+        echo "$sortie_normalisee"
+        return $code_sortie
+    }
+
+    sortie_make=$(executer_et_journaliser "$repertoire_make" "make")
+    code_sortie_make=$?
+    sortie_bake=$(executer_et_journaliser "$repertoire_bake" "bake")
+    code_sortie_bake=$?
+
+    resultat="❌ Échec"
+    
+    if [ $code_sortie_make -eq $code_sortie_bake ]; then
+        echo "Fichiers dans make:" > "${repertoire_logs}/diff_fichiers.log"
+        find "$repertoire_make" -type f >> "${repertoire_logs}/diff_fichiers.log"
+        echo "Fichiers dans bake:" >> "${repertoire_logs}/diff_fichiers.log"
+        find "$repertoire_bake" -type f >> "${repertoire_logs}/diff_fichiers.log"
+
+        fichiers_generes_make=$(find "$repertoire_make" -type f | grep -v "bakefile.jar\|Makefile\|Bakefile\|README.md" | sort)
+        fichiers_generes_bake=$(find "$repertoire_bake" -type f | grep -v "bakefile.jar\|Makefile\|Bakefile\|README.md" | sort)
+
+        fichiers_make=$(echo "$fichiers_generes_make" | xargs -n1 basename | sort)
+        fichiers_bake=$(echo "$fichiers_generes_bake" | xargs -n1 basename | sort)
+
+        if [ "$fichiers_make" = "$fichiers_bake" ] && [ "$sortie_make" = "$sortie_bake" ]; then
+            resultat="✅ Réussi"
+        else
+            echo "Différences dans les sorties ou fichiers générés" >> "${repertoire_logs}/diff_fichiers.log"
+        fi
+    fi
+
+    echo "$resultat" > "$fichier_resultat"
+    echo "Fin du Test : $(date)" >> "$fichier_resultat"
+    echo "$resultat"
+
+    [ "$resultat" = "✅ Réussi" ]
+}
+
+tests_c=(
+    "test-01-from-nothing"
+    "test-02-already-exist"
+    "test-03-circular"
+    "test-04-edited"
+    "test-05-variables"
+    "test-06-variables-on-cascade"
+)
+
+tests_java=(
+    "test-01-from-nothing"
+    "test-03-circular"
+)
+
+for cas_de_test in "${tests_c[@]}"; do
+    executer_cas_de_test "C" "$cas_de_test"
+done
+
+for cas_de_test in "${tests_java[@]}"; do
+    executer_cas_de_test "Java" "$cas_de_test"
+done
+
+echo "Résumé des Tests :" > "${LOGS_DIR}/resume.txt"
+find "${LOGS_DIR}" -name "resultat.txt" -exec grep -H "✅\|❌" {} + >> "${LOGS_DIR}/resume.txt"
\ No newline at end of file