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

Reply via email to