Tests
phil/text-diffLes tests de la bibliothèque
La suite tests/Unit teste chaque découpeur sur des jetons exacts et sur sa capacité à redonner son texte ;
l'algorithme sur des scripts exacts — dont l'exemple de l'article de Myers —, sur la borne de modifications et sur la
jonction des espaces. Pour chaque paire de listes de jetons jusqu'à cinq jetons de deux lettres et trois jetons de
trois lettres, elle vérifie que le script redonne les deux listes, qu'il est normalisé et qu'il est le plus court, par
comparaison avec une plus longue sous-suite commune calculée à part. Elle teste aussi la liste de changements et ses
positions en points de code ; le HTML du texte brut et du balisage ; l'appariement des documents — conservés,
modifiés, déplacés, ajoutés, retirés, imbriqués, au-delà de la borne — et leur HTML.
Depuis la racine du monodépôt :
vendor/bin/phpunit packages/text-diff/tests
Infection maintient la bibliothèque à un score de 100 % de mutants couverts.
Bancs d'essai
TextDiffBench compare des textes de 1, 10 et 50 Ko avec quelques modifications, des textes réécrits d'un bout à
l'autre, qui s'arrêtent à la borne de modifications, et des documents de 100 et 1 000 blocs. Depuis la racine du
monodépôt :
composer bench -- packages/text-diff/tests/Benchmark
En mode worker, tests/Worker/worker.php est une page que FrankenPHP sert depuis un seul processus d'une requête à
l'autre, en comparant 5 Ko de texte mot par mot et 5 Ko de HTML ; les services qu'elle construit avant sa boucle
servent chaque requête, comme dans le worker d'une application :
composer bench:worker phil/text-diff
Tester du code qui montre des différences
La sortie est déterministe. Comparez le HTML exactement, ou comparez la liste de changements :
self::assertSame('a <del>b</del><ins>c</ins>', (new TextDiff())->toHtml((new TextDiff())->words('a b', 'a c')));
$changes = (new TextDiff())->words('a b', 'a c')->changes();
self::assertSame([ChangeKind::Replacement, 'b', 'c'], [$changes[0]->kind, $changes[0]->old, $changes[0]->new]);
Pour les documents, vérifiez les sortes et les identifiants de DocumentDiff::changes() plutôt que le HTML rendu, qui
dépend du moteur de rendu.