3.31. Texte - Reihenfolge mehrerer Texte

Überblick

Es gibt gelegentlich den Bedarf, sicherzustellen, dass zuerst ein Text im PDF-Dokument vorhanden ist und danach ein anderer Text. Für diese Anforderungen gibt es in PDFUnit folgende Testmethoden:

// Testing ordered text:
.hasText().first(text1).then(text2)...
.hasText().first(text1, WhitespaceProcessing).then(text2)...

.hasText().inOrder(text1, text2, ...)
.hasText().inOrder(WhitespaceProcessing, text1, text2, ...)
.hasText().inOrder(WhitespaceProcessing, text[])

Beispiel - hasText() ... first() ... then()

Im folgenden Beispiel wird zuerst die Überschrift von Kapitel 5 gesucht, anschließend ein Textstück, das zu Kapitel 5 gehört und als Letztes die Überschrift von Kapitel 6. Und diese Suche wird noch auf die Seite 2 beschränkt:

@Test
public void hasTextInOrder_FirstThen() throws Exception {
  String filename = "documentUnderTest.pdf";
  String titleChapter5 = "Chapter 5";
  String textChapter5 = "Yours truly, Huck Finn";
  String titleChapter6 = "Chapter 6";
  PagesToUse page2 = PagesToUse.getPage(2);
  
  int leftX  =  18;  // in millimeter
  int upperY =  80;
  int width  = 180;
  int height = 100; 
  PageRegion regionWithoutHeaderAndFooter = new PageRegion(leftX, upperY, width, height);
  
  AssertThat.document(filename)
            .restrictedTo(page2)
            .restrictedTo(regionWithoutHeaderAndFooter)
            .hasText()
            .first(titleChapter5)
            .then(textChapter5)
            .then(titleChapter6)
  ;
}

Der Textvergleich findet intern mit der Methode containing(..) statt. Whitespaces werden vor dem Vergleich normalisiert, es sei denn, sie werden als Parameter mitgegeben: first(expectedText, WhitespaceProcessing). Die nachfolgende Methode then() behandelt Whitespace auf gleiche Weise wie die Methode first().

Die Funktion then(..) kann beliebig oft wiederholt werden.

Beispiel - hasText() inOrder()

Das nächste Beispiel erfüllt den gleichen Zweck. Die gesuchten Textstücke werden aber alle gleichzeitig übergeben:

@Test
public void hasTextInOrder_WithStringArray() throws Exception {
  String filename = "documentUnderTest.pdf";
  
  String titleChapter2 = "Chapter 2";
  String textChapter2 = "Call me Ishmael";
  String titleChapter3 = "Chapter 3";

  AssertThat.document(filename)
            .hasText()
            .inOrder(titleChapter2, textChapter2, titleChapter3)
  ;
}

Die Reihenfolge der Suchbegriffe muss der Textreihenfolge im PDF-Dokument entsprechen.

Ein interner Textvergleich verwendet die Methode contains(..), Whitespaces werden vorher normalisiert.

Eine abweichende Behandlung der Whitespaces kann beim Methodenaufruf als Parameter angegeben werden: inOrder(WhitespaceProcessing, expectedText[]).

Die Suchbegriffe können auch als Array übergeben werden.