Tests mit Verzeichnissen beginnen alle mit folgenden Methoden:
# Instantiation of PDFUnit for a folder: AssertThat->eachDocument() ->inFolder($folder) ->passedFilter($allPdfunitFiles) ->... ;
Diese beiden Methoden sind der syntaktische Einstieg für
Tests, die sich auf alle Dateien im angegebenen Verzeichnis
beziehen, die die Dateiendung |
|
Mit einem (optionalen) Filter kann die Menge der zu testenden Dokumente eingeschränkt werden. Es können mehrere Filter verwendet werden. Ohne Filter werden alle PDF-Dokumente des Verzeichnisses getestet. |
Ein Test bricht ab, sobald ein Dokument im Verzeichnis den Test nicht erfüllt.
Falls die Verwendung von Filtern dazu führt, dass kein Dokument mehr übrig bleibt, wird eine Fehlermeldung erzeugt. Ebenso gibt es einen Fehler, wenn das Verzeichnis keine Dokumente enthält.
Das folgende Beispiel testet, ob alle PDF-Dokumente im angegebenen Verzeichnis die ZUGFeRD-Spezifikation erfüllen:
lives_ok { my $folder = File->new("$resources_dir/zugferd10/"); AssertThat->eachDocument() ->inFolder($folder) ->compliesWith() ->zugferdSpecification(ZugferdVersion::VERSION10) ; } "validate compliance with ZUGFeRD specification of all PDF of a given folder";
Das nächste Beispiel überprüft den Titel aller PDF-Dokumente eines Verzeichnisses, die 'doc-under-test' oder 'reference' im Namen enthalten:
lives_ok { my $folder = File->new($resources_dir); my $allPdfunitFiles = FilenameMatchingFilter->new('.*(doc-under-test|reference)\.pdf$'); AssertThat ->eachDocument() ->inFolder($folder) ->passedFilter($allPdfunitFiles) ->hasProperty("Title")->equalsTo("PDFUnit - Automated PDF Tests") ; } "demo using a folder with a file filter";
Es gibt zwei Arten von Filtern. Der Filter FilenameContainingFilter
untersucht,
ob ein Dateiname einen bestimmten String enthält, und der Filter
FilenameMatchingFilter
wendet einen Regulären Ausdruck auf den Dateinamen an.
Wichtig: In beiden Fällen bezieht sich die Analyse des Dateinamens auf den
vollständigen Namen, d.h. auch auf den Pfad.
Deswegen sollte beispielsweise ein Regulärer Ausdruck immer mit '.*
' beginnen.