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[])
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.
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.