Wichtiger Hinweis: Der Begriff „Anführungszeichen“ wird in Texten unterschiedlich umgesetzt, wie das folgende Bild zeigt:
“Englische“ und „deutsche“ Anführungszeichen stören nicht während der Ausführung von Tests. Lediglich bei ihrer Erstellung könnten Sie das Problem haben, sie in Ihren Editor zu bekommen. Tipp: kopieren Sie die gewünschten Anführungszeichen von einem Textverarbeitungsprogramm oder einem bestehenden PDF-Dokument und fügen Sie sie dann in Ihre Datei ein.
Die "programmers double quotes" benötigen eine besondere Aufmerksamkeit, weil sie in Java als Zeichenkettenbegrenzer dienen. Die nachfolgenden Absätze und Beispiele gehen detailiert darauf ein, sie basieren alle auf dem folgenden Dokument:
'Single-Quotes', “englische“ und „deutsche“ Anführungszeichen innerhalb von Zeichenketten bereiten alle keine Probleme, lediglich "Double-Quotes" müssen mit einem Backslash maskiert werden:
@Test public void hasText_SingleQuotes() throws Exception { String filename = "documentUnderTest.pdf"; String expected = "Example 1: 'single quotes'"; AssertThat.document(filename) .restrictedTo(FIRST_PAGE) .hasText() .containing(expected) ; }
@Test public void hasText_GermanDoubleQuotes() throws Exception { String filename = "documentUnderTest.pdf"; String expected = "Example 2: „German double quotes“"; AssertThat.document(filename) .restrictedTo(FIRST_PAGE) .hasText() .containing(expected) ; }
@Test public void hasText_EnglishDoubleQuotes() throws Exception { String filename = "documentUnderTest.pdf"; String expected = "Example 3: “English double quotes“"; AssertThat.document(filename) .restrictedTo(FIRST_PAGE) .hasText() .containing(expected) ; }
@Test public void hasText_ProgrammersDoubleQuotes() throws Exception { String filename = "documentUnderTest.pdf"; String expected = "Example 4: \"programmers double quotes\""; AssertThat.document(filename) .restrictedTo(FIRST_PAGE) .hasText() .containing(expected) ; }
@Test public void hasText_DoubleAndSingleQuotes_1() throws Exception { String filename = "documentUnderTest.pdf"; String expected = "Example 5: \"double quotes outside, 'single quotes' inside\""; AssertThat.document(filename) .restrictedTo(FIRST_PAGE) .hasText() .containing(expected) ; }
@Test public void hasText_DoubleAndSingleQuotes_2() throws Exception { String filename = "documentUnderTest.pdf"; String expected = "Example 6: 'single quotes outside, \"double quotes\" inside'"; AssertThat.document(filename) .restrictedTo(FIRST_PAGE) .hasText() .containing(expected) ; }
@Test public void matchingRegex_DoubleQuotes() throws Exception { String filename = "documentUnderTest.pdf"; AssertThat.document(filename) .restrictedTo(FIRST_PAGE) .hasText() .matchingRegex(".*\"double.*\".*") ; }
Zeichenketten, die im Laufe der Verarbeitung mit XPath weiterverarbeitet werden, dürfen nicht gleichzeitig Single- und Double-Quotes enthalten. Diese Bedingung ist im folgenden Beispiel verletzt:
@Test public void matchingXPath_DoubleQuotes_1() throws Exception { String filename = "documentUnderTest.pdf"; String xpath = "count(//Title[.='\"Double Quote\"-Chapter']) = 1"; XPathExpression xpathExpression = new XPathExpression(xpath); AssertThat.document(filename) .hasBookmarks() .matchingXPath(xpathExpression) ; }
Der Fehler lässt sich nur vermeiden, wenn die XPath-Bedingung anders formuliert wird:
@Test public void matchingXPath_DoubleQuotes_2() throws Exception { String filename = "documentUnderTest.pdf"; String xpath1 = "count(//Title[contains(., 'Double Quote')]) = 1"; String xpath2 = "count(//Title[contains(., 'Chapter')]) = 4"; XPathExpression xpathExpression1 = new XPathExpression(xpath1); XPathExpression xpathExpression2 = new XPathExpression(xpath2); AssertThat.document(filename) .hasBookmarks() .matchingXPath(xpathExpression1) .matchingXPath(xpathExpression2) ; }