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

Existenz eines Datums

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.

Datumsauflösung

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"); 1
  
  AssertThat.document(filename)
            .hasCreationDate()
            .equalsTo(expectedCreationDate, AS_DATE)   2
  ;
}

1

Die Hilfsklasse com.pdfunit.util.DateHelper erleichtert es, für den erwarteten Datumswert eine Instanz von java.util.Calender zu erzeugen.

2

Die Konstanten sind in der Enumeration com.pdfunit.DateResolution definiert.

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.

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:

@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) 1
  ;
}
@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) 1
  ;
}

1 1

Die jeweilige Unter- bzw. Obergrenze gehört nicht zum Gültigkeitszeitraum.

Datum einer Signatur

Das Datum einer Unterschrift eines signierten PDF-Dokumentes kann ebenfalls geprüft werden. Test dazu sind in Kapitel 3.26: „Signaturen - Unterschriebenes PDF“ beschrieben.