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.