sw/qa/extras/uiwriter/uiwriter3.cxx           |   56 ++++++++++++++++++++++++++
 sw/qa/uitest/writer_tests2/deleteFootnotes.py |   44 --------------------
 2 files changed, 56 insertions(+), 44 deletions(-)

New commits:
commit 894bb1128ca0e80b96d48bfd94556f70af02ce41
Author:     Hossein <hoss...@libreoffice.org>
AuthorDate: Wed May 3 15:13:06 2023 +0200
Commit:     Hossein <hoss...@libreoffice.org>
CommitDate: Thu May 4 15:17:35 2023 +0200

    tdf#150457 Port UITest to CppunitTest
    
    The UITest for tdf#150457 is now ported to CppunitTest. The new test can
    be run by:
    
     make CPPUNIT_TEST_NAME=testTdf150457 -sr CppunitTest_sw_uiwriter3
    
    Without the fix d05c176cc022f1b771f7c064f6ce74e9f8c27a1b in place,
    running the test leads to a segfault.
    
    Change-Id: I1d633cadf9f5579cdf3e1e59641108eadc7b7073
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151330
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-by: Hossein <hoss...@libreoffice.org>

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:

Reply via email to