Zurück |  | Weiter

## 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.

Zurück | Nach oben | Weiter
3.30. Texte - in Seitenausschnitten | Zum Anfang | 3.32. Texte - senkrecht, schräg und überkopf