writerperfect/qa/unit/EPUBExportTest.cxx | 236 ++++++++++++++++--------------- 1 file changed, 125 insertions(+), 111 deletions(-)
New commits: commit e4d8f186d07aa1999e16abff3381e37b8764e964 Author: Stephan Bergmann <sberg...@redhat.com> AuthorDate: Sun Nov 19 13:22:12 2023 +0100 Commit: Stephan Bergmann <sberg...@redhat.com> CommitDate: Sun Nov 19 15:23:17 2023 +0100 Extended loplugin:ostr: writerperfect Change-Id: Ib942f7725e224b7c4beaca4cd4d86b83f60cd3f1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159664 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sberg...@redhat.com> diff --git a/writerperfect/qa/unit/EPUBExportTest.cxx b/writerperfect/qa/unit/EPUBExportTest.cxx index f667213288bf..86e7a4502ed3 100644 --- a/writerperfect/qa/unit/EPUBExportTest.cxx +++ b/writerperfect/qa/unit/EPUBExportTest.cxx @@ -149,7 +149,7 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testMimetype) SvFileStream aFileStream(maTempFile.GetURL(), StreamMode::READ); SvMemoryStream aMemoryStream; aMemoryStream.WriteStream(aFileStream); - OString aExpected("application/epub+zip"); + OString aExpected("application/epub+zip"_ostr); CPPUNIT_ASSERT(aMemoryStream.GetSize() > static_cast<sal_uInt64>(aExpected.getLength()) + 38); OString aActual(static_cast<const char*>(aMemoryStream.GetData()) + 38, aExpected.getLength()); @@ -158,11 +158,11 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testMimetype) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/content.opf"); // Default is EPUB3. - assertXPath(mpXmlDoc, "/opf:package", "version", "3.0"); + assertXPath(mpXmlDoc, "/opf:package"_ostr, "version"_ostr, "3.0"); // This was just "libepubgen/x.y.z", i.e. the LO version was missing. - OUString aGenerator - = getXPath(mpXmlDoc, "/opf:package/opf:metadata/opf:meta[@name='generator']", "content"); + OUString aGenerator = getXPath( + mpXmlDoc, "/opf:package/opf:metadata/opf:meta[@name='generator']"_ostr, "content"_ostr); CPPUNIT_ASSERT(aGenerator.startsWith(utl::DocInfoHelper::GetGeneratorString())); uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponentContext->getServiceManager(), @@ -186,7 +186,7 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testEPUB2) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/content.opf"); // This was 3.0, EPUBVersion filter option was ignored and we always emitted EPUB3. - assertXPath(mpXmlDoc, "/opf:package", "version", "2.0"); + assertXPath(mpXmlDoc, "/opf:package"_ostr, "version"_ostr, "2.0"); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testEPUBFixedLayout) @@ -199,7 +199,8 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testEPUBFixedLayout) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/content.opf"); // This was missing, EPUBLayoutMethod filter option was ignored and we always emitted reflowable layout. - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/opf:meta[@property='rendition:layout']", + assertXPathContent(mpXmlDoc, + "/opf:package/opf:metadata/opf:meta[@property='rendition:layout']"_ostr, "pre-paginated"); } @@ -211,7 +212,8 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testEPUBFixedLayoutOption) // This failed, fixed layout was only working via the FilterData map. xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/content.opf"); - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/opf:meta[@property='rendition:layout']", + assertXPathContent(mpXmlDoc, + "/opf:package/opf:metadata/opf:meta[@property='rendition:layout']"_ostr, "pre-paginated"); } @@ -232,8 +234,8 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testEPUBFixedLayoutImplicitBreak) // document. xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/toc.xhtml"); // This was 'Page 1' instead. - assertXPathContent(mpXmlDoc, "//xhtml:li[1]/xhtml:a", "First chapter"); - assertXPathContent(mpXmlDoc, "//xhtml:li[2]/xhtml:a", "Second chapter"); + assertXPathContent(mpXmlDoc, "//xhtml:li[1]/xhtml:a"_ostr, "First chapter"); + assertXPathContent(mpXmlDoc, "//xhtml:li[2]/xhtml:a"_ostr, "Second chapter"); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testPageBreakSplit) @@ -256,11 +258,11 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testSpanAutostyle) createDoc(u"span-autostyle.fodt", {}); xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); - assertXPath(mpXmlDoc, "//xhtml:p/xhtml:span[1]", "class", "span0"); + assertXPath(mpXmlDoc, "//xhtml:p/xhtml:span[1]"_ostr, "class"_ostr, "span0"); // This failed, it was still span1, i.e. the bold and the italic formatting // did not differ. - assertXPath(mpXmlDoc, "//xhtml:p/xhtml:span[2]", "class", "span1"); - assertXPath(mpXmlDoc, "//xhtml:p/xhtml:span[3]", "class", "span2"); + assertXPath(mpXmlDoc, "//xhtml:p/xhtml:span[2]"_ostr, "class"_ostr, "span1"); + assertXPath(mpXmlDoc, "//xhtml:p/xhtml:span[3]"_ostr, "class"_ostr, "span2"); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testParaAutostyleCharProps) @@ -269,8 +271,8 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testParaAutostyleCharProps) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); // This failed, para-level char props were not exported. - assertXPath(mpXmlDoc, "//xhtml:p[1]/xhtml:span", "class", "span0"); - assertXPath(mpXmlDoc, "//xhtml:p[2]/xhtml:span", "class", "span1"); + assertXPath(mpXmlDoc, "//xhtml:p[1]/xhtml:span"_ostr, "class"_ostr, "span0"); + assertXPath(mpXmlDoc, "//xhtml:p[2]/xhtml:span"_ostr, "class"_ostr, "span1"); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testMeta) @@ -279,17 +281,18 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testMeta) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/content.opf"); // This was "Unknown Author", <meta:initial-creator> was not handled. - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:creator", "A U Thor"); - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:title", "Title"); - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:language", "hu"); - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/opf:meta[@property='dcterms:modified']", + assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:creator"_ostr, "A U Thor"); + assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:title"_ostr, "Title"); + assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:language"_ostr, "hu"); + assertXPathContent(mpXmlDoc, + "/opf:package/opf:metadata/opf:meta[@property='dcterms:modified']"_ostr, "2017-09-27T09:51:19Z"); // Make sure that cover image next to the source document is picked up. - assertXPath(mpXmlDoc, "/opf:package/opf:manifest/opf:item[@href='images/image0001.png']", - "properties", "cover-image"); - assertXPath(mpXmlDoc, "/opf:package/opf:manifest/opf:item[@href='images/image0001.png']", - "media-type", "image/png"); + assertXPath(mpXmlDoc, "/opf:package/opf:manifest/opf:item[@href='images/image0001.png']"_ostr, + "properties"_ostr, "cover-image"); + assertXPath(mpXmlDoc, "/opf:package/opf:manifest/opf:item[@href='images/image0001.png']"_ostr, + "media-type"_ostr, "image/png"); CPPUNIT_ASSERT(mxZipFile->hasByName("OEBPS/images/image0001.png")); } @@ -299,12 +302,15 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testMetaXMP) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/content.opf"); // These were the libepubgen default values, metadata from a matching .xmp file was not picked up. - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:identifier", + assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:identifier"_ostr, "deadbeef-e394-4cd6-9b83-7172794612e5"); - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:title", "unknown title from xmp"); - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:creator", "unknown author from xmp"); - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:language", "nl"); - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/opf:meta[@property='dcterms:modified']", + assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:title"_ostr, + "unknown title from xmp"); + assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:creator"_ostr, + "unknown author from xmp"); + assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:language"_ostr, "nl"); + assertXPathContent(mpXmlDoc, + "/opf:package/opf:metadata/opf:meta[@property='dcterms:modified']"_ostr, "2016-11-20T17:16:07Z"); } @@ -320,12 +326,15 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testMetaAPI) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/content.opf"); // These were values from XMP (deadbeef, etc.), not from API. - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:identifier", + assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:identifier"_ostr, "deadc0de-e394-4cd6-9b83-7172794612e5"); - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:title", "unknown title from api"); - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:creator", "unknown author from api"); - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:language", "hu"); - assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/opf:meta[@property='dcterms:modified']", + assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:title"_ostr, + "unknown title from api"); + assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:creator"_ostr, + "unknown author from api"); + assertXPathContent(mpXmlDoc, "/opf:package/opf:metadata/dc:language"_ostr, "hu"); + assertXPathContent(mpXmlDoc, + "/opf:package/opf:metadata/opf:meta[@property='dcterms:modified']"_ostr, "2015-11-20T17:16:07Z"); } @@ -339,10 +348,10 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testCoverImage) // Make sure that the explicitly set cover image is used. // This failed, as the image was not part of the package. - assertXPath(mpXmlDoc, "/opf:package/opf:manifest/opf:item[@href='images/image0001.png']", - "properties", "cover-image"); - assertXPath(mpXmlDoc, "/opf:package/opf:manifest/opf:item[@href='images/image0001.png']", - "media-type", "image/png"); + assertXPath(mpXmlDoc, "/opf:package/opf:manifest/opf:item[@href='images/image0001.png']"_ostr, + "properties"_ostr, "cover-image"); + assertXPath(mpXmlDoc, "/opf:package/opf:manifest/opf:item[@href='images/image0001.png']"_ostr, + "media-type"_ostr, "image/png"); CPPUNIT_ASSERT(mxZipFile->hasByName("OEBPS/images/image0001.png")); } @@ -351,14 +360,14 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testParaNamedstyle) createDoc(u"para-namedstyle.fodt", {}); xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); - assertXPath(mpXmlDoc, "//xhtml:p[1]", "class", "para0"); + assertXPath(mpXmlDoc, "//xhtml:p[1]"_ostr, "class"_ostr, "para0"); // This failed, paragraph properties from style were not exported. - assertXPath(mpXmlDoc, "//xhtml:p[2]", "class", "para1"); + assertXPath(mpXmlDoc, "//xhtml:p[2]"_ostr, "class"_ostr, "para1"); // Test character properties from named paragraph style. - assertXPath(mpXmlDoc, "//xhtml:p[1]/xhtml:span", "class", "span0"); + assertXPath(mpXmlDoc, "//xhtml:p[1]/xhtml:span"_ostr, "class"_ostr, "span0"); // This failed, character properties from paragraph style were not exported. - assertXPath(mpXmlDoc, "//xhtml:p[2]/xhtml:span", "class", "span1"); + assertXPath(mpXmlDoc, "//xhtml:p[2]/xhtml:span"_ostr, "class"_ostr, "span1"); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testCharNamedstyle) @@ -368,9 +377,9 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testCharNamedstyle) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); // Test character properties from named text style. - assertXPath(mpXmlDoc, "//xhtml:p/xhtml:span[1]", "class", "span0"); + assertXPath(mpXmlDoc, "//xhtml:p/xhtml:span[1]"_ostr, "class"_ostr, "span0"); // This failed, character properties from text style were not exported. - assertXPath(mpXmlDoc, "//xhtml:p/xhtml:span[2]", "class", "span1"); + assertXPath(mpXmlDoc, "//xhtml:p/xhtml:span[2]"_ostr, "class"_ostr, "span1"); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testNamedStyleInheritance) @@ -380,7 +389,7 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testNamedStyleInheritance) // Find the CSS rule for the blue text. xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); std::map<OUString, std::vector<OUString>> aCssDoc = parseCss("OEBPS/styles/stylesheet.css"); - OUString aBlue = getXPath(mpXmlDoc, "//xhtml:p[2]/xhtml:span[2]", "class"); + OUString aBlue = getXPath(mpXmlDoc, "//xhtml:p[2]/xhtml:span[2]"_ostr, "class"_ostr); CPPUNIT_ASSERT_EQUAL(OUString("#0000ff"), EPUBExportTest::getCss(aCssDoc, aBlue, u"color")); // This failed, the span only had the properties from its style, but not @@ -397,10 +406,10 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testNestedSpan) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); std::map<OUString, std::vector<OUString>> aCssDoc = parseCss("OEBPS/styles/stylesheet.css"); // This crashed, span had no content. - assertXPathContent(mpXmlDoc, "//xhtml:p/xhtml:span[2]", "red"); + assertXPathContent(mpXmlDoc, "//xhtml:p/xhtml:span[2]"_ostr, "red"); // Check formatting of nested span. - OUString aRed = getXPath(mpXmlDoc, "//xhtml:p/xhtml:span[2]", "class"); + OUString aRed = getXPath(mpXmlDoc, "//xhtml:p/xhtml:span[2]"_ostr, "class"_ostr); // This failed, direct formatting on top of named style was lost. CPPUNIT_ASSERT_EQUAL(OUString("#ff0000"), EPUBExportTest::getCss(aCssDoc, aRed, u"color")); CPPUNIT_ASSERT_EQUAL(OUString("'Liberation Mono'"), @@ -413,9 +422,9 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testLineBreak) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); // This was 0, line break was not handled. - assertXPath(mpXmlDoc, "//xhtml:p[1]/xhtml:span/xhtml:br", 1); + assertXPath(mpXmlDoc, "//xhtml:p[1]/xhtml:span/xhtml:br"_ostr, 1); // This was 0, line break inside span was not handled. - assertXPath(mpXmlDoc, "//xhtml:p[2]/xhtml:span/xhtml:br", 1); + assertXPath(mpXmlDoc, "//xhtml:p[2]/xhtml:span/xhtml:br"_ostr, 1); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testEscape) @@ -424,12 +433,12 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testEscape) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); // This was lost. - assertXPathContent(mpXmlDoc, "//xhtml:p[1]/xhtml:span[1]", OUString::fromUtf8("\xc2\xa0")); + assertXPathContent(mpXmlDoc, "//xhtml:p[1]/xhtml:span[1]"_ostr, OUString::fromUtf8("\xc2\xa0")); // Make sure escaping happens only once. - assertXPathContent(mpXmlDoc, "//xhtml:p[1]/xhtml:span[2]", "a&b"); + assertXPathContent(mpXmlDoc, "//xhtml:p[1]/xhtml:span[2]"_ostr, "a&b"); // This was also lost. assertXPathContent( - mpXmlDoc, "//xhtml:p[1]/xhtml:span[3]", + mpXmlDoc, "//xhtml:p[1]/xhtml:span[3]"_ostr, OUString::fromUtf8("\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2" "\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0 ")); } @@ -441,7 +450,7 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testParaCharProps) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); std::map<OUString, std::vector<OUString>> aCssDoc = parseCss("OEBPS/styles/stylesheet.css"); // Check formatting of the middle span. - OUString aMiddle = getXPath(mpXmlDoc, "//xhtml:p/xhtml:span[2]", "class"); + OUString aMiddle = getXPath(mpXmlDoc, "//xhtml:p/xhtml:span[2]"_ostr, "class"_ostr); CPPUNIT_ASSERT_EQUAL(OUString("italic"), EPUBExportTest::getCss(aCssDoc, aMiddle, u"font-style")); // Direct para formatting was lost, only direct char formatting was @@ -456,7 +465,7 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testSection) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); // This was "After.", i.e. in-section content was ignored. - assertXPathContent(mpXmlDoc, "//xhtml:p[2]/xhtml:span", "In section."); + assertXPathContent(mpXmlDoc, "//xhtml:p[2]/xhtml:span"_ostr, "In section."); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testList) @@ -465,9 +474,9 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testList) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); // This was "C", i.e. in-list content was ignored. - assertXPathContent(mpXmlDoc, "//xhtml:p[2]/xhtml:span", "B"); + assertXPathContent(mpXmlDoc, "//xhtml:p[2]/xhtml:span"_ostr, "B"); // Test nested list content. - assertXPathContent(mpXmlDoc, "//xhtml:p[6]/xhtml:span", "F"); + assertXPathContent(mpXmlDoc, "//xhtml:p[6]/xhtml:span"_ostr, "F"); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testImage) @@ -475,7 +484,7 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testImage) createDoc(u"image.fodt", {}); xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); - assertXPath(mpXmlDoc, "//xhtml:p/xhtml:img", 1); + assertXPath(mpXmlDoc, "//xhtml:p/xhtml:img"_ostr, 1); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testImageBorder) @@ -485,7 +494,7 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testImageBorder) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); std::map<OUString, std::vector<OUString>> aCssDoc = parseCss("OEBPS/styles/stylesheet.css"); - OUString aClass = getXPath(mpXmlDoc, "//xhtml:img", "class"); + OUString aClass = getXPath(mpXmlDoc, "//xhtml:img"_ostr, "class"_ostr); // This failed, image had no border. CPPUNIT_ASSERT_EQUAL(OUString("0.99pt dashed #ed1c24"), EPUBExportTest::getCss(aCssDoc, aClass, u"border")); @@ -497,7 +506,7 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testImageNospan) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); // Image outside a span was lost. - assertXPath(mpXmlDoc, "//xhtml:p/xhtml:img", 1); + assertXPath(mpXmlDoc, "//xhtml:p/xhtml:img"_ostr, 1); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testTable) @@ -505,7 +514,7 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testTable) createDoc(u"table.fodt", {}); xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); - assertXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr/xhtml:td", 4); + assertXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr/xhtml:td"_ostr, 4); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testTableRowSpan) @@ -514,7 +523,8 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testTableRowSpan) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); // This failed, row span wasn't exported. - assertXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr[1]/xhtml:td[1]", "rowspan", "2"); + assertXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr[1]/xhtml:td[1]"_ostr, "rowspan"_ostr, + "2"); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testTableCellBorder) @@ -524,8 +534,8 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testTableCellBorder) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); std::map<OUString, std::vector<OUString>> aCssDoc = parseCss("OEBPS/styles/stylesheet.css"); - OUString aClass - = getXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr[1]/xhtml:td[1]", "class"); + OUString aClass = getXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr[1]/xhtml:td[1]"_ostr, + "class"_ostr); // This failed, cell border wasn't exported. CPPUNIT_ASSERT_EQUAL(OUString("0.05pt solid #000000"), EPUBExportTest::getCss(aCssDoc, aClass, u"border-left")); @@ -537,12 +547,12 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testTableCellWidth) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); std::map<OUString, std::vector<OUString>> aCssDoc = parseCss("OEBPS/styles/stylesheet.css"); - OUString aClass1 - = getXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr[1]/xhtml:td[1]", "class"); - OUString aClass2 - = getXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr[1]/xhtml:td[2]", "class"); - OUString aClass3 - = getXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr[1]/xhtml:td[3]", "class"); + OUString aClass1 = getXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr[1]/xhtml:td[1]"_ostr, + "class"_ostr); + OUString aClass2 = getXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr[1]/xhtml:td[2]"_ostr, + "class"_ostr); + OUString aClass3 = getXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr[1]/xhtml:td[3]"_ostr, + "class"_ostr); // These failed, all widths were 0. CPPUNIT_ASSERT_GREATER(EPUBExportTest::getCss(aCssDoc, aClass2, u"width").toDouble(), EPUBExportTest::getCss(aCssDoc, aClass1, u"width").toDouble()); @@ -556,8 +566,10 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testTableRowHeight) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); std::map<OUString, std::vector<OUString>> aCssDoc = parseCss("OEBPS/styles/stylesheet.css"); - OUString aClass1 = getXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr[1]", "class"); - OUString aClass2 = getXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr[2]", "class"); + OUString aClass1 + = getXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr[1]"_ostr, "class"_ostr); + OUString aClass2 + = getXPath(mpXmlDoc, "//xhtml:table/xhtml:tbody/xhtml:tr[2]"_ostr, "class"_ostr); // These failed, both heights were 0. CPPUNIT_ASSERT_GREATER(EPUBExportTest::getCss(aCssDoc, aClass2, u"height").toDouble(), EPUBExportTest::getCss(aCssDoc, aClass1, u"height").toDouble()); @@ -568,8 +580,8 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testLink) createDoc(u"link.fodt", {}); xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); - assertXPathContent(mpXmlDoc, "//xhtml:p/xhtml:a/xhtml:span", "https://libreoffice.org/"); - assertXPath(mpXmlDoc, "//xhtml:p/xhtml:a", "href", "https://libreoffice.org/"); + assertXPathContent(mpXmlDoc, "//xhtml:p/xhtml:a/xhtml:span"_ostr, "https://libreoffice.org/"); + assertXPath(mpXmlDoc, "//xhtml:p/xhtml:a"_ostr, "href"_ostr, "https://libreoffice.org/"); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testLinkInvalid) @@ -578,7 +590,7 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testLinkInvalid) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); // This was 1, invalid relative link was not filtered out. - assertXPath(mpXmlDoc, "//xhtml:p/xhtml:a", 0); + assertXPath(mpXmlDoc, "//xhtml:p/xhtml:a"_ostr, 0); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testLinkCharFormat) @@ -587,8 +599,8 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testLinkCharFormat) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); // <span> was lost, link text having a char format was missing. - assertXPathContent(mpXmlDoc, "//xhtml:p/xhtml:a/xhtml:span", "https://libreoffice.org/"); - assertXPath(mpXmlDoc, "//xhtml:p/xhtml:a", "href", "https://libreoffice.org/"); + assertXPathContent(mpXmlDoc, "//xhtml:p/xhtml:a/xhtml:span"_ostr, "https://libreoffice.org/"); + assertXPath(mpXmlDoc, "//xhtml:p/xhtml:a"_ostr, "href"_ostr, "https://libreoffice.org/"); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testLinkNamedCharFormat) @@ -599,10 +611,10 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testLinkNamedCharFormat) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); std::map<OUString, std::vector<OUString>> aCssDoc = parseCss("OEBPS/styles/stylesheet.css"); // This failed, there was no span inside the hyperlink. - assertXPathContent(mpXmlDoc, "//xhtml:p/xhtml:a/xhtml:span", "http://libreoffice.org"); - assertXPath(mpXmlDoc, "//xhtml:p/xhtml:a", "href", "http://libreoffice.org/"); + assertXPathContent(mpXmlDoc, "//xhtml:p/xhtml:a/xhtml:span"_ostr, "http://libreoffice.org"); + assertXPath(mpXmlDoc, "//xhtml:p/xhtml:a"_ostr, "href"_ostr, "http://libreoffice.org/"); - OUString aClass = getXPath(mpXmlDoc, "//xhtml:p/xhtml:a/xhtml:span", "class"); + OUString aClass = getXPath(mpXmlDoc, "//xhtml:p/xhtml:a/xhtml:span"_ostr, "class"_ostr); CPPUNIT_ASSERT_EQUAL(OUString("#ff0000"), EPUBExportTest::getCss(aCssDoc, aClass, u"color")); } @@ -613,7 +625,7 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testTableWidth) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); std::map<OUString, std::vector<OUString>> aCssDoc = parseCss("OEBPS/styles/stylesheet.css"); - OUString aClass = getXPath(mpXmlDoc, "//xhtml:table", "class"); + OUString aClass = getXPath(mpXmlDoc, "//xhtml:table"_ostr, "class"_ostr); // This failed, relative total width of table was lost. CPPUNIT_ASSERT_EQUAL(OUString("50%"), EPUBExportTest::getCss(aCssDoc, aClass, u"width")); } @@ -626,14 +638,14 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testTextBox) std::map<OUString, std::vector<OUString>> aCssDoc = parseCss("OEBPS/styles/stylesheet.css"); // This failed, image with caption was lost. - assertXPath(mpXmlDoc, "//xhtml:img", "class", "frame1"); + assertXPath(mpXmlDoc, "//xhtml:img"_ostr, "class"_ostr, "frame1"); // Expected spans: // 1) break after the image // 2) "Illustration " // 3) The sequence field, this was missing (was ": foo" instead). - assertXPathContent(mpXmlDoc, "//xhtml:div/xhtml:p/xhtml:span[3]", "1"); + assertXPathContent(mpXmlDoc, "//xhtml:div/xhtml:p/xhtml:span[3]"_ostr, "1"); - OUString aClass = getXPath(mpXmlDoc, "//xhtml:div/xhtml:p/xhtml:span[3]", "class"); + OUString aClass = getXPath(mpXmlDoc, "//xhtml:div/xhtml:p/xhtml:span[3]"_ostr, "class"_ostr); // This failed, the 3rd span was not italic. CPPUNIT_ASSERT_EQUAL(OUString("italic"), EPUBExportTest::getCss(aCssDoc, aClass, u"font-style")); @@ -652,8 +664,8 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testFontEmbedding) .startsWith("'SketchFlow Print")); // librevenge:mime-type xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/content.opf"); - assertXPath(mpXmlDoc, "/opf:package/opf:manifest/opf:item[@href='fonts/font0001.otf']", - "media-type", "application/vnd.ms-opentype"); + assertXPath(mpXmlDoc, "/opf:package/opf:manifest/opf:item[@href='fonts/font0001.otf']"_ostr, + "media-type"_ostr, "application/vnd.ms-opentype"); // office:binary-data CPPUNIT_ASSERT(mxZipFile->hasByName("OEBPS/fonts/font0001.otf")); // librevenge:font-style @@ -671,7 +683,7 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testImageLink) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); // This failed, image was missing. - assertXPath(mpXmlDoc, "//xhtml:p/xhtml:a/xhtml:img", 1); + assertXPath(mpXmlDoc, "//xhtml:p/xhtml:a/xhtml:img"_ostr, 1); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testFootnote) @@ -680,8 +692,8 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testFootnote) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); // These were missing, footnote was lost. - assertXPath(mpXmlDoc, "//xhtml:body/xhtml:p/xhtml:sup/xhtml:a", "type", "noteref"); - assertXPath(mpXmlDoc, "//xhtml:body/xhtml:aside", "type", "footnote"); + assertXPath(mpXmlDoc, "//xhtml:body/xhtml:p/xhtml:sup/xhtml:a"_ostr, "type"_ostr, "noteref"); + assertXPath(mpXmlDoc, "//xhtml:body/xhtml:aside"_ostr, "type"_ostr, "footnote"); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testPopup) @@ -690,18 +702,19 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testPopup) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); // Test image popup anchor. - assertXPath(mpXmlDoc, "//xhtml:body/xhtml:p[1]/xhtml:a", "type", "noteref"); - assertXPath(mpXmlDoc, "//xhtml:body/xhtml:p[1]/xhtml:a/xhtml:img", 1); + assertXPath(mpXmlDoc, "//xhtml:body/xhtml:p[1]/xhtml:a"_ostr, "type"_ostr, "noteref"); + assertXPath(mpXmlDoc, "//xhtml:body/xhtml:p[1]/xhtml:a/xhtml:img"_ostr, 1); // Test image popup content. - assertXPath(mpXmlDoc, "//xhtml:body/xhtml:aside[1]", "type", "footnote"); - assertXPath(mpXmlDoc, "//xhtml:body/xhtml:aside[1]/xhtml:img", 1); + assertXPath(mpXmlDoc, "//xhtml:body/xhtml:aside[1]"_ostr, "type"_ostr, "footnote"); + assertXPath(mpXmlDoc, "//xhtml:body/xhtml:aside[1]/xhtml:img"_ostr, 1); // Test text popup anchor. - assertXPath(mpXmlDoc, "//xhtml:body/xhtml:p[2]/xhtml:span/xhtml:a", "type", "noteref"); - assertXPathContent(mpXmlDoc, "//xhtml:body/xhtml:p[2]/xhtml:span/xhtml:a", "link"); + assertXPath(mpXmlDoc, "//xhtml:body/xhtml:p[2]/xhtml:span/xhtml:a"_ostr, "type"_ostr, + "noteref"); + assertXPathContent(mpXmlDoc, "//xhtml:body/xhtml:p[2]/xhtml:span/xhtml:a"_ostr, "link"); // Test text popup content. - assertXPath(mpXmlDoc, "//xhtml:body/xhtml:aside[2]", "type", "footnote"); - assertXPath(mpXmlDoc, "//xhtml:body/xhtml:aside[2]/xhtml:img", 1); + assertXPath(mpXmlDoc, "//xhtml:body/xhtml:aside[2]"_ostr, "type"_ostr, "footnote"); + assertXPath(mpXmlDoc, "//xhtml:body/xhtml:aside[2]/xhtml:img"_ostr, 1); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testPopupMedia) @@ -712,8 +725,8 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testPopupMedia) xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); // Test image popup anchor. This failed, number of XPath nodes was 0. - assertXPath(mpXmlDoc, "//xhtml:body/xhtml:p[1]/xhtml:a", "type", "noteref"); - assertXPath(mpXmlDoc, "//xhtml:body/xhtml:p[1]/xhtml:a/xhtml:img", 1); + assertXPath(mpXmlDoc, "//xhtml:body/xhtml:p[1]/xhtml:a"_ostr, "type"_ostr, "noteref"); + assertXPath(mpXmlDoc, "//xhtml:body/xhtml:p[1]/xhtml:a/xhtml:img"_ostr, 1); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testPopupAPI) @@ -726,10 +739,11 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testPopupAPI) // We have a non-empty anchor image. xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); - OUString aAnchor = getXPath(mpXmlDoc, "//xhtml:body/xhtml:p[1]/xhtml:a/xhtml:img", "src"); + OUString aAnchor + = getXPath(mpXmlDoc, "//xhtml:body/xhtml:p[1]/xhtml:a/xhtml:img"_ostr, "src"_ostr); CPPUNIT_ASSERT(!aAnchor.isEmpty()); // We have a non-empty popup image. - OUString aData = getXPath(mpXmlDoc, "//xhtml:body/xhtml:aside[1]/xhtml:img", "src"); + OUString aData = getXPath(mpXmlDoc, "//xhtml:body/xhtml:aside[1]/xhtml:img"_ostr, "src"_ostr); CPPUNIT_ASSERT(!aData.isEmpty()); // The anchor is different from the popup image. CPPUNIT_ASSERT(aAnchor != aData); @@ -745,13 +759,13 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testPageSize) // This failed, viewport was empty, so page size was lost. xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); // 21,59cm x 27.94cm (letter). - assertXPath(mpXmlDoc, "/xhtml:html/xhtml:head/xhtml:meta[@name='viewport']", "content", - "width=816, height=1056"); + assertXPath(mpXmlDoc, "/xhtml:html/xhtml:head/xhtml:meta[@name='viewport']"_ostr, + "content"_ostr, "width=816, height=1056"); mpXmlDoc = parseExport("OEBPS/images/image0001.svg"); // This was 288mm, logic->logic conversion input was a pixel value. - assertXPath(mpXmlDoc, "/svg:svg", "width", "216mm"); - assertXPath(mpXmlDoc, "/svg:svg", "height", "279mm"); + assertXPath(mpXmlDoc, "/svg:svg"_ostr, "width"_ostr, "216mm"); + assertXPath(mpXmlDoc, "/svg:svg"_ostr, "height"_ostr, "279mm"); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testSVG) @@ -768,7 +782,7 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testSVG) SvMemoryStream aMemoryStream; aMemoryStream.WriteStream(*pStream); - OString aExpected("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<svg"); + OString aExpected("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<svg"_ostr); CPPUNIT_ASSERT(aMemoryStream.GetSize() > o3tl::make_unsigned(aExpected.getLength())); // This failed, there was a '<!DOCTYPE' line between the xml and the svg @@ -779,7 +793,7 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testSVG) // This failed, we used the xlink attribute namespace, but we did not // define its URL. xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/images/image0001.svg"); - assertXPathNSDef(mpXmlDoc, "/svg:svg", u"xlink", u"http://www.w3.org/1999/xlink"); + assertXPathNSDef(mpXmlDoc, "/svg:svg"_ostr, u"xlink", u"http://www.w3.org/1999/xlink"); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testTdf115623SingleWritingMode) @@ -788,7 +802,7 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testTdf115623SingleWritingMode) createDoc(u"tdf115623-single-writing-mode.odt", {}); std::map<OUString, std::vector<OUString>> aCssDoc = parseCss("OEBPS/styles/stylesheet.css"); xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); - OUString aClass = getXPath(mpXmlDoc, "//xhtml:body", "class"); + OUString aClass = getXPath(mpXmlDoc, "//xhtml:body"_ostr, "class"_ostr); CPPUNIT_ASSERT_EQUAL(OUString("vertical-rl"), EPUBExportTest::getCss(aCssDoc, aClass, u"writing-mode")); } @@ -799,14 +813,14 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testTdf115623SplitByChapter) std::map<OUString, std::vector<OUString>> aCssDoc = parseCss("OEBPS/styles/stylesheet.css"); { xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); - OUString aClass = getXPath(mpXmlDoc, "//xhtml:body", "class"); + OUString aClass = getXPath(mpXmlDoc, "//xhtml:body"_ostr, "class"_ostr); CPPUNIT_ASSERT_EQUAL(OUString("vertical-rl"), EPUBExportTest::getCss(aCssDoc, aClass, u"writing-mode")); } // Split HTML should keep the same writing-mode. { xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0002.xhtml"); - OUString aClass = getXPath(mpXmlDoc, "//xhtml:body", "class"); + OUString aClass = getXPath(mpXmlDoc, "//xhtml:body"_ostr, "class"_ostr); CPPUNIT_ASSERT_EQUAL(OUString("vertical-rl"), EPUBExportTest::getCss(aCssDoc, aClass, u"writing-mode")); } @@ -819,13 +833,13 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testTdf115623ManyPageSpans) // Two pages should have different writing modes. { xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); - OUString aClass = getXPath(mpXmlDoc, "//xhtml:body", "class"); + OUString aClass = getXPath(mpXmlDoc, "//xhtml:body"_ostr, "class"_ostr); CPPUNIT_ASSERT_EQUAL(OUString("vertical-rl"), EPUBExportTest::getCss(aCssDoc, aClass, u"writing-mode")); } { xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0002.xhtml"); - OUString aClass = getXPath(mpXmlDoc, "//xhtml:body", "class"); + OUString aClass = getXPath(mpXmlDoc, "//xhtml:body"_ostr, "class"_ostr); CPPUNIT_ASSERT_EQUAL(OUString("horizontal-tb"), EPUBExportTest::getCss(aCssDoc, aClass, u"writing-mode")); } @@ -835,8 +849,8 @@ CPPUNIT_TEST_FIXTURE(EPUBExportTest, testSimpleRuby) { createDoc(u"simple-ruby.odt", {}); xmlDocUniquePtr mpXmlDoc = parseExport("OEBPS/sections/section0001.xhtml"); - assertXPathContent(mpXmlDoc, "//xhtml:body/xhtml:p/xhtml:ruby/xhtml:span", "base text"); - assertXPathContent(mpXmlDoc, "//xhtml:body/xhtml:p/xhtml:ruby/xhtml:rt", "ruby text"); + assertXPathContent(mpXmlDoc, "//xhtml:body/xhtml:p/xhtml:ruby/xhtml:span"_ostr, "base text"); + assertXPathContent(mpXmlDoc, "//xhtml:body/xhtml:p/xhtml:ruby/xhtml:rt"_ostr, "ruby text"); } CPPUNIT_TEST_FIXTURE(EPUBExportTest, testAbi11105)