13.4. 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 drei Konstanten zur Verfügung, von denen NORMALIZE die Standardbehandlung ist, falls nichts anderes angegeben wird:

<!-- Constants for whitespace processing: -->

<xxx whitespaces="IGNORE"    />  1
<xxx whitespaces="KEEP"      />  2
<xxx whitespaces="NORMALIZE" />  3

1

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

2

Alle Whitespaces bleiben erhalten.

3

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

Bei diesen Tags kann die Whitespace-Behandlung vorgegeben werden:

<!-- Tags which allow to define the whitespace processing -->

<hasXXXAction>
  <containing       whitespaces=".." />
  <matchingComplete whitespaces=".." />
</hasXXXAction>

<hasText>
  <containing       whitespaces=".." />
  <notContaining    whitespaces=".." />
  <matchingComplete whitespaces=".." />
</hasText>

Ein Beispiel:

<testcase name="hasText_WithLineBreaks_UsingIGNORE">
  <assertThat testDocument="content/diverseContentOnMultiplePages.pdf">
    <hasText on="FIRST_PAGE">
      <matchingComplete whitespaces="IGNORE">
        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
      </matchingComplete>
    </hasText>
  </assertThat>
</testcase>

In diesem Beispiel wird die erwartete Zeichenkette mit zahlreichen Zeilenumbrüchen formuliert, die so auf der PDF-Seite nicht exisitieren. Durch die Angabe whitespaces="IGNORE" funktioniert der Test trotzdem bestens.

Tests, die Reguläre Ausdrücke verarbeiten, verändern Whitespaces nicht. Bei Bedarf muss die Behandlung der Whitespaces in den regulären Ausdruck integriert werden. Hier ein Beispiel:

(?ms).*print(.*)

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