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