13.4. Textvergleich

Ein erwarteter Text und der tatsächliche Text einer PDF-Seite können auf folgende Art miteinander verglichen werden:

// Methods with configurable whitespace processing. Default is NORMALIZE:
.containing(searchToken                                   )   1
.containing(searchToken             , WhitespaceProcessing)   2
.containing(String[] searchTokens                         )
.containing(String[] searchTokens   , WhitespaceProcessing)
.endingWith(searchToken                                   )
.endingWith(searchToken             , WhitespaceProcessing)
.equalsTo(searchToken                                     )
.equalsTo(searchToken               , WhitespaceProcessing)
.first(searchToken                                        )
.first(searchToken                  , WhitespaceProcessing)   3
.notContaining(searchToken                                )
.notContaining(searchToken          , WhitespaceProcessing)
.notContaining(String[] searchTokens                      )
.notContaining(String[] searchTokens, WhitespaceProcessing)
.startingWith(searchToken                                 )
.startingWith(searchToken           , WhitespaceProcessing)
.then(searchToken)                                            4

// Methods with whitespace processing NORMALIZE:
.notEndingWith(searchToken)
.notStartingWith(searchToken)

// Methods without whitespace processing:
.matchingRegex(regex)
.notMatchingRegex(regex)

1

Bei diesen Methoden werden die Whitespaces normalisiert. Das heißt, Leerzeichen am Anfang und Ende werden entfernt und alle Whitespaces innerhalb eines Textes werden auf ein Leerzeichen reduziert.

2

Die Behandlung von Whitespaces wird über den zweiten Parameter gesteuert. Es stehen die Konstanten IGNORE, NORMALIZE und KEEP zur Verfügung, sie sind in Kapitel 13.5: „Behandlung von Whitespaces“ separat beschrieben. Diese Beeinflussung der Whitespace-Behandlung gilt für alle aufgeführten Methoden mit 'WhitespaceProcessing' als zweitem Parameter.

3 4

Die Whitespace-Behandlung der Methoden first(..) und then(..) hängen zusammen. Die Method then(..) behandelt Whitespace genauso, wie die zuvor aufgerufene Methode first(..).

Vergleiche mit Regulären Ausdrücken folgen den Regeln und Möglichkeiten der Klasse java.util.regex.Pattern :

// Using regular expression to compare page content
@Test
public void hasText_MatchingRegex() throws Exception {
  String filename = "documentUnderTest.pdf";
  
  AssertThat.document(filename)
            .restrictedTo(FIRST_PAGE)
            .hasText()
            .matchingRegex(".*[Cc]ontent.*")  
  ;
}

Die Methoden containing(String[]) und notContaining(String[]) können mit mehreren Suchbegriffen aufgerufen werden. Ein Test mit containing(String[]) gilt als erfolgreich, wenn jeder Suchbegriff auf jeder ausgewählten Seiten auftaucht. Ein Test mit notContaining(String[]) ist erfolgreich, wenn alle Suchbegriffe auf allen ausgewählten Seite fehlen:

@Test
public void hasText_NotContaining_MultipleSearchTokens() throws Exception {
  String filename = "documentUnderTest.pdf";
  
  AssertThat.document(filename)
            .restrictedTo(FIRST_PAGE)
            .hasText()
            .notContaining("even pagenumber", "Page #2") 
  ;
}