13.2. Seitenauswahl

Vordefinierte Seiten

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") 
  ;
}

Individuelle Seiten

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);

Offene Seitenbereiche

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()
  ;
}

Seitenbereiche innerhalb eines Dokumentes

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)
  ;
}

Wichtige Hinweise

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