sc/qa/extras/scpdfexport.cxx | 71 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+)
New commits: commit c5844bad90dd056ca533ba86443e179ee4611f2c Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Fri Dec 9 20:52:18 2022 +0100 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Sat Dec 10 07:46:08 2022 +0000 tdf#120190: sc_pdf_export: Add unittest Exporting to pdf is the only way I could find to test this issue Change-Id: I1f75d841b09d13807fb1e9e4418a58638d985870 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143890 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 a3056965c733..a1babf5daa07 100644 --- a/sc/qa/extras/scpdfexport.cxx +++ b/sc/qa/extras/scpdfexport.cxx @@ -29,6 +29,7 @@ #include <comphelper/propertyvalue.hxx> #include <vcl/filter/PDFiumLibrary.hxx> +#include <vcl/scheduler.hxx> #if USE_TLS_NSS #include <nss.h> @@ -62,6 +63,7 @@ public: void testUnoCommands_Tdf120161(); void testTdf64703_hiddenPageBreak(); void testTdf143978(); + void testTdf120190(); void testTdf84012(); void testTdf78897(); void testForcepoint97(); @@ -72,6 +74,7 @@ public: CPPUNIT_TEST(testUnoCommands_Tdf120161); CPPUNIT_TEST(testTdf64703_hiddenPageBreak); CPPUNIT_TEST(testTdf143978); + CPPUNIT_TEST(testTdf120190); CPPUNIT_TEST(testTdf84012); CPPUNIT_TEST(testTdf78897); CPPUNIT_TEST(testForcepoint97); @@ -426,6 +429,74 @@ void ScPDFExportTest::testTdf143978() CPPUNIT_ASSERT_EQUAL(OUString("2021-11-17"), sText2); } +void ScPDFExportTest::testTdf120190() +{ + std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get(); + if (!pPDFium) + { + return; + } + + mxComponent = loadFromDesktop("private:factory/scalc"); + uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY); + + uno::Reference<sheet::XSpreadsheetDocument> xDoc(mxComponent, uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_MESSAGE("no calc document", xDoc.is()); + + uno::Reference<sheet::XSpreadsheets> xSheets(xDoc->getSheets(), uno::UNO_SET_THROW); + uno::Reference<container::XIndexAccess> xIA(xSheets, uno::UNO_QUERY_THROW); + uno::Reference<sheet::XSpreadsheet> xSheet0(xIA->getByIndex(0), uno::UNO_QUERY_THROW); + + xSheet0->getCellByPosition(0, 0)->setFormula("=5&CHAR(10)&6"); + + uno::Sequence<beans::PropertyValue> aArgs + = comphelper::InitPropertySequence({ { "ToPoint", uno::Any(OUString("A1")) } }); + dispatchCommand(mxComponent, ".uno:GoToCell", aArgs); + + dispatchCommand(mxComponent, ".uno:ConvertFormulaToValue", {}); + Scheduler::ProcessEventsToIdle(); + + // A1 + ScRange range1(0, 0, 0, 0, 0, 0); + exportToPDF(xModel, range1); + + // Parse the export result with pdfium. + std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport(); + 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(5, nPageObjectCount); + + std::unique_ptr<vcl::pdf::PDFiumPageObject> pPageObject1 = pPdfPage->getObject(0); + OUString sText1 = pPageObject1->getText(pTextPage); + CPPUNIT_ASSERT_EQUAL(OUString("Sheet1"), sText1); + + std::unique_ptr<vcl::pdf::PDFiumPageObject> pPageObject2 = pPdfPage->getObject(1); + OUString sText2 = pPageObject2->getText(pTextPage); + CPPUNIT_ASSERT_EQUAL(OUString("Page "), sText2); + + std::unique_ptr<vcl::pdf::PDFiumPageObject> pPageObject3 = pPdfPage->getObject(2); + OUString sText3 = pPageObject3->getText(pTextPage); + CPPUNIT_ASSERT_EQUAL(OUString("1"), sText3); + + std::unique_ptr<vcl::pdf::PDFiumPageObject> pPageObject4 = pPdfPage->getObject(3); + OUString sText4 = pPageObject4->getText(pTextPage); + + // Without the fix in place, this test would have failed with + // - Expected: 5 + // - Actual : 56 + CPPUNIT_ASSERT_EQUAL(OUString("5"), sText4); + + std::unique_ptr<vcl::pdf::PDFiumPageObject> pPageObject5 = pPdfPage->getObject(4); + OUString sText5 = pPageObject5->getText(pTextPage); + CPPUNIT_ASSERT_EQUAL(OUString("6"), sText5); +} + void ScPDFExportTest::testTdf84012() { std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();