[Libreoffice-commits] core.git: oox/CppunitTest_oox_shape.mk oox/Module_oox.mk oox/qa oox/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Tue Jan 14 07:51:24 UTC 2020


 oox/CppunitTest_oox_shape.mk                |   45 +++++++++++++++
 oox/Module_oox.mk                           |    1 
 oox/qa/unit/data/multiple-group-shapes.docx |binary
 oox/qa/unit/shape.cxx                       |   84 ++++++++++++++++++++++++++++
 oox/source/shape/ShapeContextHandler.cxx    |    1 
 5 files changed, 131 insertions(+)

New commits:
commit 5960c6f4ca9dd6ab4b4081d3be7253468cd212c4
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Mon Jan 13 20:08:54 2020 +0100
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Tue Jan 14 08:50:52 2020 +0100

    tdf#129516 DOCX import: fix incorrect z-order with textboxes
    
    Commit 3272c1eb5563f3bda2caa24f32b1018372622109 (related tdf#100074:
    prepare group shapes text input via writerfilter, 2018-10-01) tweaked
    the oox code, so that later it'll be able to call back to writerfilter
    to parse group shape text. That makes sense, but it also removed the
    reset of the group shape context, which means that two subsequent group
    shapes are now imported as a single group shape with a merged child
    list.
    
    Reset the group shape context again when writerfilter asks for the
    XShape from oox. If this causes a problem for the above scenario later,
    then it could be considered to handle this in
    ShapeContextHandler::endFastElement().
    
    Change-Id: I14f7f0bab2c66c8430313d5b2daffe3160a58c27
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86712
    Tested-by: Jenkins
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>

diff --git a/oox/CppunitTest_oox_shape.mk b/oox/CppunitTest_oox_shape.mk
new file mode 100644
index 000000000000..9ae7bbd634cd
--- /dev/null
+++ b/oox/CppunitTest_oox_shape.mk
@@ -0,0 +1,45 @@
+# -*- 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,oox_shape))
+
+$(eval $(call gb_CppunitTest_use_externals,oox_shape,\
+	boost_headers \
+))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,oox_shape, \
+    oox/qa/unit/shape \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,oox_shape, \
+    comphelper \
+    cppu \
+    oox \
+    sal \
+    test \
+    unotest \
+    utl \
+))
+
+$(eval $(call gb_CppunitTest_use_sdk_api,oox_shape))
+
+$(eval $(call gb_CppunitTest_use_ure,oox_shape))
+$(eval $(call gb_CppunitTest_use_vcl,oox_shape))
+
+$(eval $(call gb_CppunitTest_use_rdb,oox_shape,services))
+
+$(eval $(call gb_CppunitTest_use_custom_headers,oox_shape,\
+	officecfg/registry \
+))
+
+$(eval $(call gb_CppunitTest_use_configuration,oox_shape))
+
+# vim: set noet sw=4 ts=4:
diff --git a/oox/Module_oox.mk b/oox/Module_oox.mk
index a40c46aaebbc..ed85ee68da2d 100644
--- a/oox/Module_oox.mk
+++ b/oox/Module_oox.mk
@@ -28,6 +28,7 @@ $(eval $(call gb_Module_add_check_targets,oox,\
 	CppunitTest_oox_mathml \
 	CppunitTest_oox_drawingml \
 	CppunitTest_oox_vml \
+	CppunitTest_oox_shape \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/oox/qa/unit/data/multiple-group-shapes.docx b/oox/qa/unit/data/multiple-group-shapes.docx
new file mode 100644
index 000000000000..c751bcdf650b
Binary files /dev/null and b/oox/qa/unit/data/multiple-group-shapes.docx differ
diff --git a/oox/qa/unit/shape.cxx b/oox/qa/unit/shape.cxx
new file mode 100644
index 000000000000..27d26aa91b57
--- /dev/null
+++ b/oox/qa/unit/shape.cxx
@@ -0,0 +1,84 @@
+/* -*- 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 <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
+#include <com/sun/star/embed/XStorage.hpp>
+#include <com/sun/star/frame/Desktop.hpp>
+#include <com/sun/star/frame/XStorable.hpp>
+#include <com/sun/star/text/WritingMode2.hpp>
+
+#include <comphelper/embeddedobjectcontainer.hxx>
+#include <comphelper/processfactory.hxx>
+#include <comphelper/propertyvalue.hxx>
+#include <comphelper/scopeguard.hxx>
+#include <comphelper/storagehelper.hxx>
+#include <unotools/mediadescriptor.hxx>
+#include <unotools/tempfile.hxx>
+
+using namespace ::com::sun::star;
+
+char const DATA_DIRECTORY[] = "/oox/qa/unit/data/";
+
+/// oox shape tests.
+class OoxShapeTest : public test::BootstrapFixture, public unotest::MacrosTest
+{
+private:
+    uno::Reference<uno::XComponentContext> mxComponentContext;
+    uno::Reference<lang::XComponent> mxComponent;
+
+public:
+    void setUp() override;
+    void tearDown() override;
+    uno::Reference<lang::XComponent>& getComponent() { return mxComponent; }
+    void load(const OUString& rURL);
+};
+
+void OoxShapeTest::setUp()
+{
+    test::BootstrapFixture::setUp();
+
+    mxComponentContext.set(comphelper::getComponentContext(getMultiServiceFactory()));
+    mxDesktop.set(frame::Desktop::create(mxComponentContext));
+}
+
+void OoxShapeTest::tearDown()
+{
+    if (mxComponent.is())
+        mxComponent->dispose();
+
+    test::BootstrapFixture::tearDown();
+}
+
+void OoxShapeTest::load(const OUString& rFileName)
+{
+    OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + rFileName;
+    mxComponent = loadFromDesktop(aURL);
+}
+
+CPPUNIT_TEST_FIXTURE(OoxShapeTest, testMultipleGroupShapes)
+{
+    load("multiple-group-shapes.docx");
+
+    uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(getComponent(), uno::UNO_QUERY);
+    uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0),
+                                                 uno::UNO_QUERY);
+    // Without the accompanying fix in place, this test would have failed with:
+    // - Expected: 2
+    // - Actual  : 1
+    // i.e. the 2 group shapes from the document were imported as a single one.
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), xDrawPage->getCount());
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/oox/source/shape/ShapeContextHandler.cxx b/oox/source/shape/ShapeContextHandler.cxx
index 9db23f51b325..f0dfae3366ab 100644
--- a/oox/source/shape/ShapeContextHandler.cxx
+++ b/oox/source/shape/ShapeContextHandler.cxx
@@ -498,6 +498,7 @@ ShapeContextHandler::getShape()
                 pShape->addShape(*mxFilterBase, mpThemePtr.get(), xShapes, aMatrix, pShape->getFillProperties());
                 xResult = pShape->getXShape();
                 mxSavedShape = xResult;
+                mxWpgContext.clear();
             }
         }
         else if (mpShape.get() != nullptr)


More information about the Libreoffice-commits mailing list