From 629212156de26fdb2d33398dfdca32855e4634f0 Mon Sep 17 00:00:00 2001 From: grayTerminal-sh Date: Mon, 13 Jul 2026 13:52:36 +0200 Subject: [PATCH] build: add automated test target --- labfy-investigation/Makefile | 43 +++++++- .../docs/tickets/closed/TICKET-009.5.md | 103 ++++++++++++++++++ .../tests/test_investigation_tree_model | Bin 16928 -> 17312 bytes 3 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 labfy-investigation/docs/tickets/closed/TICKET-009.5.md diff --git a/labfy-investigation/Makefile b/labfy-investigation/Makefile index 6cd3a68..f5307e6 100644 --- a/labfy-investigation/Makefile +++ b/labfy-investigation/Makefile @@ -2,6 +2,8 @@ CC = gcc PKG_CONFIG = pkg-config +.DEFAULT_GOAL := all + CFLAGS = -std=c17 \ -Wall \ -Wextra \ @@ -12,22 +14,55 @@ CFLAGS = -std=c17 \ LDFLAGS = $(shell $(PKG_CONFIG) --libs gtk4 sqlite3) +TEST_CFLAGS = -std=c17 \ + -Wall \ + -Wextra \ + -Werror \ + -Iinclude \ + $(shell $(PKG_CONFIG) --cflags glib-2.0) + +TEST_LDFLAGS = $(shell $(PKG_CONFIG) --libs glib-2.0) + SRC := $(shell find src -name "*.c") OBJ := $(SRC:.c=.o) TARGET = labfy-investigation +TEST_NODE = tests/test_investigation_node +TEST_TREE_MODEL = tests/test_investigation_tree_model + +all: $(TARGET) + $(TARGET): $(OBJ) $(CC) $(OBJ) -o $@ $(LDFLAGS) +$(TEST_NODE): \ + tests/test_investigation_node.c \ + src/core/investigation_node.c + $(CC) $(TEST_CFLAGS) $^ -o $@ $(TEST_LDFLAGS) + +$(TEST_TREE_MODEL): \ + tests/test_investigation_tree_model.c \ + src/core/investigation_node.c \ + src/core/investigation_tree_model.c + $(CC) $(TEST_CFLAGS) $^ -o $@ $(TEST_LDFLAGS) + +test: $(TEST_NODE) $(TEST_TREE_MODEL) + @echo "Exécution des tests..." + @./$(TEST_NODE) + @./$(TEST_TREE_MODEL) + @echo "Tous les tests sont valides." + %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ -clean: - rm -f $(OBJ) $(TARGET) - run: $(TARGET) ./$(TARGET) -.PHONY: clean run +clean: + rm -f $(OBJ) $(TARGET) \ + $(TEST_NODE) \ + $(TEST_TREE_MODEL) + +.PHONY: clean run test diff --git a/labfy-investigation/docs/tickets/closed/TICKET-009.5.md b/labfy-investigation/docs/tickets/closed/TICKET-009.5.md new file mode 100644 index 0000000..3e06958 --- /dev/null +++ b/labfy-investigation/docs/tickets/closed/TICKET-009.5.md @@ -0,0 +1,103 @@ +# Ticket #009.5 + +## Titre + +Ajouter une cible `make test`. + +--- + +## Objectif + +Automatiser la compilation et l'exécution de l'ensemble des tests du projet. + +La commande suivante doit suffire : + +```bash +make test +``` + +--- + +## Responsabilités + +Le système de build doit : + +- compiler chaque fichier de test ; +- lier uniquement les modules nécessaires ; +- exécuter tous les tests ; +- arrêter l'exécution si un test échoue ; +- supprimer les binaires de test avec `make clean`. + +--- + +## Hors périmètre + +Ce ticket ne doit pas : + +- ajouter de nouveaux tests métier ; +- modifier le comportement des modules ; +- introduire un framework de test externe ; +- produire des rapports de couverture ; +- lancer Valgrind automatiquement. + +--- + +## Fichiers concernés + +```text +Makefile +``` + +Éventuellement : + +```text +tests/Makefile +``` + +uniquement si le Makefile principal devient difficile à lire. + +--- + +## Tests concernés + +```text +tests/test_investigation_node.c +tests/test_investigation_tree_model.c +``` + +--- + +## Comportement attendu + +La commande : + +```bash +make test +``` + +doit : + +1. compiler les binaires de test ; +2. exécuter chaque test ; +3. afficher clairement le résultat ; +4. retourner un code d'erreur si un test échoue. + +--- + +## Critères d'acceptation + +- [ ] `make test` compile tous les tests. +- [ ] `make test` exécute tous les tests. +- [ ] Un test en échec arrête la commande. +- [ ] `make clean` supprime les binaires de test. +- [ ] Aucun binaire de test n'est versionné. +- [ ] Le projet principal continue de compiler. +- [ ] Aucun warning. + +--- + +## Commit attendu + +```text +build: add automated test target +``` diff --git a/labfy-investigation/tests/test_investigation_tree_model b/labfy-investigation/tests/test_investigation_tree_model index e88c7dc6b09cca3dc4c4b24b725ca09467e18473..298935d2dc89aee38f334f9d7711aa256b15b4d9 100755 GIT binary patch delta 3621 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 delta 2638 zcmZ8jdrTBZ7@t`9NHmJpDtp=!% z776w2XPOwT(r0L6jf#KxAO$oPFl_>cw6Qf7(lkA*w$Mk!ifq5xndQ_;c7F3ce&2li z&Ft*7zC&C0(4ak`)l9S&;6PUU4$k;oJ{8TyQ(&Qq2k)erh7DXXY=8vnlI=pY!vgA- z-<7yA2#xfegmc+k3L~USISFGz9Y$D!>ads2g8fp7T*oC+2LqDL;t||Qg!|I*q;BcG zj_Rc`oo)FY_S&a=e!CcV{2rW$SVrFl8tH~$q@C8{$VTh5{u90x)^DkVXo$`lce!B8m|a9R=rEz#Q`%@`9q zJ;1eW*<^UinAP54n`;D5M9lliQ)%&Ub`zqs7&b5{9;>q| z&4!!kr0ngglhvVkM+0-bED-(6H2-`bJZnj#U%?7X`izI@PquoOE4%&s*-&ZvwJug^ z_Om#ubvyQnk|xj$q9ctV+((lCMNoui{{r8Is(@cXZxbhp*y*~@oV-q zbYey%v=@ot6%r25@%6*nH{*lltcSTtnQ$~|rc}29Mv|Nf4F>HTp z(w>Gn_~10gDuw}!RfPF3d(8KRN#C95yAkax9!$Lrx?oyz1i8$!Q1#jV`F>3 zgpV$7!m$;fXYRDeO*> zbDl9p&qy~e!~rF#7&$M`O@pu|Z$3Q?U*I?bu4BIi~-Z{6+40*Tdb`{vzdhmXyRn|I-K^} zAj2D(!pKGuR9i;$`H)QvnGuQgCvaquQb^zl{&}V+_~mEtkdYinFX~yug(8mzp&t_Z zN->kRA<#B~dNUShQ9w8fSkL{-iGGL35rzmndl^A_f)I~-Ht}vz!Cc{=1Z(nbxbUo> z#rl*2^klE}WQ1}U&9@mU(duNcp1X}jluT^8$J#D2(=EN!?Q06wN-$jH1y^PqY%AUa zcApat8B(Fz=Wp-yRZ+;8GenDk`rVccal6s+1~krbz-qtQGA=ASrb46NE!)}87@Hl= z`wL}7NVrS=g_C<%-@|QCR#HzJpu5C9dH2%m=QV&->N4ru2R{g3={~%@beFmlHaYnm zI(ATy0xmgxBPtFQn!=YU*byj*4PUj83*C{4?fn4{#osV3cgy;2D}v&3Ogg~BEAVD{ lDQ@HQ<)!kg9