[Libreoffice-commits] core.git: Branch 'libreoffice-6-4-6' - xmloff/CppunitTest_xmloff_text.mk xmloff/Module_xmloff.mk xmloff/qa xmloff/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Thu Aug 6 14:12:55 UTC 2020


 xmloff/CppunitTest_xmloff_text.mk          |   44 ++++++++++++++++++++
 xmloff/Module_xmloff.mk                    |    1 
 xmloff/qa/unit/data/mail-merge-editeng.odt |binary
 xmloff/qa/unit/text.cxx                    |   61 +++++++++++++++++++++++++++++
 xmloff/source/text/txtvfldi.cxx            |   40 +++++++++++--------
 5 files changed, 130 insertions(+), 16 deletions(-)

New commits:
commit 8ec82ef91f741a19798f8dda280d7fc2356f797a
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Mon Aug 3 21:03:43 2020 +0200
Commit:     Michael Stahl <michael.stahl at cib.de>
CommitDate: Thu Aug 6 16:11:59 2020 +0200

    tdf#130707 xmloff: survive <text:database-display> in editeng text
    
    Regression from commit 28d67b792724a23015dec32fb0278b729f676736
    (tdf#107776 sw ODF shape import: make is-textbox check more strict,
    2019-08-26), now that we correctly identify what shape text to import as
    "textbox" (Writer TextFrame) and what to import as editeng text, there
    are documents out there that try to import mailmerge fields into
    editeng-based shape text. Fix missing error handling there.
    
    Note that the error is not just silently ignored, we do insert the field
    result into the shape text, existing code provides this already.
    
    (cherry picked from commit fd18d12efdfbe0e26d41d733edc711d0f40a7804)
    
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100038
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>
    (cherry picked from commit fec8b842d701cca0b79af9ea9f6192a8cf7610b0)
    
    Change-Id: Ibe631ac5d94c1c7795dd00bad05fdcca0e6741a8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100055
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>
    (cherry picked from commit 790ab54d7232d232ba84f17f285d4639ddba80d5)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100066
    Reviewed-by: Xisco Fauli <xiscofauli at libreoffice.org>
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Tested-by: Michael Stahl <michael.stahl at cib.de>

diff --git a/xmloff/CppunitTest_xmloff_text.mk b/xmloff/CppunitTest_xmloff_text.mk
new file mode 100644
index 000000000000..e3259672605b
--- /dev/null
+++ b/xmloff/CppunitTest_xmloff_text.mk
@@ -0,0 +1,44 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#*************************************************************************
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+#*************************************************************************
+
+$(eval $(call gb_CppunitTest_CppunitTest,xmloff_text))
+
+$(eval $(call gb_CppunitTest_use_externals,xmloff_text,\
+	boost_headers \
+))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,xmloff_text, \
+    xmloff/qa/unit/text \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,xmloff_text, \
+    comphelper \
+    cppu \
+    embobj \
+    sal \
+    test \
+    unotest \
+))
+
+$(eval $(call gb_CppunitTest_use_sdk_api,xmloff_text))
+
+$(eval $(call gb_CppunitTest_use_ure,xmloff_text))
+$(eval $(call gb_CppunitTest_use_vcl,xmloff_text))
+
+$(eval $(call gb_CppunitTest_use_rdb,xmloff_text,services))
+
+$(eval $(call gb_CppunitTest_use_custom_headers,xmloff_text,\
+	officecfg/registry \
+))
+
+$(eval $(call gb_CppunitTest_use_configuration,xmloff_text))
+
+# vim: set noet sw=4 ts=4:
diff --git a/xmloff/Module_xmloff.mk b/xmloff/Module_xmloff.mk
index 16cf0f817889..fe69b86b09f6 100644
--- a/xmloff/Module_xmloff.mk
+++ b/xmloff/Module_xmloff.mk
@@ -30,6 +30,7 @@ $(eval $(call gb_Module_add_check_targets,xmloff,\
 	$(if $(MERGELIBS),, \
 		CppunitTest_xmloff_uxmloff) \
 	CppunitTest_xmloff_style \
+	CppunitTest_xmloff_text \
 ))
 
 $(eval $(call gb_Module_add_subsequentcheck_targets,xmloff,\
diff --git a/xmloff/qa/unit/data/mail-merge-editeng.odt b/xmloff/qa/unit/data/mail-merge-editeng.odt
new file mode 100644
index 000000000000..e6466e44e01e
Binary files /dev/null and b/xmloff/qa/unit/data/mail-merge-editeng.odt differ
diff --git a/xmloff/qa/unit/text.cxx b/xmloff/qa/unit/text.cxx
new file mode 100644
index 000000000000..d7da798bafab
--- /dev/null
+++ b/xmloff/qa/unit/text.cxx
@@ -0,0 +1,61 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <test/bootstrapfixture.hxx>
+#include <unotest/macros_test.hxx>
+#include <comphelper/processfactory.hxx>
+
+#include <com/sun/star/frame/Desktop.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+
+using namespace ::com::sun::star;
+
+char const DATA_DIRECTORY[] = "/xmloff/qa/unit/data/";
+
+/// Covers xmloff/source/text/ fixes.
+class XmloffStyleTest : public test::BootstrapFixture, public unotest::MacrosTest
+{
+private:
+    uno::Reference<lang::XComponent> mxComponent;
+
+public:
+    void setUp() override;
+    void tearDown() override;
+    uno::Reference<lang::XComponent>& getComponent() { return mxComponent; }
+};
+
+void XmloffStyleTest::setUp()
+{
+    test::BootstrapFixture::setUp();
+
+    uno::Reference<uno::XComponentContext> xComponentContext
+        = comphelper::getProcessComponentContext();
+    mxDesktop.set(frame::Desktop::create(xComponentContext));
+}
+
+void XmloffStyleTest::tearDown()
+{
+    if (mxComponent.is())
+        mxComponent->dispose();
+
+    test::BootstrapFixture::tearDown();
+}
+
+CPPUNIT_TEST_FIXTURE(XmloffStyleTest, testMailMergeInEditeng)
+{
+    OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "mail-merge-editeng.odt";
+    getComponent() = loadFromDesktop(aURL);
+    // Without the accompanying fix in place, this test would have failed, as unexpected
+    // <text:database-display> in editeng text abored the whole import process.
+    CPPUNIT_ASSERT(getComponent().is());
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/text/txtvfldi.cxx b/xmloff/source/text/txtvfldi.cxx
index 5a1f2255035e..7bc398e146c6 100644
--- a/xmloff/source/text/txtvfldi.cxx
+++ b/xmloff/source/text/txtvfldi.cxx
@@ -45,6 +45,7 @@
 
 #include <rtl/ustring.hxx>
 #include <osl/diagnose.h>
+#include <sal/log.hxx>
 
 #include <tools/debug.hxx>
 
@@ -1017,27 +1018,34 @@ void XMLDatabaseDisplayImportContext::EndElement()
                     if (xTextContent.is())
                     {
                         // insert, set field properties and exit!
-                        GetImportHelper().InsertTextContent(xTextContent);
+                        try
+                        {
+                            GetImportHelper().InsertTextContent(xTextContent);
 
-                        // prepare field: format from database?
-                        bool bTmp = !aValueHelper.IsFormatOK();
-                        xField->setPropertyValue("DataBaseFormat", Any(bTmp));
+                            // prepare field: format from database?
+                            bool bTmp = !aValueHelper.IsFormatOK();
+                            xField->setPropertyValue("DataBaseFormat", Any(bTmp));
 
-                        // value, value-type and format done by value helper
-                        aValueHelper.PrepareField(xField);
+                            // value, value-type and format done by value helper
+                            aValueHelper.PrepareField(xField);
 
-                        // visibility
-                        if( bDisplayOK )
-                        {
-                            xField->setPropertyValue(sAPI_is_visible, Any(bDisplay));
-                        }
+                            // visibility
+                            if( bDisplayOK )
+                            {
+                                xField->setPropertyValue(sAPI_is_visible, Any(bDisplay));
+                            }
 
-                        // set presentation
-                        aAny <<= GetContent();
-                        xField->setPropertyValue(sAPI_current_presentation, aAny);
+                            // set presentation
+                            aAny <<= GetContent();
+                            xField->setPropertyValue(sAPI_current_presentation, aAny);
 
-                        // success!
-                        return;
+                            // success!
+                            return;
+                        }
+                        catch (const lang::IllegalArgumentException& rException)
+                        {
+                            SAL_WARN("xmloff.text", "Failed to insert text content: " << rException.Message);
+                        }
                     }
                 }
             }


More information about the Libreoffice-commits mailing list