def setUp(self):
        self.initApplication()

        self.actionController = ActionController(
            self.mainWindow, self.application.config)
        self.application.config.remove_section(
            self.actionController.configSection)
        self.fileMenu = self.mainWindow.menuController[MENU_FILE]
Exemple #2
0
    def setUp(self):
        self.initApplication()
        self.wikiroot = self.createWiki()
        self.actionController = ActionController(self.mainWindow,
                                                 self.application.config)
        self.application.config.remove_section(
            self.actionController.configSection)

        self._actionVal = 0
    def testHotKeySaveConfig3(self):
        action = ExampleAction()

        self.actionController.register(action)
        self.actionController.saveHotKeys()

        otherActionController = ActionController(self.mainWindow,
                                                 self.application.config)
        otherActionController.register(action)

        self.assertIsNone(otherActionController.getHotKey(action.stringId))
Exemple #4
0
    def testHotKeySaveConfig3 (self):
        action = TestAction()

        self.actionController.register (action)
        self.actionController.saveHotKeys()

        otherActionController = ActionController (self.wnd, Application.config)
        otherActionController.register (action)

        self.assertEqual (otherActionController.getHotKey (action.stringId).key, "")
        self.assertFalse (otherActionController.getHotKey (action.stringId).ctrl)
        self.assertFalse (otherActionController.getHotKey (action.stringId).shift)
        self.assertFalse (otherActionController.getHotKey (action.stringId).alt)
Exemple #5
0
    def OnInit(self):
        getOS().migrateConfig()
        self._fullConfigPath = getConfigPath()
        Application.init(self._fullConfigPath)

        try:
            starter = Starter()
            starter.processConsole()
        except StarterExit:
            return True

        redirector = LogRedirector(self.getLogFileName(self._fullConfigPath))
        redirector.init()

        from outwiker.gui.mainwindow import MainWindow

        self.mainWnd = MainWindow(None, -1, "")
        self.SetTopWindow(self.mainWnd)

        Application.mainWindow = self.mainWnd
        Application.actionController = ActionController(
            self.mainWnd, Application.config)

        registerActions(Application)
        self.mainWnd.createGui()

        Application.plugins.load(getPluginsDirList())

        self.bindActivateApp()
        self.Bind(wx.EVT_QUERY_END_SESSION, self._onEndSession)

        starter.processGUI()

        return True
Exemple #6
0
    def setUp(self):
        self.initApplication()
        self.wikiroot = self.createWiki()
        self.actionController = ActionController(self.mainWindow,
                                                 self.application.config)
        self.application.config.remove_section(
            self.actionController.configSection)

        self._actionVal = 0
Exemple #7
0
    def initMainWindow(self):
        self.mainWnd = MainWindow(self._application)
        self.SetTopWindow(self.mainWnd)

        self._application.mainWindow = self.mainWnd
        self._application.actionController = ActionController(
            self.mainWnd, self._application.config)

        registerActions(self._application)
        self.mainWnd.createGui()
Exemple #8
0
    def testDelayChangeHotkeyToolbar(self):
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        hotkey = HotKey("F11", ctrl=True)

        action = TestAction()
        self.actionController.register(action, HotKey("F11"))

        self.actionController.appendToolbarButton(action.stringId, toolbar,
                                                  image)

        self.actionController.setHotKey(action.stringId, hotkey, False)

        self.assertEqual(self._getToolItemLabel(toolbar, action.stringId),
                         u"{} ({})".format(action.title, "F11"))

        otherActionController = ActionController(self.wnd, Application.config)
        otherActionController.register(action, None)

        self.assertEqual(otherActionController.getHotKey(action.stringId),
                         hotkey)
Exemple #9
0
    def testHotKeySaveConfig3(self):
        action = TestAction()

        self.actionController.register(action)
        self.actionController.saveHotKeys()

        otherActionController = ActionController(self.wnd, Application.config)
        otherActionController.register(action)

        self.assertEqual(
            otherActionController.getHotKey(action.stringId).key, "")
        self.assertFalse(otherActionController.getHotKey(action.stringId).ctrl)
        self.assertFalse(
            otherActionController.getHotKey(action.stringId).shift)
        self.assertFalse(otherActionController.getHotKey(action.stringId).alt)
Exemple #10
0
    def OnInit(self):
        getOS().init()
        getOS().migrateConfig()

        self._fullConfigPath = getConfigPath()
        Application.init(self._fullConfigPath)
        self._locale = wx.Locale(wx.LANGUAGE_DEFAULT)

        try:
            starter = Starter()
            starter.processConsole()
        except StarterExit:
            return True

        if APP_DATA_DEBUG not in Application.sharedData:
            config = GeneralGuiConfig(Application.config)
            Application.sharedData[APP_DATA_DEBUG] = config.debug.value

        level = (logging.DEBUG
                 if Application.sharedData.get(APP_DATA_DEBUG, False)
                 else logging.WARNING)

        redirector = LogRedirector(self.getLogFileName(self._fullConfigPath),
                                   level)
        redirector.init()
        wx.Log.SetLogLevel(0)

        logger = logging.getLogger('outwiker')
        for n, dirname in enumerate(getSpecialDirList(u'')):
            logger.info(u'Special directory [{}]: {}'.format(n, dirname))

        from outwiker.gui.mainwindow import MainWindow

        self.mainWnd = MainWindow(None, -1, "")
        self.SetTopWindow(self.mainWnd)

        Application.mainWindow = self.mainWnd
        Application.actionController = ActionController(self.mainWnd,
                                                        Application.config)

        registerActions(Application)
        self.mainWnd.createGui()

        Application.plugins.load(getPluginsDirList())

        self.bindActivateApp()
        self.Bind(wx.EVT_QUERY_END_SESSION, self._onEndSession)

        starter.processGUI()

        return True
    def testDelayChangeHotkeyToolbar(self):
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        hotkey = HotKey("F11", ctrl=True)

        action = ExampleAction()
        self.actionController.register(action, HotKey("F11"))

        self.actionController.appendToolbarButton(action.stringId, toolbar,
                                                  image)

        self.actionController.setHotKey(action.stringId, hotkey, False)

        self.assertEqual(self._getToolItemLabel(toolbar, action.stringId),
                         "{} ({})".format(action.title, "F11"))

        otherActionController = ActionController(self.mainWindow,
                                                 self.application.config)
        otherActionController.register(action, None)

        self.assertEqual(otherActionController.getHotKey(action.stringId),
                         hotkey)
Exemple #12
0
    def testHotKeySaveConfig2(self):
        action = TestAction()
        hotkey = HotKey("F11", ctrl=True)

        self.actionController.register(action, hotkey)
        self.actionController.saveHotKeys()

        otherActionController = ActionController(self.wnd, Application.config)
        otherActionController.register(action, HotKey("F1", shift=True))

        self.assertEqual(
            otherActionController.getHotKey(action.stringId).key, "F11")
        self.assertTrue(otherActionController.getHotKey(action.stringId).ctrl)
        self.assertFalse(
            otherActionController.getHotKey(action.stringId).shift)
        self.assertFalse(otherActionController.getHotKey(action.stringId).alt)
Exemple #13
0
    def testDelayChangeHotkeyToolbar (self):
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        hotkey = HotKey ("F11", ctrl=True)

        action = TestAction()
        self.actionController.register (action, HotKey ("F11"))

        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        self.actionController.setHotKey (action.stringId, hotkey, False)

        self.assertEqual (self._getToolItemLabel (toolbar, action.stringId), 
                u"{} ({})".format (action.title, "F11"))

        otherActionController = ActionController (self.wnd, Application.config)
        otherActionController.register (action, None)

        self.assertEqual (otherActionController.getHotKey (action.stringId),
                hotkey)
    def testHotKeySaveConfig1(self):
        action = ExampleAction()
        hotkey = HotKey("F11", ctrl=True)

        self.actionController.register(action, hotkey)
        self.actionController.saveHotKeys()

        otherActionController = ActionController(self.mainWindow,
                                                 self.application.config)
        otherActionController.register(action)

        self.assertEqual(otherActionController.getHotKey(action.stringId).key,
                         "F11")
        self.assertTrue(otherActionController.getHotKey(action.stringId).ctrl)
        self.assertFalse(
            otherActionController.getHotKey(action.stringId).shift)
        self.assertFalse(otherActionController.getHotKey(action.stringId).alt)
Exemple #15
0
    def testHotKeySaveConfig2 (self):
        action = TestAction()
        hotkey = HotKey ("F11", ctrl=True)

        self.actionController.register (action, hotkey)
        self.actionController.saveHotKeys()

        otherActionController = ActionController (self.wnd, Application.config)
        otherActionController.register (action, HotKey ("F1", shift=True))

        self.assertEqual (otherActionController.getHotKey (action.stringId).key, "F11")
        self.assertTrue (otherActionController.getHotKey (action.stringId).ctrl)
        self.assertFalse (otherActionController.getHotKey (action.stringId).shift)
        self.assertFalse (otherActionController.getHotKey (action.stringId).alt)
    def testHotKeySaveConfig1(self):
        action = ExampleAction()
        hotkey = HotKey("F11", ctrl=True)

        self.actionController.register(action, hotkey)
        self.actionController.saveHotKeys()

        otherActionController = ActionController(self.mainWindow, self.application.config)
        otherActionController.register(action)

        self.assertEqual(otherActionController.getHotKey(action.stringId).key,
                         "F11")
        self.assertTrue(otherActionController.getHotKey(action.stringId).ctrl)
        self.assertFalse(otherActionController.getHotKey(action.stringId).shift)
        self.assertFalse(otherActionController.getHotKey(action.stringId).alt)
Exemple #17
0
    def setUp(self):
        self.path = mkdtemp(prefix=u'OutWiker_Абырвалг абырвалг_' +
                            unicode(self.__class__.__name__, 'utf-8'))

        Application.config.remove_section(MainWindowConfig.MAIN_WINDOW_SECTION)

        generalConfig = GeneralGuiConfig(Application.config)
        generalConfig.askBeforeExit.value = False

        self.wnd = MainWindow(None, -1, "")
        Application.mainWindow = self.wnd
        Application.actionController = ActionController(
            self.wnd, Application.config)
        wx.GetApp().SetTopWindow(self.wnd)

        registerActions(Application)
        self.wnd.createGui()

        self.wikiroot = WikiDocument.create(self.path)

        Tester.dialogTester.clear()
        Application.wikiroot = None
class ActionControllerTest(unittest.TestCase, BaseOutWikerGUIMixin):
    def setUp(self):
        self.initApplication()

        self.actionController = ActionController(
            self.mainWindow, self.application.config)
        self.application.config.remove_section(
            self.actionController.configSection)
        self.fileMenu = self.mainWindow.menuController[MENU_FILE]

    def tearDown(self):
        self.application.config.remove_section(
            self.actionController.configSection)
        self.destroyApplication()

    def testRegisterAction(self):
        action = ExampleAction()

        self.assertEqual(len(self.actionController.getActionsStrId()), 0)

        self.actionController.register(action)

        self.assertEqual(len(self.actionController.getActionsStrId()), 1)

    def testHotKeys(self):
        hotkey1 = HotKey("F1")
        action1 = ExampleAction()

        hotkey2 = HotKey("F2", ctrl=True)
        action2 = ExampleCheckAction()

        self.actionController.register(action1, hotkey1)
        self.actionController.register(action2, hotkey2)

        self.assertEqual(self.actionController.getHotKey(action1.stringId),
                         hotkey1)
        self.assertEqual(self.actionController.getHotKey(action2.stringId),
                         hotkey2)

    def testTitles(self):
        action1 = ExampleAction()
        action2 = ExampleCheckAction()

        self.actionController.register(action1)
        self.actionController.register(action2)

        self.assertEqual(self.actionController.getTitle(action1.stringId),
                         action1.title)
        self.assertEqual(self.actionController.getTitle(action2.stringId),
                         action2.title)

    def testAppendMenu(self):
        action = ExampleAction()
        menu = self.fileMenu

        self.actionController.register(action)
        self.actionController.appendMenuItem(action.stringId, menu)
        self._assertMenuItemExists(menu, action.title, None)

    def testAppendCheckMenu(self):
        action = ExampleCheckAction()
        menu = self.fileMenu

        self.actionController.register(action)
        self.actionController.appendMenuCheckItem(action.stringId, menu)
        self._assertMenuItemExists(menu, action.title, None)

    def testRemoveAction(self):
        action = ExampleAction()
        menu = self.fileMenu
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action)
        self.actionController.appendMenuItem(action.stringId, menu)
        self.actionController.appendToolbarButton(action.stringId,
                                                  toolbar,
                                                  image)
        toolbar.Realize()

        self.assertEqual(len(self.actionController.getActionsStrId()), 1)
        self._assertMenuItemExists(menu, action.title, None)
        self.assertEqual(toolbar.GetToolsCount(), 1)

        self.actionController.removeAction(action.stringId)
        toolbar.Realize()

        self.assertEqual(len(self.actionController.getActionsStrId()), 0)
        self.assertEqual(menu.FindItem(action.title), wx.NOT_FOUND)
        self.assertEqual(toolbar.GetToolsCount(), 0)

    def testRemoveActionAndRun(self):
        action = ExampleAction()
        menu = self.fileMenu
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action)
        self.actionController.appendMenuItem(action.stringId, menu)
        self.actionController.appendToolbarButton(action.stringId,
                                                  toolbar,
                                                  image)

        menuItemId = self._getMenuItemId(action.stringId)
        toolItemId = self._getToolItemId(action.stringId)

        self._emulateMenuClick(menuItemId)
        self.assertEqual(action.runCount, 1)

        self._emulateButtonClick(toolItemId)
        self.assertEqual(action.runCount, 2)

        self.actionController.removeAction(action.stringId)

        self._emulateMenuClick(menuItemId)
        self.assertEqual(action.runCount, 2)

        self._emulateButtonClick(toolItemId)
        self.assertEqual(action.runCount, 2)

    def testRunAction(self):
        action = ExampleAction()
        menu = self.fileMenu

        self.actionController.register(action)
        self.actionController.appendMenuItem(action.stringId, menu)

        menuItemId = self._getMenuItemId(action.stringId)

        self._emulateMenuClick(menuItemId)

        self.assertEqual(action.runCount, 1)

        self.actionController.removeAction(action.stringId)

        # Убедимся, что после удаления пункта меню,
        # событие больше не срабатывает
        self._emulateMenuClick(menuItemId)
        self.assertEqual(action.runCount, 1)

    def testAppendToolbarButton(self):
        action = ExampleAction()
        menu = self.fileMenu
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action)
        self.actionController.appendMenuItem(action.stringId, menu)
        self.actionController.appendToolbarButton(action.stringId,
                                                  toolbar,
                                                  image)
        toolbar.Realize()

        self.assertEqual(toolbar.GetToolsCount(), 1)

        self.actionController.removeAction(action.stringId)
        toolbar.Realize()

        self.assertEqual(toolbar.GetToolsCount(), 0)

    def testAppendToolbarCheckButton(self):
        action = ExampleCheckAction()
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action)
        self.actionController.appendToolbarCheckButton(action.stringId,
                                                       toolbar,
                                                       image)
        toolbar.Realize()

        self.assertEqual(toolbar.GetToolsCount(), 1)

        self.actionController.removeAction(action.stringId)
        toolbar.Realize()

        self.assertEqual(toolbar.GetToolsCount(), 0)

    def testAppendToolbarCheckButtonAndRun(self):
        action = ExampleCheckAction()
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action)
        self.actionController.appendToolbarCheckButton(action.stringId,
                                                       toolbar,
                                                       image)

        toolItemId = self._getToolItemId(action.stringId)

        self._emulateCheckButtonClick(toolItemId)
        self.assertEqual(action.runCount, 1)

        self._emulateCheckButtonClick(toolItemId)
        self.assertEqual(action.runCount, 0)

        self._emulateCheckButtonClick(toolItemId)
        self.assertEqual(action.runCount, 1)

        self.actionController.removeAction(action.stringId)

    def testCheckButtonAndMenuWithEvents(self):
        action = ExampleCheckAction()
        menu = self.fileMenu
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action)
        self.actionController.appendToolbarCheckButton(action.stringId,
                                                       toolbar,
                                                       image)
        self.actionController.appendMenuCheckItem(action.stringId, menu)

        menuItem = self._getMenuItem(action.stringId)
        toolItem = self._getToolItem(toolbar, action.stringId)
        toolItemId = self._getToolItemId(action.stringId)

        self.assertFalse(menuItem.IsChecked())
        self.assertFalse(toolItem.IsToggled())

        self._emulateCheckButtonClick(toolItemId)

        self.assertTrue(menuItem.IsChecked())
        self.assertTrue(toolItem.IsToggled())

        self._emulateCheckButtonClick(toolItemId)

        self.assertFalse(menuItem.IsChecked())
        self.assertFalse(toolItem.IsToggled())

    def testCheckButtonAndMenu(self):
        action = ExampleCheckAction()
        menu = self.fileMenu
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action)
        self.actionController.appendToolbarCheckButton(action.stringId,
                                                       toolbar,
                                                       image)
        self.actionController.appendMenuCheckItem(action.stringId, menu)

        menuItem = self._getMenuItem(action.stringId)
        toolItem = self._getToolItem(toolbar, action.stringId)

        self.assertFalse(menuItem.IsChecked())
        self.assertFalse(toolItem.IsToggled())
        self.assertEqual(action.runCount, 0)

        self.actionController.check(action.stringId, True)

        self.assertTrue(menuItem.IsChecked())
        self.assertTrue(toolItem.IsToggled())
        self.assertEqual(action.runCount, 1)

        self.actionController.check(action.stringId, True)

        self.assertTrue(menuItem.IsChecked())
        self.assertTrue(toolItem.IsToggled())
        self.assertEqual(action.runCount, 2)

        self.actionController.check(action.stringId, False)

        self.assertFalse(menuItem.IsChecked())
        self.assertFalse(toolItem.IsToggled())
        self.assertEqual(action.runCount, 1)

        self.actionController.check(action.stringId, False)

        self.assertFalse(menuItem.IsChecked())
        self.assertFalse(toolItem.IsToggled())
        self.assertEqual(action.runCount, 0)

    def testRemoveCheckMenu(self):
        action = ExampleCheckAction()
        menu = self.fileMenu
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action)
        self.actionController.appendToolbarCheckButton(action.stringId,
                                                       toolbar,
                                                       image)

        self.actionController.appendMenuCheckItem(action.stringId, menu)
        self.actionController.removeMenuItem(action.stringId)

        toolItem = self._getToolItem(toolbar, action.stringId)
        toolItemId = self._getToolItemId(action.stringId)

        self.assertFalse(toolItem.IsToggled())

        self._emulateCheckButtonClick(toolItemId)

        self.assertTrue(toolItem.IsToggled())

        self._emulateCheckButtonClick(toolItemId)

        self.assertFalse(toolItem.IsToggled())

    def testAppendToolbarButtonOnly(self):
        action = ExampleAction()
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action)
        self.actionController.appendToolbarButton(action.stringId,
                                                  toolbar,
                                                  image)
        toolbar.Realize()

        self.assertEqual(toolbar.GetToolsCount(), 1)

        self.actionController.removeAction(action.stringId)

        self.assertEqual(toolbar.GetToolsCount(), 0)
        toolbar.Realize()

    def testAppendToolbarButtonAndRun(self):
        action = ExampleAction()
        menu = self.fileMenu
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action)
        self.actionController.appendMenuItem(action.stringId, menu)
        self.actionController.appendToolbarButton(action.stringId,
                                                  toolbar,
                                                  image)

        menuItemId = self._getMenuItemId(action.stringId)

        self._emulateMenuClick(menuItemId)
        self.assertEqual(action.runCount, 1)

        self.actionController.removeAction(action.stringId)

        self._emulateMenuClick(menuItemId)
        self.assertEqual(action.runCount, 1)

    def testAppendToolbarButtonOnlyAndRun(self):
        action = ExampleAction()
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action)
        self.actionController.appendToolbarButton(action.stringId,
                                                  toolbar,
                                                  image)

        toolItemId = self._getToolItemId(action.stringId)

        self._emulateButtonClick(toolItemId)
        self.assertEqual(action.runCount, 1)

        self.actionController.removeAction(action.stringId)

        self._emulateButtonClick(toolItemId)
        self.assertEqual(action.runCount, 1)

    def testRemoveToolButton(self):
        action = ExampleAction()
        menu = self.fileMenu
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action)
        self.actionController.appendMenuItem(action.stringId, menu)
        self.actionController.appendToolbarButton(action.stringId,
                                                  toolbar,
                                                  image)
        toolbar.Realize()

        self.assertEqual(toolbar.GetToolsCount(), 1)
        self._assertMenuItemExists(menu, action.title, None)

        self.actionController.removeToolbarButton(action.stringId)
        toolbar.Realize()

        self.assertEqual(toolbar.GetToolsCount(), 0)
        self._assertMenuItemExists(menu, action.title, None)

    def testRemoveToolButtonInvalid(self):
        action = ExampleAction()
        menu = self.fileMenu
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]

        self.actionController.register(action)
        self.actionController.appendMenuItem(action.stringId, menu)
        toolbar.Realize()

        self.assertEqual(toolbar.GetToolsCount(), 0)
        self._assertMenuItemExists(menu, action.title, None)

        self.actionController.removeToolbarButton(action.stringId)
        toolbar.Realize()

        self.assertEqual(toolbar.GetToolsCount(), 0)
        self._assertMenuItemExists(menu, action.title, None)

    def testRemoveMenuItemInvalid(self):
        action = ExampleAction()
        menu = self.fileMenu
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action)
        self.actionController.appendToolbarButton(action.stringId,
                                                  toolbar,
                                                  image)
        toolbar.Realize()

        self.assertEqual(toolbar.GetToolsCount(), 1)
        self.assertEqual(menu.FindItem(action.title), wx.NOT_FOUND)

        self.actionController.removeMenuItem(action.stringId)
        toolbar.Realize()

        self.assertEqual(toolbar.GetToolsCount(), 1)
        self.assertEqual(menu.FindItem(action.title), wx.NOT_FOUND)

    def testRemoveMenuItem(self):
        action = ExampleAction()
        menu = self.fileMenu
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action)
        self.actionController.appendMenuItem(action.stringId, menu)
        self.actionController.appendToolbarButton(action.stringId,
                                                  toolbar,
                                                  image)
        toolbar.Realize()

        self.assertEqual(toolbar.GetToolsCount(), 1)
        self._assertMenuItemExists(menu, action.title, None)

        self.actionController.removeMenuItem(action.stringId)
        toolbar.Realize()

        self.assertEqual(toolbar.GetToolsCount(), 1)
        self.assertEqual(menu.FindItem(action.title), wx.NOT_FOUND)

    def testHotKeysDefaultMenu(self):
        action = ExampleAction()
        menu = self.fileMenu
        hotkey = HotKey("T", ctrl=True)

        self.actionController.register(action, hotkey=hotkey)
        self.assertEqual(self.actionController.getHotKey(action.stringId),
                         hotkey)

        self.actionController.appendMenuItem(action.stringId, menu)

        self._assertMenuItemExists(menu, action.title, hotkey)

    def testHotKeysDefaultToolBar(self):
        action = ExampleAction()
        hotkey = HotKey("T", ctrl=True)
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action, hotkey=hotkey)
        self.assertEqual(self.actionController.getHotKey(action.stringId),
                         hotkey)

        self.actionController.appendToolbarButton(action.stringId,
                                                  toolbar,
                                                  image)

        self.assertEqual(self._getToolItemLabel(toolbar, action.stringId),
                         "{0} ({1})".format(action.title,
                                            HotKeyParser.toString(hotkey)))

    def testDisableTools(self):
        action = ExampleAction()
        hotkey = HotKey("T", ctrl=True)
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        self.actionController.register(action, hotkey=hotkey)

        self.actionController.appendToolbarButton(action.stringId,
                                                  toolbar,
                                                  image)

        toolid = self._getToolItemId(action.stringId)

        self.actionController.enableTools(action.stringId, False)
        self.assertFalse(toolbar.GetToolEnabled(toolid))

        self.actionController.enableTools(action.stringId, True)
        self.assertTrue(toolbar.GetToolEnabled(toolid))

    def testDisableMenuItem(self):
        action = ExampleAction()
        hotkey = HotKey("T", ctrl=True)
        menu = self.fileMenu

        self.actionController.register(action, hotkey=hotkey)

        self.actionController.appendMenuItem(action.stringId, menu)

        menuItemId = self._getMenuItemId(action.stringId)

        self.actionController.enableTools(action.stringId, False)
        self.assertFalse(menu.IsEnabled(menuItemId))

        self.actionController.enableTools(action.stringId, True)
        self.assertTrue(menu.IsEnabled(menuItemId))

    def testDidableToolsAll(self):
        action = ExampleAction()
        hotkey = HotKey("T", ctrl=True)
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"
        menu = self.fileMenu

        self.actionController.register(action, hotkey=hotkey)

        self.actionController.appendMenuItem(action.stringId, menu)
        self.actionController.appendToolbarButton(action.stringId,
                                                  toolbar,
                                                  image)

        menuItemId = self._getMenuItemId(action.stringId)
        toolid = self._getToolItemId(action.stringId)

        self.actionController.enableTools(action.stringId, False)
        self.assertFalse(toolbar.GetToolEnabled(toolid))
        self.assertFalse(menu.IsEnabled(menuItemId))

        self.actionController.enableTools(action.stringId, True)
        self.assertTrue(toolbar.GetToolEnabled(toolid))
        self.assertTrue(menu.IsEnabled(menuItemId))

    def testDisableToolsNone(self):
        action = ExampleAction()
        hotkey = HotKey("T", ctrl=True)

        self.actionController.register(action, hotkey=hotkey)
        self.actionController.enableTools(action.stringId, False)

    def testGetActions1(self):
        action1 = ExampleAction()
        action2 = ExampleCheckAction()

        self.actionController.register(action1)
        self.actionController.register(action2)

        self.assertEqual(self.actionController.getAction(action1.stringId),
                         action1)
        self.assertEqual(self.actionController.getAction(action2.stringId),
                         action2)

    def testGetActions2(self):
        action1 = ExampleAction()
        action2 = ExampleCheckAction()
        self.actionController.register(action1)

        self.assertRaises(KeyError, self.actionController.getAction,
                          action2.stringId)

    def testHotKeyLoadConfig(self):
        action = ExampleAction()
        hotKeyFromConfig = HotKey("F11")
        HotKeyOption(self.application.config,
                     self.actionController.configSection,
                     action.stringId, None).value = hotKeyFromConfig

        self.actionController.register(action, HotKey("F12", ctrl=True))

        self.assertEqual(self.actionController.getHotKey(action.stringId).key,
                         "F11")
        self.assertFalse(self.actionController.getHotKey(action.stringId).ctrl)
        self.assertFalse(
            self.actionController.getHotKey(action.stringId).shift)
        self.assertFalse(self.actionController.getHotKey(action.stringId).alt)

    def testHotKeySaveConfig1(self):
        action = ExampleAction()
        hotkey = HotKey("F11", ctrl=True)

        self.actionController.register(action, hotkey)
        self.actionController.saveHotKeys()

        otherActionController = ActionController(self.mainWindow,
                                                 self.application.config)
        otherActionController.register(action)

        self.assertEqual(otherActionController.getHotKey(action.stringId).key,
                         "F11")
        self.assertTrue(otherActionController.getHotKey(action.stringId).ctrl)
        self.assertFalse(
            otherActionController.getHotKey(action.stringId).shift)
        self.assertFalse(otherActionController.getHotKey(action.stringId).alt)

    def testHotKeySaveConfig2(self):
        action = ExampleAction()
        hotkey = HotKey("F11", ctrl=True)

        self.actionController.register(action, hotkey)
        self.actionController.saveHotKeys()

        otherActionController = ActionController(self.mainWindow,
                                                 self.application.config)
        otherActionController.register(action, HotKey("F1", shift=True))

        self.assertEqual(otherActionController.getHotKey(action.stringId).key,
                         "F11")
        self.assertTrue(otherActionController.getHotKey(action.stringId).ctrl)
        self.assertFalse(
            otherActionController.getHotKey(action.stringId).shift)
        self.assertFalse(otherActionController.getHotKey(action.stringId).alt)

    def testHotKeySaveConfig3(self):
        action = ExampleAction()

        self.actionController.register(action)
        self.actionController.saveHotKeys()

        otherActionController = ActionController(self.mainWindow,
                                                 self.application.config)
        otherActionController.register(action)

        self.assertIsNone(otherActionController.getHotKey(action.stringId))

    def testSetHotKey(self):
        action = ExampleAction()
        self.actionController.register(action, None)

        hotkey = HotKey("F11", ctrl=True)
        self.actionController.changeHotkeys([(action.stringId, hotkey)])
        self.assertEqual(self.actionController.getHotKey(action.stringId),
                         hotkey)

    def testChangeHotkeyGui(self):
        menu = self.fileMenu
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        hotkey = HotKey("F11", ctrl=True)

        action = ExampleAction()
        self.actionController.register(action, None)

        self.actionController.appendMenuItem(action.stringId, menu)
        self.actionController.appendToolbarButton(action.stringId,
                                                  toolbar,
                                                  image)

        self.actionController.changeHotkeys([(action.stringId, hotkey)])

        self.assertEqual(self._getToolItemLabel(toolbar, action.stringId),
                         "{} ({})".format(action.title, "Ctrl+F11"))

        self.assertEqual(self._getMenuItem(action.stringId).GetItemLabel(),
                         "{}\t{}".format(action.title, "Ctrl+F11"))

    def testChangeHotkeyGuiMenu(self):
        menu = self.fileMenu

        hotkey = HotKey("F11", ctrl=True)

        action = ExampleAction()
        self.actionController.register(action, None)

        self.actionController.appendMenuItem(action.stringId, menu)

        self.actionController.changeHotkeys([(action.stringId, hotkey)])

        self.assertEqual(self._getMenuItem(action.stringId).GetItemLabel(),
                         "{}\t{}".format(action.title, "Ctrl+F11"))

    def testChangeHotkeyToolbar(self):
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        hotkey = HotKey("F11", ctrl=True)

        action = ExampleAction()
        self.actionController.register(action, None)

        self.actionController.appendToolbarButton(action.stringId,
                                                  toolbar,
                                                  image)

        self.actionController.changeHotkeys([(action.stringId, hotkey)])

        self.assertEqual(self._getToolItemLabel(toolbar, action.stringId),
                         "{} ({})".format(action.title, "Ctrl+F11"))

    def testChangeHotkeyGuiChecked1(self):
        menu = self.fileMenu
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        hotkey = HotKey("F11", ctrl=True)

        action = ExampleCheckAction()
        self.actionController.register(action, None)

        self.actionController.appendMenuCheckItem(action.stringId, menu)
        self.actionController.appendToolbarCheckButton(action.stringId,
                                                       toolbar,
                                                       image)

        self.actionController.changeHotkeys([(action.stringId, hotkey)])

        self.assertEqual(self._getToolItemLabel(toolbar, action.stringId),
                         "{} ({})".format(action.title, "Ctrl+F11"))

        self.assertEqual(self._getMenuItem(action.stringId).GetItemLabel(),
                         "{}\t{}".format(action.title, "Ctrl+F11"))

    def testChangeHotkeyGuiChecked2(self):
        menu = self.fileMenu
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        image = "testdata/images/save.png"

        hotkey = HotKey("F11", ctrl=True)

        action = ExampleCheckAction()
        self.actionController.register(action, None)

        self.actionController.appendMenuCheckItem(action.stringId, menu)
        self.actionController.appendToolbarCheckButton(action.stringId,
                                                       toolbar,
                                                       image)

        menuItem = self._getMenuItem(action.stringId)
        toolItem = self._getToolItem(toolbar, action.stringId)

        self.actionController.changeHotkeys([(action.stringId, hotkey)])
        self.actionController.check(action.stringId, True)

        self.assertTrue(menuItem.IsChecked())
        self.assertTrue(toolItem.IsToggled())

    def _assertMenuItemExists(self, menu, title, hotkey):
        """
        Проверить, что в меню есть элемент с заголовком(title + '\t' + hotkey)
        """
        menuItemId = menu.FindItem(title)
        self.assertNotEqual(menuItemId, wx.NOT_FOUND)

        menuItem = menu.FindItemById(menuItemId)

        if hotkey is not None:
            self.assertEqual(menuItem.GetItemLabel(),
                             title + "\t" + HotKeyParser.toString(hotkey))
        else:
            self.assertEqual(menuItem.GetItemLabel(), title)

    def _emulateMenuClick(self, menuItemId):
        """
        Эмуляция события выбора пункта меню
        """
        event = wx.CommandEvent(wx.wxEVT_COMMAND_MENU_SELECTED, menuItemId)
        self.mainWindow.ProcessEvent(event)

    def _emulateButtonClick(self, toolitemId):
        """
        Эмуляция события выбора пункта меню
        """
        event = wx.CommandEvent(wx.wxEVT_COMMAND_TOOL_CLICKED, toolitemId)
        self.mainWindow.ProcessEvent(event)

    def _emulateCheckButtonClick(self, toolitemId):
        """
        Эмуляция события выбора пункта меню
        """
        toolbar = self.mainWindow.toolbars[TOOLBAR_PLUGINS]
        toolitem = toolbar.FindById(toolitemId)
        newState = not toolitem.IsToggled()
        toolbar.ToggleTool(toolitemId, newState)

        event = wx.CommandEvent(wx.wxEVT_COMMAND_TOOL_CLICKED, toolitemId)
        event.SetInt(newState)
        self.mainWindow.ProcessEvent(event)

    def _getMenuItemId(self, strid):
        result = None

        actionInfo = self.actionController.getActionInfo(strid)
        if actionInfo is not None:
            result = actionInfo.menuItem.GetId()

        return result

    def _getMenuItem(self, strid):
        result = None

        actionInfo = self.actionController.getActionInfo(strid)
        if actionInfo is not None:
            result = actionInfo.menuItem

        return result

    def _getToolItemId(self, strid):
        """
        Получить идентификатор кнопки с панели инструментов
        """
        result = None

        actionInfo = self.actionController.getActionInfo(strid)
        if actionInfo is not None:
            result = actionInfo.toolItemId

        return result

    def _getToolItemLabel(self, toolbar, strid):
        result = None

        item = self._getToolItem(toolbar, strid)

        if item is not None:
            result = item.GetShortHelp()

        return result

    def _getToolItem(self, toolbar, strid):
        result = None

        itemId = self._getToolItemId(strid)
        if itemId is not None:
            result = toolbar.FindById(itemId)

        return result
Exemple #19
0
class PolyActionTest(unittest.TestCase, BaseOutWikerGUIMixin):
    """Тестирование класса PolyAction"""
    def setUp(self):
        self.initApplication()
        self.wikiroot = self.createWiki()
        self.actionController = ActionController(self.mainWindow,
                                                 self.application.config)
        self.application.config.remove_section(
            self.actionController.configSection)

        self._actionVal = 0

    def tearDown(self):
        self.application.config.remove_section(
            self.actionController.configSection)
        self.destroyApplication()
        self.destroyWiki(self.wikiroot)

    def _addActionVal(self, params):
        self._actionVal += 1

    def _addActionVal2(self, params):
        self._actionVal += 2

    def _addParams(self, param):
        self._actionVal += param

    def testEmpty(self):
        strid = "test_id"
        title = "title"
        description = "description"
        hotkey = HotKey("F1")

        polyaction = PolyAction(self.application, strid, title, description)
        self.actionController.register(polyaction, hotkey)

        self.assertEqual(self.actionController.getAction(strid).title, title)
        self.assertEqual(self.actionController.getAction(strid).description,
                         description)

        polyaction.run(None)

    def testPolymorph(self):
        strid = "test_id"
        title = "title"
        description = "description"
        polyaction = PolyAction(self.application, strid, title, description)

        polyaction.run(None)
        self.assertEqual(self._actionVal, 0)

        polyaction.setFunc(self._addActionVal)
        polyaction.run(None)
        self.assertEqual(self._actionVal, 1)

        polyaction.run(None)
        self.assertEqual(self._actionVal, 2)

        self._actionVal = 0
        polyaction.setFunc(self._addActionVal2)
        polyaction.run(0)
        self.assertEqual(self._actionVal, 2)

        polyaction.setFunc(None)
        polyaction.run(0)
        self.assertEqual(self._actionVal, 2)

    def testPolymorphParam1(self):
        strid = "test_id"
        title = "title"
        description = "description"
        polyaction = PolyAction(self.application, strid, title, description)

        polyaction.run(None)
        self.assertEqual(self._actionVal, 0)

        polyaction.setFunc(self._addParams)
        polyaction.run(5)
        self.assertEqual(self._actionVal, 5)

    def testPolymorphParam2(self):
        strid = "test_id"
        title = "title"
        description = "description"
        polyaction = PolyAction(self.application, strid, title, description)
        self.actionController.register(polyaction, None)

        self.actionController.getAction(strid).run(None)
        self.assertEqual(self._actionVal, 0)

        self.actionController.getAction(strid).setFunc(self._addParams)
        self.actionController.getAction(strid).run(5)
        self.assertEqual(self._actionVal, 5)
Exemple #20
0
 def setUp (self):
     BaseMainWndTest.setUp (self)
     self.actionController = ActionController(self.wnd, Application.config)
     Application.config.remove_section (self.actionController.configSection)
Exemple #21
0
class PolyActionTest (BaseMainWndTest):
    """Тестирование класса PolyAction"""
    def setUp (self):
        BaseMainWndTest.setUp (self)
        self.actionController = ActionController(self.wnd, Application.config)
        Application.config.remove_section (self.actionController.configSection)

        self._actionVal = 0


    def tearDown (self):
        BaseMainWndTest.tearDown (self)
        Application.config.remove_section (self.actionController.configSection)


    def _addActionVal (self, params):
        self._actionVal += 1


    def _addActionVal2 (self, params):
        self._actionVal += 2


    def _addParams (self, param):
        self._actionVal += param


    def testEmpty (self):
        strid = "test_id"
        title = u"title"
        description = u"description"
        hotkey = HotKey ("F1")

        polyaction = PolyAction (Application, strid, title, description)
        self.actionController.register (polyaction, hotkey)

        self.assertEqual (self.actionController.getAction (strid).title, title)
        self.assertEqual (self.actionController.getAction (strid).description, description)
        
        polyaction.run (None)


    def testPolymorph (self):
        strid = "test_id"
        title = u"title"
        description = u"description"
        polyaction = PolyAction (Application, strid, title, description)

        polyaction.run(None)
        self.assertEqual (self._actionVal, 0)

        polyaction.setFunc (self._addActionVal)
        polyaction.run(None)
        self.assertEqual (self._actionVal, 1)

        polyaction.run(None)
        self.assertEqual (self._actionVal, 2)

        self._actionVal = 0
        polyaction.setFunc (self._addActionVal2)
        polyaction.run (0)
        self.assertEqual (self._actionVal, 2)

        polyaction.setFunc (None)
        polyaction.run (0)
        self.assertEqual (self._actionVal, 2)


    def testPolymorphParam1 (self):
        strid = "test_id"
        title = u"title"
        description = u"description"
        polyaction = PolyAction (Application, strid, title, description)

        polyaction.run(None)
        self.assertEqual (self._actionVal, 0)

        polyaction.setFunc (self._addParams)
        polyaction.run (5)
        self.assertEqual (self._actionVal, 5)


    def testPolymorphParam2 (self):
        strid = "test_id"
        title = u"title"
        description = u"description"
        polyaction = PolyAction (Application, strid, title, description)
        self.actionController.register (polyaction, None)

        self.actionController.getAction(strid).run(None)
        self.assertEqual (self._actionVal, 0)

        self.actionController.getAction(strid).setFunc (self._addParams)
        self.actionController.getAction(strid).run (5)
        self.assertEqual (self._actionVal, 5)
    def setUp(self):
        self.initApplication()

        self.actionController = ActionController(self.mainWindow, self.application.config)
        self.application.config.remove_section(self.actionController.configSection)
        self.fileMenu = self.mainWindow.menuController[MENU_FILE]
Exemple #23
0
class PolyActionTest(unittest.TestCase, BaseOutWikerGUIMixin):
    """Тестирование класса PolyAction"""
    def setUp(self):
        self.initApplication()
        self.wikiroot = self.createWiki()
        self.actionController = ActionController(self.mainWindow,
                                                 self.application.config)
        self.application.config.remove_section(
            self.actionController.configSection)

        self._actionVal = 0

    def tearDown(self):
        self.application.config.remove_section(
            self.actionController.configSection)
        self.destroyApplication()
        self.destroyWiki(self.wikiroot)

    def _addActionVal(self, params):
        self._actionVal += 1

    def _addActionVal2(self, params):
        self._actionVal += 2

    def _addParams(self, param):
        self._actionVal += param

    def testEmpty(self):
        strid = "test_id"
        title = "title"
        description = "description"
        hotkey = HotKey("F1")

        polyaction = PolyAction(self.application, strid, title, description)
        self.actionController.register(polyaction, hotkey)

        self.assertEqual(self.actionController.getAction(strid).title, title)
        self.assertEqual(
            self.actionController.getAction(strid).description, description)

        polyaction.run(None)

    def testPolymorph(self):
        strid = "test_id"
        title = "title"
        description = "description"
        polyaction = PolyAction(self.application, strid, title, description)

        polyaction.run(None)
        self.assertEqual(self._actionVal, 0)

        polyaction.setFunc(self._addActionVal)
        polyaction.run(None)
        self.assertEqual(self._actionVal, 1)

        polyaction.run(None)
        self.assertEqual(self._actionVal, 2)

        self._actionVal = 0
        polyaction.setFunc(self._addActionVal2)
        polyaction.run(0)
        self.assertEqual(self._actionVal, 2)

        polyaction.setFunc(None)
        polyaction.run(0)
        self.assertEqual(self._actionVal, 2)

    def testPolymorphParam1(self):
        strid = "test_id"
        title = "title"
        description = "description"
        polyaction = PolyAction(self.application, strid, title, description)

        polyaction.run(None)
        self.assertEqual(self._actionVal, 0)

        polyaction.setFunc(self._addParams)
        polyaction.run(5)
        self.assertEqual(self._actionVal, 5)

    def testPolymorphParam2(self):
        strid = "test_id"
        title = "title"
        description = "description"
        polyaction = PolyAction(self.application, strid, title, description)
        self.actionController.register(polyaction, None)

        self.actionController.getAction(strid).run(None)
        self.assertEqual(self._actionVal, 0)

        self.actionController.getAction(strid).setFunc(self._addParams)
        self.actionController.getAction(strid).run(5)
        self.assertEqual(self._actionVal, 5)
Exemple #24
0
class ActionControllerTest (BaseMainWndTest):
    def setUp (self):
        BaseMainWndTest.setUp (self)
        self.actionController = ActionController(self.wnd, Application.config)
        Application.config.remove_section (self.actionController.configSection)


    def tearDown (self):
        BaseMainWndTest.tearDown (self)
        Application.config.remove_section (self.actionController.configSection)


    def testRegisterAction (self):
        action = TestAction()

        self.assertEqual (len (self.actionController.getActionsStrId()), 0)

        self.actionController.register (action)

        self.assertEqual (len (self.actionController.getActionsStrId()), 1)


    def testHotKeys (self):
        hotkey1 = HotKey ("F1")
        action1 = TestAction()

        hotkey2 = HotKey ("F2", ctrl=True)
        action2 = TestCheckAction()

        self.actionController.register (action1, hotkey1)
        self.actionController.register (action2, hotkey2)

        self.assertEqual (self.actionController.getHotKey(action1.stringId), hotkey1)
        self.assertEqual (self.actionController.getHotKey(action2.stringId), hotkey2)


    def testTitles (self):
        action1 = TestAction()
        action2 = TestCheckAction()

        self.actionController.register (action1)
        self.actionController.register (action2)

        self.assertEqual (self.actionController.getTitle(action1.stringId), action1.title)
        self.assertEqual (self.actionController.getTitle(action2.stringId), action2.title)


    def testAppendMenu (self):
        action = TestAction()
        menu = self.wnd.mainMenu.fileMenu

        self.actionController.register (action)
        self.actionController.appendMenuItem (action.stringId, menu)
        self._assertMenuItemExists (menu, action.title, None)


    def testAppendCheckMenu (self):
        action = TestCheckAction()
        menu = self.wnd.mainMenu.fileMenu

        self.actionController.register (action)
        self.actionController.appendMenuCheckItem (action.stringId, menu)
        self._assertMenuItemExists (menu, action.title, None)


    def testRemoveAction (self):
        action = TestAction()
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action)
        self.actionController.appendMenuItem (action.stringId, menu)
        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        self.assertEqual (len (self.actionController.getActionsStrId()), 1)
        self._assertMenuItemExists (menu, action.title, None)
        self.assertEqual (toolbar.GetToolCount(), 1)

        self.actionController.removeAction (action.stringId)

        self.assertEqual (len (self.actionController.getActionsStrId()), 0)
        self.assertEqual (menu.FindItem (action.title), wx.NOT_FOUND)
        self.assertEqual (toolbar.GetToolCount(), 0)


    def testRemoveActionAndRun (self):
        action = TestAction()
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action)
        self.actionController.appendMenuItem (action.stringId, menu)
        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        menuItemId = self._getMenuItemId (action.stringId)
        toolItemId = self._getToolItemId (action.stringId)

        self._emulateMenuClick (menuItemId)
        self.assertEqual (action.runCount, 1)

        self._emulateButtonClick (toolItemId)
        self.assertEqual (action.runCount, 2)

        self.actionController.removeAction (action.stringId)

        self._emulateMenuClick (menuItemId)
        self.assertEqual (action.runCount, 2)

        self._emulateButtonClick (toolItemId)
        self.assertEqual (action.runCount, 2)


    def testRunAction (self):
        action = TestAction()
        menu = self.wnd.mainMenu.fileMenu

        self.actionController.register (action)
        self.actionController.appendMenuItem (action.stringId, menu)
        
        menuItemId = self._getMenuItemId (action.stringId)

        self._emulateMenuClick (menuItemId)

        self.assertEqual (action.runCount, 1)

        self.actionController.removeAction (action.stringId)

        # Убедимся, что после удаления пункта меню, событие больше не срабатывает
        self._emulateMenuClick (menuItemId)
        self.assertEqual (action.runCount, 1)


    def testAppendToolbarButton (self):
        action = TestAction()
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action)
        self.actionController.appendMenuItem (action.stringId, menu)
        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        self.assertEqual (toolbar.GetToolCount(), 1)

        self.actionController.removeAction (action.stringId)

        self.assertEqual (toolbar.GetToolCount(), 0)


    def testAppendToolbarCheckButton (self):
        action = TestCheckAction()
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action)
        self.actionController.appendToolbarCheckButton (action.stringId, 
                toolbar,
                image)

        self.assertEqual (toolbar.GetToolCount(), 1)

        self.actionController.removeAction (action.stringId)

        self.assertEqual (toolbar.GetToolCount(), 0)


    def testAppendToolbarCheckButtonAndRun (self):
        action = TestCheckAction()
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action)
        self.actionController.appendToolbarCheckButton (action.stringId, 
                toolbar,
                image)

        toolItemId = self._getToolItemId (action.stringId)

        self._emulateCheckButtonClick (toolItemId)
        self.assertEqual (action.runCount, 1)

        self._emulateCheckButtonClick (toolItemId)
        self.assertEqual (action.runCount, 0)

        self._emulateCheckButtonClick (toolItemId)
        self.assertEqual (action.runCount, 1)

        self.actionController.removeAction (action.stringId)


    def testCheckButtonAndMenuWithEvents (self):
        action = TestCheckAction()
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action)
        self.actionController.appendToolbarCheckButton (action.stringId, 
                toolbar,
                image)
        self.actionController.appendMenuCheckItem (action.stringId, menu)

        menuItem = self._getMenuItem (action.stringId)
        toolItem = self._getToolItem (toolbar, action.stringId)
        toolItemId = self._getToolItemId (action.stringId)

        self.assertFalse (menuItem.IsChecked())
        self.assertFalse (toolItem.GetState())

        self._emulateCheckButtonClick (toolItemId)

        self.assertTrue (menuItem.IsChecked())
        self.assertTrue (toolItem.GetState())

        self._emulateCheckButtonClick (toolItemId)

        self.assertFalse (menuItem.IsChecked())
        self.assertFalse (toolItem.GetState())


    def testCheckButtonAndMenu (self):
        action = TestCheckAction()
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action)
        self.actionController.appendToolbarCheckButton (action.stringId, 
                toolbar,
                image)
        self.actionController.appendMenuCheckItem (action.stringId, menu)

        menuItem = self._getMenuItem (action.stringId)
        toolItem = self._getToolItem (toolbar, action.stringId)
        toolItemId = self._getToolItemId (action.stringId)

        self.assertFalse (menuItem.IsChecked())
        self.assertFalse (toolItem.GetState())
        self.assertEqual (action.runCount, 0)

        self.actionController.check (action.stringId, True)

        self.assertTrue (menuItem.IsChecked())
        self.assertTrue (toolItem.GetState())
        self.assertEqual (action.runCount, 1)

        self.actionController.check (action.stringId, True)

        self.assertTrue (menuItem.IsChecked())
        self.assertTrue (toolItem.GetState())
        self.assertEqual (action.runCount, 2)

        self.actionController.check (action.stringId, False)

        self.assertFalse (menuItem.IsChecked())
        self.assertFalse (toolItem.GetState())
        self.assertEqual (action.runCount, 1)

        self.actionController.check (action.stringId, False)

        self.assertFalse (menuItem.IsChecked())
        self.assertFalse (toolItem.GetState())
        self.assertEqual (action.runCount, 0)


    def testRemoveCheckMenu (self):
        action = TestCheckAction()
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action)
        self.actionController.appendToolbarCheckButton (action.stringId, 
                toolbar,
                image)

        self.actionController.appendMenuCheckItem (action.stringId, menu)
        self.actionController.removeMenuItem (action.stringId)

        toolItem = self._getToolItem (toolbar, action.stringId)
        toolItemId = self._getToolItemId (action.stringId)

        self.assertFalse (toolItem.GetState())

        self._emulateCheckButtonClick (toolItemId)

        self.assertTrue (toolItem.GetState())

        self._emulateCheckButtonClick (toolItemId)

        self.assertFalse (toolItem.GetState())


    def testAppendToolbarButtonOnly (self):
        action = TestAction()
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action)
        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        self.assertEqual (toolbar.GetToolCount(), 1)

        self.actionController.removeAction (action.stringId)

        self.assertEqual (toolbar.GetToolCount(), 0)


    def testAppendToolbarButtonAndRun (self):
        action = TestAction()
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action)
        self.actionController.appendMenuItem (action.stringId, menu)
        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        menuItemId = self._getMenuItemId (action.stringId)

        self._emulateMenuClick (menuItemId)
        self.assertEqual (action.runCount, 1)

        self.actionController.removeAction (action.stringId)

        self._emulateMenuClick (menuItemId)
        self.assertEqual (action.runCount, 1)


    def testAppendToolbarButtonOnlyAndRun (self):
        action = TestAction()
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action)
        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        toolItemId = self._getToolItemId (action.stringId)

        self._emulateButtonClick (toolItemId)
        self.assertEqual (action.runCount, 1)

        self.actionController.removeAction (action.stringId)

        self._emulateButtonClick (toolItemId)
        self.assertEqual (action.runCount, 1)


    def testRemoveToolButton (self):
        action = TestAction()
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action)
        self.actionController.appendMenuItem (action.stringId, menu)
        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        self.assertEqual (toolbar.GetToolCount(), 1)
        self._assertMenuItemExists (menu, action.title, None)

        self.actionController.removeToolbarButton (action.stringId)

        self.assertEqual (toolbar.GetToolCount(), 0)
        self._assertMenuItemExists (menu, action.title, None)


    def testRemoveToolButtonInvalid (self):
        action = TestAction()
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action)
        self.actionController.appendMenuItem (action.stringId, menu)

        self.assertEqual (toolbar.GetToolCount(), 0)
        self._assertMenuItemExists (menu, action.title, None)

        self.actionController.removeToolbarButton (action.stringId)

        self.assertEqual (toolbar.GetToolCount(), 0)
        self._assertMenuItemExists (menu, action.title, None)


    def testRemoveMenuItemInvalid (self):
        action = TestAction()
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action)
        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        self.assertEqual (toolbar.GetToolCount(), 1)
        self.assertEqual (menu.FindItem (action.title), wx.NOT_FOUND)

        self.actionController.removeMenuItem (action.stringId)

        self.assertEqual (toolbar.GetToolCount(), 1)
        self.assertEqual (menu.FindItem (action.title), wx.NOT_FOUND)


    def testRemoveMenuItem (self):
        action = TestAction()
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action)
        self.actionController.appendMenuItem (action.stringId, menu)
        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        self.assertEqual (toolbar.GetToolCount(), 1)
        self._assertMenuItemExists (menu, action.title, None)

        self.actionController.removeMenuItem (action.stringId)

        self.assertEqual (toolbar.GetToolCount(), 1)
        self.assertEqual (menu.FindItem (action.title), wx.NOT_FOUND)


    def testHotKeysDefaultMenu (self):
        action = TestAction()
        menu = self.wnd.mainMenu.fileMenu
        hotkey = HotKey ("T", ctrl=True)

        self.actionController.register (action, hotkey=hotkey)
        self.assertEqual (self.actionController.getHotKey (action.stringId), hotkey)

        self.actionController.appendMenuItem (action.stringId, menu)

        self._assertMenuItemExists (menu, action.title, hotkey)


    def testHotKeysDefaultToolBar (self):
        action = TestAction()
        hotkey = HotKey ("T", ctrl=True)
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action, hotkey=hotkey)
        self.assertEqual (self.actionController.getHotKey (action.stringId), hotkey)

        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        self.assertEqual (self._getToolItemLabel (toolbar, action.stringId), 
                u"{0} ({1})".format (action.title, HotKeyParser.toString (hotkey) ) )


    def testDisableTools (self):
        action = TestAction()
        hotkey = HotKey ("T", ctrl=True)
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        self.actionController.register (action, hotkey=hotkey)

        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        toolid = self._getToolItemId (action.stringId)

        self.actionController.enableTools (action.stringId, False)
        self.assertFalse (toolbar.GetToolEnabled (toolid))

        self.actionController.enableTools (action.stringId, True)
        self.assertTrue (toolbar.GetToolEnabled (toolid))


    def testDisableMenuItem (self):
        action = TestAction()
        hotkey = HotKey ("T", ctrl=True)
        menu = self.wnd.mainMenu.fileMenu

        self.actionController.register (action, hotkey=hotkey)

        self.actionController.appendMenuItem (action.stringId, menu)

        menuItemId = self._getMenuItemId (action.stringId)

        self.actionController.enableTools (action.stringId, False)
        self.assertFalse (menu.IsEnabled (menuItemId))

        self.actionController.enableTools (action.stringId, True)
        self.assertTrue (menu.IsEnabled (menuItemId))


    def testDidableToolsAll (self):
        action = TestAction()
        hotkey = HotKey ("T", ctrl=True)
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"
        menu = self.wnd.mainMenu.fileMenu

        self.actionController.register (action, hotkey=hotkey)

        self.actionController.appendMenuItem (action.stringId, menu)
        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        menuItemId = self._getMenuItemId (action.stringId)
        toolid = self._getToolItemId (action.stringId)

        self.actionController.enableTools (action.stringId, False)
        self.assertFalse (toolbar.GetToolEnabled (toolid))
        self.assertFalse (menu.IsEnabled (menuItemId))

        self.actionController.enableTools (action.stringId, True)
        self.assertTrue (toolbar.GetToolEnabled (toolid))
        self.assertTrue (menu.IsEnabled (menuItemId))


    def testDisableToolsNone (self):
        action = TestAction()
        hotkey = HotKey ("T", ctrl=True)

        self.actionController.register (action, hotkey=hotkey)
        self.actionController.enableTools (action.stringId, False)


    def testGetActions1 (self):
        action1 = TestAction()
        action2 = TestCheckAction()

        self.actionController.register (action1)
        self.actionController.register (action2)

        self.assertEqual (self.actionController.getAction(action1.stringId), action1)
        self.assertEqual (self.actionController.getAction(action2.stringId), action2)


    def testGetActions2 (self):
        action1 = TestAction()
        action2 = TestCheckAction()
        self.actionController.register (action1)

        self.assertRaises (KeyError, self.actionController.getAction, action2.stringId)


    def testHotKeyLoadConfig (self):
        action = TestAction()
        hotKeyFromConfig = HotKey ("F11")
        HotKeyOption (Application.config, self.actionController.configSection, action.stringId, None).value = hotKeyFromConfig

        self.actionController.register (action, HotKey ("F12", ctrl=True))

        self.assertEqual (self.actionController.getHotKey (action.stringId).key, "F11")
        self.assertFalse (self.actionController.getHotKey (action.stringId).ctrl)
        self.assertFalse (self.actionController.getHotKey (action.stringId).shift)
        self.assertFalse (self.actionController.getHotKey (action.stringId).alt)


    def testHotKeySaveConfig1 (self):
        action = TestAction()
        hotkey = HotKey ("F11", ctrl=True)

        self.actionController.register (action, hotkey)
        self.actionController.saveHotKeys()

        otherActionController = ActionController (self.wnd, Application.config)
        otherActionController.register (action)

        self.assertEqual (otherActionController.getHotKey (action.stringId).key, "F11")
        self.assertTrue (otherActionController.getHotKey (action.stringId).ctrl)
        self.assertFalse (otherActionController.getHotKey (action.stringId).shift)
        self.assertFalse (otherActionController.getHotKey (action.stringId).alt)


    def testHotKeySaveConfig2 (self):
        action = TestAction()
        hotkey = HotKey ("F11", ctrl=True)

        self.actionController.register (action, hotkey)
        self.actionController.saveHotKeys()

        otherActionController = ActionController (self.wnd, Application.config)
        otherActionController.register (action, HotKey ("F1", shift=True))

        self.assertEqual (otherActionController.getHotKey (action.stringId).key, "F11")
        self.assertTrue (otherActionController.getHotKey (action.stringId).ctrl)
        self.assertFalse (otherActionController.getHotKey (action.stringId).shift)
        self.assertFalse (otherActionController.getHotKey (action.stringId).alt)


    def testHotKeySaveConfig3 (self):
        action = TestAction()

        self.actionController.register (action)
        self.actionController.saveHotKeys()

        otherActionController = ActionController (self.wnd, Application.config)
        otherActionController.register (action)

        self.assertEqual (otherActionController.getHotKey (action.stringId).key, "")
        self.assertFalse (otherActionController.getHotKey (action.stringId).ctrl)
        self.assertFalse (otherActionController.getHotKey (action.stringId).shift)
        self.assertFalse (otherActionController.getHotKey (action.stringId).alt)


    def testSetHotKey (self):
        action = TestAction()
        self.actionController.register (action, None)

        hotkey = HotKey ("F11", ctrl=True)
        self.actionController.setHotKey (action.stringId, hotkey)
        self.assertEqual (self.actionController.getHotKey (action.stringId), hotkey)


    def testChangeHotkeyGui (self):
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        hotkey = HotKey ("F11", ctrl=True)

        action = TestAction()
        self.actionController.register (action, None)

        self.actionController.appendMenuItem (action.stringId, menu)
        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        self.actionController.setHotKey (action.stringId, hotkey)

        self.assertEqual (self._getToolItemLabel (toolbar, action.stringId), 
                u"{} ({})".format (action.title, "Ctrl+F11"))

        self.assertEqual (self._getMenuItem(action.stringId).GetItemLabel(), 
                u"{}\t{}".format (action.title, "Ctrl+F11"))


    def testChangeHotkeyGuiMenu (self):
        menu = self.wnd.mainMenu.fileMenu

        hotkey = HotKey ("F11", ctrl=True)

        action = TestAction()
        self.actionController.register (action, None)

        self.actionController.appendMenuItem (action.stringId, menu)

        self.actionController.setHotKey (action.stringId, hotkey)

        self.assertEqual (self._getMenuItem(action.stringId).GetItemLabel(), 
                u"{}\t{}".format (action.title, "Ctrl+F11"))


    def testChangeHotkeyToolbar (self):
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        hotkey = HotKey ("F11", ctrl=True)

        action = TestAction()
        self.actionController.register (action, None)

        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        self.actionController.setHotKey (action.stringId, hotkey)

        self.assertEqual (self._getToolItemLabel (toolbar, action.stringId), 
                u"{} ({})".format (action.title, "Ctrl+F11"))


    def testDelayChangeHotkeyToolbar (self):
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        hotkey = HotKey ("F11", ctrl=True)

        action = TestAction()
        self.actionController.register (action, HotKey ("F11"))

        self.actionController.appendToolbarButton (action.stringId, 
                toolbar,
                image)

        self.actionController.setHotKey (action.stringId, hotkey, False)

        self.assertEqual (self._getToolItemLabel (toolbar, action.stringId), 
                u"{} ({})".format (action.title, "F11"))

        otherActionController = ActionController (self.wnd, Application.config)
        otherActionController.register (action, None)

        self.assertEqual (otherActionController.getHotKey (action.stringId),
                hotkey)


    def testChangeHotkeyGuiChecked1 (self):
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        hotkey = HotKey ("F11", ctrl=True)

        action = TestCheckAction()
        self.actionController.register (action, None)

        self.actionController.appendMenuCheckItem (action.stringId, menu)
        self.actionController.appendToolbarCheckButton (action.stringId, 
                toolbar,
                image)

        self.actionController.setHotKey (action.stringId, hotkey)

        self.assertEqual (self._getToolItemLabel (toolbar, action.stringId), 
                u"{} ({})".format (action.title, "Ctrl+F11"))

        self.assertEqual (self._getMenuItem(action.stringId).GetItemLabel(), 
                u"{}\t{}".format (action.title, "Ctrl+F11"))


    def testChangeHotkeyGuiChecked2 (self):
        menu = self.wnd.mainMenu.fileMenu
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        image = "../test/images/save.png"

        hotkey = HotKey ("F11", ctrl=True)

        action = TestCheckAction()
        self.actionController.register (action, None)

        self.actionController.appendMenuCheckItem (action.stringId, menu)
        self.actionController.appendToolbarCheckButton (action.stringId, 
                toolbar,
                image)

        menuItem = self._getMenuItem (action.stringId)
        toolItem = self._getToolItem (toolbar, action.stringId)

        self.actionController.setHotKey (action.stringId, hotkey)
        self.actionController.check (action.stringId, True)

        self.assertTrue (menuItem.IsChecked())
        self.assertTrue (toolItem.GetState())


    def _assertMenuItemExists (self, menu, title, hotkey):
        """
        Проверить, что в меню есть элемент с заголовком (title + '\t' + hotkey)
        """
        menuItemId = menu.FindItem (title)
        self.assertNotEqual (menuItemId, wx.NOT_FOUND)

        menuItem = menu.FindItemById (menuItemId)
        
        if hotkey != None:
            self.assertEqual (menuItem.GetItemLabel(), title + "\t" + HotKeyParser.toString (hotkey))
        else:
            self.assertEqual (menuItem.GetItemLabel(), title)


    def _emulateMenuClick (self, menuItemId):
        """
        Эмуляция события выбора пункта меню
        """
        event = wx.CommandEvent (wx.wxEVT_COMMAND_MENU_SELECTED, menuItemId)
        self.wnd.ProcessEvent (event)


    def _emulateButtonClick (self, toolitemId):
        """
        Эмуляция события выбора пункта меню
        """
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        event = wx.CommandEvent (wx.wxEVT_COMMAND_TOOL_CLICKED, toolitemId)
        self.wnd.ProcessEvent (event)


    def _emulateCheckButtonClick (self, toolitemId):
        """
        Эмуляция события выбора пункта меню
        """
        toolbar = self.wnd.toolbars[self.wnd.PLUGINS_TOOLBAR_STR]
        toolitem = toolbar.FindTool (toolitemId)
        newState = not toolitem.GetState()
        toolbar.ToggleTool (toolitemId, newState)

        event = wx.CommandEvent (wx.wxEVT_COMMAND_TOOL_CLICKED, toolitemId)
        event.SetInt (newState)
        self.wnd.ProcessEvent (event)


    def _getMenuItemId (self, strid):
        result = None
       
        actionInfo = self.actionController.getActionInfo(strid)
        if actionInfo != None:
            result = actionInfo.menuItem.GetId()

        return result


    def _getMenuItem (self, strid):
        result = None
       
        actionInfo = self.actionController.getActionInfo(strid)
        if actionInfo != None:
            result = actionInfo.menuItem

        return result


    def _getToolItemId (self, strid):
        """
        Получить идентификатор кнопки с панели инструментов
        """
        result = None
       
        actionInfo = self.actionController.getActionInfo(strid)
        if actionInfo != None:
            result = actionInfo.toolItemId

        return result


    def _getToolItemLabel (self, toolbar, strid):
        result = None

        item = self._getToolItem (toolbar, strid)

        if item != None:
            result = item.GetLabel()

        return result


    def _getToolItem (self, toolbar, strid):
        result = None

        itemId = self._getToolItemId (strid)
        if itemId != None:
            result = toolbar.FindTool (itemId)

        return result
Exemple #25
0
 def setUp(self):
     BaseMainWndTest.setUp(self)
     self.actionController = ActionController(self.wnd, Application.config)
     Application.config.remove_section(self.actionController.configSection)