sw/CppunitTest_sw_mailmerge2.mk | 1 sw/qa/extras/mailmerge/mailmerge2.cxx | 70 ++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+)
New commits: commit 8254bd826d6d415e80ef8dcfb39e8b5c67cf2aab Author: Henry Castro <[email protected]> AuthorDate: Wed Nov 30 08:17:10 2022 -0400 Commit: Henry Castro <[email protected]> CommitDate: Tue Dec 6 18:13:40 2022 +0000 sw:qa: add mailmerge export directly pdf unit test Signed-off-by: Henry Castro <[email protected]> Change-Id: I53570149a6e05f05f9ebff7d4931d7f1a02a27f0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143490 Tested-by: Jenkins diff --git a/sw/CppunitTest_sw_mailmerge2.mk b/sw/CppunitTest_sw_mailmerge2.mk index 0dcd55714c5b..f7a376b09eac 100644 --- a/sw/CppunitTest_sw_mailmerge2.mk +++ b/sw/CppunitTest_sw_mailmerge2.mk @@ -29,6 +29,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sw_mailmerge2, \ tl \ unotest \ utl \ + vcl \ )) $(eval $(call gb_CppunitTest_use_externals,sw_mailmerge2, \ diff --git a/sw/qa/extras/mailmerge/mailmerge2.cxx b/sw/qa/extras/mailmerge/mailmerge2.cxx index 30c26402c1c3..20eb6b0f3896 100644 --- a/sw/qa/extras/mailmerge/mailmerge2.cxx +++ b/sw/qa/extras/mailmerge/mailmerge2.cxx @@ -14,7 +14,10 @@ #include <swmodeltestbase.hxx> +#include <com/sun/star/util/URLTransformer.hpp> +#include <com/sun/star/text/XTextViewCursorSupplier.hpp> #include <com/sun/star/text/MailMergeType.hpp> +#include <com/sun/star/text/XPageCursor.hpp> #include <com/sun/star/sdb/CommandType.hpp> #include <com/sun/star/table/TableBorder.hpp> #include <com/sun/star/text/TextContentAnchorType.hpp> @@ -23,8 +26,12 @@ #include <com/sun/star/sdbcx/XRowLocate.hpp> #include <com/sun/star/task/XJob.hpp> +#include <vcl/filter/PDFiumLibrary.hxx> #include <tools/urlobj.hxx> #include <comphelper/sequence.hxx> +#include <comphelper/processfactory.hxx> +#include <comphelper/propertyvalue.hxx> +#include <comphelper/DirectoryHelper.hxx> #include <wrtsh.hxx> #include <ndtxt.hxx> @@ -455,6 +462,69 @@ DECLARE_FILE_MAILMERGE_TEST(testTdf122156_file, "linked-with-condition.odt", "5- } } +DECLARE_SHELL_MAILMERGE_TEST(exportDirectToPDF_shell, "linked-with-condition.odt", "5-with-blanks.ods", + "names") +{ + executeMailMerge(); + + uno::Reference<css::frame::XModel> xModel(mxMMComponent, uno::UNO_QUERY); + CPPUNIT_ASSERT(xModel.is()); + + uno::Reference<css::frame::XController> xController(xModel->getCurrentController()); + CPPUNIT_ASSERT(xController.is()); + + uno::Reference<css::text::XTextViewCursorSupplier> xSupplier(xController, uno::UNO_QUERY); + CPPUNIT_ASSERT(xSupplier.is()); + + uno::Reference<css::text::XPageCursor> xPageCursor(xSupplier->getViewCursor(), uno::UNO_QUERY); + CPPUNIT_ASSERT(xPageCursor.is()); + + xPageCursor->jumpToFirstPage(); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), xPageCursor->getPage()); + + uno::Reference<css::frame::XFrame> xFrame(xController->getFrame()); + CPPUNIT_ASSERT(xFrame.is()); + + uno::Reference<css::frame::XDispatchProvider> xDispatchProvider(xFrame, uno::UNO_QUERY); + CPPUNIT_ASSERT(xDispatchProvider.is()); + + util::URL aURL; + aURL.Complete = ".uno:ExportDirectToPDF"; + { + uno::Reference<css::util::XURLTransformer> xParser(css::util::URLTransformer::create( + comphelper::getProcessComponentContext())); + CPPUNIT_ASSERT(xParser.is()); + xParser->parseStrict(aURL); + } + + uno::Reference<css::frame::XDispatch> xDispatch = xDispatchProvider->queryDispatch(aURL, OUString(), 0); + CPPUNIT_ASSERT(xDispatch.is()); + + const OUString sExportTo(msMailMergeOutputURL + "/ExportDirectToPDF.pdf"); + uno::Sequence <css::beans::PropertyValue> aArgs { + comphelper::makePropertyValue("SynchronMode", true), + comphelper::makePropertyValue("URL", sExportTo) + }; + + xDispatch->dispatch(aURL, aArgs); + CPPUNIT_ASSERT(comphelper::DirectoryHelper::fileExists(sExportTo)); + + SvFileStream aPDFFile(sExportTo, StreamMode::READ); + SvMemoryStream aMemory; + aMemory.WriteStream(aPDFFile); + std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get(); + CPPUNIT_ASSERT(pPDFium); + + std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument + = pPDFium->openDocument(aMemory.GetData(), aMemory.GetSize(), OString()); + CPPUNIT_ASSERT(pPdfDocument); + CPPUNIT_ASSERT_EQUAL(5, pPdfDocument->getPageCount()); + + std::unique_ptr<vcl::pdf::PDFiumPage> pPdfPage = pPdfDocument->openPage(0); + CPPUNIT_ASSERT(pPdfPage); + CPPUNIT_ASSERT_EQUAL(4, pPdfPage->getObjectCount()); +} + DECLARE_SHELL_MAILMERGE_TEST(testTdf121168, "section_ps.odt", "4_v01.ods", "Tabelle1") { // A document starting with a section on a page with non-default page style with header
