206 lines
9.5 KiB
Markdown
206 lines
9.5 KiB
Markdown
# Tests de Bake
|
|
|
|
Cette suite de tests compare le comportement de `bake` à celui de `make` pour vérifier le bon fonctionnement de l'outil.
|
|
|
|
## Table des tests
|
|
|
|
| N° | Nom du test | Description |
|
|
|---- |-------------|-------------|
|
|
| [01](#test-01-from-nothing) | Compilation depuis zéro | Vérifie la compilation d'un programme à partir de rien |
|
|
| [02](#test-02-already-exist) | Fichier déjà existant | Teste le comportement quand l'exécutable est déjà présent |
|
|
| [03](#test-03-circular) | Dépendances circulaires | Teste la détection des dépendances circulaires |
|
|
| [04](#test-04-edited) | Fichier modifié | Vérifie la recompilation après modification d'un fichier source |
|
|
| [05](#test-05-variables) | Variables | Teste l'utilisation des variables dans les règles |
|
|
| [06](#test-06-variables-on-cascade) | Variables en cascade | Teste la propagation des variables dans les règles |
|
|
| [07](#test-07-dependency) | Dépendances | Teste la résolution des dépendances |
|
|
| [08](#test-08-space-vs-tabulation) | Espaces vs tabulations | Vérifie la gestion des indentations |
|
|
| [09](#test-09-handling-comment) | Gestion des commentaires | Teste la reconnaissance et l'ignorance des commentaires |
|
|
| [10](#test-10-phony) | Cibles PHONY | Teste les cibles qui ne produisent pas de fichiers |
|
|
| [11](#test-11-error-in-code) | Erreur dans le code | Teste le comportement face à des erreurs dans le code source |
|
|
| [12](#test-12-file-dont-exist) | Fichier inexistant | Teste le comportement quand un fichier requis n'existe pas |
|
|
| [13](#test-13-dependancy-dont-exist) | Dépendance inexistante | Teste le comportement avec une dépendance manquante |
|
|
| [14](#test-14-remove-source-and-rebuild) | Suppression et reconstruction | Teste la reconstruction après suppression d'un fichier source |
|
|
| [15](#test-15-subdir-build) | Construction dans un sous-répertoire | Teste la gestion des chemins relatifs |
|
|
| [16](#test-16-strange-variables) | Variables inhabituelles | Teste l'utilisation de variables complexes |
|
|
| [17](#test-17-rule-without-command) | Règle sans commande | Teste les règles qui ne spécifient pas de commande |
|
|
| [18](#test-18-path-characters) | Caractères spéciaux dans les chemins | Teste la gestion des chemins contenant des caractères spéciaux |
|
|
| [19](#test-19-multiple-targets) | Cibles multiples | Teste la définition de plusieurs cibles dans une seule règle |
|
|
| [20](#test-20-circular-2) | Dépendances circulaires (cas 2) | Autre scénario de dépendances circulaires |
|
|
| [21](#test-21-generate) | Génération de fichiers | Teste la génération dynamique de fichiers |
|
|
| [22](#test-22-future-timestamp) | Timestamps dans le futur | Teste la gestion des fichiers avec une date de modification dans le futur |
|
|
| [23](#test-23-identical-timestamps) | Timestamps identiques | Teste le comportement quand plusieurs fichiers ont la même date de modification |
|
|
| [24](#test-24-50target) | 50 cibles | Teste la gestion d'un grand nombre de cibles |
|
|
| [25](#test-25-multilines) | Commandes multi-lignes | Teste l'exécution de commandes sur plusieurs lignes |
|
|
| [26](#test-26-rule-in-rule) | Règles imbriquées | Vérifie la gestion des règles générées dynamiquement |
|
|
| [27](#test-27-conditions-if) | Conditions `if` | Teste l'utilisation des conditions dans les fichiers de règles |
|
|
| [28](#test-28-silent) | Mode silencieux | Vérifie l'exécution des commandes silencieuses (`@`) |
|
|
| [29](#test-29-variable-dont-exist) | Variables inexistantes | Teste le comportement lorsqu'une variable non définie est utilisée |
|
|
| [30](#test-30-command-chaining-operators) | Chaînage de commandes | Vérifie l'utilisation des opérateurs `&&`, `||`, `;` |
|
|
| [31](#test-31-redirection) | Redirections I/O | Vérifie la gestion des redirections (`>`, `>>`, `<`) et pipes (`|`) |
|
|
| [32](#test-32-exit) | Gestion de `exit` | Teste le comportement des commandes `exit` pour arrêter l'exécution |
|
|
|
|
## Détails des nouveaux tests
|
|
|
|
|
|
## Détails des tests
|
|
|
|
### Test 01: From Nothing
|
|
[Accéder au test](test-01-from-nothing/)
|
|
|
|
Vérifie la compilation d'un programme C simple lorsqu'aucun fichier exécutable n'existe. Ce test confirme que `bake` peut correctement créer un exécutable à partir d'un fichier source.
|
|
|
|
### Test 02: Already Exist
|
|
[Accéder au test](test-02-already-exist/)
|
|
|
|
Teste le comportement lorsque l'exécutable existe déjà et est à jour. `bake` devrait reconnaître que la cible est déjà à jour et ne pas recompiler inutilement.
|
|
|
|
### Test 03: Circular
|
|
[Accéder au test](test-03-circular/)
|
|
|
|
Vérifie que `bake` peut détecter et gérer correctement les dépendances circulaires dans les règles, évitant les boucles infinies.
|
|
|
|
### Test 04: Edited
|
|
[Accéder au test](test-04-edited/)
|
|
|
|
Teste le comportement lorsqu'un fichier source est modifié. `bake` devrait détecter la modification et recompiler l'exécutable.
|
|
|
|
### Test 05: Variables
|
|
[Accéder au test](test-05-variables/)
|
|
|
|
Vérifie la prise en charge des variables dans les règles `bake`, comme le font les `Makefile` traditionnels.
|
|
|
|
### Test 06: Variables on Cascade
|
|
[Accéder au test](test-06-variables-on-cascade/)
|
|
|
|
Teste la propagation des variables à travers plusieurs niveaux de règles et de dépendances.
|
|
|
|
### Test 07: Dependency
|
|
[Accéder au test](test-07-dependency/)
|
|
|
|
Vérifie la résolution correcte des dépendances entre plusieurs fichiers source et en-têtes.
|
|
|
|
### Test 08: Space vs Tabulation
|
|
[Accéder au test](test-08-space-vs-tabulation/)
|
|
|
|
Teste la gestion des indentations avec des espaces par rapport aux tabulations, qui est une considération importante dans les Makefiles.
|
|
|
|
### Test 09: Handling Comment
|
|
[Accéder au test](test-09-handling-comment/)
|
|
|
|
Vérifie que `bake` gère correctement les commentaires dans les fichiers de règles.
|
|
|
|
### Test 10: Phony
|
|
[Accéder au test](test-10-phony/)
|
|
|
|
Teste les cibles PHONY qui ne correspondent pas à des fichiers réels mais exécutent des commandes (comme `clean` ou `all`).
|
|
|
|
### Test 11: Error in Code
|
|
[Accéder au test](test-11-error-in-code/)
|
|
|
|
Vérifie le comportement de `bake` face à des erreurs dans le code source pendant la compilation.
|
|
|
|
### Test 12: File Don't Exist
|
|
[Accéder au test](test-12-file-dont-exist/)
|
|
|
|
Teste la réaction de `bake` lorsqu'un fichier requis n'existe pas.
|
|
|
|
### Test 13: Dependancy Don't Exist
|
|
[Accéder au test](test-13-dependancy-dont-exist/)
|
|
|
|
Vérifie le comportement de `bake` lorsqu'une dépendance spécifiée n'existe pas.
|
|
|
|
### Test 14: Remove Source and Rebuild
|
|
[Accéder au test](test-14-remove-source-and-rebuild/)
|
|
|
|
Teste la capacité de `bake` à gérer la suppression et la recréation de fichiers source.
|
|
|
|
### Test 15: Subdir Build
|
|
[Accéder au test](test-15-subdir-build/)
|
|
|
|
Vérifie la gestion des chemins relatifs et la compilation de fichiers dans des sous-répertoires.
|
|
|
|
### Test 16: Strange Variables
|
|
[Accéder au test](test-16-strange-variables/)
|
|
|
|
Teste l'utilisation de variables avec des noms ou des valeurs inhabituels ou complexes.
|
|
|
|
### Test 17: Rule Without Command
|
|
[Accéder au test](test-17-rule-without-command/)
|
|
|
|
Vérifie le comportement de `bake` avec des règles qui ne spécifient aucune commande à exécuter.
|
|
|
|
### Test 18: Path Characters
|
|
[Accéder au test](test-18-path-characters/)
|
|
|
|
Teste la gestion des chemins contenant des caractères spéciaux ou des espaces.
|
|
|
|
### Test 19: Multiple Targets
|
|
[Accéder au test](test-19-multiple-targets/)
|
|
|
|
Vérifie la définition et l'exécution de règles avec plusieurs cibles.
|
|
|
|
### Test 20: Circular 2
|
|
[Accéder au test](test-20-circular-2/)
|
|
|
|
Un scénario alternatif pour tester la détection et la gestion des dépendances circulaires.
|
|
|
|
### Test 21: Generate
|
|
[Accéder au test](test-21-generate/)
|
|
|
|
Teste la génération dynamique de fichiers durant le processus de build.
|
|
|
|
### Test 22: Future Timestamp
|
|
[Accéder au test](test-22-future-timestamp/)
|
|
|
|
Vérifie le comportement de `bake` lorsqu'un fichier source a une date de modification dans le futur.
|
|
|
|
### Test 23: Identical Timestamps
|
|
[Accéder au test](test-23-identical-timestamps/)
|
|
|
|
Teste le comportement lorsque plusieurs fichiers impliqués dans la compilation ont exactement la même date de modification.
|
|
|
|
### Test 24: 50target
|
|
[Accéder au test](test-24-50target/)
|
|
|
|
Vérifie la performance et la stabilité de `bake` avec un grand nombre de cibles (50).
|
|
|
|
### Test 25: Multilines
|
|
[Accéder au test](test-25-multilines/)
|
|
|
|
Teste l'exécution de commandes réparties sur plusieurs lignes dans une règle.
|
|
|
|
### Test 26: Règles imbriquées
|
|
[Test détaillé](test-26-rule-in-rule/)
|
|
|
|
Vérifie comment `bake` et `make` gèrent des règles générées dynamiquement.
|
|
|
|
### Test 27: Conditions `if`
|
|
[Test détaillé](test-27-conditions-if/)
|
|
|
|
Teste l'utilisation de conditions `ifeq`, `ifneq` pour ajuster les variables de compilation.
|
|
|
|
### Test 28: Mode silencieux
|
|
[Test détaillé](test-28-silent/)
|
|
|
|
Vérifie comment `bake` et `make` gèrent le préfixe `@` pour masquer l'affichage des commandes.
|
|
|
|
### Test 29: Variables inexistantes
|
|
[Test détaillé](test-29-variable-dont-exist/)
|
|
|
|
Teste le comportement lorsqu'une variable non définie est utilisée dans une commande `touch $(VAR_INEXISTANTE)`.
|
|
|
|
### Test 30: Chaînage de commandes
|
|
[Test détaillé](test-30-command-chaining-operators/)
|
|
|
|
Vérifie l'utilisation des opérateurs `&&`, `||` et `;` pour chaîner plusieurs commandes dans une règle.
|
|
|
|
### Test 31: Redirections I/O
|
|
[Test détaillé](test-31-redirection/)
|
|
|
|
Teste la gestion des redirections d'entrée et de sortie (`>`, `>>`, `<`) ainsi que des pipes (`|`) dans `bake` et `make`.
|
|
|
|
|
|
### Test 32: Gestion de `exit`
|
|
[Test détaillé](test-32-exit/)
|
|
|
|
Vérifie comment `bake` et `make` gèrent les commandes `exit` qui arrêtent l'exécution. |