#!/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: [\`'].*[']* is up to date\./TARGET_UP_TO_DATE/" | sed "s/bake: [\`'].*[']* 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" "test-07-dependency" "test-08-space-vs-tabulation" "test-09-handling-comment" "test-10-phony" "test-11-error-in-code" "test-12-file-dont-exist" "test-13-dependancy-dont-exist" "test-14-remove-source-and-rebuild" "test-15-subdir-build" "test-16-strange-variables" "test-17-rule-without-command" ) tests_java=( "test-01-from-nothing" "test-02-already-exist" "test-03-circular" "test-04-edited" "test-05-variables" ) 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"