Zurück |  | Weiter

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

Zurück | Nach oben | Weiter
Kapitel 13. Anhang | Zum Anfang | 13.3. Seitenausschnitt definieren