Warum auch immer Sie das Erstellungsdatum eines Dokumentes überprüfen wollen - wegen der verschiedenen Formate, die ein Datum haben kann, ist es nicht ganz einfach. PDFUnit versucht, diese Komplexität zu kapseln, und gleichzeitig recht vielfältige Testszenarien anzubieten:
// Date existence tests: .hasCreationDate() .hasNoCreationDate() .hasModificationDate() .hasNoModificationDate() // Date value tests: .hasCreationDate().after(..) .hasCreationDate().before(..) .hasCreationDate().equalsTo(..) .hasModificationDate().after(..) .hasModificationDate().before(..) .hasModificationDate().equalsTo(..)
Die folgenden Abschnitte zeigen lediglich Tests für das Erstellungsdatum. Tests für das Änderungsdatum funktionieren exakt gleich:
Am Anfang soll getestet werden, ob ein PDF-Dokument überhaupt ein Erstellungsdatum enthält:
@Test public void hasCreationDate() throws Exception { String filename = "documentUnderTest.pdf"; AssertThat.document(filename) .hasCreationDate() ; }
Wenn Ihr Dokument bewusst kein Erstellungsdatum enthalten soll, können Sie auch das testen:
@Test public void hasCreationDate_NoDateInPDF() throws Exception { String filename = "documentUnderTest.pdf"; AssertThat.document(filename) .hasNoCreationDate() ; }
Im nächsten Abschnitt wird ein vorhandenes Datum gegen einen Erwartungswert getestet.
Ein erwarteter Datumswert muss eine Instanz vom Typ java.util.Calendar
sein.
Zusätzlich muss eine Datumsauflösung mitgegeben werden, die angibt, welche
Datumsbestandteile für einen Test relevant sind.
Mit der Enumeration DateResolution.DATE
werden Tag, Monat und Jahr
verglichen und mit der Enumeration DateResolution.DATETIME
zusätzlich noch Stunde, Minute und Sekunde. Für beide Werte gibt es Konstanten:
// Constants for date resolution:
com.pdfunit.Constants.AS_DATE
com.pdfunit.Constants.DateResolution AS_DATETIME
Ein Test sieht dann so aus:
@Test public void hasCreationDate_WithValue() throws Exception { String filename = "documentUnderTest.pdf"; Calendar expectedCreationDate = DateHelper.getCalendar("20131027_17:24:17", "yyyyMMdd_HH:mm:ss"); AssertThat.document(filename) .hasCreationDate() .equalsTo(expectedCreationDate, AS_DATE) ; }
Die Hilfsklasse |
|
Die Konstanten sind in der Enumeration |
Durch die Verwendung der Klasse java.util.Calendar
wird das erwartete Datum
formatunabhängig gemacht. Das PDF-interne Datum liegt formatiert vor und wird durch
PDFUnit in eine Instanz der Klasse Calendar umgewandelt. Sollte es dabei
zu Problemen kommen, besteht immer noch die Möglichkeit, das Datum auf die
folgende Weise zu testen:
@Test public void hasCreationDate() throws Exception { String filename = "documentUnderTest.pdf"; AssertThat.document(filename) .hasProperty("CreationDate").startingWith("D:20131027") .hasProperty("CreationDate").equalsTo("D:20131027172417+01'00'") ; }
Das Format eines Datums finden Sie, wenn Sie das Dokument mit einem Texteditor öffnen und nach der Zeichenkette "CreationDate" suchen.
Sie können mit PDFUnit prüfen, ob das Erstellungsdatum eines PDF-Dokumentes nach oder vor einem gegebenen Datum liegt:
@Test public void hasCreationDate_Before() throws Exception { String filename = "documentUnderTest.pdf"; Calendar creationDateUpperLimit = DateHelper.getCalendar("20991231", "yyyyMMdd"); AssertThat.document(filename) .hasCreationDate() .before(creationDateUpperLimit, AS_DATE) ; }
@Test public void hasCreationDate_After() throws Exception { String filename = "documentUnderTest.pdf"; Calendar creationDateLowerLimit = DateHelper.getCalendar("19990101", "yyyyMMdd"); AssertThat.document(filename) .hasCreationDate() .after(creationDateLowerLimit, AS_DATE) ; }
Das Datum einer Unterschrift eines signierten PDF-Dokumentes kann ebenfalls geprüft werden. Test dazu sind in Kapitel 3.26: „Signaturen - Unterschriebenes PDF“ beschrieben.