summaryrefslogtreecommitdiff
path: root/uitest
diff options
context:
space:
mode:
Diffstat (limited to 'uitest')
-rw-r--r--uitest/uitest/test.py25
-rw-r--r--uitest/writer_tests/spellDialog.py70
2 files changed, 92 insertions, 3 deletions
diff --git a/uitest/uitest/test.py b/uitest/uitest/test.py
index f477369154fa..122df519da4d 100644
--- a/uitest/uitest/test.py
+++ b/uitest/uitest/test.py
@@ -177,7 +177,23 @@ class UITest(object):
time_ += DEFAULT_SLEEP
time.sleep(DEFAULT_SLEEP)
- def execute_blocking_action(self, action, dialog_element, args = ()):
+ def execute_blocking_action(self, action, dialog_element=None,
+ args=(), dialog_handler=None):
+ """Executes an action which blocks while a dialog is shown.
+
+ Click a button or perform some other action on the dialog when it
+ is shown.
+
+ Args:
+ action(callable): Will be called to show a dialog, and is expected
+ to block while the dialog is shown.
+ dialog_element(str, optional): The name of a button on the dialog
+ which will be clicked when the dialog is shown.
+ args(tuple, optional): The arguments to be passed to `action`
+ dialog_handler(callable, optional): Will be called when the dialog
+ is shown, with the dialog object passed as a parameter.
+ """
+
thread = threading.Thread(target=action, args=args)
with EventListener(self._xContext, ["DialogExecute", "ModelessDialogExecute"]) as event:
thread.start()
@@ -185,8 +201,11 @@ class UITest(object):
while time_ < MAX_WAIT:
if event.executed:
xDlg = self._xUITest.getTopFocusWindow()
- xUIElement = xDlg.getChild(dialog_element)
- xUIElement.executeAction("CLICK", tuple())
+ if dialog_element:
+ xUIElement = xDlg.getChild(dialog_element)
+ xUIElement.executeAction("CLICK", tuple())
+ if dialog_handler:
+ dialog_handler(xDlg)
thread.join()
return
diff --git a/uitest/writer_tests/spellDialog.py b/uitest/writer_tests/spellDialog.py
new file mode 100644
index 000000000000..9b36ea2a0aa6
--- /dev/null
+++ b/uitest/writer_tests/spellDialog.py
@@ -0,0 +1,70 @@
+#
+# 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
+
+class SpellingAndGrammarDialog(UITestCase):
+
+ def launch_dialog(self):
+ self.ui_test.execute_modeless_dialog_through_command(
+ ".uno:SpellingAndGrammarDialog")
+
+ return self.xUITest.getTopFocusWindow()
+
+ TDF46852_INPUT = """\
+dogg
+dogg
+catt dogg
+frogg frogg
+frogg catt dogg
+dogg catt
+frog, dogg, catt"""
+
+ TDF46852_CORRECTED = """\
+dog
+dog
+tact dog
+frog frog
+frog tact dog
+dog tact
+frog, dog, tact"""
+
+ def test_tdf46852(self):
+ # This automates the steps described in the bug report tdf#46852
+
+ # Step 1: Create a document with repetitious misspelled words
+ self.ui_test.create_doc_in_start_center("writer")
+ document = self.ui_test.get_component()
+ cursor = document.getCurrentController().getViewCursor()
+ input_text = self.TDF46852_INPUT.replace('\n', '\r') # \r = para break
+ document.Text.insertString(cursor, input_text, False)
+
+ # Step 2: Place cursor on 4th line after second "frogg"
+ cursor.goUp(2, False)
+ cursor.goLeft(1, False)
+
+ # Step 3: Initiate spellchecking
+ spell_dialog = self.launch_dialog()
+
+ # Step 4: Repetitively click on "Correct all" for each misspelling
+ # prompt until end of document is reached.
+ changeall = spell_dialog.getChild('changeall')
+ changeall.executeAction("CLICK", ())
+ changeall.executeAction("CLICK", ())
+ # The third time we click on changeall, the click action is going to
+ # block while two message boxes are shown, so we need to do this third
+ # click specially:
+ self.ui_test.execute_blocking_action(
+ changeall.executeAction, args=('CLICK', ()),
+ # Step 5: Confirm to "Continue check at beginning of document"
+ dialog_handler=lambda dialog :
+ self.ui_test.execute_blocking_action(
+ dialog.getChild('yes').executeAction, 'ok', ('CLICK', ())
+ )
+ )
+
+ self.assertEqual(document.Text.getString(), self.TDF46852_CORRECTED)
+