summaryrefslogtreecommitdiff
path: root/sw/qa/core
diff options
context:
space:
mode:
authorTor Lillqvist <tml@collabora.com>2020-08-25 13:48:32 +0300
committerCaolán McNamara <caolanm@redhat.com>2020-08-28 20:26:54 +0200
commit3f291bb285335efbc2f21a08bdcb23d92911940c (patch)
tree613ebd5fd019de3866c8a1adc549b055dbfe0fec /sw/qa/core
parentc9b81503a85a2763e1bfd1b6722fcf6d96a983e7 (diff)
Add unit test for c123bfff501229f398a1b679fc7434b82d53685c
Change-Id: Ic616ec9f39b65f8e8ec840a48e3b5801b31cf5da Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101530 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sw/qa/core')
-rw-r--r--sw/qa/core/data/updateall-objectreplacements.odtbin0 -> 35630 bytes
-rw-r--r--sw/qa/core/updateall_objectreplacements.cxx92
2 files changed, 92 insertions, 0 deletions
diff --git a/sw/qa/core/data/updateall-objectreplacements.odt b/sw/qa/core/data/updateall-objectreplacements.odt
new file mode 100644
index 000000000000..35decf73f895
--- /dev/null
+++ b/sw/qa/core/data/updateall-objectreplacements.odt
Binary files differ
diff --git a/sw/qa/core/updateall_objectreplacements.cxx b/sw/qa/core/updateall_objectreplacements.cxx
new file mode 100644
index 000000000000..92997d498e59
--- /dev/null
+++ b/sw/qa/core/updateall_objectreplacements.cxx
@@ -0,0 +1,92 @@
+/* -*- 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 <swmodeltestbase.hxx>
+
+#include <unotools/mediadescriptor.hxx>
+#include <comphelper/processfactory.hxx>
+#include <osl/file.hxx>
+
+#include <com/sun/star/frame/DispatchHelper.hpp>
+#include <com/sun/star/frame/XComponentLoader.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/packages/zip/ZipFileAccess.hpp>
+
+#include <unotxdoc.hxx>
+#include <docsh.hxx>
+#include <wrtsh.hxx>
+#include <swdtflvr.hxx>
+
+char const DATA_DIRECTORY[] = "/sw/qa/core/data/";
+
+/// Covers sw/source/core/undo/ fixes.
+class SwCoreUpdateAllObjectReplacementsTest : public SwModelTestBase
+{
+};
+
+CPPUNIT_TEST_FIXTURE(SwCoreUpdateAllObjectReplacementsTest, testDoIt)
+{
+ // Make a temporary copy of the test document
+ utl::TempFile tmp;
+ tmp.EnableKillingFile();
+ OUString sTempCopy = tmp.GetURL();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None,
+ osl::File::copy(m_directories.getURLFromSrc(DATA_DIRECTORY)
+ + "updateall-objectreplacements.odt",
+ sTempCopy));
+
+ /* BASIC code that exhibits the problem:
+
+ desktop = CreateUnoService("com.sun.star.frame.Desktop")
+ Dim props(0) as new com.sun.star.beans.PropertyValue
+ props(0).Name = "Hidden"
+ props(0).Value = true
+ component = desktop.loadComponentFromURL("file://.../test.odt", "_default", 0, props)
+ Wait 1000 ' workaround
+ dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
+ frame = component.CurrentController.Frame
+ dispatcher.executeDispatch(frame, ".uno:UpdateAll", "", 0, Array())
+ component.storeSelf(Array())
+ component.dispose()
+ */
+
+ uno::Reference<lang::XMultiServiceFactory> xFactory(comphelper::getProcessServiceFactory());
+
+ // Load the copy
+ uno::Reference<uno::XInterface> xInterface
+ = xFactory->createInstance("com.sun.star.frame.Desktop");
+ uno::Reference<frame::XComponentLoader> xComponentLoader(xInterface, uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aLoadArgs(1);
+ aLoadArgs[0].Name = "Hidden";
+ aLoadArgs[0].Value <<= true;
+ mxComponent = xComponentLoader->loadComponentFromURL(sTempCopy, "_default", 0, aLoadArgs);
+
+ // Perform the .uno:UpdateAll call and save
+ xInterface = xFactory->createInstance("com.sun.star.frame.DispatchHelper");
+ uno::Reference<frame::XDispatchHelper> xDispatchHelper(xInterface, uno::UNO_QUERY);
+ uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
+ uno::Reference<frame::XDispatchProvider> xDispatchProvider(
+ xModel->getCurrentController()->getFrame(), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aNoArgs;
+ xDispatchHelper->executeDispatch(xDispatchProvider, ".uno:UpdateAll", OUString(), 0, aNoArgs);
+ uno::Reference<frame::XStorable2> xStorable(mxComponent, uno::UNO_QUERY);
+ xStorable->storeSelf(aNoArgs);
+
+ // Check the contents of the updated copy and verify that ObjectReplacements are there
+ uno::Reference<packages::zip::XZipFileAccess2> xNameAccess
+ = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(xFactory),
+ sTempCopy);
+
+ CPPUNIT_ASSERT(xNameAccess->hasByName("ObjectReplacements/Components"));
+ CPPUNIT_ASSERT(xNameAccess->hasByName("ObjectReplacements/Components_1"));
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */