90 lines
3.1 KiB
Markdown
Raw Normal View History

2025-03-10 13:21:31 +01:00
# Test 23 - Gestion des timestamps identiques
Ce test vérifie le comportement de `bake` comparé à `make` lorsque le fichier source et la cible ont des timestamps strictement identiques.
## 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)
- [Explications techniques](#explications-techniques)
## Structure du test
```
test-23-identical-timestamps/
├── README.md # Ce fichier
├── bake/
│ ├── Bakefile # Fichier de règles pour bake
│ ├── bakefile.jar # Exécutable de bake (JAR)
│ ├── input.txt # Fichier source
│ ├── output.txt # Fichier cible (avec timestamp identique)
└── make/
├── Makefile # Fichier de règles pour make
├── input.txt # Fichier source
└── output.txt # Fichier cible (avec timestamp identique)
```
## Contenu des fichiers de règles
Les fichiers `Makefile` et `Bakefile` contiennent les mêmes règles simples :
```makefile
all: output.txt
output.txt: input.txt
cat input.txt > output.txt
input.txt:
echo "Test" > input.txt
```
## Objectif du test
Ce test vérifie que `bake` se comporte comme `make` face à un cas particulier : quand le fichier source `input.txt` et la cible `output.txt` ont exactement le même timestamp. Ce scénario peut se produire lors de synchronisations de fichiers rapides ou d'opérations automatisées qui modifient simultanément les fichiers source et cible.
## Scénario de test
Le test suit les étapes suivantes :
1. Créer le fichier source `input.txt`
2. Générer la cible `output.txt` à partir du fichier source
3. Aligner les timestamps des deux fichiers pour qu'ils soient identiques
4. Exécuter `make` et `bake` pour observer s'ils considèrent la cible comme à jour
## Comment exécuter le test
### Test manuel
1. Pour Make :
```bash
cd make
make
# Aligner les timestamps des fichiers
touch -r input.txt output.txt
make
```
2. Pour Bake :
```bash
cd bake
java -cp bakefile.jar fr.monlouyan.bakefile.Main
# Aligner les timestamps des fichiers
touch -r input.txt output.txt
java -cp bakefile.jar fr.monlouyan.bakefile.Main
```
3. Comparez visuellement les deux résultats.
## Résultats attendus
- `make` et `bake` devraient considérer `output.txt` comme à jour et ne pas le reconstruire.
- Aucun message de recompilation ne devrait apparaître après la synchronisation des timestamps.
- Si `bake` ou `make` reconstruisent `output.txt`, cela indique une différence dans leur gestion des timestamps identiques.
## Explications techniques
En fonctionnement normal, `make` et `bake` vérifient la date de modification des fichiers pour déterminer s'il faut recompiler une cible. Lorsque la cible et sa dépendance ont le même timestamp, la cible est considérée à jour, et aucune action n'est entreprise. Ce test vérifie que `bake` suit bien cette logique.