5.3. Verzeichnis testen

Tests mit Verzeichnissen beginnen alle mit folgenden Methoden:

# Instantiation of PDFUnit for a folder:

AssertThat->eachDocument()                  1 
          ->inFolder($folder)               2
          ->passedFilter($allPdfunitFiles)  3
          ->...
;

1 2

Diese beiden Methoden sind der syntaktische Einstieg für Tests, die sich auf alle Dateien im angegebenen Verzeichnis beziehen, die die Dateiendung PDF haben. Der Vergleich auf die Dateiendung erfolgt case-insensitiv.

3

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.

Beispiel - Alle Dokumente im Verzeichnis validieren

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";

Beispiel - Ausgewählte Dokumente im Verzeichnisse validieren

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.