From 3371a9b36fb455501449d6575250ff19e5ffa18b Mon Sep 17 00:00:00 2001 From: Xisco Fauli Date: Mon, 29 Jul 2024 20:42:44 +0200 Subject: [PATCH] sw: get rid of parseDump So parseLayoutDump is only called once per test Change-Id: Ia199e0a7eeac26fbde94f6450d2aa49828940806 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171219 Reviewed-by: Xisco Fauli Tested-by: Jenkins --- include/test/xmltesttools.hxx | 4 + sw/qa/core/header_footer/HeaderFooterTest.cxx | 230 +++++++++++------- sw/qa/core/layout/ftnfrm.cxx | 7 +- sw/qa/core/layout/layout.cxx | 26 +- sw/qa/core/layout/tabfrm.cxx | 4 +- sw/qa/extras/README | 4 +- sw/qa/extras/layout/layout.cxx | 4 +- sw/qa/extras/layout/layout2.cxx | 52 ++-- sw/qa/extras/layout/layout3.cxx | 26 +- sw/qa/extras/odfexport/odfexport.cxx | 19 +- sw/qa/extras/odfexport/odfexport2.cxx | 5 +- sw/qa/extras/odfimport/odfimport.cxx | 60 +++-- sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 12 +- sw/qa/extras/ooxmlexport/ooxmlexport10.cxx | 18 +- sw/qa/extras/ooxmlexport/ooxmlexport11.cxx | 8 +- sw/qa/extras/ooxmlexport/ooxmlexport12.cxx | 42 ++-- sw/qa/extras/ooxmlexport/ooxmlexport14.cxx | 19 +- sw/qa/extras/ooxmlexport/ooxmlexport15.cxx | 14 +- sw/qa/extras/ooxmlexport/ooxmlexport16.cxx | 29 +-- sw/qa/extras/ooxmlexport/ooxmlexport18.cxx | 12 +- sw/qa/extras/ooxmlexport/ooxmlexport19.cxx | 18 +- sw/qa/extras/ooxmlexport/ooxmlexport3.cxx | 3 +- sw/qa/extras/ooxmlexport/ooxmlexport4.cxx | 18 +- sw/qa/extras/ooxmlexport/ooxmlexport7.cxx | 53 ++-- sw/qa/extras/ooxmlexport/ooxmlexport8.cxx | 15 +- sw/qa/extras/ooxmlexport/ooxmlexport9.cxx | 3 +- sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 21 +- sw/qa/extras/ooxmlimport/ooxmlimport2.cxx | 24 +- sw/qa/extras/rtfexport/rtfexport2.cxx | 7 +- sw/qa/extras/rtfexport/rtfexport3.cxx | 8 +- sw/qa/extras/rtfexport/rtfexport4.cxx | 58 +++-- sw/qa/extras/rtfexport/rtfexport6.cxx | 22 +- sw/qa/extras/rtfexport/rtfexport8.cxx | 31 ++- sw/qa/extras/rtfimport/rtfimport.cxx | 14 +- sw/qa/extras/uiwriter/uiwriter4.cxx | 24 +- sw/qa/extras/uiwriter/uiwriter7.cxx | 11 +- sw/qa/extras/ww8export/ww8export.cxx | 71 +++--- sw/qa/extras/ww8export/ww8export2.cxx | 12 +- sw/qa/extras/ww8export/ww8export3.cxx | 5 +- sw/qa/extras/ww8export/ww8export4.cxx | 5 +- sw/qa/extras/ww8import/ww8import.cxx | 8 +- sw/qa/inc/swmodeltestbase.hxx | 7 - sw/qa/unit/swmodeltestbase.cxx | 40 --- test/source/xmltesttools.cxx | 18 +- 44 files changed, 630 insertions(+), 461 deletions(-) diff --git a/include/test/xmltesttools.hxx b/include/test/xmltesttools.hxx index bf91c5b20151..aa20257ff472 100644 --- a/include/test/xmltesttools.hxx +++ b/include/test/xmltesttools.hxx @@ -104,6 +104,10 @@ protected: * Assert that rXPath exists, has exactly 1 result set nodes and does *not* have an attribute named rAttribute. */ void assertXPathNoAttribute(const xmlDocUniquePtr& pXmlDoc, const OString& rXPath, const OString& rAttribute); + /** + * Same as the assertXPathNoAttribute(), but don't assert: return the bool instead. + */ + bool hasXPathAttribute(const xmlDocUniquePtr& pXmlDoc, const OString& rXPath, const OString& rAttribute); // Assert that the node name of the single node returned by an XPath is as specified, // e.g. to check order of elements, where getXPathPosition is unapplicable void assertXPathNodeName(const xmlDocUniquePtr& pXmlDoc, const OString& rXPath, const OString& rExpectedName); diff --git a/sw/qa/core/header_footer/HeaderFooterTest.cxx b/sw/qa/core/header_footer/HeaderFooterTest.cxx index acfd77f1270e..60463965fc02 100644 --- a/sw/qa/core/header_footer/HeaderFooterTest.cxx +++ b/sw/qa/core/header_footer/HeaderFooterTest.cxx @@ -126,18 +126,31 @@ CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testHeaderFooterWithSpecialFirstPage_OOXM } // All other pages should have header/footer OUString sExpected(u"Seite * von *"_ustr); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[2]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[2]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[3]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[3]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[4]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[4]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[5]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[5]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[6]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[6]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[7]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[7]/footer/txt/text()"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[2]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[3]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[3]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[4]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[4]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[5]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[5]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[6]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[6]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[7]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[7]/footer/txt/text()"_ostr)); } // Check for correct header/footer with special first page with TOC inside @@ -163,18 +176,31 @@ CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testHeaderFooterWithSpecialFirstPage_ODF) // All other pages should have header/footer OUString sExpected(u"Seite * von *"_ustr); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[2]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[2]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[3]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[3]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[4]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[4]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[5]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[5]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[6]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[6]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[7]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[7]/footer/txt/text()"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[2]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[3]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[3]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[4]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[4]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[5]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[5]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[6]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[6]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[7]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(sExpected, + getXPathContent(pXmlDoc, "/root/page[7]/footer/txt/text()"_ostr)); } CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFloatingTableInHeader) @@ -243,14 +269,15 @@ CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstPageHeadersAndEmptyFooters) // Test case where headers and footers for first page are set, but footers are empty auto verify = [this]() { + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL(u"This is the FIRST page header."_ustr, - parseDump("/root/page[1]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"This is the header for the REST OF THE FILE."_ustr, - parseDump("/root/page[2]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"This is the header for the REST OF THE FILE."_ustr, - parseDump("/root/page[3]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[3]/header/txt/text()"_ostr)); }; createSwDoc("fdo66145.docx"); @@ -268,30 +295,31 @@ CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstHeaderFooterImport) // The document has 6 pages. Note that we don't test if 4 or just 2 page // styles are created, the point is that layout should be correct. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL(u"First page header"_ustr, - parseDump("/root/page[1]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"First page footer"_ustr, - parseDump("/root/page[1]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Even page header"_ustr, - parseDump("/root/page[2]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Even page footer"_ustr, - parseDump("/root/page[2]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Odd page header"_ustr, - parseDump("/root/page[3]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[3]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Odd page footer"_ustr, - parseDump("/root/page[3]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[3]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"First page header2"_ustr, - parseDump("/root/page[4]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[4]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"First page footer 2"_ustr, - parseDump("/root/page[4]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[4]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Odd page header 2"_ustr, - parseDump("/root/page[5]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[5]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Odd page footer 2"_ustr, - parseDump("/root/page[5]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[5]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Even page header 2"_ustr, - parseDump("/root/page[6]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[6]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Even page footer 2"_ustr, - parseDump("/root/page[6]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[6]/footer/txt/text()"_ostr)); }; createSwDoc("first-header-footer.docx"); @@ -307,30 +335,31 @@ CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstHeaderFooterRoundTrip) CPPUNIT_ASSERT_EQUAL(6, getPages()); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL(u"First page header"_ustr, - parseDump("/root/page[1]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"First page footer"_ustr, - parseDump("/root/page[1]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Even page header"_ustr, - parseDump("/root/page[2]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Even page footer"_ustr, - parseDump("/root/page[2]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Odd page header"_ustr, - parseDump("/root/page[3]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[3]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Odd page footer"_ustr, - parseDump("/root/page[3]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[3]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"First page header2"_ustr, - parseDump("/root/page[4]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[4]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"First page footer 2"_ustr, - parseDump("/root/page[4]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[4]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Odd page header 2"_ustr, - parseDump("/root/page[5]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[5]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Odd page footer 2"_ustr, - parseDump("/root/page[5]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[5]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Even page header 2"_ustr, - parseDump("/root/page[6]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[6]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Even page footer 2"_ustr, - parseDump("/root/page[6]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[6]/footer/txt/text()"_ostr)); } CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstHeaderFooter_ODF) @@ -342,18 +371,31 @@ CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstHeaderFooter_ODF) // Test import and export of the header-first token. // The document has 6 pages, two page styles for the first and second half of pages. - CPPUNIT_ASSERT_EQUAL(u"First header"_ustr, parseDump("/root/page[1]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"First footer"_ustr, parseDump("/root/page[1]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Left header"_ustr, parseDump("/root/page[2]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Left footer"_ustr, parseDump("/root/page[2]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Right header"_ustr, parseDump("/root/page[3]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Right footer"_ustr, parseDump("/root/page[3]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"First header2"_ustr, parseDump("/root/page[4]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"First footer2"_ustr, parseDump("/root/page[4]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Right header2"_ustr, parseDump("/root/page[5]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Right footer2"_ustr, parseDump("/root/page[5]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Left header2"_ustr, parseDump("/root/page[6]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Left footer2"_ustr, parseDump("/root/page[6]/footer/txt/text()"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"First header"_ustr, + getXPathContent(pXmlDoc, "/root/page[1]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"First footer"_ustr, + getXPathContent(pXmlDoc, "/root/page[1]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Left header"_ustr, + getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Left footer"_ustr, + getXPathContent(pXmlDoc, "/root/page[2]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Right header"_ustr, + getXPathContent(pXmlDoc, "/root/page[3]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Right footer"_ustr, + getXPathContent(pXmlDoc, "/root/page[3]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"First header2"_ustr, + getXPathContent(pXmlDoc, "/root/page[4]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"First footer2"_ustr, + getXPathContent(pXmlDoc, "/root/page[4]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Right header2"_ustr, + getXPathContent(pXmlDoc, "/root/page[5]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Right footer2"_ustr, + getXPathContent(pXmlDoc, "/root/page[5]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Left header2"_ustr, + getXPathContent(pXmlDoc, "/root/page[6]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Left footer2"_ustr, + getXPathContent(pXmlDoc, "/root/page[6]/footer/txt/text()"_ostr)); } CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstHeaderFooter_DOC) @@ -365,30 +407,31 @@ CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstHeaderFooter_DOC) // The document has 6 pages. Note that we don't test if 4 or just 2 page // styles are created, the point is that layout should be correct. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL(u"First page header"_ustr, - parseDump("/root/page[1]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"First page footer"_ustr, - parseDump("/root/page[1]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Even page header"_ustr, - parseDump("/root/page[2]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Even page footer"_ustr, - parseDump("/root/page[2]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Odd page header"_ustr, - parseDump("/root/page[3]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[3]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Odd page footer"_ustr, - parseDump("/root/page[3]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[3]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"First page header2"_ustr, - parseDump("/root/page[4]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[4]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"First page footer 2"_ustr, - parseDump("/root/page[4]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[4]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Odd page header 2"_ustr, - parseDump("/root/page[5]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[5]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Odd page footer 2"_ustr, - parseDump("/root/page[5]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[5]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Even page header 2"_ustr, - parseDump("/root/page[6]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[6]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Even page footer 2"_ustr, - parseDump("/root/page[6]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[6]/footer/txt/text()"_ostr)); } CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFdo65655) @@ -469,23 +512,24 @@ CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testContSectBreakHeaderFooter) { auto verify = [this]() { // Load a document with a continuous section break on page 2. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL(u"First page header, section 1"_ustr, - parseDump("/root/page[1]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"First page footer, section 1"_ustr, - parseDump("/root/page[1]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/footer/txt/text()"_ostr)); // Make sure the header stays like this; if we naively just update the page style name of the // first para on page 2, then this would be 'Header, section 2', which is incorrect. CPPUNIT_ASSERT_EQUAL(u"First page header, section 2"_ustr, - parseDump("/root/page[2]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"First page footer, section 2"_ustr, - parseDump("/root/page[2]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/footer/txt/text()"_ostr)); // This is inherited from page 2. CPPUNIT_ASSERT_EQUAL(u"Header, section 2"_ustr, - parseDump("/root/page[3]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[3]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"Footer, section 3"_ustr, - parseDump("/root/page[3]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[3]/footer/txt/text()"_ostr)); // Without the export fix in place, the import-export-import test would have failed with: // - Expected: Header, section 2 @@ -519,10 +563,13 @@ CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testTdf145998_firstHeader) // Sanity check - always good to test when dealing with page styles and breaks. CPPUNIT_ASSERT_EQUAL(2, getPages()); - CPPUNIT_ASSERT_EQUAL(u"Very first header"_ustr, parseDump("/root/page[1]/header/txt"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"Very first header"_ustr, + getXPathContent(pXmlDoc, "/root/page[1]/header/txt"_ostr)); // Page Style is already used in prior section - this can't be the first-header - CPPUNIT_ASSERT_EQUAL(u"Normal Header"_ustr, parseDump("/root/page[2]/header/txt"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Normal Header"_ustr, + getXPathContent(pXmlDoc, "/root/page[2]/header/txt"_ostr)); } CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testEvenPageOddPageFooter_Import) @@ -628,24 +675,25 @@ CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testTdf113849_evenAndOddHeaders) createSwDoc("tdf113849_evenAndOddHeaders.odt"); saveAndReload(u"Office Open XML Text"_ustr); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL_MESSAGE("Header2 text", u"L. J. Kendall"_ustr, - parseDump("/root/page[2]/header/txt"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/header/txt"_ostr)); CPPUNIT_ASSERT_EQUAL_MESSAGE("Footer2 text", u"*"_ustr, - parseDump("/root/page[2]/footer/txt"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/footer/txt"_ostr)); CPPUNIT_ASSERT_EQUAL_MESSAGE("Header3 text", u"Shadow Hunt"_ustr, - parseDump("/root/page[3]/header/txt"_ostr)); + getXPathContent(pXmlDoc, "/root/page[3]/header/txt"_ostr)); CPPUNIT_ASSERT_EQUAL_MESSAGE("Footer3 text", u"*"_ustr, - parseDump("/root/page[3]/footer/txt"_ostr)); + getXPathContent(pXmlDoc, "/root/page[3]/footer/txt"_ostr)); CPPUNIT_ASSERT_EQUAL_MESSAGE("Header4 text", u"L. J. Kendall"_ustr, - parseDump("/root/page[4]/header/txt"_ostr)); + getXPathContent(pXmlDoc, "/root/page[4]/header/txt"_ostr)); CPPUNIT_ASSERT_EQUAL_MESSAGE("Footer4 text", u"*"_ustr, - parseDump("/root/page[4]/footer/txt"_ostr)); + getXPathContent(pXmlDoc, "/root/page[4]/footer/txt"_ostr)); CPPUNIT_ASSERT_EQUAL_MESSAGE("Footer5 text", u""_ustr, - parseDump("/root/page[5]/footer/txt"_ostr)); + getXPathContent(pXmlDoc, "/root/page[5]/footer/txt"_ostr)); CPPUNIT_ASSERT_EQUAL_MESSAGE("Footer6 text", u""_ustr, - parseDump("/root/page[6]/footer/txt"_ostr)); + getXPathContent(pXmlDoc, "/root/page[6]/footer/txt"_ostr)); CPPUNIT_ASSERT_EQUAL_MESSAGE("Number of pages", 6, getPages()); } diff --git a/sw/qa/core/layout/ftnfrm.cxx b/sw/qa/core/layout/ftnfrm.cxx index ef72fda00516..3023ff71c9ff 100644 --- a/sw/qa/core/layout/ftnfrm.cxx +++ b/sw/qa/core/layout/ftnfrm.cxx @@ -78,10 +78,11 @@ CPPUNIT_TEST_FIXTURE(Test, testInlineEndnoteAndFootnote) // - xpath should match exactly 1 node // i.e. the endnote was also in the footnote container, not at the end of the body text. sal_Int32 nEndnoteTop - = parseDump("/root/page/body/section/column/ftncont/ftn/infos/bounds"_ostr, "top"_ostr) + = getXPath(pXmlDoc, "/root/page/body/section/column/ftncont/ftn/infos/bounds"_ostr, + "top"_ostr) .toInt32(); sal_Int32 nFootnoteTop - = parseDump("/root/page/ftncont/ftn/infos/bounds"_ostr, "top"_ostr).toInt32(); + = getXPath(pXmlDoc, "/root/page/ftncont/ftn/infos/bounds"_ostr, "top"_ostr).toInt32(); // Endnote at the end of body text, footnote at page bottom. CPPUNIT_ASSERT_LESS(nFootnoteTop, nEndnoteTop); } @@ -115,7 +116,7 @@ CPPUNIT_TEST_FIXTURE(Test, testInlineEndnotePosition) // Then make sure the endnote separator (line + spacing around it) is large enough, so the // endnote text below the separator has the correct position: sal_Int32 nEndnoteContTopMargin - = parseDump("//column/ftncont/infos/prtBounds"_ostr, "top"_ostr).toInt32(); + = getXPath(pXmlDoc, "//column/ftncont/infos/prtBounds"_ostr, "top"_ostr).toInt32(); // Without the accompanying fix in place, this test would have failed with: // - Expected: 269 // - Actual : 124 diff --git a/sw/qa/core/layout/layout.cxx b/sw/qa/core/layout/layout.cxx index 9b27151a976f..5ce929b27591 100644 --- a/sw/qa/core/layout/layout.cxx +++ b/sw/qa/core/layout/layout.cxx @@ -54,13 +54,14 @@ CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testTableFlyOverlap) // Load a document that has an image anchored in the header. // It also has a table which has the wrap around the image. createSwDoc("table-fly-overlap.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); SwTwips nFlyTop - = parseDump("//header/txt/anchored/fly/infos/bounds"_ostr, "top"_ostr).toInt32(); + = getXPath(pXmlDoc, "//header/txt/anchored/fly/infos/bounds"_ostr, "top"_ostr).toInt32(); SwTwips nFlyHeight - = parseDump("//header/txt/anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32(); + = getXPath(pXmlDoc, "//header/txt/anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32(); SwTwips nFlyBottom = nFlyTop + nFlyHeight; - SwTwips nTableFrameTop = parseDump("//tab/infos/bounds"_ostr, "top"_ostr).toInt32(); - SwTwips nTablePrintTop = parseDump("//tab/infos/prtBounds"_ostr, "top"_ostr).toInt32(); + SwTwips nTableFrameTop = getXPath(pXmlDoc, "//tab/infos/bounds"_ostr, "top"_ostr).toInt32(); + SwTwips nTablePrintTop = getXPath(pXmlDoc, "//tab/infos/prtBounds"_ostr, "top"_ostr).toInt32(); SwTwips nTableTop = nTableFrameTop + nTablePrintTop; // Without the accompanying fix in place, this test would have failed with: // - Expected greater or equal than: 3579 @@ -75,8 +76,11 @@ CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testTdf128195) // Load a document that has two paragraphs in the header. // The second paragraph should have its bottom spacing applied. createSwDoc("tdf128195.docx"); - sal_Int32 nTxtHeight = parseDump("//header/txt[2]/infos/bounds"_ostr, "height"_ostr).toInt32(); - sal_Int32 nTxtBottom = parseDump("//header/txt[2]/infos/bounds"_ostr, "bottom"_ostr).toInt32(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nTxtHeight + = getXPath(pXmlDoc, "//header/txt[2]/infos/bounds"_ostr, "height"_ostr).toInt32(); + sal_Int32 nTxtBottom + = getXPath(pXmlDoc, "//header/txt[2]/infos/bounds"_ostr, "bottom"_ostr).toInt32(); CPPUNIT_ASSERT_EQUAL(static_cast(2269), nTxtHeight); CPPUNIT_ASSERT_EQUAL(static_cast(3529), nTxtBottom); } @@ -129,12 +133,14 @@ CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testTableFlyOverlapSpacing) { // Load a document that has an image on the right of a table. The table wraps around the image. createSwDoc("table-fly-overlap-spacing.docx"); - SwTwips nFlyTop = parseDump("//body/txt/anchored/fly/infos/bounds"_ostr, "top"_ostr).toInt32(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + SwTwips nFlyTop + = getXPath(pXmlDoc, "//body/txt/anchored/fly/infos/bounds"_ostr, "top"_ostr).toInt32(); SwTwips nFlyHeight - = parseDump("//body/txt/anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32(); + = getXPath(pXmlDoc, "//body/txt/anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32(); SwTwips nFlyBottom = nFlyTop + nFlyHeight; - SwTwips nTableFrameTop = parseDump("//tab/infos/bounds"_ostr, "top"_ostr).toInt32(); - SwTwips nTablePrintTop = parseDump("//tab/infos/prtBounds"_ostr, "top"_ostr).toInt32(); + SwTwips nTableFrameTop = getXPath(pXmlDoc, "//tab/infos/bounds"_ostr, "top"_ostr).toInt32(); + SwTwips nTablePrintTop = getXPath(pXmlDoc, "//tab/infos/prtBounds"_ostr, "top"_ostr).toInt32(); SwTwips nTableTop = nTableFrameTop + nTablePrintTop; // Without the accompanying fix in place, this test would have failed with: // - Expected greater or equal than: 3993 diff --git a/sw/qa/core/layout/tabfrm.cxx b/sw/qa/core/layout/tabfrm.cxx index cc60c3cd4bc5..276304623f72 100644 --- a/sw/qa/core/layout/tabfrm.cxx +++ b/sw/qa/core/layout/tabfrm.cxx @@ -36,9 +36,11 @@ CPPUNIT_TEST_FIXTURE(Test, testTablePrintAreaLeft) { // Given a document with a header containing an image, and also with an overlapping table: createSwDoc("table-print-area-left.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); // When laying out that document & parsing the left margin of the table: - SwTwips nTablePrintLeft = parseDump("//tab/infos/prtBounds"_ostr, "left"_ostr).toInt32(); + SwTwips nTablePrintLeft + = getXPath(pXmlDoc, "//tab/infos/prtBounds"_ostr, "left"_ostr).toInt32(); // Then make sure it has ~no left margin: // Without the accompanying fix in place, this test would have failed with: diff --git a/sw/qa/extras/README b/sw/qa/extras/README index 66bca01e63a0..2e5df81d4751 100644 --- a/sw/qa/extras/README +++ b/sw/qa/extras/README @@ -19,8 +19,8 @@ See below for more details on writing the UNO code see below. === Direct XPath assertions on the layout dump In most cases you want to assert the document model, but sometimes asserting -the layout is easier. If you want to do so, the `parseDump()` method can be -used to parse the layout dump of the currently loaded document. If you want +the layout is easier. If you want to do so, check the methods in +test/source/xmltesttools.cxx. If you want to have a look at the XML document that can be asserted, start soffice with the `SW_DEBUG=1` environment variable, load a document, press F12, and have a look at the `layout.xml` file in the current directory. Once you find the needed diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx index 523bbbd478b5..9fe696ee838d 100644 --- a/sw/qa/extras/layout/layout.cxx +++ b/sw/qa/extras/layout/layout.cxx @@ -2176,7 +2176,9 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf116486) createSwDoc("tdf116486.docx"); SwDoc* pDoc = getSwDoc(); CPPUNIT_ASSERT(pDoc); - OUString aTop = parseDump( + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString aTop = getXPath( + pXmlDoc, "/root/page/body/txt/SwParaPortion/SwLineLayout[1]/child::*[@type='PortionType::Fly']"_ostr, "height"_ostr); CPPUNIT_ASSERT_EQUAL(u"4006"_ustr, aTop); diff --git a/sw/qa/extras/layout/layout2.cxx b/sw/qa/extras/layout/layout2.cxx index fcda464b6928..8226c5100c78 100644 --- a/sw/qa/extras/layout/layout2.cxx +++ b/sw/qa/extras/layout/layout2.cxx @@ -2456,20 +2456,23 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf150200) createSwDoc("tdf150200.odt"); xmlDocUniquePtr pXmlDoc = parseLayoutDump(); // dash - OUString sFirstLine - = parseDump("/root/page/body/txt[1]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + OUString sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[1]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"-(dash)")); CPPUNIT_ASSERT_EQUAL(sal_Int32(93), sFirstLine.getLength()); // en-dash - sFirstLine = parseDump("/root/page/body/txt[2]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[2]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"–(en-dash)")); CPPUNIT_ASSERT_EQUAL(sal_Int32(88), sFirstLine.getLength()); // em-dash - sFirstLine = parseDump("/root/page/body/txt[3]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[3]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"—(em-dash)")); CPPUNIT_ASSERT_EQUAL(sal_Int32(77), sFirstLine.getLength()); // figure dash - sFirstLine = parseDump("/root/page/body/txt[4]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[4]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"‒(figure dash)")); CPPUNIT_ASSERT_EQUAL(sal_Int32(87), sFirstLine.getLength()); } @@ -2479,20 +2482,23 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf150200_DOCX) createSwDoc("tdf150200.docx"); xmlDocUniquePtr pXmlDoc = parseLayoutDump(); // dash - OUString sFirstLine - = parseDump("/root/page/body/txt[1]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + OUString sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[1]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"-(dash)")); CPPUNIT_ASSERT_EQUAL(sal_Int32(93), sFirstLine.getLength()); // en-dash - sFirstLine = parseDump("/root/page/body/txt[2]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[2]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"–(en-dash)")); CPPUNIT_ASSERT_EQUAL(sal_Int32(88), sFirstLine.getLength()); // em-dash - sFirstLine = parseDump("/root/page/body/txt[3]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[3]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"—(em-dash)")); CPPUNIT_ASSERT_EQUAL(sal_Int32(77), sFirstLine.getLength()); // figure dash - sFirstLine = parseDump("/root/page/body/txt[4]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[4]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"‒(figure dash)")); CPPUNIT_ASSERT_EQUAL(sal_Int32(87), sFirstLine.getLength()); } @@ -2502,20 +2508,23 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf150438) createSwDoc("tdf150438.odt"); xmlDocUniquePtr pXmlDoc = parseLayoutDump(); // left double quotation mark - OUString sFirstLine - = parseDump("/root/page/body/txt[1]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + OUString sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[1]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"“Lorem ipsum")); CPPUNIT_ASSERT_EQUAL(sal_Int32(92), sFirstLine.getLength()); // right double quotation mark - sFirstLine = parseDump("/root/page/body/txt[2]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[2]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"”Nunc viverra imperdiet enim.")); CPPUNIT_ASSERT_EQUAL(sal_Int32(97), sFirstLine.getLength()); // left single quotation mark - sFirstLine = parseDump("/root/page/body/txt[3]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[3]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"‘Aenean nec lorem.")); CPPUNIT_ASSERT_EQUAL(sal_Int32(85), sFirstLine.getLength()); // right single quotation mark or apostrophe - sFirstLine = parseDump("/root/page/body/txt[4]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[4]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"’Aenean nec lorem.")); CPPUNIT_ASSERT_EQUAL(sal_Int32(85), sFirstLine.getLength()); } @@ -2525,20 +2534,23 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf150438_DOCX) createSwDoc("tdf150438.docx"); xmlDocUniquePtr pXmlDoc = parseLayoutDump(); // left double quotation mark - OUString sFirstLine - = parseDump("/root/page/body/txt[1]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + OUString sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[1]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"“Lorem ipsum")); CPPUNIT_ASSERT_EQUAL(sal_Int32(92), sFirstLine.getLength()); // right double quotation mark - sFirstLine = parseDump("/root/page/body/txt[2]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[2]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"”Nunc viverra imperdiet enim.")); CPPUNIT_ASSERT_EQUAL(sal_Int32(97), sFirstLine.getLength()); // left single quotation mark - sFirstLine = parseDump("/root/page/body/txt[3]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[3]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"‘Aenean nec lorem.")); CPPUNIT_ASSERT_EQUAL(sal_Int32(85), sFirstLine.getLength()); // right single quotation mark or apostrophe - sFirstLine = parseDump("/root/page/body/txt[4]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); + sFirstLine = getXPathContent( + pXmlDoc, "/root/page/body/txt[4]/SwParaPortion/SwLineLayout[1]/@portion"_ostr); CPPUNIT_ASSERT_EQUAL(true, sFirstLine.startsWith(u"’Aenean nec lorem.")); CPPUNIT_ASSERT_EQUAL(sal_Int32(85), sFirstLine.getLength()); } diff --git a/sw/qa/extras/layout/layout3.cxx b/sw/qa/extras/layout/layout3.cxx index 3e936abffc38..27beac4cfdb2 100644 --- a/sw/qa/extras/layout/layout3.cxx +++ b/sw/qa/extras/layout/layout3.cxx @@ -1151,8 +1151,10 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf118719) // Without the accompanying fix in place, this test would have failed, as the height of the // first page was 15840 twips, instead of the much smaller 276. - sal_Int32 nOther = parseDump("/root/page[1]/infos/bounds"_ostr, "height"_ostr).toInt32(); - sal_Int32 nLast = parseDump("/root/page[2]/infos/bounds"_ostr, "height"_ostr).toInt32(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nOther + = getXPath(pXmlDoc, "/root/page[1]/infos/bounds"_ostr, "height"_ostr).toInt32(); + sal_Int32 nLast = getXPath(pXmlDoc, "/root/page[2]/infos/bounds"_ostr, "height"_ostr).toInt32(); CPPUNIT_ASSERT_GREATER(nOther, nLast); } @@ -2068,22 +2070,26 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf134548) // Second paragraph has two non zero width tabs in beginning of line { - OUString sNodeType = parseDump( - "/root/page/body/txt[2]/SwParaPortion/SwLineLayout/SwFixPortion[1]"_ostr, "type"_ostr); + OUString sNodeType = getXPath( + pXmlDoc, "/root/page/body/txt[2]/SwParaPortion/SwLineLayout/SwFixPortion[1]"_ostr, + "type"_ostr); CPPUNIT_ASSERT_EQUAL(u"PortionType::TabLeft"_ustr, sNodeType); sal_Int32 nWidth - = parseDump("/root/page/body/txt[2]/SwParaPortion/SwLineLayout/SwFixPortion[1]"_ostr, - "width"_ostr) + = getXPath(pXmlDoc, + "/root/page/body/txt[2]/SwParaPortion/SwLineLayout/SwFixPortion[1]"_ostr, + "width"_ostr) .toInt32(); CPPUNIT_ASSERT_GREATER(sal_Int32(0), nWidth); } { - OUString sNodeType = parseDump( - "/root/page/body/txt[2]/SwParaPortion/SwLineLayout/SwFixPortion[2]"_ostr, "type"_ostr); + OUString sNodeType = getXPath( + pXmlDoc, "/root/page/body/txt[2]/SwParaPortion/SwLineLayout/SwFixPortion[2]"_ostr, + "type"_ostr); CPPUNIT_ASSERT_EQUAL(u"PortionType::TabLeft"_ustr, sNodeType); sal_Int32 nWidth - = parseDump("/root/page/body/txt[2]/SwParaPortion/SwLineLayout/SwFixPortion[2]"_ostr, - "width"_ostr) + = getXPath(pXmlDoc, + "/root/page/body/txt[2]/SwParaPortion/SwLineLayout/SwFixPortion[2]"_ostr, + "width"_ostr) .toInt32(); CPPUNIT_ASSERT_GREATER(sal_Int32(0), nWidth); } diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx index 7dfe52381293..67c1d7859d04 100644 --- a/sw/qa/extras/odfexport/odfexport.cxx +++ b/sw/qa/extras/odfexport/odfexport.cxx @@ -1331,7 +1331,8 @@ DECLARE_ODFEXPORT_TEST(testRelhPage, "relh-page.odt") CPPUNIT_ASSERT_EQUAL(text::RelOrientation::FRAME, getProperty(xTextFrame, u"RelativeWidthRelation"_ustr)); // This was 2601, 20% height was relative from margin, not page. - CPPUNIT_ASSERT_EQUAL(sal_Int32(3168), parseDump("/root/page/body/txt/anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32()); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3168), getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32()); } DECLARE_ODFEXPORT_TEST(testRelhPageTdf80282, "relh-page-tdf80282.odt") @@ -1339,8 +1340,9 @@ DECLARE_ODFEXPORT_TEST(testRelhPageTdf80282, "relh-page-tdf80282.odt") CPPUNIT_ASSERT_EQUAL(1, getShapes()); CPPUNIT_ASSERT_EQUAL(1, getPages()); uno::Reference xTextFrame = getShape(1); - CPPUNIT_ASSERT_EQUAL_MESSAGE("Height", sal_Int32(8391), parseDump("//anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32()); - CPPUNIT_ASSERT_EQUAL_MESSAGE("Width", sal_Int32(5953), parseDump("//anchored/fly/infos/bounds"_ostr, "width"_ostr).toInt32()); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "//anchored/fly/infos/bounds"_ostr, "height"_ostr, u"8391"_ustr); + assertXPath(pXmlDoc, "//anchored/fly/infos/bounds"_ostr, "width"_ostr, u"5953"_ustr); } DECLARE_ODFEXPORT_TEST(testRelwPage, "relw-page.odt") @@ -1354,7 +1356,8 @@ DECLARE_ODFEXPORT_TEST(testRelwPage, "relw-page.odt") CPPUNIT_ASSERT_EQUAL(text::RelOrientation::FRAME, getProperty(xTextFrame, u"RelativeHeightRelation"_ustr)); // This was 3762, 40% width was relative from margin, not page. - CPPUNIT_ASSERT_EQUAL(sal_Int32(4896), parseDump("/root/page/body/txt/anchored/fly/infos/bounds"_ostr, "width"_ostr).toInt32()); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(4896), getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/infos/bounds"_ostr, "width"_ostr).toInt32()); } DECLARE_ODFEXPORT_TEST(testTextFrameVertAdjust, "textframe-vertadjust.odt") @@ -1750,15 +1753,16 @@ DECLARE_ODFEXPORT_TEST(testWhitespace, "whitespace.odt") DECLARE_ODFEXPORT_TEST(testTdf136645, "tdf136645.odt") { CPPUNIT_ASSERT_EQUAL(1, getPages()); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); // Without the fix in place, this would have failed with //- Expected: 2640 //- Actual : 3000 - CPPUNIT_ASSERT_EQUAL(sal_Int32(2640), parseDump("/root/page/body/section/column[1]/body/infos/bounds"_ostr, "width"_ostr).toInt32()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2640), getXPath(pXmlDoc, "/root/page/body/section/column[1]/body/infos/bounds"_ostr, "width"_ostr).toInt32()); //- Expected: 6000 //- Actual : 6360 - CPPUNIT_ASSERT_EQUAL(sal_Int32(6000), parseDump("/root/page/body/section/column[2]/body/infos/bounds"_ostr, "width"_ostr).toInt32()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(6000), getXPath(pXmlDoc, "/root/page/body/section/column[2]/body/infos/bounds"_ostr, "width"_ostr).toInt32()); } DECLARE_ODFEXPORT_TEST(testBtlrCell, "btlr-cell.odt") @@ -1862,7 +1866,8 @@ DECLARE_ODFEXPORT_TEST(testTdf135338_firstLeftPageFooter, "tdf135338_firstLeftPa CPPUNIT_ASSERT_EQUAL(6, getPages()); // The first page is a left page only style, but it should still show the first page footer // instead of the left footer text "EVEN/LEFT (Left page only)" - CPPUNIT_ASSERT_EQUAL(u"First (Left page only)"_ustr, parseDump("/root/page[2]/footer/txt/text()"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPathContent(pXmlDoc, "/root/page[2]/footer/txt/text()"_ostr, u"First (Left page only)"_ustr); } DECLARE_ODFEXPORT_TEST(testGerrit13858, "gerrit13858.odt") diff --git a/sw/qa/extras/odfexport/odfexport2.cxx b/sw/qa/extras/odfexport/odfexport2.cxx index 9eb4048e2b4c..debea006f068 100644 --- a/sw/qa/extras/odfexport/odfexport2.cxx +++ b/sw/qa/extras/odfexport/odfexport2.cxx @@ -831,11 +831,12 @@ DECLARE_ODFEXPORT_TEST(testGutterLeft, "gutter-left.odt") DECLARE_ODFEXPORT_TEST(testTdf52065_centerTabs, "testTdf52065_centerTabs.odt") { CPPUNIT_ASSERT_EQUAL(1, getPages()); - sal_Int32 nTabStop = parseDump("//body/txt[4]/SwParaPortion/SwLineLayout/child::*[3]"_ostr, "width"_ostr).toInt32(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nTabStop = getXPath(pXmlDoc, "//body/txt[4]/SwParaPortion/SwLineLayout/child::*[3]"_ostr, "width"_ostr).toInt32(); // Without the fix, the text was unseen, with a tabstop width of 64057. It should be 3057 CPPUNIT_ASSERT(nTabStop < 4000); CPPUNIT_ASSERT(3000 < nTabStop); - CPPUNIT_ASSERT_EQUAL(u"Pečiatka zamestnávateľa"_ustr, parseDump("//body/txt[4]/SwParaPortion/SwLineLayout/child::*[4]"_ostr, "portion"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Pečiatka zamestnávateľa"_ustr, getXPath(pXmlDoc, "//body/txt[4]/SwParaPortion/SwLineLayout/child::*[4]"_ostr, "portion"_ostr)); // tdf#149547: __XXX___invalid CharacterStyles should not be imported/exported CPPUNIT_ASSERT(!getStyles(u"CharacterStyles"_ustr)->hasByName(u"__XXX___invalid"_ustr)); diff --git a/sw/qa/extras/odfimport/odfimport.cxx b/sw/qa/extras/odfimport/odfimport.cxx index 6ce472d683e3..19258ebbe37d 100644 --- a/sw/qa/extras/odfimport/odfimport.cxx +++ b/sw/qa/extras/odfimport/odfimport.cxx @@ -920,18 +920,20 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf92586) CPPUNIT_TEST_FIXTURE(Test, testTdf103025) { createSwDoc("tdf103025.odt"); - CPPUNIT_ASSERT_EQUAL(u"2014-01"_ustr, parseDump("/root/page[1]/header/tab[2]/row[2]/cell[3]/txt/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, "expand"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"2014-01"_ustr, parseDump("/root/page[2]/header/tab[2]/row[2]/cell[3]/txt/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, "expand"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"2014-02"_ustr, parseDump("/root/page[3]/header/tab[2]/row[2]/cell[3]/txt/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, "expand"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"2014-03"_ustr, parseDump("/root/page[4]/header/tab[2]/row[2]/cell[3]/txt/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, "expand"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"2014-03"_ustr, parseDump("/root/page[5]/header/tab[2]/row[2]/cell[3]/txt/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, "expand"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"2014-01"_ustr, getXPath(pXmlDoc, "/root/page[1]/header/tab[2]/row[2]/cell[3]/txt/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, "expand"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"2014-01"_ustr, getXPath(pXmlDoc, "/root/page[2]/header/tab[2]/row[2]/cell[3]/txt/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, "expand"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"2014-02"_ustr, getXPath(pXmlDoc, "/root/page[3]/header/tab[2]/row[2]/cell[3]/txt/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, "expand"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"2014-03"_ustr, getXPath(pXmlDoc, "/root/page[4]/header/tab[2]/row[2]/cell[3]/txt/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, "expand"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"2014-03"_ustr, getXPath(pXmlDoc, "/root/page[5]/header/tab[2]/row[2]/cell[3]/txt/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, "expand"_ostr)); } CPPUNIT_TEST_FIXTURE(Test, testTdf76322_columnBreakInHeader) { createSwDoc("tdf76322_columnBreakInHeader.docx"); -// column breaks were ignored. First line should start in column 2 - CPPUNIT_ASSERT_EQUAL( u"Test1"_ustr, parseDump("/root/page[1]/header/section/column[2]/body/txt/text()"_ostr) ); + // column breaks were ignored. First line should start in column 2 + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL( u"Test1"_ustr, getXPathContent(pXmlDoc, "/root/page[1]/header/section/column[2]/body/txt/text()"_ostr) ); } CPPUNIT_TEST_FIXTURE(Test, testTdf76349_1columnBreak) @@ -960,16 +962,18 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf75221) // When "Don't add space between paragraphs of the same style" setting set, // spacing between same-style paragraphs must be equal to their line spacing. // It used to be 0. - OUString top = parseDump("/root/page/body/txt[2]/infos/prtBounds"_ostr, "top"_ostr); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString top = getXPath(pXmlDoc, "/root/page/body/txt[2]/infos/prtBounds"_ostr, "top"_ostr); CPPUNIT_ASSERT(top.toInt32() > 0); } CPPUNIT_TEST_FIXTURE(Test, testTdf101729) { createSwDoc("tdf101729.odt"); - sal_Int32 l = parseDump("/root/page/body/tab/row/cell[1]/infos/bounds"_ostr, "left"_ostr).toInt32(); - sal_Int32 w = parseDump("/root/page/body/tab/row/cell[1]/infos/bounds"_ostr, "width"_ostr).toInt32(); - sal_Int32 x = parseDump("/root/page/body/tab/row/cell[1]/txt/infos/bounds"_ostr, "left"_ostr).toInt32(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 l = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/infos/bounds"_ostr, "left"_ostr).toInt32(); + sal_Int32 w = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/infos/bounds"_ostr, "width"_ostr).toInt32(); + sal_Int32 x = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/txt/infos/bounds"_ostr, "left"_ostr).toInt32(); // Make sure the text does not go outside and verify it is centered roughly CPPUNIT_ASSERT( l + w / 4 < x ); CPPUNIT_ASSERT( x < l + 3 * w / 4); @@ -1032,15 +1036,16 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf109080_loext_ns) createSwDoc("tdf109080_loext_ns.odt"); // Test we can import and + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL(u"This is the first page header"_ustr, - parseDump("/root/page[1]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"This is the non-first-page header"_ustr, - parseDump("/root/page[2]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"This is the first page footer"_ustr, - parseDump("/root/page[1]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"This is the non-first-page footer"_ustr, - parseDump("/root/page[2]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/footer/txt/text()"_ostr)); } CPPUNIT_TEST_FIXTURE(Test, testTdf109080_style_ns) @@ -1049,15 +1054,16 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf109080_style_ns) // Test we can import and // (produced by LibreOffice 4.0 - 5.x) + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL(u"This is the first page header"_ustr, - parseDump("/root/page[1]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"This is the non-first-page header"_ustr, - parseDump("/root/page[2]/header/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"This is the first page footer"_ustr, - parseDump("/root/page[1]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/footer/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(u"This is the non-first-page footer"_ustr, - parseDump("/root/page[2]/footer/txt/text()"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/footer/txt/text()"_ostr)); } CPPUNIT_TEST_FIXTURE(Test, testTdf109228) @@ -1073,7 +1079,8 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf94882) // Get the header of the page containing our content // (done this way to skip past any blank page inserted before it // due to the page number being even) - OUString headertext = parseDump( + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString headertext = getXPathContent(pXmlDoc, "/root/page[starts-with(body/txt/text(),'The paragraph style on this')]" "/header/txt/text()"_ostr ); @@ -1087,8 +1094,9 @@ CPPUNIT_TEST_FIXTURE(Test, testBlankBeforeFirstPage) // This document starts on page 50, which is even, but it should not have a // blank page inserted before it to make it a left page + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL_MESSAGE("There should be 1 pages output", - u"1"_ustr, parseDump("count(/root/page)"_ostr) + u"1"_ustr, getXPathContent(pXmlDoc, "count(/root/page)"_ostr) ); } @@ -1101,25 +1109,27 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf115079) CPPUNIT_TEST_FIXTURE(Test, testTdf108482) { createSwDoc("tdf108482.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL_MESSAGE("The table on second page must have two rows", - u"2"_ustr, parseDump("count(/root/page[2]/body/tab/row)"_ostr) + u"2"_ustr, getXPathContent(pXmlDoc, "count(/root/page[2]/body/tab/row)"_ostr) ); CPPUNIT_ASSERT_EQUAL_MESSAGE("The second page table's first row must be the repeated headline", - u"Header"_ustr, parseDump("/root/page[2]/body/tab/row[1]/cell/txt"_ostr) + u"Header"_ustr, getXPathContent(pXmlDoc, "/root/page[2]/body/tab/row[1]/cell/txt"_ostr) ); // The first (repeated headline) row with vertical text orientation must have non-zero height // (in my tests, it was 1135) CPPUNIT_ASSERT_GREATER( - sal_Int32(1000), parseDump("/root/page[2]/body/tab/row[1]/infos/bounds"_ostr, "height"_ostr).toInt32() + sal_Int32(1000), getXPath(pXmlDoc, "/root/page[2]/body/tab/row[1]/infos/bounds"_ostr, "height"_ostr).toInt32() ); } CPPUNIT_TEST_FIXTURE(Test, testTdf116195) { createSwDoc("tdf116195.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); // The image was set to zero height due to a regression CPPUNIT_ASSERT_EQUAL( - sal_Int32(12960), parseDump("/root/page/anchored/fly/notxt/infos/bounds"_ostr, "height"_ostr).toInt32() + sal_Int32(12960), getXPath(pXmlDoc, "/root/page/anchored/fly/notxt/infos/bounds"_ostr, "height"_ostr).toInt32() ); } diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index 5c88371d4e7d..0a303cc05e6e 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -720,7 +720,8 @@ DECLARE_OOXMLEXPORT_TEST(testNumOverrideLvltext, "num-override-lvltext.docx") CPPUNIT_ASSERT_EQUAL(u"1.1"_ustr, getProperty(xPara, u"ListLabelString"_ustr)); // The paragraph marker's red font color was inherited by the number portion, this was ff0000. - CPPUNIT_ASSERT_EQUAL(u"ffffffff"_ustr, parseDump("//SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']/SwFont"_ostr, "color"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"ffffffff"_ustr, getXPath(pXmlDoc, "//SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']/SwFont"_ostr, "color"_ostr)); } DECLARE_OOXMLEXPORT_TEST(testNumOverrideStart, "num-override-start.docx") @@ -741,10 +742,11 @@ DECLARE_OOXMLEXPORT_TEST(testTextboxRightEdge, "textbox-right-edge.docx") // I'm fairly sure this is not specific to DOCX, but the doc model created // by the ODF import doesn't trigger this bug, so let's test this here // instead of uiwriter. - int nShapeLeft = parseDump("//anchored/SwAnchoredDrawObject/bounds"_ostr, "left"_ostr).toInt32(); - int nShapeWidth = parseDump("//anchored/SwAnchoredDrawObject/bounds"_ostr, "width"_ostr).toInt32(); - int nTextboxLeft = parseDump("//anchored/fly/infos/bounds"_ostr, "left"_ostr).toInt32(); - int nTextboxWidth = parseDump("//anchored/fly/infos/bounds"_ostr, "width"_ostr).toInt32(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + int nShapeLeft = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject/bounds"_ostr, "left"_ostr).toInt32(); + int nShapeWidth = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject/bounds"_ostr, "width"_ostr).toInt32(); + int nTextboxLeft = getXPath(pXmlDoc, "//anchored/fly/infos/bounds"_ostr, "left"_ostr).toInt32(); + int nTextboxWidth = getXPath(pXmlDoc, "//anchored/fly/infos/bounds"_ostr, "width"_ostr).toInt32(); // This is a rectangle, make sure the right edge of the textbox is still // inside the draw shape. CPPUNIT_ASSERT(nShapeLeft + nShapeWidth >= nTextboxLeft + nTextboxWidth); diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport10.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport10.cxx index 6c502c497896..a50c853d7713 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport10.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport10.cxx @@ -600,7 +600,8 @@ DECLARE_OOXMLEXPORT_TEST(testLargeTwips, "large-twips.docx" ) { // cp#1000043: MSO seems to ignore large twips values, we didn't, which resulted in different // layout of broken documents (text not visible in this specific document). - OUString width = parseDump( "/root/page/body/tab/row[1]/cell[1]/txt/infos/bounds"_ostr, "width"_ostr ); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString width = getXPath(pXmlDoc, "/root/page/body/tab/row[1]/cell[1]/txt/infos/bounds"_ostr, "width"_ostr ); CPPUNIT_ASSERT( width.toInt32() > 0 ); } @@ -608,7 +609,8 @@ DECLARE_OOXMLEXPORT_TEST(testNegativeCellMarginTwips, "negative-cell-margin-twip { // Slightly related to cp#1000043, the twips value was negative, which wrapped around somewhere, // while MSO seems to ignore that as well. - OUString width = parseDump( "/root/page/body/tab/row[1]/cell[1]/txt/infos/bounds"_ostr, "width"_ostr ); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString width = getXPath(pXmlDoc, "/root/page/body/tab/row[1]/cell[1]/txt/infos/bounds"_ostr, "width"_ostr ); CPPUNIT_ASSERT( width.toInt32() > 0 ); } @@ -617,13 +619,14 @@ DECLARE_OOXMLEXPORT_TEST(testFdo38414, "fdo38414.docx") // The cells in the last (4th) column were merged properly and so the result didn't have the same height. // (Since w:gridBefore is worked around by faking another cell in the row, so column count is thus 5 // instead of 4, therefore compare height of cells 4 and 5 rather than 3 and 4.) + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); uno::Reference xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY); uno::Reference xTextTable(xTables->getByIndex(0), uno::UNO_QUERY); uno::Reference xTableColumns = xTextTable->getColumns(); CPPUNIT_ASSERT_EQUAL( sal_Int32( 5 ), xTableColumns->getCount()); - OUString height3 = parseDump("/root/page/body/tab/row[1]/cell[4]/infos/bounds"_ostr, "height"_ostr ); - OUString height4 = parseDump("/root/page/body/tab/row[1]/cell[5]/infos/bounds"_ostr, "height"_ostr ); + OUString height3 = getXPath(pXmlDoc, "/root/page/body/tab/row[1]/cell[4]/infos/bounds"_ostr, "height"_ostr ); + OUString height4 = getXPath(pXmlDoc, "/root/page/body/tab/row[1]/cell[5]/infos/bounds"_ostr, "height"_ostr ); CPPUNIT_ASSERT_EQUAL( height3, height4 ); } @@ -659,9 +662,10 @@ DECLARE_OOXMLEXPORT_TEST(testGridBefore, "gridbefore.docx") uno::Reference xTextTable(xTables->getByIndex(0), uno::UNO_QUERY); uno::Reference xTableColumns = xTextTable->getColumns(); CPPUNIT_ASSERT_EQUAL( sal_Int32( 3 ), xTableColumns->getCount()); - OUString textA3 = parseDump("/root/page/body/tab/row[1]/cell[3]/txt/text()"_ostr ); - OUString leftA3 = parseDump("/root/page/body/tab/row[1]/cell[3]/infos/bounds"_ostr, "left"_ostr ); - OUString leftB2 = parseDump("/root/page/body/tab/row[2]/cell[2]/infos/bounds"_ostr, "left"_ostr ); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString textA3 = getXPathContent(pXmlDoc, "/root/page/body/tab/row[1]/cell[3]/txt/text()"_ostr ); + OUString leftA3 = getXPath(pXmlDoc, "/root/page/body/tab/row[1]/cell[3]/infos/bounds"_ostr, "left"_ostr ); + OUString leftB2 = getXPath(pXmlDoc, "/root/page/body/tab/row[2]/cell[2]/infos/bounds"_ostr, "left"_ostr ); CPPUNIT_ASSERT_EQUAL( u"A3"_ustr, textA3 ); CPPUNIT_ASSERT( leftA3.toInt32() > leftB2.toInt32()); } diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx index 84f3d734e3f6..effbe02955c0 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx @@ -698,8 +698,9 @@ DECLARE_OOXMLEXPORT_TEST(testTdf82177_tblBorders, "tdf82177_tblBorders.docx") DECLARE_OOXMLEXPORT_TEST(testTdf119760_positionCellBorder, "tdf119760_positionCellBorder.docx") { //inconsistent in Word even. 2016 positions on last row, 2003 positions on first cell. - sal_Int32 nRowLeft = parseDump("/root/page/body/tab[4]/row[1]/infos/bounds"_ostr, "left"_ostr).toInt32(); - sal_Int32 nTextLeft = parseDump("/root/page/body/tab[4]/row[1]/cell[1]/txt/infos/bounds"_ostr, "left"_ostr).toInt32(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nRowLeft = getXPath(pXmlDoc, "/root/page/body/tab[4]/row[1]/infos/bounds"_ostr, "left"_ostr).toInt32(); + sal_Int32 nTextLeft = getXPath(pXmlDoc, "/root/page/body/tab[4]/row[1]/cell[1]/txt/infos/bounds"_ostr, "left"_ostr).toInt32(); CPPUNIT_ASSERT( nRowLeft < nTextLeft ); } @@ -726,8 +727,9 @@ DECLARE_OOXMLEXPORT_TEST(testTdf116985, "tdf116985.docx") // Body frame width is 10800, 40% is the requested relative width, with 144 // spacing to text on the left/right side. So ideal width would be 4032, // was 3431. Allow one pixel tolerance, though. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); sal_Int32 nWidth - = parseDump("/root/page[1]/body/txt[1]/anchored/fly/infos/bounds"_ostr, "width"_ostr).toInt32(); + = getXPath(pXmlDoc, "/root/page[1]/body/txt[1]/anchored/fly/infos/bounds"_ostr, "width"_ostr).toInt32(); CPPUNIT_ASSERT(nWidth > 4000); } diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx index 9ebcf1050d17..f5af7f65d8bc 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx @@ -1809,10 +1809,12 @@ DECLARE_OOXMLEXPORT_TEST(testTdf64264, "tdf64264.docx") // and it has got only a single repeating header line assertXPath(pDump, "/root/page[2]/body/tab"_ostr, 1); assertXPath(pDump, "/root/page[2]/body/tab/row"_ostr, 47); - CPPUNIT_ASSERT_EQUAL(u"Repeating Table Header"_ustr, - parseDump("/root/page[2]/body/tab/row[1]/cell[1]/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Text"_ustr, - parseDump("/root/page[2]/body/tab/row[2]/cell[1]/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL( + u"Repeating Table Header"_ustr, + getXPathContent(pDump, "/root/page[2]/body/tab/row[1]/cell[1]/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL( + u"Text"_ustr, + getXPathContent(pDump, "/root/page[2]/body/tab/row[2]/cell[1]/txt/text()"_ostr)); } DECLARE_OOXMLEXPORT_TEST(testTdf58944RepeatingTableHeader, "tdf58944-repeating-table-header.docx") @@ -1826,10 +1828,12 @@ DECLARE_OOXMLEXPORT_TEST(testTdf58944RepeatingTableHeader, "tdf58944-repeating-t // instead of showing only a part of it on page 2 assertXPath(pDump, "/root/page[1]/body/tab"_ostr, 1); assertXPath(pDump, "/root/page[1]/body/tab/row"_ostr, 11); - CPPUNIT_ASSERT_EQUAL(u"Test1"_ustr, - parseDump("/root/page[2]/body/tab/row[1]/cell[1]/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Test2"_ustr, - parseDump("/root/page[2]/body/tab/row[2]/cell[1]/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL( + u"Test1"_ustr, + getXPathContent(pDump, "/root/page[2]/body/tab/row[1]/cell[1]/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL( + u"Test2"_ustr, + getXPathContent(pDump, "/root/page[2]/body/tab/row[2]/cell[1]/txt/text()"_ostr)); } CPPUNIT_TEST_FIXTURE(Test, testTdf81100) @@ -2186,10 +2190,11 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf124678_case1) { loadAndReload("tdf124678_no_leading_paragraph.odt"); CPPUNIT_ASSERT_EQUAL(2, getPages()); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL_MESSAGE("First page header text", u""_ustr, - parseDump("/root/page[1]/header/txt"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/header/txt"_ostr)); CPPUNIT_ASSERT_EQUAL_MESSAGE("Second page header text", u"HEADER"_ustr, - parseDump("/root/page[2]/header/txt"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/header/txt"_ostr)); } // The (tdf124678_no_leading_paragraph.odt, tdf124678_with_leading_paragraph.odt) documents are the same, @@ -2201,10 +2206,11 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf124678_case2) { loadAndReload("tdf124678_with_leading_paragraph.odt"); CPPUNIT_ASSERT_EQUAL(2, getPages()); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL_MESSAGE("First page header text", u""_ustr, - parseDump("/root/page[1]/header/txt"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/header/txt"_ostr)); CPPUNIT_ASSERT_EQUAL_MESSAGE("Second page header text", u"HEADER"_ustr, - parseDump("/root/page[2]/header/txt"_ostr)); + getXPathContent(pXmlDoc, "/root/page[2]/header/txt"_ostr)); } static bool lcl_nearEqual(const sal_Int32 nNumber1, const sal_Int32 nNumber2, @@ -2348,14 +2354,16 @@ DECLARE_OOXMLEXPORT_TEST(testTdf119952_negativeMargins, "tdf119952_negativeMargi CPPUNIT_ASSERT_EQUAL(u"f1 f2 f3 f4 f5 f6 " " f7 f8"_ustr, - parseDump("/root/page[1]/header/txt/anchored/fly"_ostr)); + getXPathContent(pDump, "/root/page[1]/header/txt/anchored/fly"_ostr)); CPPUNIT_ASSERT_EQUAL(u" f8 f7 f6 f5 " " f4 f3 f2f1"_ustr, - parseDump("/root/page[1]/footer/txt/anchored/fly"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"p1"_ustr, parseDump("/root/page[2]/header/txt/anchored/fly"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"p1"_ustr, parseDump("/root/page[2]/footer/txt/anchored/fly"_ostr)); + getXPathContent(pDump, "/root/page[1]/footer/txt/anchored/fly"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"p1"_ustr, + getXPathContent(pDump, "/root/page[2]/header/txt/anchored/fly"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"p1"_ustr, + getXPathContent(pDump, "/root/page[2]/footer/txt/anchored/fly"_ostr)); CPPUNIT_ASSERT_EQUAL(u" aaaa bbbb cccc dddd eeee"_ustr, - parseDump("/root/page[3]/header/txt/anchored/fly"_ostr)); + getXPathContent(pDump, "/root/page[3]/header/txt/anchored/fly"_ostr)); } DECLARE_OOXMLEXPORT_TEST(testTdf143384_tableInFoot_negativeMargins, diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx index 76a7c11a310e..d54ca9dd2ed8 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx @@ -564,7 +564,8 @@ DECLARE_OOXMLEXPORT_TEST(testTdf78352, "tdf78352.docx") CPPUNIT_ASSERT_EQUAL(1, getPages()); // Ensure that width of first tab is close to zero (previous value was ~1000 twips) - int nWidth = parseDump("/root/page/body/txt[1]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::TabLeft']"_ostr, "width"_ostr).toInt32(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + int nWidth = getXPath(pXmlDoc, "/root/page/body/txt[1]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::TabLeft']"_ostr, "width"_ostr).toInt32(); CPPUNIT_ASSERT_LESS(150, nWidth); } @@ -574,26 +575,27 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf81567) CPPUNIT_ASSERT_EQUAL(1, getPages()); CPPUNIT_ASSERT_EQUAL(2, getShapes()); - int nFrameWidth = parseDump("/root/page/body/txt/anchored/fly/infos/bounds"_ostr, "width"_ostr).toInt32(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + int nFrameWidth = getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/infos/bounds"_ostr, "width"_ostr).toInt32(); CPPUNIT_ASSERT_EQUAL(2371, nFrameWidth); - int nFrameHeight = parseDump("/root/page/body/txt/anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32(); + int nFrameHeight = getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32(); CPPUNIT_ASSERT_EQUAL(3520, nFrameHeight); - int nFrameTop = parseDump("/root/page/body/txt/anchored/fly/infos/bounds"_ostr, "top"_ostr).toInt32(); + int nFrameTop = getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/infos/bounds"_ostr, "top"_ostr).toInt32(); CPPUNIT_ASSERT_EQUAL(1518, nFrameTop); - int nImageWidth = parseDump("/root/page/body/txt/anchored/fly/txt/anchored/fly/infos/bounds"_ostr, "width"_ostr).toInt32(); + int nImageWidth = getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/txt/anchored/fly/infos/bounds"_ostr, "width"_ostr).toInt32(); CPPUNIT_ASSERT_EQUAL(2370, nImageWidth); - int nImageHeight = parseDump("/root/page/body/txt/anchored/fly/txt/anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32(); + int nImageHeight = getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/txt/anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32(); CPPUNIT_ASSERT_EQUAL(1605, nImageHeight); // Check the image is at the top of the frame // Without the fix in place, this test would have failed with: // - Expected: 1638 // - Actual : 2236 - int nImageTop = parseDump("/root/page/body/txt/anchored/fly/txt/anchored/fly/infos/bounds"_ostr, "top"_ostr).toInt32(); + int nImageTop = getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/txt/anchored/fly/infos/bounds"_ostr, "top"_ostr).toInt32(); CPPUNIT_ASSERT_EQUAL(1638, nImageTop); } @@ -744,7 +746,8 @@ DECLARE_OOXMLEXPORT_TEST(testTdf83309, "tdf83309.docx") // First paragraph does not have tab before // (same applies to all paragraphs in doc, but let's assume they are // behaving same way) - OUString sNodeType = parseDump("(/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/child::*)[1]"_ostr, "type"_ostr); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString sNodeType = getXPath(pXmlDoc, "(/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout/child::*)[1]"_ostr, "type"_ostr); CPPUNIT_ASSERT_EQUAL(u"PortionType::Text"_ustr, sNodeType); // tdf148380: creation-date field in header.xml was unsupported on export diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx index a717a84e8492..a37e3fdcb34b 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx @@ -479,30 +479,31 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf145998_unnecessaryPageStyles) // Sanity check - always good to test when dealing with page styles and breaks. CPPUNIT_ASSERT_EQUAL(5, getPages()); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); // Page Style should be explicitly mentioned - otherwise it would be a "follow" style uno::Reference xPara(getParagraph(2, u"2"_ustr), uno::UNO_QUERY_THROW); CPPUNIT_ASSERT(uno::Any() != xPara->getPropertyValue(u"PageDescName"_ustr)); // CPPUNIT_ASSERT_EQUAL(OUString("First Page header"), - // parseDump("/root/page[2]/header/txt")); + // getXPathContent(pXmlDoc, "/root/page[2]/header/txt")); // Page Style is converted into a page break instead. Still shows "first" header. xPara.set(getParagraph(3, u"3"_ustr), uno::UNO_QUERY_THROW); CPPUNIT_ASSERT_EQUAL(uno::Any(), xPara->getPropertyValue(u"PageDescName"_ustr)); // CPPUNIT_ASSERT_EQUAL(OUString("Default page style - first page style"), - // parseDump("/root/page[3]/header/txt")); - CPPUNIT_ASSERT_EQUAL(OUString(), parseDump("/root/page[3]/footer/txt"_ostr)); + // getXPathContent(pXmlDoc, "/root/page[3]/header/txt")); + CPPUNIT_ASSERT_EQUAL(OUString(), getXPathContent(pXmlDoc, "/root/page[3]/footer/txt"_ostr)); // Page Style is converted into a page break instead. Shows the "normal" header. xPara.set(getParagraph(5, u"4"_ustr), uno::UNO_QUERY_THROW); CPPUNIT_ASSERT_EQUAL(uno::Any(), xPara->getPropertyValue(u"PageDescName"_ustr)); CPPUNIT_ASSERT_EQUAL(u"Default page style"_ustr, - parseDump("/root/page[4]/header/txt"_ostr)); + getXPathContent(pXmlDoc, "/root/page[4]/header/txt"_ostr)); // Page Style is retained (with wrong header) in order to preserve page re-numbering. xPara.set(getParagraph(7, u"1"_ustr), uno::UNO_QUERY_THROW); CPPUNIT_ASSERT(uno::Any() != xPara->getPropertyValue(u"PageDescName"_ustr)); - CPPUNIT_ASSERT_EQUAL(OUString(), parseDump("/root/page[5]/footer/txt"_ostr)); + CPPUNIT_ASSERT_EQUAL(OUString(), getXPathContent(pXmlDoc, "/root/page[5]/footer/txt"_ostr)); } CPPUNIT_TEST_FIXTURE(Test, testTdf136929_framesOfParagraph) @@ -510,7 +511,8 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf136929_framesOfParagraph) loadAndReload("tdf136929_framesOfParagraph.odt"); // Before this fix, the image was placed in the footer instead of in the text body - messing everything up. CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 5, getPages() ); - CPPUNIT_ASSERT_EQUAL_MESSAGE("Header2 text", u"* | *"_ustr, parseDump("/root/page[4]/footer/txt"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Header2 text", u"* | *"_ustr, getXPathContent(pXmlDoc, "/root/page[4]/footer/txt"_ostr)); } DECLARE_OOXMLEXPORT_TEST(testTdf136589_paraHadField, "tdf136589_paraHadField.docx") diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx index 9dcb9de35cbd..24835e207802 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx @@ -593,37 +593,38 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf142404_tabOverSpacingC15) // The original 3-page ODT saved as DOCX would fit on one page in MS Word 2010, but 3 in Word 2013. CPPUNIT_ASSERT_EQUAL_MESSAGE("too big for two pages", 3, getPages()); // The tab goes over the paragraph margin - CPPUNIT_ASSERT_EQUAL(u"A left tab positioned at"_ustr, parseDump("//page[1]/body/txt[2]/SwParaPortion/SwLineLayout[1]/SwLinePortion[1]"_ostr, "portion"_ostr)); - sal_Int32 nTextLen = parseDump("//page[1]/body/txt[2]/SwParaPortion/SwLineLayout[1]/SwLinePortion[1]"_ostr, "width"_ostr).toInt32(); - CPPUNIT_ASSERT_EQUAL(u"*"_ustr, parseDump("//page[1]/body/txt[2]/SwParaPortion/SwLineLayout[1]/SwFixPortion[1]"_ostr, "portion"_ostr)); - sal_Int32 nTabLen = parseDump("//page[1]/body/txt[2]/SwParaPortion/SwLineLayout[1]/SwFixPortion[1]"_ostr, "width"_ostr).toInt32(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"A left tab positioned at"_ustr, getXPath(pXmlDoc, "//page[1]/body/txt[2]/SwParaPortion/SwLineLayout[1]/SwLinePortion[1]"_ostr, "portion"_ostr)); + sal_Int32 nTextLen = getXPath(pXmlDoc, "//page[1]/body/txt[2]/SwParaPortion/SwLineLayout[1]/SwLinePortion[1]"_ostr, "width"_ostr).toInt32(); + CPPUNIT_ASSERT_EQUAL(u"*"_ustr, getXPath(pXmlDoc, "//page[1]/body/txt[2]/SwParaPortion/SwLineLayout[1]/SwFixPortion[1]"_ostr, "portion"_ostr)); + sal_Int32 nTabLen = getXPath(pXmlDoc, "//page[1]/body/txt[2]/SwParaPortion/SwLineLayout[1]/SwFixPortion[1]"_ostr, "width"_ostr).toInt32(); CPPUNIT_ASSERT_MESSAGE("Large left tab", nTextLen < nTabLen); // Not 1 line high (Word 2010 DOCX), or 3 lines high (LO DOCX) or 5 lines high (ODT), but 4 lines high - sal_Int32 nHeight = parseDump("//page[1]/body/txt[2]/infos/bounds"_ostr, "height"_ostr).toInt32(); + sal_Int32 nHeight = getXPath(pXmlDoc, "//page[1]/body/txt[2]/infos/bounds"_ostr, "height"_ostr).toInt32(); CPPUNIT_ASSERT_MESSAGE("4 lines high", 1100 < nHeight); CPPUNIT_ASSERT_MESSAGE("4 lines high", nHeight < 1300); - CPPUNIT_ASSERT_EQUAL(u"TabOverflow does what?"_ustr, parseDump("//page[1]/body/txt[7]/SwParaPortion/SwLineLayout[1]/SwLinePortion[1]"_ostr, "portion"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"TabOverflow does what?"_ustr, getXPath(pXmlDoc, "//page[1]/body/txt[7]/SwParaPortion/SwLineLayout[1]/SwLinePortion[1]"_ostr, "portion"_ostr)); // Not 1 line high (Word 2010 DOCX), or 4 lines high (prev LO DOCX) or 8 lines high (ODT). // but two lines high. (3 in Word 2016 because it pulls down "what?" to the second line - weird) - nHeight = parseDump("//page[1]/body/txt[7]/infos/bounds"_ostr, "height"_ostr).toInt32(); + nHeight = getXPath(pXmlDoc, "//page[1]/body/txt[7]/infos/bounds"_ostr, "height"_ostr).toInt32(); CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("2 lines high (but 3 in Word)", 242*2.5, nHeight, 242); - CPPUNIT_ASSERT_EQUAL(u"A centered tab positioned at"_ustr, parseDump("//page[1]/body/txt[3]/SwParaPortion/SwLineLayout[1]/SwLinePortion[1]"_ostr, "portion"_ostr)); - sal_Int32 nLineWidth = parseDump("//page[1]/body/txt[3]/SwParaPortion/SwLineLayout[1]/SwFixPortion[1]"_ostr, "width"_ostr).toInt32(); + CPPUNIT_ASSERT_EQUAL(u"A centered tab positioned at"_ustr, getXPath(pXmlDoc, "//page[1]/body/txt[3]/SwParaPortion/SwLineLayout[1]/SwLinePortion[1]"_ostr, "portion"_ostr)); + sal_Int32 nLineWidth = getXPath(pXmlDoc, "//page[1]/body/txt[3]/SwParaPortion/SwLineLayout[1]/SwFixPortion[1]"_ostr, "width"_ostr).toInt32(); CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Big tab: full paragraph area used", 737, nLineWidth, 100); // Pages 2/3 are TabOverMargin - in this particular case tabs should not go over margin. - CPPUNIT_ASSERT_EQUAL(u"A right tab positioned at"_ustr, parseDump("//page[2]/body/txt[6]/SwParaPortion/SwLineLayout[1]/SwLinePortion[1]"_ostr, "portion"_ostr)); - sal_Int32 nParaWidth = parseDump("//page[2]/body/txt[6]/infos/prtBounds"_ostr, "width"_ostr).toInt32(); + CPPUNIT_ASSERT_EQUAL(u"A right tab positioned at"_ustr, getXPath(pXmlDoc, "//page[2]/body/txt[6]/SwParaPortion/SwLineLayout[1]/SwLinePortion[1]"_ostr, "portion"_ostr)); + sal_Int32 nParaWidth = getXPath(pXmlDoc, "//page[2]/body/txt[6]/infos/prtBounds"_ostr, "width"_ostr).toInt32(); // the clearest non-first-line visual example is this second tab in the right-tab paragraph. - nLineWidth = parseDump("//page[2]/body/txt[6]/SwParaPortion/SwLineLayout[4]"_ostr, "width"_ostr).toInt32(); + nLineWidth = getXPath(pXmlDoc, "//page[2]/body/txt[6]/SwParaPortion/SwLineLayout[4]"_ostr, "width"_ostr).toInt32(); CPPUNIT_ASSERT_EQUAL_MESSAGE("Full paragraph area used", nLineWidth, nParaWidth); - CPPUNIT_ASSERT_EQUAL(u"TabOverflow does what?"_ustr, parseDump("//page[3]/body/txt[2]/SwParaPortion/SwLineLayout[1]/SwLinePortion[1]"_ostr, "portion"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"TabOverflow does what?"_ustr, getXPath(pXmlDoc, "//page[3]/body/txt[2]/SwParaPortion/SwLineLayout[1]/SwLinePortion[1]"_ostr, "portion"_ostr)); // Not 1 line high (Word 2010 DOCX and ODT), or 4 lines high (prev LO DOCX), // but 8 lines high. - nHeight = parseDump("//page[3]/body/txt[2]/infos/bounds"_ostr, "height"_ostr).toInt32(); + nHeight = getXPath(pXmlDoc, "//page[3]/body/txt[2]/infos/bounds"_ostr, "height"_ostr).toInt32(); CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("8 lines high", 242*8, nHeight, 121); } diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport18.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport18.cxx index cfc7d5fa1a16..d8854f8f1a78 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport18.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport18.cxx @@ -106,11 +106,12 @@ DECLARE_OOXMLEXPORT_TEST(testTdf148956_directEndFormatting, "tdf148956_directEnd DECLARE_OOXMLEXPORT_TEST(testTdf147646, "tdf147646_mergedCellNumbering.docx") { - parseLayoutDump(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); //Without the fix in place, it would have failed with //- Expected: 2. //- Actual : 4. - CPPUNIT_ASSERT_EQUAL(u"2."_ustr,parseDump("/root/page/body/tab/row[4]/cell/txt/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']"_ostr,"expand"_ostr)); + // + CPPUNIT_ASSERT_EQUAL(u"2."_ustr,getXPath(pXmlDoc, "/root/page/body/tab/row[4]/cell/txt/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']"_ostr,"expand"_ostr)); } DECLARE_OOXMLEXPORT_TEST(testTdf153526_commentInNumbering, "tdf153526_commentInNumbering.docx") @@ -789,8 +790,9 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf153128) { loadAndReload("tdf153128.docx"); calcLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); sal_Int32 nFirstLineHeight - = parseDump("/root/page/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion"_ostr, "height"_ostr) + = getXPath(pXmlDoc, "/root/page/body/txt[1]/SwParaPortion/SwLineLayout/SwParaPortion"_ostr, "height"_ostr) .toInt32(); CPPUNIT_ASSERT_GREATER(sal_Int32(0), nFirstLineHeight); @@ -864,8 +866,8 @@ DECLARE_OOXMLEXPORT_TEST(testTdf155736, "tdf155736_PageNumbers_footer.docx") //Without the fix in place, it would have failed with //- Expected: Page * of * //- Actual : Page of - CPPUNIT_ASSERT_EQUAL(u"Page * of *"_ustr, parseDump("/root/page[1]/footer/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Page * of *"_ustr, parseDump("/root/page[2]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Page * of *"_ustr, getXPathContent(pXmlDoc, "/root/page[1]/footer/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Page * of *"_ustr, getXPathContent(pXmlDoc, "/root/page[2]/footer/txt/text()"_ostr)); } // The following zOrder tests are checking the shapes "stacking height". diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx index dc2a291234c3..a7686d3cc000 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx @@ -153,16 +153,20 @@ DECLARE_OOXMLEXPORT_TEST(testHidemarkb, "tdf99616_hidemarkb.docx") DECLARE_OOXMLEXPORT_TEST(testBnc891663, "bnc891663.docx") { // The image should be inside a cell, so the text in the following cell should be below it. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); int imageTop - = parseDump("/root/page/body/tab/row[1]/cell[2]/txt[1]/anchored/fly/infos/bounds"_ostr, - "top"_ostr) + = getXPath(pXmlDoc, + "/root/page/body/tab/row[1]/cell[2]/txt[1]/anchored/fly/infos/bounds"_ostr, + "top"_ostr) .toInt32(); int imageHeight - = parseDump("/root/page/body/tab/row[1]/cell[2]/txt[1]/anchored/fly/infos/bounds"_ostr, - "height"_ostr) + = getXPath(pXmlDoc, + "/root/page/body/tab/row[1]/cell[2]/txt[1]/anchored/fly/infos/bounds"_ostr, + "height"_ostr) .toInt32(); int textNextRowTop - = parseDump("/root/page/body/tab/row[2]/cell[1]/txt[1]/infos/bounds"_ostr, "top"_ostr) + = getXPath(pXmlDoc, "/root/page/body/tab/row[2]/cell[1]/txt[1]/infos/bounds"_ostr, + "top"_ostr) .toInt32(); CPPUNIT_ASSERT(textNextRowTop >= imageTop + imageHeight); } @@ -1116,8 +1120,10 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf150408_isLvl_RoundTrip) DECLARE_OOXMLEXPORT_TEST(testTdf156372, "tdf156372.doc") { + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); sal_Int32 nHeight - = parseDump("//page[1]/header/tab/row[1]/infos/bounds"_ostr, "height"_ostr).toInt32(); + = getXPath(pXmlDoc, "//page[1]/header/tab/row[1]/infos/bounds"_ostr, "height"_ostr) + .toInt32(); // Without a fix in place, this would fail with // - Expected: 847 // - Actual : 1327 diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx index 14170bf3f23f..9fd73751bfaf 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx @@ -952,7 +952,8 @@ CPPUNIT_TEST_FIXTURE(Test, testDontSplitTable) loadAndReload("tdf101589_dontSplitTable.odt"); CPPUNIT_ASSERT_EQUAL(2, getPages()); //single row tables need to prevent split by setting row to no split - CPPUNIT_ASSERT_EQUAL( u"Row 1"_ustr, parseDump("/root/page[2]/body/tab[1]/row[1]/cell[1]/txt[1]"_ostr) ); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL( u"Row 1"_ustr, getXPathContent(pXmlDoc, "/root/page[2]/body/tab[1]/row[1]/cell[1]/txt[1]"_ostr) ); uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx index f962fdb7bf84..a00905cdc8e9 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx @@ -215,7 +215,8 @@ DECLARE_OOXMLEXPORT_TEST(testRelSizeRound, "rel-size-round.docx") DECLARE_OOXMLEXPORT_TEST(testTestTitlePage, "testTitlePage.docx") { // this has 2 pages in Word - CPPUNIT_ASSERT_EQUAL(u"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"_ustr, parseDump("/root/page[2]/footer/txt/text()"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"_ustr, getXPathContent(pXmlDoc, "/root/page[2]/footer/txt/text()"_ostr)); } DECLARE_OOXMLEXPORT_TEST(testTableRowDataDisplayedTwice, "table-row-data-displayed-twice.docx") @@ -1179,17 +1180,18 @@ DECLARE_OOXMLEXPORT_TEST(testTdf90697_continuousBreaksComplex2,"tdf92724_continu DECLARE_OOXMLEXPORT_TEST(testTdf95367_inheritFollowStyle, "tdf95367_inheritFollowStyle.docx") { - CPPUNIT_ASSERT_EQUAL(u"header"_ustr, parseDump("/root/page[2]/header/txt/text()"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"header"_ustr, getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); } DECLARE_OOXMLEXPORT_TEST(testInheritFirstHeader,"inheritFirstHeader.docx") { -// First page headers always link to last used first header, never to a follow header - CPPUNIT_ASSERT_EQUAL(u"First Header"_ustr, parseDump("/root/page[1]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Follow Header"_ustr, parseDump("/root/page[2]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Follow Header"_ustr, parseDump("/root/page[3]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"First Header"_ustr, parseDump("/root/page[4]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Last Header"_ustr, parseDump("/root/page[5]/header/txt/text()"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"First Header"_ustr, getXPathContent(pXmlDoc, "/root/page[1]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Follow Header"_ustr, getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Follow Header"_ustr, getXPathContent(pXmlDoc, "/root/page[3]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"First Header"_ustr, getXPathContent(pXmlDoc, "/root/page[4]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Last Header"_ustr, getXPathContent(pXmlDoc, "/root/page[5]/header/txt/text()"_ostr)); } #if HAVE_MORE_FONTS diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx index 592853bc6910..68bb65cdca67 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx @@ -1082,57 +1082,58 @@ DECLARE_OOXMLEXPORT_TEST(testTDF87348, "tdf87348_linkedTextboxes.docx") { int followCount=0; int precedeCount=0; - if( !parseDump("/root/page/body/txt/anchored/fly[1]/txt"_ostr,"follow"_ostr).isEmpty() ) + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[1]/txt"_ostr,"follow"_ostr) ) followCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[1]/txt"_ostr,"precede"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[1]/txt"_ostr,"precede"_ostr) ) precedeCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[2]/txt"_ostr,"follow"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[2]/txt"_ostr,"follow"_ostr) ) followCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[2]/txt"_ostr,"precede"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[2]/txt"_ostr,"precede"_ostr) ) precedeCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[3]/txt"_ostr,"follow"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[3]/txt"_ostr,"follow"_ostr) ) followCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[3]/txt"_ostr,"precede"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[3]/txt"_ostr,"precede"_ostr) ) precedeCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[4]/txt"_ostr,"follow"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[4]/txt"_ostr,"follow"_ostr) ) followCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[4]/txt"_ostr,"precede"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[4]/txt"_ostr,"precede"_ostr) ) precedeCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[5]/txt"_ostr,"follow"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[5]/txt"_ostr,"follow"_ostr) ) followCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[5]/txt"_ostr,"precede"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[5]/txt"_ostr,"precede"_ostr) ) precedeCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[6]/txt"_ostr,"follow"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[6]/txt"_ostr,"follow"_ostr) ) followCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[6]/txt"_ostr,"precede"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[6]/txt"_ostr,"precede"_ostr) ) precedeCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[7]/txt"_ostr,"follow"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[7]/txt"_ostr,"follow"_ostr) ) followCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[7]/txt"_ostr,"precede"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[7]/txt"_ostr,"precede"_ostr) ) precedeCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[8]/txt"_ostr,"follow"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[8]/txt"_ostr,"follow"_ostr) ) followCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[8]/txt"_ostr,"precede"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[8]/txt"_ostr,"precede"_ostr) ) precedeCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[9]/txt"_ostr,"follow"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[9]/txt"_ostr,"follow"_ostr) ) followCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[9]/txt"_ostr,"precede"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[9]/txt"_ostr,"precede"_ostr) ) precedeCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[10]/txt"_ostr,"follow"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[10]/txt"_ostr,"follow"_ostr) ) followCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[10]/txt"_ostr,"precede"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[10]/txt"_ostr,"precede"_ostr) ) precedeCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[11]/txt"_ostr,"follow"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[11]/txt"_ostr,"follow"_ostr) ) followCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[11]/txt"_ostr,"precede"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[11]/txt"_ostr,"precede"_ostr) ) precedeCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[12]/txt"_ostr,"follow"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[12]/txt"_ostr,"follow"_ostr) ) followCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[12]/txt"_ostr,"precede"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[12]/txt"_ostr,"precede"_ostr) ) precedeCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[13]/txt"_ostr,"follow"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[13]/txt"_ostr,"follow"_ostr) ) followCount++; - if( !parseDump("/root/page/body/txt/anchored/fly[13]/txt"_ostr,"precede"_ostr).isEmpty() ) + if( hasXPathAttribute(pXmlDoc, "/root/page/body/txt/anchored/fly[13]/txt"_ostr,"precede"_ostr) ) precedeCount++; //there should be 4 chains/13 linked textboxes (set of 5, set of 3, set of 3, set of 2) //that means 9 NEXT links and 9 PREV links. diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx index 8e25f62f46ea..1616352d19cf 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx @@ -187,8 +187,9 @@ DECLARE_OOXMLEXPORT_TEST(testN750255, "n750255.docx") Column break without columns on the page is a page break, so check those paragraphs are on page 2 and page 3 */ - CPPUNIT_ASSERT_EQUAL( u"one"_ustr, parseDump("/root/page[2]/body/txt/text()"_ostr) ); - CPPUNIT_ASSERT_EQUAL( u"two"_ustr, parseDump("/root/page[3]/body/txt/text()"_ostr) ); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL( u"one"_ustr, getXPathContent(pXmlDoc, "/root/page[2]/body/txt/text()"_ostr) ); + CPPUNIT_ASSERT_EQUAL( u"two"_ustr, getXPathContent(pXmlDoc, "/root/page[3]/body/txt/text()"_ostr) ); } DECLARE_OOXMLEXPORT_TEST(testN652364, "n652364.docx") @@ -527,7 +528,8 @@ DECLARE_OOXMLEXPORT_TEST(testN780853, "n780853.docx") DECLARE_OOXMLEXPORT_TEST(testN780843, "n780843.docx") { - CPPUNIT_ASSERT_EQUAL(u"shown footer"_ustr, parseDump("/root/page[2]/footer/txt/text()"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"shown footer"_ustr, getXPathContent(pXmlDoc, "/root/page[2]/footer/txt/text()"_ostr)); //tdf64372 this document should only have one page break (2 pages, not 3) CPPUNIT_ASSERT_EQUAL(2, getPages()); @@ -683,9 +685,10 @@ DECLARE_OOXMLEXPORT_TEST(testN793262, "n793262.docx") DECLARE_OOXMLEXPORT_TEST(testN793998, "n793998.docx") { - sal_Int32 nTextPortion = parseDump("/root/page/body/txt/SwParaPortion/SwLineLayout/child::*[1]"_ostr, "width"_ostr).toInt32(); // Width of the first (text) portion - sal_Int32 nTabPortion = parseDump("/root/page/body/txt/SwParaPortion/SwLineLayout/child::*[2]"_ostr, "width"_ostr).toInt32(); // Width of the second (tab) portion - sal_Int32 nParagraph = parseDump("/root/page/body/txt/infos/bounds"_ostr, "width"_ostr).toInt32(); // Width of the paragraph + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nTextPortion = getXPath(pXmlDoc, "/root/page/body/txt/SwParaPortion/SwLineLayout/child::*[1]"_ostr, "width"_ostr).toInt32(); // Width of the first (text) portion + sal_Int32 nTabPortion = getXPath(pXmlDoc, "/root/page/body/txt/SwParaPortion/SwLineLayout/child::*[2]"_ostr, "width"_ostr).toInt32(); // Width of the second (tab) portion + sal_Int32 nParagraph = getXPath(pXmlDoc, "/root/page/body/txt/infos/bounds"_ostr, "width"_ostr).toInt32(); // Width of the paragraph sal_Int32 const nRightMargin = 3000; // The problem was that the tab portion didn't ignore the right margin, so text + tab width wasn't larger than body (paragraph - right margin) width. CPPUNIT_ASSERT(nTextPortion + nTabPortion > nParagraph - nRightMargin); diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx index e1b7712bfee9..02b0f9466600 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx @@ -707,7 +707,8 @@ DECLARE_OOXMLEXPORT_TEST(testTdf84678, "tdf84678.docx") { // This was 0, left margin inside a shape+text wasn't imported from DOCX. // 360000 EMU, but layout uses twips. - CPPUNIT_ASSERT_EQUAL(static_cast(567), parseDump("/root/page/body/txt/anchored/fly/infos/prtBounds"_ostr, "left"_ostr).toInt32()); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(static_cast(567), getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/infos/prtBounds"_ostr, "left"_ostr).toInt32()); } diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index 95b97b5b21b5..c098bf36e50d 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -369,14 +369,15 @@ CPPUNIT_TEST_FIXTURE(Test, testN766477) CPPUNIT_TEST_FIXTURE(Test, testTdf130804) { createSwDoc("tdf130804.docx"); - OUString flyHeight = parseDump("/root/page/body/txt[1]/infos/bounds"_ostr, "height"_ostr); - OUString txtHeight = parseDump("/root/page/body/txt[1]/anchored/fly/infos/bounds"_ostr, "height"_ostr); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString flyHeight = getXPath(pXmlDoc, "/root/page/body/txt[1]/infos/bounds"_ostr, "height"_ostr); + OUString txtHeight = getXPath(pXmlDoc, "/root/page/body/txt[1]/anchored/fly/infos/bounds"_ostr, "height"_ostr); //Without the fix in place, txtHeight would have been flyHeight + 55 CPPUNIT_ASSERT_EQUAL(flyHeight, txtHeight); // Also check the bookmark portion is ignored in the next paragraph - OUString aTop = parseDump("/root/page/body/txt[2]/infos/prtBounds"_ostr, "top"_ostr); + OUString aTop = getXPath(pXmlDoc, "/root/page/body/txt[2]/infos/prtBounds"_ostr, "top"_ostr); CPPUNIT_ASSERT_EQUAL(u"240"_ustr, aTop); } @@ -798,7 +799,8 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf105127) CPPUNIT_TEST_FIXTURE(Test, testTdf105143) { createSwDoc("tdf105143.docx"); - OUString aTop = parseDump("/root/page/body/txt/anchored/SwAnchoredDrawObject/bounds"_ostr, "top"_ostr); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString aTop = getXPath(pXmlDoc, "/root/page/body/txt/anchored/SwAnchoredDrawObject/bounds"_ostr, "top"_ostr); // This was 6272, i.e. the shape was moved up (incorrect position) to be // inside the page rectangle. CPPUNIT_ASSERT_EQUAL(u"6731"_ustr, aTop); @@ -1032,7 +1034,8 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf75573) lcl_countTextFrames( mxComponent, 1 ); // the frame should be on page 1 - CPPUNIT_ASSERT_EQUAL( u"lorem ipsum"_ustr, parseDump("/root/page[1]/body/section/txt/anchored/fly/txt[1]/text()"_ostr) ); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL( u"lorem ipsum"_ustr, getXPathContent(pXmlDoc, "/root/page[1]/body/section/txt/anchored/fly/txt[1]/text()"_ostr) ); // the "Proprietary" style should set the vertical and horizontal anchors to the page uno::Reference xPropertySet(getShape(1), uno::UNO_QUERY); @@ -1235,7 +1238,8 @@ CPPUNIT_TEST_FIXTURE(Test, testUnbalancedColumnsCompat) CPPUNIT_TEST_FIXTURE(Test, testFloatingTableSectionColumns) { createSwDoc("floating-table-section-columns.docx"); - OUString tableWidth = parseDump("/root/page[1]/body/section/column[2]/body/txt/anchored/fly/tab/infos/bounds"_ostr, "width"_ostr); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString tableWidth = getXPath(pXmlDoc, "/root/page[1]/body/section/column[2]/body/txt/anchored/fly/tab/infos/bounds"_ostr, "width"_ostr); // table width was restricted by a column CPPUNIT_ASSERT( tableWidth.toInt32() > 10000 ); } @@ -1513,8 +1517,9 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf122717) CPPUNIT_TEST_FIXTURE(Test, testTdf98882) { createSwDoc("tdf98882.docx"); - sal_Int32 nFlyHeight = parseDump("//anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32(); - sal_Int32 nContentHeight = parseDump("//notxt/infos/bounds"_ostr, "height"_ostr).toInt32(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nFlyHeight = getXPath(pXmlDoc, "//anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32(); + sal_Int32 nContentHeight = getXPath(pXmlDoc, "//notxt/infos/bounds"_ostr, "height"_ostr).toInt32(); // The content height was 600, not 360, so the frame and the content height did not match. CPPUNIT_ASSERT_EQUAL(nFlyHeight, nContentHeight); } diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx index f35c33931dd3..d5308a99014d 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx @@ -303,7 +303,8 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf114212) // Without the accompanying fix in place, this test would have failed with: // - Expected: 1428 // - Actual : 387 - OUString aTop = parseDump("//anchored/fly[1]/infos/bounds"_ostr, "top"_ostr); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString aTop = getXPath(pXmlDoc, "//anchored/fly[1]/infos/bounds"_ostr, "top"_ostr); CPPUNIT_ASSERT_EQUAL(u"1428"_ustr, aTop); } @@ -452,9 +453,11 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf124600) // Make sure that "Shape 1 text" (anchored in the header) has the same left margin as the body // text. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); OUString aShapeTextLeft - = parseDump("/root/page/header/txt/anchored/fly/infos/bounds"_ostr, "left"_ostr); - OUString aBodyTextLeft = parseDump("/root/page/body/txt/infos/bounds"_ostr, "left"_ostr); + = getXPath(pXmlDoc, "/root/page/header/txt/anchored/fly/infos/bounds"_ostr, "left"_ostr); + OUString aBodyTextLeft + = getXPath(pXmlDoc, "/root/page/body/txt/infos/bounds"_ostr, "left"_ostr); // Without the accompanying fix in place, this test would have failed with: // - Expected: 1701 // - Actual : 1815 @@ -468,9 +471,11 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf120548) createSwDoc("tdf120548.docx"); // Without the accompanying fix in place, this test would have failed with 'Expected: 00ff0000; // Actual: ffffffff', i.e. the numbering portion was black, not red. - CPPUNIT_ASSERT_EQUAL( - u"00ff0000"_ustr, - parseDump("//SwFieldPortion[@type='PortionType::Number']/SwFont"_ostr, "color"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"00ff0000"_ustr, + getXPath(pXmlDoc, + "//SwFieldPortion[@type='PortionType::Number']/SwFont"_ostr, + "color"_ostr)); } CPPUNIT_TEST_FIXTURE(Test, test120551) @@ -634,7 +639,7 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf112443) getShape(1)->getSize().Width, getShape(1)->getSize().Height); CPPUNIT_ASSERT_MESSAGE("The textframe must be off-page!", !aPageRect.Contains(aShapeRect)); - //OUString aTop = parseDump("//anchored/fly[1]/infos/bounds", "top"); + //OUString aTop = getXPath(pXmlDoc, "//anchored/fly[1]/infos/bounds", "top"); //CPPUNIT_ASSERT_EQUAL(sal_Int32(30624), aTop.toInt32() ); } @@ -688,8 +693,9 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf104167) CPPUNIT_TEST_FIXTURE(Test, testTdf113946) { createSwDoc("tdf113946.docx"); - OUString aTop - = parseDump("/root/page/body/txt/anchored/SwAnchoredDrawObject/bounds"_ostr, "top"_ostr); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString aTop = getXPath( + pXmlDoc, "/root/page/body/txt/anchored/SwAnchoredDrawObject/bounds"_ostr, "top"_ostr); // tdf#106792 Checked loading of tdf113946.docx. Before the change, the expected // value of this test was "1696". Opening the file shows a single short line anchored // at the doc start. Only diff is that in 'old' version it is slightly rotated, in 'new' diff --git a/sw/qa/extras/rtfexport/rtfexport2.cxx b/sw/qa/extras/rtfexport/rtfexport2.cxx index 49bedd63213a..61f40147f9b8 100644 --- a/sw/qa/extras/rtfexport/rtfexport2.cxx +++ b/sw/qa/extras/rtfexport/rtfexport2.cxx @@ -360,8 +360,11 @@ CPPUNIT_TEST_FIXTURE(Test, testFdo44176) // given a document with an empty first header, and a non-empty follow header, // ensure that the body text space is equal on the first and follow page // (since in this case the default margins are large enough to fully include the header) - const OUString sBodyHeight = parseDump("//page[1]/body/infos"_ostr, "height"_ostr); - CPPUNIT_ASSERT_EQUAL(sBodyHeight, parseDump("//page[2]/body/infos"_ostr, "height"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + const OUString sBodyHeight + = getXPath(pXmlDoc, "//page[1]/body/infos/bounds"_ostr, "height"_ostr); + CPPUNIT_ASSERT_EQUAL(sBodyHeight, + getXPath(pXmlDoc, "//page[2]/body/infos/bounds"_ostr, "height"_ostr)); }; createSwDoc("fdo44176.rtf"); verify(); diff --git a/sw/qa/extras/rtfexport/rtfexport3.cxx b/sw/qa/extras/rtfexport/rtfexport3.cxx index fd9d04a9dc29..ed025a1bf04f 100644 --- a/sw/qa/extras/rtfexport/rtfexport3.cxx +++ b/sw/qa/extras/rtfexport/rtfexport3.cxx @@ -270,16 +270,18 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf115180) // On export to RTF, column separator positions were written without taking base width // into account and then arrived huge, ~64000, which resulted in wrong table and cell widths + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); sal_Int32 rowWidth - = parseDump("/root/page/body/tab/row/infos/bounds"_ostr, "width"_ostr).toInt32(); + = getXPath(pXmlDoc, "/root/page/body/tab/row/infos/bounds"_ostr, "width"_ostr) + .toInt32(); CPPUNIT_ASSERT_EQUAL_MESSAGE("Row width", sal_Int32(9360), rowWidth); sal_Int32 cell1Width - = parseDump("/root/page/body/tab/row/cell[1]/infos/bounds"_ostr, "width"_ostr) + = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[1]/infos/bounds"_ostr, "width"_ostr) .toInt32(); CPPUNIT_ASSERT_MESSAGE("First cell width", cell1Width >= 9140); CPPUNIT_ASSERT_MESSAGE("First cell width", cell1Width <= 9142); sal_Int32 cell2Width - = parseDump("/root/page/body/tab/row/cell[2]/infos/bounds"_ostr, "width"_ostr) + = getXPath(pXmlDoc, "/root/page/body/tab/row/cell[2]/infos/bounds"_ostr, "width"_ostr) .toInt32(); CPPUNIT_ASSERT_MESSAGE("Second cell width", cell2Width >= 218); CPPUNIT_ASSERT_MESSAGE("Second cell width", cell2Width <= 220); diff --git a/sw/qa/extras/rtfexport/rtfexport4.cxx b/sw/qa/extras/rtfexport/rtfexport4.cxx index 61c3b0963f18..eb32ddee6bb7 100644 --- a/sw/qa/extras/rtfexport/rtfexport4.cxx +++ b/sw/qa/extras/rtfexport/rtfexport4.cxx @@ -1006,41 +1006,51 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf103956) // suitable width. Currently there is no good support for autofit for RTF docs, so ensure // that table cells are somehow visible. Width for it is not clear, so here we will check // table & cell widths are more than default minimal value of 41. + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_MESSAGE( "Table #1 is too narrow!", - 82 < parseDump("/root/page/body/tab[1]/row/infos/bounds"_ostr, "width"_ostr).toInt32()); - CPPUNIT_ASSERT_MESSAGE( - "Table #1 cell#1 is too narrow!", - 41 < parseDump("/root/page/body/tab[1]/row/cell[1]/infos/bounds"_ostr, "width"_ostr) - .toInt32()); - CPPUNIT_ASSERT_MESSAGE( - "Table #1 cell#2 is too narrow!", - 41 < parseDump("/root/page/body/tab[1]/row/cell[2]/infos/bounds"_ostr, "width"_ostr) + 82 < getXPath(pXmlDoc, "/root/page/body/tab[1]/row/infos/bounds"_ostr, "width"_ostr) .toInt32()); + CPPUNIT_ASSERT_MESSAGE("Table #1 cell#1 is too narrow!", + 41 < getXPath(pXmlDoc, + "/root/page/body/tab[1]/row/cell[1]/infos/bounds"_ostr, + "width"_ostr) + .toInt32()); + CPPUNIT_ASSERT_MESSAGE("Table #1 cell#2 is too narrow!", + 41 < getXPath(pXmlDoc, + "/root/page/body/tab[1]/row/cell[2]/infos/bounds"_ostr, + "width"_ostr) + .toInt32()); CPPUNIT_ASSERT_MESSAGE( "Table #2 is too narrow!", - 82 < parseDump("/root/page/body/tab[2]/row/infos/bounds"_ostr, "width"_ostr).toInt32()); - CPPUNIT_ASSERT_MESSAGE( - "Table #2 cell#1 is too narrow!", - 41 < parseDump("/root/page/body/tab[2]/row/cell[1]/infos/bounds"_ostr, "width"_ostr) - .toInt32()); - CPPUNIT_ASSERT_MESSAGE( - "Table #2 cell#2 is too narrow!", - 41 < parseDump("/root/page/body/tab[2]/row/cell[2]/infos/bounds"_ostr, "width"_ostr) + 82 < getXPath(pXmlDoc, "/root/page/body/tab[2]/row/infos/bounds"_ostr, "width"_ostr) .toInt32()); + CPPUNIT_ASSERT_MESSAGE("Table #2 cell#1 is too narrow!", + 41 < getXPath(pXmlDoc, + "/root/page/body/tab[2]/row/cell[1]/infos/bounds"_ostr, + "width"_ostr) + .toInt32()); + CPPUNIT_ASSERT_MESSAGE("Table #2 cell#2 is too narrow!", + 41 < getXPath(pXmlDoc, + "/root/page/body/tab[2]/row/cell[2]/infos/bounds"_ostr, + "width"_ostr) + .toInt32()); CPPUNIT_ASSERT_MESSAGE( "Table #3 is too narrow!", - 82 < parseDump("/root/page/body/tab[3]/row/infos/bounds"_ostr, "width"_ostr).toInt32()); - CPPUNIT_ASSERT_MESSAGE( - "Table #3 cell#1 is too narrow!", - 41 < parseDump("/root/page/body/tab[3]/row/cell[1]/infos/bounds"_ostr, "width"_ostr) - .toInt32()); - CPPUNIT_ASSERT_MESSAGE( - "Table #3 cell#2 is too narrow!", - 41 < parseDump("/root/page/body/tab[3]/row/cell[2]/infos/bounds"_ostr, "width"_ostr) + 82 < getXPath(pXmlDoc, "/root/page/body/tab[3]/row/infos/bounds"_ostr, "width"_ostr) .toInt32()); + CPPUNIT_ASSERT_MESSAGE("Table #3 cell#1 is too narrow!", + 41 < getXPath(pXmlDoc, + "/root/page/body/tab[3]/row/cell[1]/infos/bounds"_ostr, + "width"_ostr) + .toInt32()); + CPPUNIT_ASSERT_MESSAGE("Table #3 cell#2 is too narrow!", + 41 < getXPath(pXmlDoc, + "/root/page/body/tab[3]/row/cell[2]/infos/bounds"_ostr, + "width"_ostr) + .toInt32()); }; createSwDoc("tdf103956.rtf"); verify(); diff --git a/sw/qa/extras/rtfexport/rtfexport6.cxx b/sw/qa/extras/rtfexport/rtfexport6.cxx index 177dde74f3ea..f12a1f2740b9 100644 --- a/sw/qa/extras/rtfexport/rtfexport6.cxx +++ b/sw/qa/extras/rtfexport/rtfexport6.cxx @@ -133,11 +133,17 @@ CPPUNIT_TEST_FIXTURE(Test, testFdo49893_2) { auto verify = [this]() { // Ensure that header text exists on each page (especially on second page) - CPPUNIT_ASSERT_EQUAL(u"HEADER"_ustr, parseDump("/root/page[1]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"HEADER"_ustr, parseDump("/root/page[2]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"HEADER"_ustr, parseDump("/root/page[3]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"HEADER"_ustr, parseDump("/root/page[4]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"HEADER"_ustr, parseDump("/root/page[5]/header/txt/text()"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"HEADER"_ustr, + getXPathContent(pXmlDoc, "/root/page[1]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"HEADER"_ustr, + getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"HEADER"_ustr, + getXPathContent(pXmlDoc, "/root/page[3]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"HEADER"_ustr, + getXPathContent(pXmlDoc, "/root/page[4]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"HEADER"_ustr, + getXPathContent(pXmlDoc, "/root/page[5]/header/txt/text()"_ostr)); CPPUNIT_ASSERT_EQUAL(5, getPages()); // Word has 5 }; createSwDoc("fdo49893-2.rtf"); @@ -1034,9 +1040,11 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf118047) getProperty(getParagraph(1), u"ParaBottomMargin"_ustr)); // Same for header, it should not derive props from "Normal" style - CPPUNIT_ASSERT_EQUAL(u"Header"_ustr, parseDump("/root/page[1]/header/txt/text()"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"Header"_ustr, + getXPathContent(pXmlDoc, "/root/page[1]/header/txt/text()"_ostr)); sal_Int32 nHeight - = parseDump("/root/page[1]/header/infos/bounds"_ostr, "height"_ostr).toInt32(); + = getXPath(pXmlDoc, "/root/page[1]/header/infos/bounds"_ostr, "height"_ostr).toInt32(); CPPUNIT_ASSERT_MESSAGE("Header is too large", 1000 > nHeight); }; createSwDoc("tdf118047.rtf"); diff --git a/sw/qa/extras/rtfexport/rtfexport8.cxx b/sw/qa/extras/rtfexport/rtfexport8.cxx index a4457ef13aa8..002b6086bbbc 100644 --- a/sw/qa/extras/rtfexport/rtfexport8.cxx +++ b/sw/qa/extras/rtfexport/rtfexport8.cxx @@ -164,7 +164,8 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf158586_lostFrame) // The anchor and align properties are sufficient to define a frame xmlDocUniquePtr pLayout = parseLayoutDump(); assertXPath(pLayout, "//anchored"_ostr, 1); - assertXPathContent(pLayout, "//page[1]/body//txt"_ostr, u"1st page"_ustr); + assertXPathContent(pLayout, "//page[1]/body//txt"_ostr, + u"First page textbox 1st page"_ustr); assertXPathContent(pLayout, "//page[2]/body//txt"_ostr, u"2nd page"_ustr); CPPUNIT_ASSERT_EQUAL(2, getPages()); @@ -423,11 +424,14 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf160976_headerFooter) // Sanity check - always good to test when dealing with page styles and breaks. CPPUNIT_ASSERT_EQUAL(3, getPages()); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL(u"First page first footer"_ustr, - parseDump("/root/page[1]/footer/txt"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"First Left"_ustr, parseDump("/root/page[2]/footer/txt"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/footer/txt"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"First Left"_ustr, + getXPathContent(pXmlDoc, "/root/page[2]/footer/txt"_ostr)); if (!bIsExported) - CPPUNIT_ASSERT_EQUAL(u"First Right"_ustr, parseDump("/root/page[3]/footer/txt"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"First Right"_ustr, + getXPathContent(pXmlDoc, "/root/page[3]/footer/txt"_ostr)); }; createSwDoc("tdf160976_headerFooter.odt"); verify(); @@ -443,10 +447,13 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf160976_headerFooter2) // Sanity check - always good to test when dealing with page styles and breaks. CPPUNIT_ASSERT_EQUAL(3, getPages()); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL(u"First page first footer"_ustr, - parseDump("/root/page[1]/footer/txt"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"First page footer"_ustr, parseDump("/root/page[2]/footer/txt"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Default footer"_ustr, parseDump("/root/page[3]/footer/txt"_ostr)); + getXPathContent(pXmlDoc, "/root/page[1]/footer/txt"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"First page footer"_ustr, + getXPathContent(pXmlDoc, "/root/page[2]/footer/txt"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Default footer"_ustr, + getXPathContent(pXmlDoc, "/root/page[3]/footer/txt"_ostr)); }; createSwDoc("tdf160976_headerFooter2.odt"); verify(); @@ -461,9 +468,13 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf160976_headerFooter3) // Sanity check - always good to test when dealing with page styles and breaks. CPPUNIT_ASSERT_EQUAL(3, getPages()); - CPPUNIT_ASSERT_EQUAL(u"First page footer"_ustr, parseDump("/root/page[1]/footer/txt"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Default footer"_ustr, parseDump("/root/page[2]/footer/txt"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Default footer"_ustr, parseDump("/root/page[3]/footer/txt"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"First page footer"_ustr, + getXPathContent(pXmlDoc, "/root/page[1]/footer/txt"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Default footer"_ustr, + getXPathContent(pXmlDoc, "/root/page[2]/footer/txt"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Default footer"_ustr, + getXPathContent(pXmlDoc, "/root/page[3]/footer/txt"_ostr)); }; createSwDoc("tdf160976_headerFooter3.odt"); verify(); diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx index 5ed7bb274564..2520f5f97a7e 100644 --- a/sw/qa/extras/rtfimport/rtfimport.cxx +++ b/sw/qa/extras/rtfimport/rtfimport.cxx @@ -409,9 +409,11 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf112211_2) createSwDoc("tdf112211-2.rtf"); // Spacing between the bullet and the actual text was too large. // This is now around 269, large old value was 629. - int nWidth = parseDump("/root/page/body/txt[2]/SwParaPortion/SwLineLayout/" - "child::*[@type='PortionType::TabLeft']"_ostr, - "width"_ostr) + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + int nWidth = getXPath(pXmlDoc, + "/root/page/body/txt[2]/SwParaPortion/SwLineLayout/" + "child::*[@type='PortionType::TabLeft']"_ostr, + "width"_ostr) .toInt32(); CPPUNIT_ASSERT_LESS(300, nWidth); } @@ -457,8 +459,10 @@ CPPUNIT_TEST_FIXTURE(Test, testFdo52052) { createSwDoc("fdo52052.rtf"); // Make sure the textframe containing the text "third" appears on the 3rd page. - CPPUNIT_ASSERT_EQUAL(u"third"_ustr, - parseDump("/root/page[3]/body/txt/anchored/fly/txt/text()"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL( + u"third"_ustr, + getXPathContent(pXmlDoc, "/root/page[3]/body/txt/anchored/fly/txt/text()"_ostr)); } CPPUNIT_TEST_FIXTURE(Test, testInk) diff --git a/sw/qa/extras/uiwriter/uiwriter4.cxx b/sw/qa/extras/uiwriter/uiwriter4.cxx index e1b724088957..3078f92df610 100644 --- a/sw/qa/extras/uiwriter/uiwriter4.cxx +++ b/sw/qa/extras/uiwriter/uiwriter4.cxx @@ -507,8 +507,9 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf96536) pWrtShell->InsertPageBreak(); pWrtShell->SttEndDoc(/*bStt=*/true); calcLayout(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); sal_Int32 nSingleParaPageHeight - = parseDump("/root/page[1]/infos/bounds"_ostr, "height"_ostr).toInt32(); + = getXPath(pXmlDoc, "/root/page[1]/infos/bounds"_ostr, "height"_ostr).toInt32(); // Insert a 2nd paragraph at the end of the first page, so the page height grows at least twice... uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); @@ -517,15 +518,18 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf96536) const uno::Reference xInsertPos = getRun(getParagraph(1), 1); xParagraphAppend->finishParagraphInsert(uno::Sequence(), xInsertPos); calcLayout(); - CPPUNIT_ASSERT(parseDump("/root/page[1]/infos/bounds"_ostr, "height"_ostr).toInt32() + pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT(getXPath(pXmlDoc, "/root/page[1]/infos/bounds"_ostr, "height"_ostr).toInt32() >= 2 * nSingleParaPageHeight); // ... and then delete the 2nd paragraph, which shrinks the page to the previous size. uno::Reference xParagraph(getParagraph(2), uno::UNO_QUERY); xParagraph->dispose(); calcLayout(); - CPPUNIT_ASSERT_EQUAL(nSingleParaPageHeight, - parseDump("/root/page[1]/infos/bounds"_ostr, "height"_ostr).toInt32()); + pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL( + nSingleParaPageHeight, + getXPath(pXmlDoc, "/root/page[1]/infos/bounds"_ostr, "height"_ostr).toInt32()); } CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf96479) @@ -920,8 +924,10 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf96961) calcLayout(); // Assert that the height of the last page is larger than the height of other pages. - sal_Int32 nOther = parseDump("/root/page[1]/infos/bounds"_ostr, "height"_ostr).toInt32(); - sal_Int32 nLast = parseDump("/root/page[2]/infos/bounds"_ostr, "height"_ostr).toInt32(); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 nOther + = getXPath(pXmlDoc, "/root/page[1]/infos/bounds"_ostr, "height"_ostr).toInt32(); + sal_Int32 nLast = getXPath(pXmlDoc, "/root/page[2]/infos/bounds"_ostr, "height"_ostr).toInt32(); CPPUNIT_ASSERT(nLast > nOther); } @@ -1932,7 +1938,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf107025) if (!nWidth1) return; - CPPUNIT_ASSERT(!parseDump("(//SwLinePortion)[2]"_ostr, "width"_ostr).isEmpty()); + CPPUNIT_ASSERT(!getXPath(pXmlDoc, "(//SwLinePortion)[2]"_ostr, "width"_ostr).isEmpty()); sal_Int32 nWidth2 = getXPath(pXmlDoc, "(//SwLinePortion)[2]"_ostr, "width"_ostr).toInt32(); sal_Int32 nRatio = nWidth2 / nWidth1; @@ -2285,9 +2291,11 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf58604) // Allow linebreak character follows hanging punctuation immediately instead of // breaking at the start of the next line. createSwDoc("tdf58604.odt"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL( OUString("PortionType::Break"), - parseDump("(/root/page/body/txt/SwParaPortion/SwLineLayout[1]/child::*)[last()]", "type")); + getXPath(pXmlDoc, "(/root/page/body/txt/SwParaPortion/SwLineLayout[1]/child::*)[last()]", + "type")); #endif } diff --git a/sw/qa/extras/uiwriter/uiwriter7.cxx b/sw/qa/extras/uiwriter/uiwriter7.cxx index c02342660758..587045a8ce64 100644 --- a/sw/qa/extras/uiwriter/uiwriter7.cxx +++ b/sw/qa/extras/uiwriter/uiwriter7.cxx @@ -2412,10 +2412,13 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf34957) // table with "keep with next" always started on a new page if the table was large, // regardless of whether it was already kept with the previous paragraph, // or whether the following paragraph actually fit on the same page (MAB 3.6 - 5.0) - CPPUNIT_ASSERT_EQUAL(u"Row 1"_ustr, - parseDump("/root/page[2]/body/tab[1]/row[2]/cell[1]/txt"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Row 1"_ustr, - parseDump("/root/page[4]/body/tab[1]/row[2]/cell[1]/txt"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL( + u"Row 1"_ustr, + getXPathContent(pXmlDoc, "/root/page[2]/body/tab[1]/row[2]/cell[1]/txt"_ostr)); + CPPUNIT_ASSERT_EQUAL( + u"Row 1"_ustr, + getXPathContent(pXmlDoc, "/root/page[4]/body/tab[1]/row[2]/cell[1]/txt"_ostr)); } CPPUNIT_TEST_FIXTURE(SwUiWriterTest7, testTdf89954) diff --git a/sw/qa/extras/ww8export/ww8export.cxx b/sw/qa/extras/ww8export/ww8export.cxx index 9d14149019d7..975b74a1271c 100644 --- a/sw/qa/extras/ww8export/ww8export.cxx +++ b/sw/qa/extras/ww8export/ww8export.cxx @@ -195,12 +195,13 @@ xray ThisComponent.DrawPage.getByIndex(0).BoundRect DECLARE_WW8EXPORT_TEST(testTdf75539_relativeWidth, "tdf75539_relativeWidth.doc") { //divide everything by 10 to give a margin of error for rounding etc. - sal_Int32 pageWidth = parseDump("/root/page[1]/body/infos/bounds"_ostr, "width"_ostr).toInt32()/10; + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + sal_Int32 pageWidth = getXPath(pXmlDoc, "/root/page[1]/body/infos/bounds"_ostr, "width"_ostr).toInt32()/10; CPPUNIT_ASSERT_EQUAL_MESSAGE("Page width", sal_Int32(9354/10), pageWidth); - CPPUNIT_ASSERT_EQUAL_MESSAGE("100% width line", pageWidth, parseDump("/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwLinePortion"_ostr, "width"_ostr).toInt32()/10); - CPPUNIT_ASSERT_EQUAL_MESSAGE("50% width line", pageWidth/2, parseDump("/root/page[1]/body/txt[4]/SwParaPortion/SwLineLayout/SwLinePortion"_ostr, "width"_ostr).toInt32()/10); - CPPUNIT_ASSERT_EQUAL_MESSAGE("25% width line", pageWidth/4, parseDump("/root/page[1]/body/txt[6]/SwParaPortion/SwLineLayout/SwLinePortion"_ostr, "width"_ostr).toInt32()/10); - CPPUNIT_ASSERT_EQUAL_MESSAGE("10% width line", pageWidth/10, parseDump("/root/page[1]/body/txt[8]/SwParaPortion/SwLineLayout/SwLinePortion"_ostr, "width"_ostr).toInt32()/10); + CPPUNIT_ASSERT_EQUAL_MESSAGE("100% width line", pageWidth, getXPath(pXmlDoc, "/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout/SwLinePortion"_ostr, "width"_ostr).toInt32()/10); + CPPUNIT_ASSERT_EQUAL_MESSAGE("50% width line", pageWidth/2, getXPath(pXmlDoc, "/root/page[1]/body/txt[4]/SwParaPortion/SwLineLayout/SwLinePortion"_ostr, "width"_ostr).toInt32()/10); + CPPUNIT_ASSERT_EQUAL_MESSAGE("25% width line", pageWidth/4, getXPath(pXmlDoc, "/root/page[1]/body/txt[6]/SwParaPortion/SwLineLayout/SwLinePortion"_ostr, "width"_ostr).toInt32()/10); + CPPUNIT_ASSERT_EQUAL_MESSAGE("10% width line", pageWidth/10, getXPath(pXmlDoc ,"/root/page[1]/body/txt[8]/SwParaPortion/SwLineLayout/SwLinePortion"_ostr, "width"_ostr).toInt32()/10); } DECLARE_WW8EXPORT_TEST(testN757905, "n757905.doc") @@ -210,7 +211,8 @@ DECLARE_WW8EXPORT_TEST(testN757905, "n757905.doc") // paragraph height. When in Word-compat mode, we should take the max of // the two, not just the height of the fly. - OUString aHeight = parseDump("/root/page/body/txt/infos/bounds"_ostr, "height"_ostr); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString aHeight = getXPath(pXmlDoc, "/root/page/body/txt/infos/bounds"_ostr, "height"_ostr); CPPUNIT_ASSERT(sal_Int32(31) < aHeight.toInt32()); } @@ -259,7 +261,8 @@ DECLARE_WW8EXPORT_TEST(testN823651, "n823651.doc") DECLARE_WW8EXPORT_TEST(testFdo36868, "fdo36868.doc") { - OUString aText = parseDump("/root/page/body/txt[3]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']"_ostr, "expand"_ostr); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString aText = getXPath(pXmlDoc, "/root/page/body/txt[3]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']"_ostr, "expand"_ostr); // This was 1.1. CPPUNIT_ASSERT_EQUAL(u"2.1"_ustr, aText); } @@ -267,7 +270,8 @@ DECLARE_WW8EXPORT_TEST(testFdo36868, "fdo36868.doc") DECLARE_WW8EXPORT_TEST(testListNolevel, "list-nolevel.doc") { // Similar to fdo#36868, numbering portions had wrong values. - OUString aText = parseDump("/root/page/body/txt[1]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']"_ostr, "expand"_ostr); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString aText = getXPath(pXmlDoc, "/root/page/body/txt[1]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']"_ostr, "expand"_ostr); // PortionType::Number was completely missing. CPPUNIT_ASSERT_EQUAL(u"1."_ustr, aText); } @@ -543,7 +547,8 @@ DECLARE_WW8EXPORT_TEST(testBnc787942, "bnc787942.doc") { // The frame ended up on the second page instead of first. // this is on page 1 in Word - parseDump("/root/page[1]/body/txt[4]/anchored"_ostr); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"Kralicek UsacekV lese 3Zviratkov 47025"_ustr, getXPathContent(pXmlDoc, "/root/page[1]/body/txt[4]/anchored"_ostr)); CPPUNIT_ASSERT_EQUAL(text::WrapTextMode_PARALLEL, getProperty(getShape(1), u"Surround"_ustr)); CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty(getShape(1), u"HoriOrientRelation"_ustr)); @@ -568,10 +573,11 @@ DECLARE_WW8EXPORT_TEST(testLayoutHanging, "fdo68967.doc") DECLARE_WW8EXPORT_TEST(testfdo68963, "fdo68963.doc") { // The problem was that the text was not displayed. - CPPUNIT_ASSERT ( !parseDump("/root/page/body/tab/row[2]/cell[1]/txt/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, "expand"_ostr).isEmpty() ); - CPPUNIT_ASSERT_EQUAL( u"Topic 1"_ustr, parseDump("/root/page/body/tab/row[2]/cell[1]/txt/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, "expand"_ostr) ); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT ( !getXPath(pXmlDoc, "/root/page/body/tab/row[2]/cell[1]/txt/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, "expand"_ostr).isEmpty() ); + CPPUNIT_ASSERT_EQUAL( u"Topic 1"_ustr, getXPath(pXmlDoc, "/root/page/body/tab/row[2]/cell[1]/txt/SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, "expand"_ostr) ); // all crossreference bookmarks should have a target. Shouldn't be any "Reference source not found" in the xml - CPPUNIT_ASSERT_EQUAL(static_cast(-1), parseDump("/root/page/body/txt[24]/SwParaPortion/SwLineLayout/SwFieldPortion[2]"_ostr,"expand"_ostr).indexOf("Reference source not found")); + CPPUNIT_ASSERT_EQUAL(static_cast(-1), getXPath(pXmlDoc, "/root/page/body/txt[24]/SwParaPortion/SwLineLayout/SwFieldPortion[2]"_ostr,"expand"_ostr).indexOf("Reference source not found")); } #endif @@ -683,8 +689,9 @@ DECLARE_WW8EXPORT_TEST(testTdf112535, "tdf112535.doc") DECLARE_WW8EXPORT_TEST(testTdf106291, "tdf106291.doc") { // Table cell was merged vertically instead of horizontally -> had incorrect dimensions - OUString cellWidth = parseDump("/root/page[1]/body/tab/row/cell[1]/infos/bounds"_ostr, "width"_ostr); - OUString cellHeight = parseDump("/root/page[1]/body/tab/row/cell[1]/infos/bounds"_ostr, "height"_ostr); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString cellWidth = getXPath(pXmlDoc, "/root/page[1]/body/tab/row/cell[1]/infos/bounds"_ostr, "width"_ostr); + OUString cellHeight = getXPath(pXmlDoc, "/root/page[1]/body/tab/row/cell[1]/infos/bounds"_ostr, "height"_ostr); CPPUNIT_ASSERT_EQUAL(sal_Int32(8650), cellWidth.toInt32()); CPPUNIT_ASSERT(cellHeight.toInt32() > 200); // height might depend on font size } @@ -910,16 +917,18 @@ DECLARE_WW8EXPORT_TEST(testZoomType, "zoomtype.doc") DECLARE_WW8EXPORT_TEST(test56513, "fdo56513.doc") { - CPPUNIT_ASSERT_EQUAL(u"This is the header of the first section"_ustr, parseDump("/root/page[1]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"This is the first page header of the second section"_ustr, parseDump("/root/page[2]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"This is the non-first-page header of the second section"_ustr, parseDump("/root/page[3]/header/txt/text()"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"This is the header of the first section"_ustr, getXPathContent(pXmlDoc, "/root/page[1]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"This is the first page header of the second section"_ustr, getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"This is the non-first-page header of the second section"_ustr, getXPathContent(pXmlDoc, "/root/page[3]/header/txt/text()"_ostr)); } DECLARE_WW8EXPORT_TEST(testNewPageStylesTable, "new-page-styles.doc") { - CPPUNIT_ASSERT_EQUAL(u"Sigma Space Performance Goals and Results (Page 1)*"_ustr, parseDump("/root/page[1]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Sigma Space Performance Assessment (Page 2)****"_ustr, parseDump("/root/page[2]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Sigma Space Performance Goals: Next Year (Page 3)*******"_ustr, parseDump("/root/page[3]/header/txt/text()"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"Sigma Space Performance Goals and Results (Page 1)*"_ustr, getXPathContent(pXmlDoc, "/root/page[1]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Sigma Space Performance Assessment (Page 2)****"_ustr, getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Sigma Space Performance Goals: Next Year (Page 3)*******"_ustr, getXPathContent(pXmlDoc, "/root/page[3]/header/txt/text()"_ostr)); } CPPUNIT_TEST_FIXTURE(Test, testFdo42144) @@ -1428,8 +1437,9 @@ CPPUNIT_TEST_FIXTURE(Test, testTableKeep) loadAndReload("tdf91083.odt"); CPPUNIT_ASSERT_EQUAL(7, getPages()); //emulate table "keep with next" -do not split table - CPPUNIT_ASSERT_EQUAL( u"Row 1"_ustr, parseDump("/root/page[3]/body/tab[1]/row[2]/cell[1]/txt[1]"_ostr) ); - CPPUNIT_ASSERT_EQUAL( u"Row 1"_ustr, parseDump("/root/page[6]/body/tab[1]/row[2]/cell[1]/txt[1]"_ostr) ); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL( u"Row 1"_ustr, getXPathContent(pXmlDoc, "/root/page[3]/body/tab[1]/row[2]/cell[1]/txt[1]"_ostr) ); + CPPUNIT_ASSERT_EQUAL( u"Row 1"_ustr, getXPathContent(pXmlDoc, "/root/page[6]/body/tab[1]/row[2]/cell[1]/txt[1]"_ostr) ); } #endif @@ -1437,31 +1447,34 @@ CPPUNIT_TEST_FIXTURE(Test, tesTdf91083_tableKeep2) { loadAndReload("tdf91083_tableKeep2.odt"); //emulate table "keep with next" - split large row in order to keep with previous paragraph + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); CPPUNIT_ASSERT_EQUAL_MESSAGE("Table doesn't split, so it starts on page 2", - u"0"_ustr, parseDump("count(//page[1]//tab)"_ostr) ); + u"0"_ustr, getXPathContent(pXmlDoc, "count(//page[1]//tab)"_ostr) ); CPPUNIT_ASSERT_EQUAL_MESSAGE("Page 2 starts with a paragraph/title, not a table", - u"KeepWithNext"_ustr, parseDump("//page[2]/body/txt[1]"_ostr) ); + u"KeepWithNext"_ustr, getXPathContent(pXmlDoc, "//page[2]/body/txt[1]"_ostr) ); CPPUNIT_ASSERT_EQUAL_MESSAGE("Table sticks with previous paragraph, so it starts on page 2", - u"1"_ustr, parseDump("count(//page[2]//tab)"_ostr) ); + u"1"_ustr, getXPathContent(pXmlDoc, "count(//page[2]//tab)"_ostr) ); CPPUNIT_ASSERT_MESSAGE("Row itself splits, not the table at a row boundary", - "Cell 2" != parseDump("//page[3]//tab//row[2]/cell[1]/txt[1]"_ostr) ); + "Cell 2" != getXPathContent(pXmlDoc, "//page[3]//tab//row[2]/cell[1]/txt[1]"_ostr) ); } CPPUNIT_TEST_FIXTURE(Test, tesTdf91083_tableKeep3) { loadAndReload("tdf91083_tableKeep3.odt"); CPPUNIT_ASSERT_EQUAL(3, getPages()); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); //emulate table "keep with next" - split single row table in order to keep with previous paragraph CPPUNIT_ASSERT_EQUAL_MESSAGE("Table doesn't split, so it starts on page 2", - u"0"_ustr, parseDump("count(//page[1]//tab)"_ostr) ); + u"0"_ustr, getXPathContent(pXmlDoc, "count(//page[1]//tab)"_ostr) ); CPPUNIT_ASSERT_EQUAL_MESSAGE("Table sticks with previous paragraph, so it starts on page 2", - u"1"_ustr, parseDump("count(//page[2]//tab)"_ostr) ); + u"1"_ustr, getXPathContent(pXmlDoc, "count(//page[2]//tab)"_ostr) ); } DECLARE_WW8EXPORT_TEST(testTdf76349_textboxMargins, "tdf76349_textboxMargins.doc") { // textboxes without borders were losing their spacing items in round-tripping - CPPUNIT_ASSERT( 0 < parseDump("/root/page/body/txt/anchored/fly/infos/prtBounds"_ostr, "left"_ostr).toInt32() ); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT( 0 < getXPath(pXmlDoc, "/root/page/body/txt/anchored/fly/infos/prtBounds"_ostr, "left"_ostr).toInt32() ); uno::Reference xShape = getShape(1); CPPUNIT_ASSERT_EQUAL_MESSAGE("Textbox background color", Color(0xD8, 0xD8, 0xD8), getProperty(xShape, u"BackColor"_ustr)); diff --git a/sw/qa/extras/ww8export/ww8export2.cxx b/sw/qa/extras/ww8export/ww8export2.cxx index b4320f62c15f..c7c80fcdd9e8 100644 --- a/sw/qa/extras/ww8export/ww8export2.cxx +++ b/sw/qa/extras/ww8export/ww8export2.cxx @@ -50,11 +50,12 @@ public: DECLARE_WW8EXPORT_TEST(testTdf99120, "tdf99120.doc") { - CPPUNIT_ASSERT_EQUAL(u"Section 1, odd."_ustr, parseDump("/root/page[1]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Section 1, even."_ustr, parseDump("/root/page[2]/header/txt/text()"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"Section 1, odd."_ustr, getXPathContent(pXmlDoc, "/root/page[1]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Section 1, even."_ustr, getXPathContent(pXmlDoc, "/root/page[2]/header/txt/text()"_ostr)); // This failed: the header was empty on the 3rd page, as the first page header was shown. - CPPUNIT_ASSERT_EQUAL(u"Section 2, odd."_ustr, parseDump("/root/page[3]/header/txt/text()"_ostr)); - CPPUNIT_ASSERT_EQUAL(u"Section 2, even."_ustr, parseDump("/root/page[4]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Section 2, odd."_ustr, getXPathContent(pXmlDoc, "/root/page[3]/header/txt/text()"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"Section 2, even."_ustr, getXPathContent(pXmlDoc, "/root/page[4]/header/txt/text()"_ostr)); } CPPUNIT_TEST_FIXTURE(Test, testTdf41542_borderlessPadding) @@ -137,7 +138,8 @@ DECLARE_WW8EXPORT_TEST(testTdf37153, "tdf37153_considerWrapOnObjPos.doc") DECLARE_WW8EXPORT_TEST(testTdf49102_mergedCellNumbering, "tdf49102_mergedCellNumbering.doc") { - CPPUNIT_ASSERT_EQUAL( u"2."_ustr, parseDump("/root/page/body/tab/row[4]/cell/txt/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']"_ostr, "expand"_ostr) ); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL( u"2."_ustr, getXPath(pXmlDoc, "/root/page/body/tab/row[4]/cell/txt/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']"_ostr, "expand"_ostr) ); } CPPUNIT_TEST_FIXTURE(Test, testTdf55427_footnote2endnote) diff --git a/sw/qa/extras/ww8export/ww8export3.cxx b/sw/qa/extras/ww8export/ww8export3.cxx index ade5bdb7f0cd..c639f46ea51d 100644 --- a/sw/qa/extras/ww8export/ww8export3.cxx +++ b/sw/qa/extras/ww8export/ww8export3.cxx @@ -686,9 +686,10 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf94009_zeroPgMargin) DECLARE_WW8EXPORT_TEST(testTdf108518_CRnumformatting, "tdf108518_CRnumformatting.doc") { - CPPUNIT_ASSERT_EQUAL(u"6.2.3."_ustr, parseDump("//body/txt[4]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']"_ostr, "expand"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"6.2.3."_ustr, getXPath(pXmlDoc, "//body/txt[4]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']"_ostr, "expand"_ostr)); //Without this fix in place, it would become 200 (and non-bold). - CPPUNIT_ASSERT_EQUAL(u"220"_ustr, parseDump("//body/txt[4]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']/SwFont"_ostr, "height"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"220"_ustr, getXPath(pXmlDoc, "//body/txt[4]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']/SwFont"_ostr, "height"_ostr)); } DECLARE_WW8EXPORT_TEST(testTdf120711_joinedParagraphWithChangeTracking, "tdf120711.doc") diff --git a/sw/qa/extras/ww8export/ww8export4.cxx b/sw/qa/extras/ww8export/ww8export4.cxx index 39448c56aa19..60fa17634441 100644 --- a/sw/qa/extras/ww8export/ww8export4.cxx +++ b/sw/qa/extras/ww8export/ww8export4.cxx @@ -98,9 +98,10 @@ DECLARE_WW8EXPORT_TEST(testTdf150197_anlv2ListFormat, "tdf150197_anlv2ListFormat DECLARE_WW8EXPORT_TEST(testTdf117994_CRnumformatting, "tdf117994_CRnumformatting.doc") { - CPPUNIT_ASSERT_EQUAL(u"1."_ustr, parseDump("//body/txt[1]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']"_ostr, "expand"_ostr)); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + CPPUNIT_ASSERT_EQUAL(u"1."_ustr, getXPath(pXmlDoc, "//body/txt[1]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']"_ostr, "expand"_ostr)); //Without this fix in place, it would become 200 (and non-bold). - CPPUNIT_ASSERT_EQUAL(u"160"_ustr, parseDump("//body/txt[1]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']/SwFont"_ostr, "height"_ostr)); + CPPUNIT_ASSERT_EQUAL(u"160"_ustr, getXPath(pXmlDoc, "//body/txt[1]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']/SwFont"_ostr, "height"_ostr)); } DECLARE_WW8EXPORT_TEST(testTdf151548_formFieldMacros, "tdf151548_formFieldMacros.doc") diff --git a/sw/qa/extras/ww8import/ww8import.cxx b/sw/qa/extras/ww8import/ww8import.cxx index 0a82c320be1f..c34237c6711b 100644 --- a/sw/qa/extras/ww8import/ww8import.cxx +++ b/sw/qa/extras/ww8import/ww8import.cxx @@ -61,7 +61,8 @@ CPPUNIT_TEST_FIXTURE(Test, testBnc875715) CPPUNIT_TEST_FIXTURE(Test, testFloatingTableSectionColumns) { createSwDoc("floating-table-section-columns.doc"); - OUString tableWidth = parseDump("/root/page[1]/body/section/column[2]/body/txt/anchored/fly/tab/infos/bounds"_ostr, "width"_ostr); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + OUString tableWidth = getXPath(pXmlDoc, "/root/page[1]/body/section/column[2]/body/txt/anchored/fly/tab/infos/bounds"_ostr, "width"_ostr); // table width was restricted by a column CPPUNIT_ASSERT( tableWidth.toInt32() > 10000 ); } @@ -115,13 +116,14 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf106799) sal_Int32 const nCellWidths[3][4] = { { 9528, 0, 0, 0 },{ 2382, 2382, 2382, 2382 },{ 2382, 2382, 2382, 2382 } }; sal_Int32 const nCellTxtLns[3][4] = { { 1, 0, 0, 0 },{ 1, 0, 0, 0},{ 1, 1, 1, 1 } }; // Table was distorted because of missing sprmPFInnerTableCell at paragraph marks (0x0D) with sprmPFInnerTtp + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); for (sal_Int32 nRow : { 0, 1, 2 }) for (sal_Int32 nCell : { 0, 1, 2, 3 }) { OString cellXPath("/root/page/body/tab/row/cell/tab/row[" + OString::number(nRow+1) + "]/cell[" + OString::number(nCell+1) + "]/"); - CPPUNIT_ASSERT_EQUAL_MESSAGE(cellXPath.getStr(), nCellWidths[nRow][nCell], parseDump(cellXPath + "infos/bounds", "width"_ostr).toInt32()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(cellXPath.getStr(), nCellWidths[nRow][nCell], getXPath(pXmlDoc, cellXPath + "infos/bounds", "width"_ostr).toInt32()); if (nCellTxtLns[nRow][nCell] != 0) - CPPUNIT_ASSERT_EQUAL_MESSAGE(cellXPath.getStr(), nCellTxtLns[nRow][nCell], parseDump(cellXPath + "txt/SwParaPortion/SwLineLayout", "length"_ostr).toInt32()); + CPPUNIT_ASSERT_EQUAL_MESSAGE(cellXPath.getStr(), nCellTxtLns[nRow][nCell], getXPath(pXmlDoc, cellXPath + "txt/SwParaPortion/SwLineLayout", "length"_ostr).toInt32()); } } diff --git a/sw/qa/inc/swmodeltestbase.hxx b/sw/qa/inc/swmodeltestbase.hxx index 2c0605e29010..5cb46a07bfad 100644 --- a/sw/qa/inc/swmodeltestbase.hxx +++ b/sw/qa/inc/swmodeltestbase.hxx @@ -139,13 +139,6 @@ protected: /// Similar to parseExport(), but this gives the xmlDocPtr of the layout dump. xmlDocUniquePtr parseLayoutDump(const css::uno::Reference< css::lang::XComponent >& xComponent = nullptr); - /** - * Extract a value from the layout dump using an XPath expression and an attribute name. - * - * If the attribute is omitted, the text of the node is returned. - */ - OUString parseDump(const OString& aXPath, const OString& aAttribute = OString()); - template< typename T > T getProperty( const css::uno::Any& obj, const OUString& name ) const { diff --git a/sw/qa/unit/swmodeltestbase.cxx b/sw/qa/unit/swmodeltestbase.cxx index 84437dffd5e5..8c6b85cf428b 100644 --- a/sw/qa/unit/swmodeltestbase.cxx +++ b/sw/qa/unit/swmodeltestbase.cxx @@ -170,46 +170,6 @@ xmlDocUniquePtr SwModelTestBase::parseLayoutDump(const uno::Referencetype == XPATH_NODESET) - { - xmlNodeSetPtr pXmlNodes = pXmlXpathObj->nodesetval; - int nNodes = xmlXPathNodeSetGetLength(pXmlNodes); - OString aMessage("xpath ('" + aXPath + "') should match exactly 1 node"); - CPPUNIT_ASSERT_EQUAL_MESSAGE(aMessage.getStr(), 1, nNodes); - CPPUNIT_ASSERT(pXmlNodes); - xmlNodePtr pXmlNode = pXmlNodes->nodeTab[0]; - if (aAttribute.getLength()) - pXpathStrResult = xmlGetProp(pXmlNode, BAD_CAST(aAttribute.getStr())); - else - pXpathStrResult = xmlNodeGetContent(pXmlNode); - } - else - { - // the xpath expression evaluated to a value, not a node - CPPUNIT_ASSERT_EQUAL_MESSAGE("attr name should not be supplied when xpath evals to a value", - sal_Int32(0), aAttribute.getLength()); - pXpathStrResult = xmlXPathCastToString(pXmlXpathObj); - CPPUNIT_ASSERT_MESSAGE("xpath result cannot be cast to string", pXpathStrResult); - } - - OUString aRet(reinterpret_cast(pXpathStrResult), xmlStrlen(pXpathStrResult), - RTL_TEXTENCODING_UTF8); - xmlFree(pXpathStrResult); - xmlFree(pXmlXpathObj); - xmlFree(pXmlXpathCtx); - - return aRet; -} - bool SwModelTestBase::hasProperty(const uno::Reference& obj, const OUString& name) const { diff --git a/test/source/xmltesttools.cxx b/test/source/xmltesttools.cxx index 16514092ccc8..73563ac2a4f4 100644 --- a/test/source/xmltesttools.cxx +++ b/test/source/xmltesttools.cxx @@ -124,12 +124,7 @@ OUString XmlTestTools::getXPathContent(const xmlDocUniquePtr& pXmlDoc, const OSt xmlXPathNodeSetGetLength(pXmlNodes) > 0); xmlNodePtr pXmlNode = pXmlNodes->nodeTab[0]; - xmlNodePtr pXmlChild = pXmlNode->children; - OUString s; - while (pXmlChild && pXmlChild->type != XML_TEXT_NODE) - pXmlChild = pXmlChild->next; - if (pXmlChild && pXmlChild->type == XML_TEXT_NODE) - s = convert(pXmlChild->content); + OUString s = convert(xmlNodeGetContent(pXmlNode)); xmlXPathFreeObject(pXmlObj); return s; } @@ -256,6 +251,13 @@ void XmlTestTools::assertXPathChildren(const xmlDocUniquePtr& pXmlDoc, const OSt } void XmlTestTools::assertXPathNoAttribute(const xmlDocUniquePtr& pXmlDoc, const OString& rXPath, const OString& rAttribute) +{ + CPPUNIT_ASSERT_MESSAGE(OString(OString::Concat("In <") + pXmlDoc->name + ">, XPath '" + rXPath + "' unexpected '" + rAttribute + "' attribute").getStr(), + !hasXPathAttribute(pXmlDoc, rXPath, rAttribute)); +} + +bool XmlTestTools::hasXPathAttribute(const xmlDocUniquePtr& pXmlDoc, const OString& rXPath, + const OString& rAttribute) { xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, rXPath); xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; @@ -263,9 +265,9 @@ void XmlTestTools::assertXPathNoAttribute(const xmlDocUniquePtr& pXmlDoc, const CPPUNIT_ASSERT_EQUAL_MESSAGE(OString(OString::Concat("In <") + pXmlDoc->name + ">, XPath '" + rXPath + "' number of nodes is incorrect").getStr(), 1, xmlXPathNodeSetGetLength(pXmlNodes)); xmlNodePtr pXmlNode = pXmlNodes->nodeTab[0]; - CPPUNIT_ASSERT_MESSAGE(OString(OString::Concat("In <") + pXmlDoc->name + ">, XPath '" + rXPath + "' unexpected '" + rAttribute + "' attribute").getStr(), - !xmlGetProp(pXmlNode, BAD_CAST(rAttribute.getStr()))); + bool bFound(xmlGetProp(pXmlNode, BAD_CAST(rAttribute.getStr()))); xmlXPathFreeObject(pXmlObj); + return bFound; } int XmlTestTools::getXPathPosition(const xmlDocUniquePtr& pXmlDoc, const OString& rXPath, std::string_view rChildName)