diff options
Diffstat (limited to 'sw/qa/uitest/navigator/tdf154521.py')
-rw-r--r-- | sw/qa/uitest/navigator/tdf154521.py | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/sw/qa/uitest/navigator/tdf154521.py b/sw/qa/uitest/navigator/tdf154521.py new file mode 100644 index 0000000000..048efb0212 --- /dev/null +++ b/sw/qa/uitest/navigator/tdf154521.py @@ -0,0 +1,203 @@ +# -*- 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 libreoffice.uno.propertyvalue import mkPropertyValues +from uitest.uihelper.common import get_state_as_dict +from com.sun.star.view import XSelectionChangeListener +import unohelper + +selectionChangedResult = 0 + +class XSelectionChangeListenerExtended(unohelper.Base, XSelectionChangeListener): + # is invoked when a text selected, e.g. by selecting a bookmark in the Navigator + @classmethod + def selectionChanged(self, event): + global selectionChangedResult + selection = event.Source.getSelection() + if selection.supportsService("com.sun.star.text.TextRanges"): + textRange = selection.getByIndex(0) + if textRange.getString() == "foo": + selectionChangedResult = 1 + else: + selectionChangedResult = -1 + + @classmethod + def disposing(self, event): + pass + +class tdf154521(UITestCase): + + def test_tdf154521(self): + global selectionChangedResult + with self.ui_test.create_doc_in_start_center("writer") as xDoc: + + xWriterDoc = self.xUITest.getTopFocusWindow() + xWriterEdit = xWriterDoc.getChild("writer_edit") + + self.xUITest.executeCommand(".uno:Sidebar") + xWriterEdit.executeAction("SIDEBAR", mkPropertyValues({"PANEL": "SwNavigatorPanel"})) + + xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") + xToolBar = xNavigatorPanel.getChild("content5") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "0"})) # 'root' button + + # type "foo", and create a bookmark on it + + self.xUITest.executeCommand(".uno:Escape") + + xDoc.Text.insertString(xDoc.Text.getStart(), "foo", False) + self.xUITest.executeCommand(".uno:SelectAll") + + with self.ui_test.execute_dialog_through_command(".uno:InsertBookmark", close_button="insert"): + pass + + xWriterEdit.executeAction("FOCUS", tuple()) + + # add XSelectionChangeListener + + xListener = XSelectionChangeListenerExtended() + self.assertIsNotNone(xListener) + xDoc.CurrentController.addSelectionChangeListener(xListener) + + xContentTree = xNavigatorPanel.getChild("contenttree") + + self.ui_test.wait_until_property_is_updated(xContentTree, "SelectEntryText", "Bookmark 1") + self.assertEqual(get_state_as_dict(xContentTree)["SelectEntryText"], "Bookmark 1") + self.assertEqual(get_state_as_dict(xContentTree)["SelectionCount"], "1") + + # select bookmark to trigger selectionChanged event + + xContentTree.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"})) + + # wait for handling the selectionChanged event + while selectionChangedResult == 0: + pass + + # This was -1 (missing selection because of early broadcasting) + self.assertEqual(selectionChangedResult, 1) + + self.xUITest.executeCommand(".uno:Sidebar") + + def getTitle(self, document): + xController = document.getCurrentController() + xSidebar = xController.getSidebar() + xDecks = xSidebar.getDecks() + xNavigator = xDecks['NavigatorDeck'] + xPanels = xNavigator.getPanels() + xPanel = xPanels['SwNavigatorPanel'] + title = xPanel.getTitle() + # empty title of SwNavigatorPanel to allow to query the name of the selected bookmark + xPanel.setTitle("") + return title + + def test_query_selected_bookmark(self): + global selectionChangedResult + with self.ui_test.create_doc_in_start_center("writer") as xDoc: + + # click on the bookmark name in the Navigator + + xWriterDoc = self.xUITest.getTopFocusWindow() + xWriterEdit = xWriterDoc.getChild("writer_edit") + + self.xUITest.executeCommand(".uno:Sidebar") + xWriterEdit.executeAction("SIDEBAR", mkPropertyValues({"PANEL": "SwNavigatorPanel"})) + + xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel") + xToolBar = xNavigatorPanel.getChild("content5") + xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "0"})) # 'root' button + + # type "foo", and create 3 bookmarks on it + + self.xUITest.executeCommand(".uno:Escape") + + xDoc.Text.insertString(xDoc.Text.getStart(), "foo", False) + self.xUITest.executeCommand(".uno:SelectAll") + + for i in range(3): + with self.ui_test.execute_dialog_through_command(".uno:InsertBookmark", close_button="insert"): + pass + + # check selected bookmarks in Navigator + + xWriterEdit.executeAction("FOCUS", tuple()) + + xContentTree = xNavigatorPanel.getChild("contenttree") + +# disable flakey UITest +# self.ui_test.wait_until_property_is_updated(xContentTree, "SelectEntryText", "Bookmark 1") +# self.assertEqual(get_state_as_dict(xContentTree)["SelectEntryText"], "Bookmark 1") +# self.assertEqual(get_state_as_dict(xContentTree)["SelectionCount"], "1") + +## self.xUITest.executeCommand(".uno:Escape") + +# # get the title of SwNavigatorPanel with emptying it to access to the selected bookmark +# self.assertEqual(self.getTitle(xDoc), "Navigator") +# # title was emptied +# self.assertEqual(self.getTitle(xDoc), "") + +# # Select nested bookmark in Navigator + +# xContentTree.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"})) + +# # This jumped to Bookmark 1 after selection +# self.ui_test.wait_until_property_is_updated(xContentTree, "SelectEntryText", "Bookmark 1") +# self.assertEqual(get_state_as_dict(xContentTree)["SelectEntryText"], "Bookmark 1") +# self.assertEqual(get_state_as_dict(xContentTree)["SelectionCount"], "1") + +# # This was "Navigator" +# self.assertEqual(self.getTitle(xDoc), "Bookmark 1") + +# # Try the same selection with Bookmark 2 +# xContentTree.executeAction("TYPE", mkPropertyValues({"KEYCODE": "UP"})) +# self.ui_test.wait_until_property_is_updated(xContentTree, "SelectEntryText", "Bookmark 2") +# self.assertEqual(get_state_as_dict(xContentTree)["SelectEntryText"], "Bookmark 2") +# self.assertEqual(get_state_as_dict(xContentTree)["SelectionCount"], "1") +# xContentTree.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"})) +# self.ui_test.wait_until_property_is_updated(xContentTree, "SelectEntryText", "Bookmark 2") +# self.assertEqual(get_state_as_dict(xContentTree)["SelectEntryText"], "Bookmark 2") +# self.assertEqual(get_state_as_dict(xContentTree)["SelectionCount"], "1") + +# # This was "Navigator" +# self.assertEqual(self.getTitle(xDoc), "Bookmark 2") + +# # Try the same selection with Bookmark 3 + +# # why we need this extra UP? +# xContentTree.executeAction("TYPE", mkPropertyValues({"KEYCODE": "UP"})) +# self.ui_test.wait_until_property_is_updated(xContentTree, "SelectEntryText", "Bookmark 2") +# xContentTree.executeAction("TYPE", mkPropertyValues({"KEYCODE": "UP"})) +# self.ui_test.wait_until_property_is_updated(xContentTree, "SelectEntryText", "Bookmark 3") + +# self.assertEqual(get_state_as_dict(xContentTree)["SelectEntryText"], "Bookmark 3") +# self.assertEqual(get_state_as_dict(xContentTree)["SelectionCount"], "1") +# xContentTree.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"})) +# self.ui_test.wait_until_property_is_updated(xContentTree, "SelectEntryText", "Bookmark 3") +# self.assertEqual(get_state_as_dict(xContentTree)["SelectEntryText"], "Bookmark 3") +# self.assertEqual(get_state_as_dict(xContentTree)["SelectionCount"], "1") + +# # This was "Navigator" +# self.assertEqual(self.getTitle(xDoc), "Bookmark 3") + +# # go to the previous item + +# # why we need this extra UP? +# xContentTree.executeAction("TYPE", mkPropertyValues({"KEYCODE": "UP"})) +# self.ui_test.wait_until_property_is_updated(xContentTree, "SelectEntryText", "Bookmark 3") +# xContentTree.executeAction("TYPE", mkPropertyValues({"KEYCODE": "UP"})) +# self.ui_test.wait_until_property_is_updated(xContentTree, "SelectEntryText", "Bookmarks") +# self.assertEqual(get_state_as_dict(xContentTree)["SelectEntryText"], "Bookmarks") +# xContentTree.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"})) + +# # This was "Navigator" +# self.assertEqual(self.getTitle(xDoc), "") + +# self.xUITest.executeCommand(".uno:Sidebar") + +# vim: set shiftwidth=4 softtabstop=4 expandtab: |