# Test 26 - Règle imbriquée dans une autre règle

Ce test vérifie comment `bake` et `make` gèrent les règles imbriquées (c'est-à-dire lorsqu'une règle dépend d'une autre qui est également une règle).

## 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-26-rule-in-rule/
├── README.md         # Ce fichier
├── bake/             
│   ├── Bakefile      # Fichier de règles pour bake
│   ├── bakefile.jar  # Exécutable de bake (JAR)
│   ├── Main.java     # Fichier source
│   ├── Main.class    # Fichier compilé
├── make/
│   ├── Makefile      # Fichier de règles pour make
│   ├── Main.java     # Fichier source
│   ├── Main.class    # Fichier compilé
```

## Contenu des fichiers de règles

Les fichiers `Makefile` et `Bakefile` contiennent la règle suivante :

```makefile
Main.class: Main.java
	javac Main.java -Xlint:unchecked
```

## Objectif du test

Ce test a pour but de vérifier que `bake` et `make` :
1. Gèrent correctement les dépendances entre règles.
2. Recompilent `Main.class` seulement si `Main.java` a été modifié.
3. Ne recompileront pas `Main.class` si `Main.java` n’a pas été modifié.

## Scénario de test

1. Compiler `Main.java` pour générer `Main.class`.
2. Exécuter `make` et `bake` sans modifications pour voir si une recompilation est déclenchée.
3. Modifier `Main.java` et relancer `make` et `bake` pour voir si une recompilation est bien déclenchée.

## Comment exécuter le test

### Test manuel

1. Compiler avec Make :
   ```bash
   cd make
   make
   ```
   Le fichier `Main.class` doit être généré.

2. Compiler avec Bake :
   ```bash
   cd bake
   java -cp bakefile.jar fr.monlouyan.bakefile.Main
   ```

3. Vérifier si `Main.class` est bien généré.

4. Modifier `Main.java` et relancer la compilation :
   ```bash
   echo "// Modification" >> Main.java
   make
   ```

5. Vérifier si `make` et `bake` détectent la modification et recompilent `Main.class`.

## Résultats attendus

- `bake` et `make` doivent compiler `Main.java` en `Main.class` si `Main.class` n'existe pas ou si `Main.java` a été modifié.
- Si `Main.java` n’a pas été modifié, `make` et `bake` ne doivent pas recompiler `Main.class`.
