Aller au contenu

Tests

phil/ujo

Les tests de la bibliothèque

La suite tests/Unit vérifie chaque type par des cas pilotés par les données : ses données minimales complétées par les valeurs par défaut, ses données complètes gardées dans l'ordre, chaque valeur obligatoire, chaque borne, chaque choix, chaque longueur et chaque forme, chaque forme ancienne lue, et le HTML et le texte exacts de chaque type et de chaque réglage. L'assainisseur est testé sur les pièges qu'un fragment peut contenir : des scripts dans n'importe quelle casse, des adresses encodées, des éléments mal imbriqués ou non fermés, des guillemets dans les attributs.

Depuis la racine du monodépôt :

vendor/bin/phpunit packages/ujo/tests

La bibliothèque est tenue à un score de mutation couverte de 100 % par Infection.

Fuzzing

La cible de fuzzing ujo donne au décodeur et aux moteurs de rendu des entrées que personne n'a écrites, à partir des germes de tests/Fuzz/corpus/ : un document est soit décodé et rendu, soit refusé par une exception de la bibliothèque. Depuis la racine du monodépôt :

composer fuzz -- ujo

Bancs d'essai

UjoBench décode, vérifie et produit le rendu de documents de 10, 100 et 1 000 blocs de chaque type courant, et d'un paragraphe de balises en ligne imbriquées sur 1 000 et 5 000 niveaux ; chaque étape croît avec le nombre de blocs, jamais avec son carré. Un document rendu tel que le normaliseur l'a retourné n'est pas vérifié de nouveau. Depuis la racine du monodépôt :

composer bench -- packages/ujo/tests/Benchmark

Tester du code qui stocke des documents

Dans le test, normalisez ce que l'éditeur enverrait, et comparez les formes canoniques :

$ujo = new Ujo();
$stored = $ujo->encode($ujo->decode($postedJson));

self::assertSame('<p class="ujo-paragraph">Hello <b>world</b></p>', $ujo->toHtml($stored));

Un document construit à la main n'a pas besoin d'identifiants venus d'un éditeur : n'importe quel identifiant de 1 à 64 lettres, chiffres, _ ou -, unique dans le document, convient.