sc/CppunitTest_sc_pdf_export.mk | 1 sc/qa/extras/scpdfexport.cxx | 51 +++++++++++++++++++++++++++++++ sc/qa/extras/testdocuments/tdf143978.ods |binary 3 files changed, 52 insertions(+)
New commits: commit 2678f500fa4cf20a83c29fc28969efa71027b1ec Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Wed Nov 17 15:59:20 2021 +0100 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Wed Nov 17 19:35:28 2021 +0100 tdf#143978: sc_pdf_export: Add unittest Exporting to PDF is the only way I could find to test this issue Change-Id: I05da96cadc2785d31a9a63925ee072456ec72a93 Change-Id: Ic31e1eb37f78451c4e34d91f9dd240716b94f973 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125407 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sc/CppunitTest_sc_pdf_export.mk b/sc/CppunitTest_sc_pdf_export.mk index 9da73eed40d6..19b67515cb14 100644 --- a/sc/CppunitTest_sc_pdf_export.mk +++ b/sc/CppunitTest_sc_pdf_export.mk @@ -38,6 +38,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sc_pdf_export, \ tl \ unotest \ utl \ + vcl \ )) $(eval $(call gb_CppunitTest_set_include,sc_pdf_export,\ diff --git a/sc/qa/extras/scpdfexport.cxx b/sc/qa/extras/scpdfexport.cxx index 9ccfa8edc978..a9f7c1df4e77 100644 --- a/sc/qa/extras/scpdfexport.cxx +++ b/sc/qa/extras/scpdfexport.cxx @@ -28,6 +28,8 @@ #include <comphelper/processfactory.hxx> #include <comphelper/propertyvalue.hxx> +#include <vcl/filter/PDFiumLibrary.hxx> + #if USE_TLS_NSS #include <nss.h> #endif @@ -67,12 +69,14 @@ public: void testExportFitToPage_Tdf103516(); void testUnoCommands_Tdf120161(); void testTdf64703_hiddenPageBreak(); + void testTdf143978(); CPPUNIT_TEST_SUITE(ScPDFExportTest); CPPUNIT_TEST(testExportRange_Tdf120161); CPPUNIT_TEST(testExportFitToPage_Tdf103516); CPPUNIT_TEST(testUnoCommands_Tdf120161); CPPUNIT_TEST(testTdf64703_hiddenPageBreak); + CPPUNIT_TEST(testTdf143978); CPPUNIT_TEST_SUITE_END(); }; @@ -451,6 +455,53 @@ void ScPDFExportTest::testTdf64703_hiddenPageBreak() } } +void ScPDFExportTest::testTdf143978() +{ + std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get(); + if (!pPDFium) + { + return; + } + + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf143978.ods", + "com.sun.star.sheet.SpreadsheetDocument"); + uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY); + + // A1:A2 + ScRange range1(0, 0, 0, 0, 1, 0); + std::shared_ptr<utl::TempFile> pPDFFile = exportToPDF(xModel, range1); + // Parse the export result with pdfium. + SvFileStream aFile(pPDFFile->GetURL(), StreamMode::READ); + SvMemoryStream aMemory; + aMemory.WriteStream(aFile); + std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument + = pPDFium->openDocument(aMemory.GetData(), aMemory.GetSize()); + CPPUNIT_ASSERT(pPdfDocument); + CPPUNIT_ASSERT_EQUAL(1, pPdfDocument->getPageCount()); + + // Get the first page + std::unique_ptr<vcl::pdf::PDFiumPage> pPdfPage = pPdfDocument->openPage(/*nIndex=*/0); + CPPUNIT_ASSERT(pPdfPage); + std::unique_ptr<vcl::pdf::PDFiumTextPage> pTextPage = pPdfPage->getTextPage(); + + int nPageObjectCount = pPdfPage->getObjectCount(); + CPPUNIT_ASSERT_EQUAL(2, nPageObjectCount); + + // Without the fix in place, this test would have failed with + // - Expected: Dies ist viel zu viel Text + // - Actual : Dies ist vie + std::unique_ptr<vcl::pdf::PDFiumPageObject> pPageObject1 = pPdfPage->getObject(0); + OUString sText1 = pPageObject1->getText(pTextPage); + CPPUNIT_ASSERT_EQUAL(OUString("Dies ist viel zu viel Text"), sText1); + + // and it would also have failed with + // - Expected: 2021-11-17 + // - Actual : ### + std::unique_ptr<vcl::pdf::PDFiumPageObject> pPageObject2 = pPdfPage->getObject(1); + OUString sText2 = pPageObject2->getText(pTextPage); + CPPUNIT_ASSERT_EQUAL(OUString("2021-11-17"), sText2); +} + CPPUNIT_TEST_SUITE_REGISTRATION(ScPDFExportTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sc/qa/extras/testdocuments/tdf143978.ods b/sc/qa/extras/testdocuments/tdf143978.ods new file mode 100644 index 000000000000..25a79defc66e Binary files /dev/null and b/sc/qa/extras/testdocuments/tdf143978.ods differ