Kapitel 3. Funktionsumfang

3.1. Überblick

Syntaktischer Einstieg

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.:

// Instantiation of PDFUnit for a single document:

AssertThat.document(filename)          13.1: „Instantiierung der PDF-Dokumente“ 
          ...                  
// Switch to one of many test scopes. 

// Compare one PDF with a reference:
AssertThat.document(filename)         1
          .and(..)                     4.1: „Überblick“  
          ...

1

Das PDF-Dokument kann als Datentyp String, File, InputStream, URL oder byte[] 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:
...
File[] files = {file1, file2, file3};
AssertThat.eachDocument(filename)   1  5: „Mehrere Dokumente und Verzeichnisse“ 
          .hasText(..)    
          .containing(..)    
;

1

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:
...
File folderToCheck = new File(..);
AssertThat.eachDocument()
          .inFolder(folderToCheck) 1  5.3: „Verzeichnis testen“ 
          .hasText(..)    
          .containing(..)    
;

1

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

Exception für erwartete Fehler

Tests, die einen Fehler erwarten, müssen die PDFUnitValidationException abfangen.

Hier ein Beispiel für einen Test, der einen Fehler erwartet:

@Test(expected=PDFUnitValidationException.class)
public void isSigned_DocumentNotSigned() throws Exception {
  String filename = "documentUnderTest.pdf";

  AssertThat.document(filename)
            .isSigned()
  ;
}

Testbereiche

Die folgende Liste gibt einen vollständigen Überblick über die Testgebiete von PDFUnit. Der jeweilige Link hinter einer Methode verweist auf das Kapitel, das das Testgebiet ausführlich beschreibt.

// Every one of the following methods opens a new test scope:
  
.asRenderedPage()                3.18: „Layout - gerenderte volle Seiten“ 

.containsImage(..)               3.7: „Bilder in Dokumenten“ 
.containsOneImageOf(..)          3.7: „Bilder in Dokumenten“ 

.hasAuthor()                     3.10: „Dokumenteneigenschaften“ 
.hasBookmark()                   3.20: „Lesezeichen/Bookmarks und Sprungziele“ 
.hasBookmarks()                  3.20: „Lesezeichen/Bookmarks und Sprungziele“ 
.hasCreationDate()               3.8: „Datum“ 
.hasCreator()                    3.8: „Datum“ 
.hasEmbeddedFile(..)             3.3: „Anhänge (Attachments)“ 
.hasEncryptionLength(..)         3.21: „Passwort“ 
.hasField(..)                    3.14: „Formularfelder“ 
.hasFields(..)                   3.14: „Formularfelder“ 
.hasFont()                       3.24: „Schriften“ 
.hasFonts()                      3.24: „Schriften“ 
.hasFormat(..)                   3.13: „Format“ 
.hasImage(..)                    3.7: „Bilder in Dokumenten“ 
.hasJavaScript()                 3.16: „JavaScript“ 
.hasJavaScriptAction()           3.2: „Aktionen (Actions)“ 
.hasKeywords()                   3.10: „Dokumenteneigenschaften“ 
.hasLanguageInfo(..)             3.27: „Sprachinformation (Language)“ 
.hasLayer()                      3.17: „Layer“ 
.hasLayers()                     3.17: „Layer“ 
.hasLessPagesThan()              3.25: „Seitenzahlen als Testziel“ 
.hasLocalGotoAction()            3.2: „Aktionen (Actions)“ 
.hasModificationDate()           3.8: „Datum“ 
.hasMorePagesThan()              3.25: „Seitenzahlen als Testziel“ 
.hasNamedDestination()           3.20: „Lesezeichen/Bookmarks und Sprungziele“ 

.hasNoAuthor()                   3.10: „Dokumenteneigenschaften“ 
.hasNoCreationDate()             3.8: „Datum“ 
.hasNoCreator()                  3.10: „Dokumenteneigenschaften“ 
.hasNoImage()                    3.7: „Bilder in Dokumenten“ 
.hasNoKeywords()                 3.10: „Dokumenteneigenschaften“ 
.hasNoLanguageInfo()             3.27: „Sprachinformation (Language)“ 
.hasNoModificationDate()         3.8: „Datum“ 
.hasNoProducer()                 3.10: „Dokumenteneigenschaften“ 
.hasNoProperty(..)               3.10: „Dokumenteneigenschaften“ 
.hasNoSubject()                  3.10: „Dokumenteneigenschaften“ 
.hasNoText()                     3.28: „Texte“ 
.hasNoTitle()                    3.10: „Dokumenteneigenschaften“ 
.hasNoXFAData()                  3.36: „XFA Daten“ 
.hasNoXMPData()                  3.37: „XMP-Daten“ 

.hasNumberOf...()                3.4: „Anzahl verschiedener PDF-Bestandteile“ 

.hasOCG()                        3.17: „Layer“ 
.hasOCGs()                       3.17: „Layer“ 
.hasOwnerPassword(..)            3.21: „Passwort“ 
.hasPermission()                 3.6: „Berechtigungen“ 
.hasProducer()                   3.10: „Dokumenteneigenschaften“ 
.hasProperty(..)                 3.10: „Dokumenteneigenschaften“ 
.hasSignatureField(..)           3.26: „Signaturen - Unterschriebenes PDF“ 
.hasSignatureFields()            3.26: „Signaturen - Unterschriebenes PDF“ 
.hasSubject()                    3.10: „Dokumenteneigenschaften“ 
.hasText()                       3.28: „Texte“ 
.hasTitle()                      3.10: „Dokumenteneigenschaften“ 
.hasUserPassword(..)             3.21: „Passwort“ 
.hasVersion()                    3.35: „Version“ 
.hasXFAData()                    3.36: „XFA Daten“ 
.hasXMPData()                    3.37: „XMP-Daten“ 
.hasZugferdData()                3.39: „ZUGFeRD“ 

.haveSame...()                   4.1: „Überblick“ 

.isCertified()                   3.38: „Zertifiziertes PDF“ 
.isCertifiedFor(..)              3.38: „Zertifiziertes PDF“ 
.isLinearizedForFastWebView()    3.12: „Fast Web View“ 
.isSigned()                      3.26: „Signaturen - Unterschriebenes PDF“ 
.isSignedBy(..)                  3.26: „Signaturen - Unterschriebenes PDF“ 
.isTagged()                      3.34: „Tagging“ 

.restrictedTo(..)                13.2: „Seitenauswahl“ 

Manche Testbereiche erreicht man erst nach einem weiteren Methodenaufruf:

// Validation of bar code and QR code:
.hasImage().withBarcode()                 3.5: „Barcode“ 
.hasImage().withQRcode()                  3.23: „QR-Code“ 

// Validation based on Excel files:
.compliesWith().constraints(excelRules)   3.11: „Excel-Dateien für Validierungsregeln“ 

// Validation of DIN5008 constraints:
.compliesWith().din5008FormA()            3.9: „DIN 5008“ 
.compliesWith().din5008FormB()            3.9: „DIN 5008“ 
.compliesWith().pdfStandard()             3.22: „PDF/A“ 

// Validation around ZUGFeRD:
.compliesWith().zugferdSpecification(..)  3.39: „ZUGFeRD“ 

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.