Zurück |  | Weiter

# Kapitel 3. Funktionsumfang

## 3.1. Überblick

### Syntaktischer Einstieg

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 `String`, `File`, `InputStream`, `URL` oder `byte-Array` an die Funktion übergeben werden.

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 `String[]`, `File[]`, `InputStream[]`, oder `URL[]` an die Funktion übergeben werden.

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)
              -> ...
    ;
    ...

| Alle PDF-Dokumente in diesem Verzeichnis werden validiert. PDF-Dokumente in Unterverzeichnisse werden nicht geprüft.

### Testbereiche

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.

Zurück |  | Weiter
Kapitel 2. Quickstart | Zum Anfang | Kapitel 4. Vergleiche gegen ein Referenz-PDF