sc/qa/extras/scpdfexport.cxx | 43 ++++++++++++++++++++++++++++++++ sc/qa/extras/testdocuments/tdf78897.xls |binary 2 files changed, 43 insertions(+)
New commits: commit e634c893fbe388ad3978aaaa00db7fe0df280078 Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Thu Nov 18 11:36:48 2021 +0100 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Thu Nov 18 12:51:37 2021 +0100 tdf#78897: sc_pdf_export: Add unittest Change-Id: I943f6ee26101006c128dfd78c8915d73a4911e15 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125443 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sc/qa/extras/scpdfexport.cxx b/sc/qa/extras/scpdfexport.cxx index a85e05555d24..61c9376d5ac2 100644 --- a/sc/qa/extras/scpdfexport.cxx +++ b/sc/qa/extras/scpdfexport.cxx @@ -71,6 +71,7 @@ public: void testTdf64703_hiddenPageBreak(); void testTdf143978(); void testTdf84012(); + void testTdf78897(); CPPUNIT_TEST_SUITE(ScPDFExportTest); CPPUNIT_TEST(testExportRange_Tdf120161); @@ -79,6 +80,7 @@ public: CPPUNIT_TEST(testTdf64703_hiddenPageBreak); CPPUNIT_TEST(testTdf143978); CPPUNIT_TEST(testTdf84012); + CPPUNIT_TEST(testTdf78897); CPPUNIT_TEST_SUITE_END(); }; @@ -545,6 +547,47 @@ void ScPDFExportTest::testTdf84012() CPPUNIT_ASSERT_EQUAL(OUString("Blah blah (blah, blah)"), aActualText); } +void ScPDFExportTest::testTdf78897() +{ + std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get(); + if (!pPDFium) + { + return; + } + + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf78897.xls", + "com.sun.star.sheet.SpreadsheetDocument"); + uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY); + + // C3:D3 + ScRange range1(2, 2, 0, 3, 2, 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 nChars = pTextPage->countChars(); + std::vector<sal_uInt32> aChars(nChars); + for (int i = 0; i < nChars; i++) + aChars[i] = pTextPage->getUnicode(i); + OUString aActualText(aChars.data(), aChars.size()); + + // Without the fix in place, this test would have failed with + // - Expected: 11.00 11.00 + // - Actual : 11.00 ### + CPPUNIT_ASSERT_EQUAL(OUString(" 11.00 11.00 "), aActualText); +} + CPPUNIT_TEST_SUITE_REGISTRATION(ScPDFExportTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sc/qa/extras/testdocuments/tdf78897.xls b/sc/qa/extras/testdocuments/tdf78897.xls new file mode 100644 index 000000000000..e2177fc785aa Binary files /dev/null and b/sc/qa/extras/testdocuments/tdf78897.xls differ