diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2020-08-17 21:06:32 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2020-08-18 09:03:45 +0200 |
commit | b784ee4feb554987eff1c7fdaff640abb340504d (patch) | |
tree | bf6cd0a4958bf1dbe3bed72a839cb4720d3dc1f1 /sw/qa | |
parent | b7b4565473b09c771d5a949c394013956f1c4db7 (diff) |
tdf#135016 DOCX export: fix unexpected error on save with undo/redo
Regression from commit d379d18666aa42031359ca8eb34b0021960347ae (oox:
import WPS shape with text as shape with textbox, 2014-06-18), then
problem was that when undo restored text deleted by cut, we ended up
with an SwXShape that had no frame format.
Fix the problem by deleting the cached old UNO wrapper after changing
the association between a textbox's shape and text frame.
An alternative would be to handle errors better when the TextBox UNO
property is not of type bool, but that would still lead to silent data
loss, so don't fix the problem that way.
Change-Id: Id45ad292befc746e7c49a3b827c91efd069d29df
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100876
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'sw/qa')
-rw-r--r-- | sw/qa/core/undo/data/textbox-cut-save.docx | bin | 0 -> 7272 bytes | |||
-rw-r--r-- | sw/qa/core/undo/undo.cxx | 55 |
2 files changed, 55 insertions, 0 deletions
diff --git a/sw/qa/core/undo/data/textbox-cut-save.docx b/sw/qa/core/undo/data/textbox-cut-save.docx Binary files differnew file mode 100644 index 000000000000..a1a350d08aac --- /dev/null +++ b/sw/qa/core/undo/data/textbox-cut-save.docx diff --git a/sw/qa/core/undo/undo.cxx b/sw/qa/core/undo/undo.cxx new file mode 100644 index 000000000000..aeacffc78e9b --- /dev/null +++ b/sw/qa/core/undo/undo.cxx @@ -0,0 +1,55 @@ +/* -*- 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 <unotxdoc.hxx> +#include <docsh.hxx> +#include <wrtsh.hxx> +#include <swdtflvr.hxx> + +char const DATA_DIRECTORY[] = "/sw/qa/core/undo/data/"; + +/// Covers sw/source/core/undo/ fixes. +class SwCoreUndoTest : public SwModelTestBase +{ +}; + +CPPUNIT_TEST_FIXTURE(SwCoreUndoTest, testTextboxCutSave) +{ + // Load the document and select all. + load(DATA_DIRECTORY, "textbox-cut-save.docx"); + SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get()); + SwDocShell* pDocShell = pTextDoc->GetDocShell(); + SwWrtShell* pWrtShell = pDocShell->GetWrtShell(); + pWrtShell->SelAll(); + + // Cut. + rtl::Reference<SwTransferable> pTransfer = new SwTransferable(*pWrtShell); + pTransfer->Cut(); + + // Undo. + pWrtShell->Undo(); + + // Save. + uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY); + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= OUString("Office Open XML Text"); + + // Without the accompanying fix in place, this test would have failed with: + // void sax_fastparser::FastSaxSerializer::endDocument(): Assertion `mbMarkStackEmpty && maMarkStack.empty()' failed. + // i.e. failed to save because we tried to write not-well-formed XML. + xStorable->storeToURL(maTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |