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();

Reply via email to