Alle Tests benötigen die use-Anweisung use PDF::PDFUnit
.
Funktionen aus Test::Exception
und Test::More
werden in den
Beispielen benutzt, gehören jedoch nicht zu PDFUnit.
use PDF::PDFUnit; use Test::Exception; use Test::More;
Tests auf ein einzelnes PDF-Dokument beginnen mit der Benennung
der zu testenden Datei über die Methode AssertThat->document(..)
.
Von dort aus verzweigen die Tests in unterschiedliche Testbereiche, wie z.B. Inhalt, Schriften,
Layout etc.:
Unter Verkürzung des Listungs um die notwendigen use
-Anweisungen
wird die Art der API im folgenden Beispiel deutlich:
my $resources_dir = ...; # the base folder of your test data my $pdfUnderTest = "$resources_dir/doc-under-test.pdf"; lives_ok { # function from Test::Exception my $expectedText = "John Doe"; # # AssertThat->document($pdfUnderTest) # document under test ->restrictedTo($page2) # page selection ->hasText() # test scope ->... # further validation methods ; # } "name of the test"; # name of the test # # Comparing a single document with a reference: # lives_ok { # my $expectedText = "John Doe"; # # AssertThat->document($pdfUnderTest) # the document under test ->and($reference) # the reference document for the comparison ->restrictedTo($page2) # ->hasText() # ->... # ; # } "comparing a PDF with a reference"; #
Das PDF-Dokument kann als Datentyp |
Wenn mehrere PDF-Dokumente in einen Test einfließen,
beginnt er mit der Methode AssertThat->eachDocument(..)
:
# Instantiation of PDFUnit for multiple documents: ... my $pdfArray = [$pdfUnderTest1, $pdfUnderTest2]; AssertThat->eachDocument($pdfArray) 5: „Mehrere Dokumente und Verzeichnisse“ ->hasFormat(A4_PORTRAIT) ; ...
Die PDF-Dokumente können als |
Tests können sich auch auf alle PDF-Dokumente in einem Verzeichnis beziehen.
Solche Tests beginnen mit der Methode AssertThat->eachDocument()->inFolder(..)
:
# Instantiation of PDFUnit for a folder: ... AssertThat->eachDocument() ->inFolder($folder) 5.3: „Verzeichnis testen“ ->passedFilter($allPdfunitFiles) -> ... ; ...
Die folgende Liste gibt einen vollständigen Überblick über die Testgebiete von PDFUnit. Die Kapitel sind aber nicht in diesem Handbuch beschreiben, sondern im Handbuch von PDFUnit-Java, letztendlich um Redundanzen zu vermeiden, die über kurz oder lang zu einer fehlerhaften Dokumentation führen würden. Hier der Link zum PDFUnit-Java Handbuch: http://www.pdfunit.com/de/documentation/java/.
# Every one of the following methods opens a new test scope: # # The detailed descriptions can be found in the manual of PDFUnit-Java (to avoid redundancy). # The names of the methods are exactly the same. # # see http://www.pdfunit.com/de/documentation/java/ # ->asRenderedPage() ->containsImage(..) ->containsOneImageOf(..) ->hasAuthor() ->hasBookmark() ->hasBookmarks() ->hasCreationDate() ->hasCreator() ->hasEmbeddedFile(..) ->hasEncryptionLength(..) ->hasField(..) ->hasFields(..) ->hasFont() ->hasFonts() ->hasFormat(..) ->hasImage(..) ->hasJavaScript() ->hasJavaScriptAction() ->hasKeywords() ->hasLanguageInfo(..) ->hasLayer() ->hasLayers() ->hasLessPagesThan() ->hasLocalGotoAction() ->hasModificationDate() ->hasMorePagesThan() ->hasNamedDestination() ->hasNoAuthor() ->hasNoCreationDate() ->hasNoCreator() ->hasNoImage() ->hasNoKeywords() ->hasNoLanguageInfo() ->hasNoModificationDate() ->hasNoProducer() ->hasNoProperty(..) ->hasNoSubject() ->hasNoText() ->hasNoTitle() ->hasNoXFAData() ->hasNoXMPData() ->.. continued
... continuation: ->hasNumberOf...() ->hasOCG() ->hasOCGs() ->hasOwnerPassword(..) ->hasPermission() ->hasProducer() ->hasProperty(..) ->hasSignatureField(..) ->hasSignatureFields() ->hasSubject() ->hasText() ->hasTitle() ->hasUserPassword(..) ->hasVersion() ->hasXFAData() ->hasXMPData() ->hasZugferdData() ->haveSame...() ->isCertified() ->isCertifiedFor(..) ->isLinearizedForFastWebView() ->isSigned() ->isSignedBy(..) ->isTagged() ->restrictedTo(..)
Manche Testbereiche erreicht man erst nach einem weiteren Methodenaufruf:
# Validation of bar code and QR code: ->hasImage()->withBarcode() ->hasImage()->withQRcode() # Validation based on Excel files: ->compliesWith()->constraints(excelRules) # Validation of DIN5008 constraints: ->compliesWith()->din5008FormA() ->compliesWith()->din5008FormB() ->compliesWith()->pdfStandard() # Validation around ZUGFeRD: ->compliesWith()->zugferdSpecification(..)
Hier noch einmal der Link zum PDFUnit-Java Handbuch: http://www.pdfunit.com/de/documentation/java/.
PDFUnit wird ständig weiterentwickelt und die Dokumentation aktuell gehalten. Sollten Sie Tests vermissen, schicken Sie Ihre Wünsche und Vorschläge an info[at]pdfunit.com.