13.5. Behandlung von Whitespaces

In fast allen Tests werden Texte verglichen. Viele Vergleiche würden nicht funktionieren, wenn die Whitespaces eines Textes so, wie sie sind Teil des Vergleiches wären. Deshalb gibt es für Tests, bei denen eine flexible Behandlung von Whitespaces sinnvoll ist, die Möglichkeit einer benutzergesteuerten Whitespace-Behandlung. PDFUnit stellt folgenden Konstanten zur Verfügung:

// Constants for whitespace processing:

com.pdfunit.Constants.IGNORE_WHITESPACES    1
com.pdfunit.Constants.IGNORE                2

com.pdfunit.Constants.KEEP_WHITESPACES      3
com.pdfunit.Constants.KEEP                  4

com.pdfunit.Constants.NORMALIZE_WHITESPACES 5
com.pdfunit.Constants.NORMALIZE             6

1 2

Text wird so komprimiert, dass er keine Whitespaces mehr enthält.

3 4

Alle Whitespaces bleiben erhalten.

5 6

Whitespaces am Anfang und am Ende eines Textes werden gelöscht. Whitespaces innerhalb eines Textes werden auf ein Leerzeichen reduziert.

Jeweils zwei Konstanten haben die gleiche Bedeutung. Sie werden redundant angeboten, um verschiedene sprachliche Vorlieben zu bedienen.

Ein Beispiel:

@Test
public void hasText_WithLineBreaks_UsingIGNORE() throws Exception {
  String filename = "documentUnderTest.pdf";
  
  String expected = "PDFUnit - Automated PDF Tests http://pdfunit.com/" +
                    "This is a document that is used for unit tests of PDFUnit itself." +
                    "Content on first page." +
                    "odd pagenumber" +
                    "Page # 1 of 4";
  
  AssertThat.document(filename)
            .restrictedTo(FIRST_PAGE)
            .hasText() 
            .equalsTo(expected, IGNORE_WHITESPACES)  
  ;
}

In diesem Beispiel wird die erwartete Zeichenkette vollständig ohne Zeilenumbrüche formuliert, obwohl die PDF-Seite mehrere davon enthält. Durch die Angabe IGNORE_WHITESPACES funktioniert der Test trotzdem bestens.

NORMALIZE_WHITESPACES ist die Standardbehandlung, falls nichts anderes angegeben wird. Testmethoden, bei denen eine flexible Behandlung von Whitespaces nicht sinnvoll ist, bieten keine Möglichkeit für eine benutzergesteuerte Whitespace-Behandlung.

Testmethoden, die Reguläre Ausdrücke verarbeiten, verändern Whitespaces nicht. Bei Bedarf muss die Behandlung der Whitespaces in den regulären Ausdruck integriert werden, beispielsweise so:

(?ms).*print(.*)

Der Teilausdruck (?ms) bedeutet, dass die Suche über mehrere Zeilen reicht. Zeilenumbrüche werden als 'Character' interpretiert.