Für Tests, die sich auf bestimmte Seiten eines PDF-Dokumentes beziehen,
existieren in der Klasse com.pdfunit.Constants
vorgefertigte
Konstanten, deren Bedeutung sich aus ihrem Namen ergibt:
// Possibilities to focus tests to specific pages:
com.pdfunit.Constants.ANY_PAGE com.pdfunit.Constants.ON_ANY_PAGE
com.pdfunit.Constants.EVEN_PAGES com.pdfunit.Constants.ON_EVEN_PAGES
com.pdfunit.Constants.EACH_PAGE com.pdfunit.Constants.ON_EACH_PAGE
com.pdfunit.Constants.EVERY_PAGE com.pdfunit.Constants.ON_EVERY_PAGE
com.pdfunit.Constants.FIRST_PAGE com.pdfunit.Constants.ON_FIRST_PAGE
com.pdfunit.Constants.LAST_PAGE com.pdfunit.Constants.ON_LAST_PAGE
com.pdfunit.Constants.ODD_PAGES com.pdfunit.Constants.ON_ODD_PAGES
Die Konstanten aus dem linken Block sind mit denen aus dem rechten Block funktional identisch. Der rechte Block wird noch unterstützt, um zu früheren Releases kompatibel zu sein.
Hier ein Beispiel mit einer der Konstanten:
@Test public void hasText_MultipleSearchTokens_EvenPages() throws Exception { String filename = "documentUnderTest.pdf"; AssertThat.document(filename) .restrictedTo(EVEN_PAGES) .hasText() .containing("Content", "even pagenumber") ; }
Das nächste Beispiel zeigt, wie beliebige, individuelle Seiten definiert werden können.
@Test public void hasText_OnMultiplePages() throws Exception { String filename = "documentUnderTest.pdf"; PagesToUse pages123 = PagesToUse.getPages(1, 2, 3); AssertThat.document(filename) .restrictedTo(pages123) .hasText() .containing("Content on") ; }
Es stehen zwei Methoden zur Verfügung, um einzelne oder mehrere Seiten auszuwählen:
// How to define individual pages: PagesToUse.getPage(2); PagesToUse.getPages(1, 2, 3);
Für Tests, die auf Bereiche am Ende oder am Anfang eines Dokumentes zielen, gibt es weitere Methoden:
// How to define open ranges: ON_ANY_PAGE.after(2); ON_ANY_PAGE.before(3); ON_EVERY_PAGE.after(2); ON_EVERY_PAGE.before(2);
Die Werte für Ober und Untergrenzen gelten exklusiv.
Das nachfolgende Beispiel prüft das Format ab Seite 3 (einschließlich) bis zum Ende des Dokumentes.
@Test public void compareFormat_OnEveryPageAfter() throws Exception { String filename = "documentUnderTest.pdf"; String filenameReference = "reference.pdf"; PagesToUse pagesAfter2 = ON_ANY_PAGE.after(2); AssertThat.document(filename) .and(filenameReference) .restrictedTo(pagesAfter2) .haveSameFormat() ; }
Und als Letztes gibt es die Syntax PagesToUse.spanningFrom().to()
,
um Tests auf einen Bereich innerhalb eines Dokumentes zu beschränken.
Das folgende Beispiel validiert Text, der zwei Seiten überspannt.
@Test public void hasText_SpanningOver2Pages() throws Exception { String filename = "documentUnderTest.pdf"; String textOnPage1 = "Text starts on page 1 and "; String textOnPage2 = "continues on page 2"; String expectedText = textOnPage1 + textOnPage2; PagesToUse pages1to2 = PagesToUse.spanningFrom(1).to(2); // Mark the section without header and footer: int leftX = 18; int upperY = 30; int width = 182; int height = 238; PageRegion regionWithoutHeaderAndFooter = new PageRegion(leftX, upperY, width, height); AssertThat.document(filename) .restrictedTo(pages1to2) .restrictedTo(regionWithoutHeaderAndFooter) .hasText() .containing(expectedText) ; }
Seitenzahlen beginnen mit '1'.
Die Seitenangaben in before(int)
und after(int)
sind jeweils exklusiv gemeint.
Die Seitenangaben in from(int)
und to(int)
sind jeweils inklusiv gemeint.
ON_EVERY_PAGE
bedeutet, dass der gesuchte Text wirklich auf jeder Seite
existieren muss.
Dagegen reicht es, wenn bei ON_ANY_PAGE
der gesuchte Text auf einer Seite existiert.
Die Verwendung von restrictedTo(PagesToUse)
und von restrictedTo(PageRegion)
hat keinen Einfluss auf seitenunabhängige Testmethoden.