diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2014-11-05 14:19:23 +0100 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2014-11-06 16:54:59 +0100 |
commit | b4bc6521759103a5a79819a082e7413737212a76 (patch) | |
tree | cc5892e501045fc70cb8f307d9db2e58d00c0076 /sw | |
parent | f373aa0be0a2150c05de5b215f18ed8f0f333e83 (diff) |
make it possible to check mailmerge output files in unittests
Change-Id: Ifa54445c8f46bb2ed5539870c5fce1a2e62beef7
Diffstat (limited to 'sw')
-rw-r--r-- | sw/qa/extras/inc/swmodeltestbase.hxx | 55 | ||||
-rw-r--r-- | sw/qa/extras/mailmerge/mailmerge.cxx | 32 |
2 files changed, 65 insertions, 22 deletions
diff --git a/sw/qa/extras/inc/swmodeltestbase.hxx b/sw/qa/extras/inc/swmodeltestbase.hxx index b642abc621fc..da7921f05f9b 100644 --- a/sw/qa/extras/inc/swmodeltestbase.hxx +++ b/sw/qa/extras/inc/swmodeltestbase.hxx @@ -182,6 +182,8 @@ protected: utl::TempFile maTempFile; bool mbExported; ///< Does maTempFile already contain something useful? sal_Int16 nCurOutputType; + OUString mailMergeOutputURL; + OUString mailMergeOutputPrefix; protected: virtual OUString getTestName() { return OUString(); } @@ -612,6 +614,25 @@ protected: calcLayout(); } + /** + Loads number-th document from mail merge. Requires file output from mail merge. + */ + void loadMailMergeDocument( int number ) + { + assert( nCurOutputType == text::MailMergeType::FILE ); + if (mxComponent.is()) + mxComponent->dispose(); + OUString name = mailMergeOutputPrefix + OUString::number( number ) + ".odt"; + // Output name early, so in the case of a hang, the name of the hanging input file is visible. + std::cout << name << ","; + mnStartTime = osl_getGlobalTimer(); + mxComponent = loadFromDesktop(mailMergeOutputURL + "/" + name, "com.sun.star.text.TextDocument"); + CPPUNIT_ASSERT( mxComponent.is()); + OString name2 = OUStringToOString( name, RTL_TEXTENCODING_UTF8 ); + if (mustCalcLayoutOf(name2.getStr())) + calcLayout(); + } + void reload(const char* pFilter, const char* filename) { uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY); @@ -692,8 +713,25 @@ protected: if (!mbExported) return 0; + return parseExportInternal( maTempFile.GetURL(), rStreamName ); + } + + /** + * Like parseExport(), but for given mail merge document. + */ + xmlDocPtr parseMailMergeExport(int number, const OUString& rStreamName = OUString("word/document.xml")) + { + if (nCurOutputType != text::MailMergeType::FILE) + return 0; + + OUString name = mailMergeOutputPrefix + OUString::number( number ) + ".odt"; + return parseExportInternal( mailMergeOutputURL + "/" + name, rStreamName ); + } + + xmlDocPtr parseExportInternal( const OUString& url, const OUString& rStreamName ) + { // Read the XML stream we're interested in. - uno::Reference<packages::zip::XZipFileAccess2> xNameAccess = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory), maTempFile.GetURL()); + uno::Reference<packages::zip::XZipFileAccess2> xNameAccess = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory), url); uno::Reference<io::XInputStream> xInputStream(xNameAccess->getByName(rStreamName), uno::UNO_QUERY); boost::shared_ptr<SvStream> pStream(utl::UcbStreamHelper::CreateStream(xInputStream, true)); @@ -783,7 +821,7 @@ protected: } virtual void initMailMergeJobAndArgs( const char* filename, const char* tablename, const OUString &aDBName, - const OUString &aPrefix, const OUString &aWorkDir ) + const OUString &aPrefix, const OUString &aWorkDir, bool file ) { uno::Reference< task::XJob > xJob( getMultiServiceFactory()->createInstance( "com.sun.star.text.MailMerge" ), uno::UNO_QUERY_THROW ); mxJob.set( xJob ); @@ -793,7 +831,7 @@ protected: mSeqMailMergeArgs.realloc( seq_id ); seq_id = 0; - mSeqMailMergeArgs[ seq_id++ ] = beans::NamedValue( OUString( UNO_NAME_OUTPUT_TYPE ), uno::Any( text::MailMergeType::SHELL ) ); + mSeqMailMergeArgs[ seq_id++ ] = beans::NamedValue( OUString( UNO_NAME_OUTPUT_TYPE ), uno::Any( file ? text::MailMergeType::FILE : text::MailMergeType::SHELL ) ); mSeqMailMergeArgs[ seq_id++ ] = beans::NamedValue( OUString( UNO_NAME_DOCUMENT_URL ), uno::Any( ( OUString(getURLFromSrc(mpTestDocumentPath) + OUString::createFromAscii(filename)) ) ) ); mSeqMailMergeArgs[ seq_id++ ] = beans::NamedValue( OUString( UNO_NAME_DATA_SOURCE_NAME ), uno::Any( aDBName ) ); @@ -810,8 +848,6 @@ protected: { uno::Any res = mxJob->execute( mSeqMailMergeArgs ); - OUString aCurOutputURL; - OUString aCurFileNamePrefix; const beans::NamedValue *pArguments = mSeqMailMergeArgs.getConstArray(); bool bOk = true; sal_Int32 nArgs = mSeqMailMergeArgs.getLength(); @@ -822,9 +858,9 @@ protected: // all error checking was already done by the MM job execution if (rName == UNO_NAME_OUTPUT_URL) - bOk &= rValue >>= aCurOutputURL; + bOk &= rValue >>= mailMergeOutputURL; else if (rName == UNO_NAME_FILE_NAME_PREFIX) - bOk &= rValue >>= aCurFileNamePrefix; + bOk &= rValue >>= mailMergeOutputPrefix; else if (rName == UNO_NAME_OUTPUT_TYPE) bOk &= rValue >>= nCurOutputType; } @@ -839,10 +875,7 @@ protected: else { CPPUNIT_ASSERT(res == true); - mxMMComponent = loadFromDesktop( aCurOutputURL + "/" + aCurFileNamePrefix + "0.odt", - "com.sun.star.text.TextDocument"); - CPPUNIT_ASSERT(mxMMComponent.is()); - calcLayout(); + loadMailMergeDocument( 0 ); } } }; diff --git a/sw/qa/extras/mailmerge/mailmerge.cxx b/sw/qa/extras/mailmerge/mailmerge.cxx index 1260d6965edc..d278db1ccb25 100644 --- a/sw/qa/extras/mailmerge/mailmerge.cxx +++ b/sw/qa/extras/mailmerge/mailmerge.cxx @@ -44,7 +44,7 @@ class MMTest : public SwModelTestBase * The 'verify' method actually has to execute the mail merge by * calling executeMailMerge() after modifying the job arguments. */ - void executeMailMergeTest(const char* filename, const char* datasource, const char* tablename = 0) + void executeMailMergeTest(const char* filename, const char* datasource, const char* tablename, bool file) { header(); preTest(filename); @@ -55,18 +55,19 @@ class MMTest : public SwModelTestBase const OUString aWorkDir = aTempDir.GetURL(); const OUString aURI( getURLFromSrc(mpTestDocumentPath) + OUString::createFromAscii(datasource) ); OUString aDBName = registerDBsource( aURI, aPrefix, aWorkDir ); - initMailMergeJobAndArgs( filename, tablename, aDBName, aPrefix, aWorkDir ); + initMailMergeJobAndArgs( filename, tablename, aDBName, aPrefix, aWorkDir, file ); postTest(filename); verify(); finish(); ::utl::removeTree(aWorkDir); + nCurOutputType = 0; } }; -#define DECLARE_MAILMERGE_TEST(TestName, filename, datasource, tablename, BaseClass) \ +#define DECLARE_MAILMERGE_TEST(TestName, filename, datasource, tablename, file, BaseClass) \ class TestName : public BaseClass { \ protected: \ virtual OUString getTestName() SAL_OVERRIDE { return OUString::createFromAscii(#TestName); } \ @@ -76,17 +77,22 @@ class MMTest : public SwModelTestBase CPPUNIT_TEST_SUITE_END(); \ \ void MailMerge() { \ - executeMailMergeTest(filename, datasource, tablename); \ + executeMailMergeTest(filename, datasource, tablename, file); \ } \ void verify() SAL_OVERRIDE; \ }; \ CPPUNIT_TEST_SUITE_REGISTRATION(TestName); \ void TestName::verify() -#define DECLARE_DFLT_MAILMERGE_TEST(TestName, filename, datasource, tablename) \ - DECLARE_MAILMERGE_TEST(TestName, filename, datasource, tablename, MMTest) +// Will generate the resulting document in mxMMDocument. +#define DECLARE_SHELL_MAILMERGE_TEST(TestName, filename, datasource, tablename) \ + DECLARE_MAILMERGE_TEST(TestName, filename, datasource, tablename, false, MMTest) -DECLARE_DFLT_MAILMERGE_TEST(testMultiPageAnchoredDraws, "multiple-page-anchored-draws.odt", "4_v01.ods", "Tabelle1") +// Will generate documents as files, use loadMailMergeDocument(). +#define DECLARE_FILE_MAILMERGE_TEST(TestName, filename, datasource, tablename) \ + DECLARE_MAILMERGE_TEST(TestName, filename, datasource, tablename, true, MMTest) + +DECLARE_SHELL_MAILMERGE_TEST(testMultiPageAnchoredDraws, "multiple-page-anchored-draws.odt", "4_v01.ods", "Tabelle1") { executeMailMerge(); @@ -117,19 +123,19 @@ DECLARE_DFLT_MAILMERGE_TEST(testMultiPageAnchoredDraws, "multiple-page-anchored- } } -DECLARE_DFLT_MAILMERGE_TEST(testMissingDefaultLineColor, "missing-default-line-color.ott", "one-empty-address.ods", "one-empty-address") +DECLARE_FILE_MAILMERGE_TEST(testMissingDefaultLineColor, "missing-default-line-color.ott", "one-empty-address.ods", "one-empty-address") { executeMailMerge(); // The document was created by LO version which didn't write out the default value for line color // (see XMLGraphicsDefaultStyle::SetDefaults()). - uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxMMComponent, uno::UNO_QUERY); + uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY); uno::Reference<container::XIndexAccess> xDraws(xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY); uno::Reference<beans::XPropertySet> xPropertySet(xDraws->getByIndex(0), uno::UNO_QUERY); // Lines do not have a line color. CPPUNIT_ASSERT( !xPropertySet->getPropertySetInfo()->hasPropertyByName( "LineColor" )); - SwXTextDocument* pTxtDoc = dynamic_cast<SwXTextDocument *>(mxMMComponent.get()); + SwXTextDocument* pTxtDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get()); CPPUNIT_ASSERT(pTxtDoc); - uno::Reference< lang::XMultiServiceFactory > xFact( mxMMComponent, uno::UNO_QUERY ); + uno::Reference< lang::XMultiServiceFactory > xFact( mxComponent, uno::UNO_QUERY ); uno::Reference< beans::XPropertySet > xDefaults( xFact->createInstance( "com.sun.star.drawing.Defaults" ), uno::UNO_QUERY ); CPPUNIT_ASSERT( xDefaults.is()); uno::Reference< beans::XPropertySetInfo > xInfo( xDefaults->getPropertySetInfo()); @@ -138,6 +144,10 @@ DECLARE_DFLT_MAILMERGE_TEST(testMissingDefaultLineColor, "missing-default-line-c xDefaults->getPropertyValue( "LineColor" ) >>= lineColor; // And the default value is black (wasn't copied properly by mailmerge). CPPUNIT_ASSERT_EQUAL( COL_BLACK, lineColor ); + // And check that the resulting file has the proper default. + xmlDocPtr pXmlDoc = parseMailMergeExport( 0, "styles.xml" ); + CPPUNIT_ASSERT_EQUAL( OUString( "graphic" ), getXPath(pXmlDoc, "/office:document-styles/office:styles/style:default-style[1]", "family")); + CPPUNIT_ASSERT_EQUAL( OUString( "#000000" ), getXPath(pXmlDoc, "/office:document-styles/office:styles/style:default-style[1]/style:graphic-properties", "stroke-color")); } #endif |