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 Testsszenarien anzubieten.
Die folgenden Abschnitte zeigen lediglich Tests für das Erstellungsdatum. Tests für das Änderungsdatum funktionieren exakt gleich:
<!-- Tags to test date values: --> <hasCreationDate /> <hasCreationDateAfter /> <hasCreationDateBefore /> <hasModificationDate /> <hasModificationDateAfter /> <hasModificationDateBefore /> <hasNoCreationDate /> <hasNoModificationDate />
Am Anfang soll getestet werden, ob ein PDF-Dokument überhaupt ein Erstellungsdatum enthält:
<testcase name="hasCreationDate"> <assertThat testDocument="documentInfo/documentInfo_allInfo.pdf"> <hasCreationDate /> </assertThat> </testcase>
Wenn Ihr Dokument bewusst kein Erstellungsdatum enthalten soll, können Sie das auch testen:
<testcase name="hasCreationDate_NoDateInPDF"> <assertThat testDocument="documentInfo/documentInfo_noDateFields.pdf"> <hasNoCreationDate /> </assertThat> </testcase>
Im nächsten Abschnitt wird ein vorhandenes Datum gegen einen Erwartungswert getestet.
Sie müssen festlegen, welche Datumsbestandteile für den Test relevant sind.
Dafür bietet das Attribut resolution
die zwei Konstanten
resolution="DATE"
und resolution="DATETIME"
an. Mit der Konstanten DATE
werden Tag, Monat und Jahr
verglichen und mit der Konstanten DATETIME
zusätzlich noch Stunde, Minute und Sekunde.
Tests sehen dann so aus:
<testcase name="hasCreationDate_DateResolution"> <assertThat testDocument="documentInfo/documentInfo_allInfo.pdf"> <hasCreationDate withDate="2013-05-05" resolution="DATE" /> </assertThat> </testcase>
<testcase name="hasCreationDate_DateTimeResolution"> <assertThat testDocument="documentInfo/documentInfo_allInfo.pdf"> <hasCreationDate withDate="2013-05-05T09:33:47" resolution="DATETIME" /> </assertThat> </testcase>
Das Format des erwarteten Datums ist durch die XML Schema Definition festgelegt (xs:date
).
Da aber das PDF-interne Datum unterschiedlich formatiert sein kann, muss
dessen Format-String durch einen Eintrag in der Konfigurationsdatei „config.properties“
definiert werden.
Wenn Sie das Attribut resolution=".."
weglassen, wird resolution="DATE"
angenommen.
Das Datumsformat innerhalb von PDF-Dokumenten variiert stark, abhängig vom jeweiligen
PDF-Erstellungswerkzeug. Wenn Sie innerhalb eines Projektes nur ein Werkzeug zur
PDF-Erstellung nutzen, sehen Sie diese Varianz nicht. Da PDFUnit das Datumsformat
Ihres Werkzeuges aber nicht vorausahnen kann, müssen Sie es in der Datei
config.properties
definieren. Dabei gelten die Regeln der
Klasse java.util.SimpleDateFormat
.
################################################################### # Declaring the default format for dates in PDF documents. # Use the format strings according to java.util.SimpleDateFormat. ################################################################### # Using date only: #dateformat = 'D:'yyyyMMdd # Using date and time: dateformat = 'D:'yyyyMMddHHmmss
Vorsicht: Wenn Sie hier ein Format dateformat = 'D:'yyyy
angeben, werden
Monat und Tag mit dem Wert 0101
ergänzt. Das dürfte in den seltensten Fällen
so gewollt sein.
Sie können nur ein Format in der Konfigurationsdatei festlegen. Wenn Sie in einem Projekt PDF-Dokumente mit abweichendem Datumsformat testen möchten, können Sie den Weg über Properties nutzen und das formatierte Datum als Wert abfragen:
<testcase name="hasProperty_CreationDate"> <assertThat testDocument="documentInfo/documentInfo_allInfo.pdf"> <hasProperty name="CreationDate"> <matchingComplete>D:20131027172417+01'00'</matchingComplete> </hasProperty> <hasProperty name="CreationDate"> <startingWith>D:20131027</startingWith> </hasProperty> </assertThat> </testcase>
Sie können mit PDFUnit prüfen, ob das Erstellungsdatum eines PDF-Dokumentes nach oder vor einem gegebenen Datum liegt:
<testcase name="hasCreationDate_Before"> <assertThat testDocument="documentInfo/documentInfo_allInfo.pdf"> <hasCreationDateBefore withDate="2099-01-01" resolution="DATE" /> </assertThat> </testcase>
<testcase name="hasCreationDate_After"> <assertThat testDocument="documentInfo/documentInfo_allInfo.pdf"> <hasCreationDateAfter withDate="1999-01-01" resolution="DATE" /> </assertThat> </testcase>
Die jeweilige Unter- bzw. Obergrenze gehört nicht zum Gültigkeitszeitraum.
PDF-Dokumente enthalten neben dem Erstellungs- und Änderungsdatum noch das Ausstellungsdatum von Zertifikaten. Test dazu sind in Kapitel 3.21: „Signaturen und Zertifikate“ beschrieben.