# 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.
