diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2016-03-11 02:31:05 +0100 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2016-03-11 06:36:18 +0000 |
commit | 63bb0e891e94206bbd50c657bca8661d135ef5e6 (patch) | |
tree | 7bb9f380face03983f9952473b206303ec44b719 /sc/qa | |
parent | a63c9c5de4de41d7b27fcee2c5e403145c970002 (diff) |
allow to call xpath expression on different files in container
Change-Id: I0b95ac19e2f6a01cadb4de32937282f489dbca7f
Reviewed-on: https://gerrit.libreoffice.org/23137
Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
Tested-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
Diffstat (limited to 'sc/qa')
-rw-r--r-- | sc/qa/unit/helper/xpath.cxx | 6 | ||||
-rw-r--r-- | sc/qa/unit/helper/xpath.hxx | 17 | ||||
-rw-r--r-- | sc/qa/unit/subsequent_export-test.cxx | 13 |
3 files changed, 26 insertions, 10 deletions
diff --git a/sc/qa/unit/helper/xpath.cxx b/sc/qa/unit/helper/xpath.cxx index 43dafa3a09c5..8056d4d4aac0 100644 --- a/sc/qa/unit/helper/xpath.cxx +++ b/sc/qa/unit/helper/xpath.cxx @@ -12,7 +12,6 @@ #include <cppunit/TestAssert.h> #include "qahelper.hxx" -#include <unotools/tempfile.hxx> #include <unotools/ucbstreamhelper.hxx> #include <test/xmltesttools.hxx> @@ -23,6 +22,11 @@ xmlDocPtr XPathHelper::parseExport(ScDocShell& rShell, uno::Reference<lang::XMul { std::shared_ptr<utl::TempFile> pTempFile = ScBootstrapFixture::exportTo(&rShell, nFormat); + return parseExport(pTempFile, xSFactory, rFile); +} + +xmlDocPtr XPathHelper::parseExport(std::shared_ptr<utl::TempFile> pTempFile, uno::Reference<lang::XMultiServiceFactory> xSFactory, const OUString& rFile) +{ // Read the XML stream we're interested in. uno::Reference<packages::zip::XZipFileAccess2> xNameAccess = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(xSFactory), pTempFile->GetURL()); uno::Reference<io::XInputStream> xInputStream(xNameAccess->getByName(rFile), uno::UNO_QUERY); diff --git a/sc/qa/unit/helper/xpath.hxx b/sc/qa/unit/helper/xpath.hxx index d45fc7666db2..f53f9276f6a8 100644 --- a/sc/qa/unit/helper/xpath.hxx +++ b/sc/qa/unit/helper/xpath.hxx @@ -12,12 +12,16 @@ #include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <unotools/tempfile.hxx> + #include <libxml/xpathInternals.h> #include <libxml/parserInternals.h> #include <rtl/string.hxx> #include <rtl/ustring.hxx> +#include <memory> + #if defined(SCQAHELPER_DLLIMPLEMENTATION) #define SCQAHELPER_DLLPUBLIC SAL_DLLPUBLIC_EXPORT #else @@ -35,9 +39,22 @@ namespace XPathHelper * test the resulting file directly, by opening the zip file, parsing an * xml stream, and asserting an XPath expression. This method returns the * xml stream, so that you can do the asserting. + * + * Warning: This method saves the document and does not export it! If you need to + * test several files in the same exported xml file you need to export the file manually + * and call the parseExport method that takes a TempFile */ SCQAHELPER_DLLPUBLIC xmlDocPtr parseExport(ScDocShell& rShell, uno::Reference< lang::XMultiServiceFactory> xSFactory, const OUString& rFile, sal_Int32 nFormat); + + /** + * Tries to parse the specified file in the temp file zip container as an xml file. + * + * Should be used when the same exported file is used for testing different files in + * the same zip file. + */ + SCQAHELPER_DLLPUBLIC xmlDocPtr parseExport(std::shared_ptr<utl::TempFile> pTempFile, uno::Reference< lang::XMultiServiceFactory> xSFactory, + const OUString& rFile); } #endif diff --git a/sc/qa/unit/subsequent_export-test.cxx b/sc/qa/unit/subsequent_export-test.cxx index cf13dcb316eb..1228ada71231 100644 --- a/sc/qa/unit/subsequent_export-test.cxx +++ b/sc/qa/unit/subsequent_export-test.cxx @@ -1100,20 +1100,15 @@ void ScExportTest::testRichTextCellFormat() ScDocShellRef xDocSh = loadDoc("cellformat.", FORMAT_XLS); CPPUNIT_ASSERT(xDocSh.Is()); - xmlDocPtr pSheet = XPathHelper::parseExport(*xDocSh, m_xSFactory, "xl/worksheets/sheet1.xml", FORMAT_XLSX); + std::shared_ptr<utl::TempFile> pXPathFile = ScBootstrapFixture::exportTo(&(*xDocSh), FORMAT_XLSX); + xmlDocPtr pSheet = XPathHelper::parseExport(pXPathFile, m_xSFactory, "xl/worksheets/sheet1.xml"); CPPUNIT_ASSERT(pSheet); // make sure the only cell in this doc is assigned some formatting record OUString aCellFormat = getXPath(pSheet, "/x:worksheet/x:sheetData/x:row/x:c", "s"); CPPUNIT_ASSERT_MESSAGE("Cell format is missing", !aCellFormat.isEmpty()); - xDocSh->DoClose(); - //FIXME: this shouldn't be necessary, but for some reason 2nd and every consecutive call - //to parseExport() (different stream name within the same doc, of course) doesn't find - //the stream anymore. I have neither knowledge nor time to debug it - ScDocShellRef xNewDocSh = loadDoc("cellformat.", FORMAT_XLS); - - xmlDocPtr pStyles = XPathHelper::parseExport(*xNewDocSh, m_xSFactory, "xl/styles.xml", FORMAT_XLSX); + xmlDocPtr pStyles = XPathHelper::parseExport(pXPathFile, m_xSFactory, "xl/styles.xml"); CPPUNIT_ASSERT(pStyles); OString nFormatIdx = OString::number( aCellFormat.toInt32() + 1 ); @@ -1130,7 +1125,7 @@ void ScExportTest::testRichTextCellFormat() const OString xPath3("/x:styleSheet/x:fonts/x:font[" + nFontIdx + "]/x:b"); assertXPath(pStyles, xPath3, "val", "true"); - xNewDocSh->DoClose(); + xDocSh->DoClose(); } void ScExportTest::testFormulaRefSheetNameODS() |