Aller au contenu

Tests

phil/print-compositor

Les tests de la bibliothèque

La suite tests/Unit dessine de petites images pixel par pixel et compare chaque pixel des résultats : la mise à l'échelle et l'alignement des images dans leurs boîtes, l'ordre des calques et des éléments, la fusion des pixels translucides, un fichier par encre, l'ombrage exact d'une maquette sur des colonnes grises à plusieurs intensités, ses plafonds, une zone noire et une photo transparente. Les textes sont dessinés dans une police TrueType que les tests écrivent eux-mêmes, dont les glyphes sont des rectangles de tailles connues, avec des approches et des jambages descendants : la taille que prend un texte, ses lignes, son encre et son alignement sont vérifiés au pixel près à 72 ppp, où un point vaut un pixel. Ses formes en collection et en WOFF vérifient les polices refusées.

À partir de la racine du monodépôt :

vendor/bin/phpunit packages/print-compositor/tests

Infection tient la bibliothèque à un score de 100 % des mutants couverts.

Bancs d'essai

PrintCompositorBench compose une zone de 100 × 100 mm, une image sous un texte ajusté, à 72, 150 et 300 ppp, et ajuste le texte seul aux mêmes résolutions. À partir de la racine du monodépôt :

composer bench -- packages/print-compositor/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 composant la même zone à 150 ppp dans un fichier PNG ; le compositeur et la police qu'il construit avant sa boucle servent chaque requête. Il a besoin de l'extension GD, avec FreeType, dans l'image FrankenPHP :

composer bench:worker phil/print-compositor

Tester du code qui compose

Composez de petites tâches à basse résolution et examinez des pixels plutôt que des octets encodés, qui changent selon les versions de GD et de libpng :

use Phil\PrintCompositor\Box;
use Phil\PrintCompositor\Colour;
use Phil\PrintCompositor\ImageItem;
use Phil\PrintCompositor\Layer;
use Phil\PrintCompositor\PrintCompositor;
use Phil\PrintCompositor\PrintJob;
use Phil\PrintCompositor\Raster;
use Phil\PrintCompositor\Zone;

$red = Raster::blank(1, 1, Colour::fromHex('#ff0000'));
$job = new PrintJob(new Zone('front', 25.4, 25.4), [new Layer('artwork', [new ImageItem($red, new Box(0, 0, 25.4, 25.4))])], 10);
$file = new PrintCompositor()->compose($job)->raster();

self::assertSame(10, $file->width);
self::assertEquals(Colour::fromHex('#ff0000'), $file->pixel(5, 5));

Pour tester le refus du texte d'un client, ajustez un TextItem avec TextFitter et attendez TextDoesNotFit ou MissingGlyphs : aucun fichier n'est dessiné.