Aller au contenu

Tests

tilttek/puzzle-builder

Les tests de la bibliothèque

composer install
vendor/bin/phpunit --no-configuration tests

La suite unitaire, sous tests/Unit, s'exécute sans réseau ni base de données : des réponses normalisées étape par étape et option par option ; des réponses acceptées et partielles, et des clés refusées à chaque borne ; des énigmes, des déverrouillages et des indices refusés à chaque borne ; des scénarios avec des cycles, des énigmes hors d'atteinte, une exigence ou une finale manquante, et chaque champ mal formé de leur JSON ; des propositions justes, partielles, fausses, mal formées et limitées ; des indices palier après palier ; des énigmes ouvertes et sautées par l'animateur ; la vue, vérifiée pour ne contenir aucune réponse ; un avancement écrit et relu, et refusé champ par champ ; les deux limiteurs. Dans le monodépôt, Infection maintient la bibliothèque à 100 % des mutants couverts.

tests/Fuzz/scenario.php est la cible de fuzzing d'un scénario : tout texte donne un scénario dont l'ordre contient chaque énigme une fois, chacune après celles qu'elle exige, ou est refusé avec InvalidScenario, jamais une autre exception. composer fuzz l'exécute.

tests/Benchmark/PuzzleEngineBench.php mesure, sur une chaîne de 200 énigmes, la lecture et la vérification du scénario depuis le JSON, une proposition sur la dernière énigme quand 199 sont résolues, et la vue de cette partie.

Tester une application

Donnez à PuzzleEngine un limiteur en mémoire et une horloge qui ne bouge pas :

$clock = new MockClock('2026-11-13 20:00 UTC');
$engine = new PuzzleEngine(new InMemoryGuessLimiter(10, 60, $clock), $dispatcher, $clock);

$clock->sleep(60) termine une fenêtre du limiteur. Un test d'une vérification maison passe ses propositions par PuzzleEngine::guess() et vérifie GuessResult::$outcome, puis que PuzzleEngine::view() ne contient aucune de ses réponses.