vcl/qa/cppunit/pdfexport/data/tdf154549.odt |binary
 vcl/qa/cppunit/pdfexport/pdfexport.cxx      |   33 ++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+)

New commits:
commit 8c3e219a831719ebb40dd2af8a26b0a24ad7aba1
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Mon Apr 3 16:45:30 2023 +0200
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Wed Apr 5 20:43:43 2023 +0200

    tdf#154549: vcl_pdfexport: Add unittest
    
    Change-Id: Ia2865346e966cdd4b64ed588a29cc1e760d36c73
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149969
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/vcl/qa/cppunit/pdfexport/data/tdf154549.odt 
b/vcl/qa/cppunit/pdfexport/data/tdf154549.odt
new file mode 100644
index 000000000000..09ed1324ecbb
Binary files /dev/null and b/vcl/qa/cppunit/pdfexport/data/tdf154549.odt differ
diff --git a/vcl/qa/cppunit/pdfexport/pdfexport.cxx 
b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
index beb1a1daf50c..65e1a06a4b99 100644
--- a/vcl/qa/cppunit/pdfexport/pdfexport.cxx
+++ b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
@@ -1216,6 +1216,39 @@ CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf115117_2a)
 #endif
 }
 
+CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf154549)
+{
+// FIXME: On Windows, the number of chars is 4 instead of 3
+#ifndef _WIN32
+    aMediaDescriptor["FilterName"] <<= OUString("writer_pdf_Export");
+    saveAsPDF(u"tdf154549.odt");
+
+    // Parse the export result with pdfium.
+    std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+
+    CPPUNIT_ASSERT_EQUAL(1, pPdfDocument->getPageCount());
+    std::unique_ptr<vcl::pdf::PDFiumPage> pPdfPage = 
pPdfDocument->openPage(/*nIndex=*/0);
+    CPPUNIT_ASSERT(pPdfPage);
+
+    std::unique_ptr<vcl::pdf::PDFiumTextPage> pPdfTextPage = 
pPdfPage->getTextPage();
+    CPPUNIT_ASSERT(pPdfTextPage);
+
+    int nChars = pPdfTextPage->countChars();
+
+    CPPUNIT_ASSERT_EQUAL(3, nChars);
+
+    std::vector<sal_uInt32> aChars(nChars);
+    for (int i = 0; i < nChars; i++)
+        aChars[i] = pPdfTextPage->getUnicode(i);
+    OUString aActualText(aChars.data(), aChars.size());
+
+    // Without the fix in place, this test would have failed with
+    // - Expected: ִبي
+    // - Actual  : بִي
+    CPPUNIT_ASSERT_EQUAL(OUString(u"\u05B4\u0628\u064A"), aActualText);
+#endif
+}
+
 CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf150846)
 {
     // Without the fix in place, this test would have failed with

Reply via email to