diff options
Diffstat (limited to 'sw')
-rw-r--r-- | sw/qa/extras/uiwriter/uiwriter3.cxx | 56 | ||||
-rw-r--r-- | sw/qa/uitest/writer_tests2/deleteFootnotes.py | 44 |
2 files changed, 56 insertions, 44 deletions
diff --git a/sw/qa/extras/uiwriter/uiwriter3.cxx b/sw/qa/extras/uiwriter/uiwriter3.cxx index 00665b353d7d..c7bc792e4a5b 100644 --- a/sw/qa/extras/uiwriter/uiwriter3.cxx +++ b/sw/qa/extras/uiwriter/uiwriter3.cxx @@ -2294,6 +2294,62 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf130680) CPPUNIT_ASSERT_EQUAL(sal_Int32(23), xIndexAccess->getCount()); } +CPPUNIT_TEST_FIXTURE(SwUiWriterTest3, testTdf150457) +{ + createSwDoc(); + SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get()); + + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'a', 0); + Scheduler::ProcessEventsToIdle(); + + dispatchCommand(mxComponent, ".uno:InsertFootnote", {}); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'a', 0); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'b', 0); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'c', 0); + Scheduler::ProcessEventsToIdle(); + + auto xFootnotes = pTextDoc->getFootnotes(); + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), xFootnotes->getCount()); + auto xParagraph = uno::Reference<text::XTextRange>(xFootnotes->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("abc"), xParagraph->getString()); + + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_PAGEUP); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_RETURN); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'd', 0); + Scheduler::ProcessEventsToIdle(); + + dispatchCommand(mxComponent, ".uno:InsertFootnote", {}); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'd', 0); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'e', 0); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'f', 0); + Scheduler::ProcessEventsToIdle(); + + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), xFootnotes->getCount()); + xParagraph = uno::Reference<text::XTextRange>(xFootnotes->getByIndex(1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("def"), xParagraph->getString()); + + // This key sequence deletes a footnote and its number (without the fix applied) + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_UP); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_HOME); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_SHIFT | KEY_DOWN); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_DELETE); + + // Page up moves the cursor from the footnote area to the main text, then + // doing select all and pressing delete removes all the text and footenote references, + // thus removing all the footnotes + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_PAGEUP); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::SELECT_ALL); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_DELETE); + + // Without having fix in place, segfault happens after running next line + Scheduler::ProcessEventsToIdle(); + + // Without the fix, the above action should have already created a crash, + // but here we also check to make sure that the number of footnotes are + // exactly zero, as expected + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), xFootnotes->getCount()); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/uitest/writer_tests2/deleteFootnotes.py b/sw/qa/uitest/writer_tests2/deleteFootnotes.py deleted file mode 100644 index 0c6644097a51..000000000000 --- a/sw/qa/uitest/writer_tests2/deleteFootnotes.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-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/. -# - -from uitest.framework import UITestCase -from uitest.uihelper.common import type_text -from libreoffice.uno.propertyvalue import mkPropertyValues - -class tdf150457(UITestCase): - - def test_delete_footnotes(self): - with self.ui_test.create_doc_in_start_center("writer") as document: - xWriterDoc = self.xUITest.getTopFocusWindow() - xWriterEdit = xWriterDoc.getChild("writer_edit") - - type_text(xWriterEdit, "a") - self.xUITest.executeCommand(".uno:InsertFootnote") - type_text(xWriterEdit, "abc") - self.assertEqual(document.Footnotes[0].String, "abc") - self.assertEqual(document.Footnotes.getCount(), 1) - - xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "PAGEUP"})) - xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"})) - type_text(xWriterEdit, "d") - - self.xUITest.executeCommand(".uno:InsertFootnote") - type_text(xWriterEdit, "def") - self.assertEqual(document.Footnotes[1].String, "def") - self.assertEqual(document.Footnotes.getCount(), 2) - - xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "UP"})) - xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "HOME"})) - xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "SHIFT+DOWN"})) - xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "DELETE"})) - xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "PAGEUP"})) - xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "CTRL+A"})) - xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "DELETE"})) - -# vim: set shiftwidth=4 softtabstop=4 expandtab: |