100 lines
3.1 KiB
Markdown
100 lines
3.1 KiB
Markdown
|
# Test 27 - Gestion des conditions IF
|
||
|
|
||
|
Ce test vérifie comment `bake` et `make` gèrent les conditions `if` dans les commandes de compilation, en particulier pour tester l'existence d'un fichier avant de l'écraser ou de le recréer.
|
||
|
|
||
|
## Sommaire
|
||
|
- [Structure du test](#structure-du-test)
|
||
|
- [Contenu des fichiers de règles](#contenu-des-fichiers-de-règles)
|
||
|
- [Objectif du test](#objectif-du-test)
|
||
|
- [Scénario de test](#scénario-de-test)
|
||
|
- [Comment exécuter le test](#comment-exécuter-le-test)
|
||
|
- [Test manuel](#test-manuel)
|
||
|
- [Résultats attendus](#résultats-attendus)
|
||
|
|
||
|
## Structure du test
|
||
|
|
||
|
```
|
||
|
test-27-conditions-if/
|
||
|
├── README.md # Ce fichier
|
||
|
├── bake/
|
||
|
│ ├── Bakefile # Fichier de règles pour bake
|
||
|
│ ├── bakefile.jar # Exécutable de bake (JAR)
|
||
|
└── make/
|
||
|
└── Makefile # Fichier de règles pour make
|
||
|
```
|
||
|
|
||
|
## Contenu des fichiers de règles
|
||
|
|
||
|
Les fichiers `Makefile` et `Bakefile` contiennent la logique conditionnelle suivante :
|
||
|
|
||
|
```makefile
|
||
|
# Définition de la cible principale
|
||
|
all: fichier.txt
|
||
|
@echo "La cible fichier.txt est à jour."
|
||
|
|
||
|
# Cible qui vérifie si le fichier existe
|
||
|
# Si le fichier existe, ne rien faire
|
||
|
# Sinon, le créer avec touch
|
||
|
fichier.txt:
|
||
|
@if [ -f "fichier.txt" ]; then echo "Le fichier fichier.txt existe déjà, rien à faire."; else echo "Le fichier fichier.txt n'existe pas, création..."; touch fichier.txt; echo "Le fichier fichier.txt a été créé."; fi
|
||
|
|
||
|
# Cible pour nettoyer le fichier créé
|
||
|
.PHONY: clean
|
||
|
clean:
|
||
|
@echo "Suppression de fichier.txt..."
|
||
|
@rm -f fichier.txt
|
||
|
```
|
||
|
|
||
|
## Objectif du test
|
||
|
|
||
|
Ce test a pour but de vérifier que `bake` et `make` :
|
||
|
1. Vérifient correctement si `fichier.txt` existe avant de l'écraser.
|
||
|
2. N'exécutent pas la création de `fichier.txt` si celui-ci existe déjà.
|
||
|
3. Suppriment `fichier.txt` proprement avec la cible `clean`.
|
||
|
|
||
|
## Scénario de test
|
||
|
|
||
|
1. Exécuter `make` et `bake` une première fois pour voir la création du fichier.
|
||
|
2. Exécuter `make` et `bake` une seconde fois pour voir si la condition empêche la recréation du fichier.
|
||
|
3. Supprimer `fichier.txt` et relancer `make` et `bake` pour vérifier que le fichier est bien recréé.
|
||
|
|
||
|
## Comment exécuter le test
|
||
|
|
||
|
### Test manuel
|
||
|
|
||
|
1. Exécuter `make` et `bake` :
|
||
|
```bash
|
||
|
cd make
|
||
|
make
|
||
|
```
|
||
|
Le fichier `fichier.txt` doit être créé.
|
||
|
|
||
|
2. Exécuter `make` et `bake` à nouveau :
|
||
|
```bash
|
||
|
make
|
||
|
```
|
||
|
Il ne doit pas y avoir de recréation du fichier.
|
||
|
|
||
|
3. Supprimer `fichier.txt` et relancer `make` :
|
||
|
```bash
|
||
|
make clean
|
||
|
make
|
||
|
```
|
||
|
Le fichier doit être recréé.
|
||
|
|
||
|
4. Répéter les mêmes étapes avec `bake` :
|
||
|
```bash
|
||
|
cd bake
|
||
|
java -cp bakefile.jar fr.monlouyan.bakefile.Main
|
||
|
java -cp bakefile.jar fr.monlouyan.bakefile.Main clean
|
||
|
java -cp bakefile.jar fr.monlouyan.bakefile.Main
|
||
|
```
|
||
|
|
||
|
5. Vérifier les résultats et comparer le comportement avec `make`.
|
||
|
|
||
|
## Résultats attendus
|
||
|
|
||
|
- `bake` et `make` doivent créer `fichier.txt` uniquement si celui-ci n'existe pas.
|
||
|
- Un deuxième appel à `make` ou `bake` ne doit pas recréer `fichier.txt` s'il est déjà présent.
|
||
|
- La cible `clean` doit supprimer le fichier proprement.
|