diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-02-24 09:03:22 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-02-24 09:14:46 +0100 |
commit | 0cf6f241e40b8be3c9d809c528b367df32f3f2ee (patch) | |
tree | 70c3726d89cb89683eb14d41b599765062066672 /sw/qa | |
parent | 83aa6d8180f289e5ae4034560dbd95ab160b1ac2 (diff) |
abi#11739 DOCX export: fix validation error, wrong order of some elements
Change-Id: Ic1c0174718ba6853fcc8795324a99b2a332b865e
Diffstat (limited to 'sw/qa')
-rwxr-xr-x | sw/qa/extras/ooxmlexport/data/abi11739.docx | bin | 0 -> 11635 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 36 |
2 files changed, 36 insertions, 0 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/abi11739.docx b/sw/qa/extras/ooxmlexport/data/abi11739.docx Binary files differnew file mode 100755 index 000000000000..8eb6999da28d --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/abi11739.docx diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index 850c11141f42..c1d81ca39c24 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -97,6 +97,12 @@ protected: void assertXPathChildren(xmlDocPtr pXmlDoc, const OString& rXPath, int nNumberOfChildNodes); /** + * Get the position of the child named rName of the parent node specified by rXPath. + * Useful for checking relative order of elements. + */ + int getXPathPosition(xmlDocPtr pXmlDoc, const OString& rXPath, const OUString& rName); + + /** * Same as the assertXPath(), but don't assert: return the string instead. */ OUString getXPath(xmlDocPtr pXmlDoc, const OString& rXPath, const OString& rAttribute); @@ -189,6 +195,23 @@ void Test::assertXPathChildren(xmlDocPtr pXmlDoc, const OString& rXPath, int nNu nNumberOfChildNodes, (int)xmlChildElementCount(pXmlNode)); } +int Test::getXPathPosition(xmlDocPtr pXmlDoc, const OString& rXPath, const OUString& rChildName) +{ + xmlNodeSetPtr pXmlNodes = getXPathNode(pXmlDoc, rXPath); + CPPUNIT_ASSERT_EQUAL_MESSAGE(OString("XPath '" + rXPath + "' number of nodes is incorrect").getStr(), + 1, + xmlXPathNodeSetGetLength(pXmlNodes)); + xmlNodePtr pXmlNode = pXmlNodes->nodeTab[0]; + int nRet = 0; + for (xmlNodePtr pChild = pXmlNode->children; pChild; pChild = pChild->next) + { + if (OUString::createFromAscii((const char*)pChild->name) == rChildName) + break; + ++nRet; + } + return nRet; +} + OUString Test::getXPath(xmlDocPtr pXmlDoc, const OString& rXPath, const OString& rAttribute) { xmlNodeSetPtr pXmlNodes = getXPathNode(pXmlDoc, rXPath); @@ -3431,6 +3454,19 @@ DECLARE_OOXMLEXPORT_TEST(testW14TextEffects, "TextEffects.docx") CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:document/w:body/w:p/w:r[2]/w:rPr/w14:glow", "rad").match("228600")); } +DECLARE_OOXMLEXPORT_TEST(testAbi11739, "abi11739.docx") +{ + // Validation test: order of elements were wrong. + xmlDocPtr pXmlDoc = parseExport("word/styles.xml"); + if (!pXmlDoc) + return; + // Order was: uiPriority, link, basedOn. + CPPUNIT_ASSERT(getXPathPosition(pXmlDoc, "/w:styles/w:style[3]", "basedOn") < getXPathPosition(pXmlDoc, "/w:styles/w:style[3]", "link")); + CPPUNIT_ASSERT(getXPathPosition(pXmlDoc, "/w:styles/w:style[3]", "link") < getXPathPosition(pXmlDoc, "/w:styles/w:style[3]", "uiPriority")); + // Order was: qFormat, unhideWhenUsed. + CPPUNIT_ASSERT(getXPathPosition(pXmlDoc, "/w:styles/w:style[11]", "unhideWhenUsed") < getXPathPosition(pXmlDoc, "/w:styles/w:style[11]", "qFormat")); +} + #endif CPPUNIT_PLUGIN_IMPLEMENT(); |