diff options
Diffstat (limited to 'xmloff')
-rw-r--r-- | xmloff/CppunitTest_xmloff_text.mk | 44 | ||||
-rw-r--r-- | xmloff/Module_xmloff.mk | 1 | ||||
-rw-r--r-- | xmloff/qa/unit/data/mail-merge-editeng.odt | bin | 0 -> 9382 bytes | |||
-rw-r--r-- | xmloff/qa/unit/text.cxx | 61 | ||||
-rw-r--r-- | xmloff/source/text/txtvfldi.cxx | 40 |
5 files changed, 130 insertions, 16 deletions
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 Binary files differnew file mode 100644 index 000000000000..e6466e44e01e --- /dev/null +++ b/xmloff/qa/unit/data/mail-merge-editeng.odt 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); + } } } } |