diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-11-08 13:52:38 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-11-08 13:52:38 +0100 |
commit | 1da74e727d7f8703006cfe574b26621d5f674693 (patch) | |
tree | 9f06f336d3245d6825a4227878cfacc48eee4643 /sw/qa/extras/mailmerge | |
parent | 30f242e510e1a03cc47be115f4024a2e44f6db69 (diff) |
CppunitTest_sw_mailmerge: move more methods from header file
Change-Id: Idecf7c2ec3b736ba1d9a2826773c95f26ef91990
Diffstat (limited to 'sw/qa/extras/mailmerge')
-rw-r--r-- | sw/qa/extras/mailmerge/mailmerge.cxx | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/sw/qa/extras/mailmerge/mailmerge.cxx b/sw/qa/extras/mailmerge/mailmerge.cxx index 15a4ea015166..d17c835dedf6 100644 --- a/sw/qa/extras/mailmerge/mailmerge.cxx +++ b/sw/qa/extras/mailmerge/mailmerge.cxx @@ -31,6 +31,12 @@ #include <olmenu.hxx> #include <cmdid.h> +/** + * Maps database URIs to the registered database names for quick lookups + */ +typedef std::map<OUString, OUString> DBuriMap; +DBuriMap aDBuriMap; + class MMTest : public SwModelTestBase { public: @@ -64,6 +70,84 @@ public: nCurOutputType = 0; } + OUString registerDBsource( const OUString &aURI, const OUString &aWorkDir ) + { + OUString aDBName; + DBuriMap::const_iterator pos = aDBuriMap.find( aURI ); + if (pos == aDBuriMap.end()) + { + aDBName = SwDBManager::LoadAndRegisterDataSource( aURI, NULL, &aWorkDir ); + aDBuriMap.insert( std::pair< OUString, OUString >( aURI, aDBName ) ); + std::cout << "New datasource name: '" << aDBName << "'" << std::endl; + } + else + { + aDBName = pos->second; + std::cout << "Old datasource name: '" << aDBName << "'" << std::endl; + } + CPPUNIT_ASSERT(!aDBName.isEmpty()); + return aDBName; + } + + void initMailMergeJobAndArgs( const char* filename, const char* tablename, const OUString &aDBName, + 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 ); + + int seq_id = 5; + if (tablename) seq_id += 2; + mSeqMailMergeArgs.realloc( seq_id ); + + seq_id = 0; + 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 ) ); + mSeqMailMergeArgs[ seq_id++ ] = beans::NamedValue( OUString( UNO_NAME_OUTPUT_URL ), uno::Any( aWorkDir ) ); + mSeqMailMergeArgs[ seq_id++ ] = beans::NamedValue( OUString( UNO_NAME_FILE_NAME_PREFIX ), uno::Any( aPrefix )); + if (tablename) + { + mSeqMailMergeArgs[ seq_id++ ] = beans::NamedValue( OUString( UNO_NAME_DAD_COMMAND_TYPE ), uno::Any( sdb::CommandType::TABLE ) ); + mSeqMailMergeArgs[ seq_id++ ] = beans::NamedValue( OUString( UNO_NAME_DAD_COMMAND ), uno::Any( OUString::createFromAscii(tablename) ) ); + } + } + + void executeMailMerge() + { + uno::Any res = mxJob->execute( mSeqMailMergeArgs ); + + const beans::NamedValue *pArguments = mSeqMailMergeArgs.getConstArray(); + bool bOk = true; + sal_Int32 nArgs = mSeqMailMergeArgs.getLength(); + + for (sal_Int32 i = 0; i < nArgs; ++i) { + const OUString &rName = pArguments[i].Name; + const uno::Any &rValue = pArguments[i].Value; + + // all error checking was already done by the MM job execution + if (rName == UNO_NAME_OUTPUT_URL) + bOk &= rValue >>= mailMergeOutputURL; + else if (rName == UNO_NAME_FILE_NAME_PREFIX) + bOk &= rValue >>= mailMergeOutputPrefix; + else if (rName == UNO_NAME_OUTPUT_TYPE) + bOk &= rValue >>= nCurOutputType; + } + + CPPUNIT_ASSERT(bOk); + + if (nCurOutputType == text::MailMergeType::SHELL) + { + CPPUNIT_ASSERT(res >>= mxMMComponent); + CPPUNIT_ASSERT(mxMMComponent.is()); + } + else + { + CPPUNIT_ASSERT(res == true); + loadMailMergeDocument( 0 ); + } + } + protected: // Returns page number of the first page of a MM document inside the large MM document (used in the SHELL case). int documentStartPageNumber( int document ) const; |