3.7. Datum

Überblick

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     />

Existenz eines Datums

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.

Datumsauflösung

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.

Konfiguration des Datumsformates in der config.properties

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>

Datumstest mit Ober- und Untergrenze

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.

Ausstellungsdatum eines benutzten Zertifikates

PDF-Dokumente enthalten neben dem Erstellungs- und Änderungsdatum noch das Ausstellungsdatum von Zertifikaten. Test dazu sind in Kapitel 3.21: „Signaturen und Zertifikate“ beschrieben.