def OnInit(self): # Needed for SetToolTipString to work wx.HelpProvider.Set(wx.SimpleHelpProvider()) # TODO adjust to wx versions self.settings = RideSettings() librarydatabase.initialize_database() self.preferences = Preferences(self.settings) self.namespace = Namespace(self.settings) self._controller = Project(self.namespace, self.settings) self.frame = RideFrame(self, self._controller) self._editor_provider = EditorProvider() self._plugin_loader = PluginLoader(self, self._get_plugin_dirs(), coreplugins.get_core_plugins()) self._plugin_loader.enable_plugins() self.frame.Show() self.editor = self._get_editor() self._load_data() self.frame.tree.populate(self.model) self.frame.tree.set_editor(self.editor) self._find_robot_installation() self._publish_system_info() if self._updatecheck: UpdateNotifierController( self.settings).notify_update_if_needed(UpdateDialog) wx.CallLater(200, ReleaseNotes(self).bring_to_front) return True
def setUp(self): plugins_dir = [ os.path.join(os.path.dirname(__file__), 'plugins_for_loader') ] app = FakeApplication() self.loader = PluginLoader(app, plugins_dir, [self.used_plugin_class]) app.get_plugins = lambda: self.loader.plugins
class TestPluginLoader(unittest.TestCase): used_plugin_class = LogPlugin expected_plugins = [ 'Example Plugin 1', 'Example Plugin 2', 'Example Plugin 3', utils.name_from_class(used_plugin_class, drop='Plugin') ] def setUp(self): plugins_dir = [ os.path.join(os.path.dirname(__file__), 'plugins_for_loader') ] app = FakeApplication() self.loader = PluginLoader(app, plugins_dir, [self.used_plugin_class]) app.get_plugins = lambda: self.loader.plugins def tearDown(self): for p in self.loader.plugins: p.disable() def test_plugin_loading(self): for name in self.expected_plugins: self._assert_plugin_loaded(name) assert_false(LOGGER.log) def _assert_plugin_loaded(self, name): for p in self.loader.plugins: if p.name == name: return raise AssertionError("Plugin '%s' not loaded" % name) def test_plugins_are_not_enabled_when_loaded(self): for p in self.loader.plugins: assert_false(p.enabled) def test_plugins_can_be_enabled(self): self.loader.enable_plugins() for p in self.loader.plugins: assert_true(p.enabled, 'Plugin %s was not enabled' % p.name) def test_plugins_can_disable_other_plugins(self): self.loader.enable_plugins() self._get_plugin_by_name('Example Plugin 2')._plugin.turn_off( 'Example Plugin 1') assert_false(self._get_plugin_by_name('Example Plugin 1').enabled) def _get_plugin_by_name(self, name): for p in self.loader.plugins: if p.name == name: return p return None
class TestPluginLoader(unittest.TestCase): used_plugin_class = LogPlugin expected_plugins = [ "Example Plugin 1", "Example Plugin 2", "Example Plugin 3", utils.name_from_class(used_plugin_class, drop="Plugin"), ] def setUp(self): plugins_dir = [os.path.join(os.path.dirname(__file__), "plugins_for_loader")] app = FakeApplication() self.loader = PluginLoader(app, plugins_dir, [self.used_plugin_class]) app.get_plugins = lambda: self.loader.plugins def tearDown(self): for p in self.loader.plugins: p.disable() def test_plugin_loading(self): for name in self.expected_plugins: self._assert_plugin_loaded(name) assert_false(LOGGER.log) def _assert_plugin_loaded(self, name): for p in self.loader.plugins: if p.name == name: return raise AssertionError("Plugin '%s' not loaded" % name) def test_plugins_are_not_enabled_when_loaded(self): for p in self.loader.plugins: assert_false(p.enabled) def test_plugins_can_be_enabled(self): self.loader.enable_plugins() for p in self.loader.plugins: assert_true(p.enabled, "Plugin %s was not enabled" % p.name) def test_plugins_can_disable_other_plugins(self): self.loader.enable_plugins() self._get_plugin_by_name("Example Plugin 2")._plugin.turn_off("Example Plugin 1") assert_false(self._get_plugin_by_name("Example Plugin 1").enabled) def _get_plugin_by_name(self, name): for p in self.loader.plugins: if p.name == name: return p return None
def OnInit(self): # DEBUG To test RTL # self._initial_locale = wx.Locale(wx.LANGUAGE_ARABIC) self._initial_locale = wx.Locale(wx.LANGUAGE_ENGLISH) # Needed for SetToolTipString to work wx.HelpProvider.Set( wx.SimpleHelpProvider()) # TODO adjust to wx versions self.settings = RideSettings() librarydatabase.initialize_database() self.preferences = Preferences(self.settings) self.namespace = Namespace(self.settings) self._controller = Project(self.namespace, self.settings) self.frame = RideFrame(self, self._controller) self._editor_provider = EditorProvider() self._plugin_loader = PluginLoader(self, self._get_plugin_dirs(), coreplugins.get_core_plugins()) self._plugin_loader.enable_plugins() self.treeplugin = TreePlugin(self) self.treeplugin.register_frame(self.frame) self.fileexplorerplugin = FileExplorerPlugin(self, self._controller) self.fileexplorerplugin.register_frame(self.frame) self.frame.Show() if not self.treeplugin.opened: self.treeplugin.close_tree() if not self.fileexplorerplugin.opened: self.fileexplorerplugin.close_tree() self.editor = self._get_editor() self._load_data() self.treeplugin.populate(self.model) self.treeplugin.set_editor(self.editor) self._find_robot_installation() self._publish_system_info() perspective = self.settings.get('AUI Perspective', None) if perspective: self.frame._mgr.LoadPerspective(perspective, True) if self._updatecheck: UpdateNotifierController( self.settings).notify_update_if_needed(UpdateDialog) wx.CallLater(200, ReleaseNotes(self).bring_to_front) wx.CallLater(200, self.fileexplorerplugin._update_tree) return True
def OnInit(self): self.settings = RideSettings() librarydatabase.initialize_database() self.preferences = Preferences(self.settings) self.namespace = Namespace(self.settings) self._controller = Project(self.namespace, self.settings) self.frame = RideFrame(self, self._controller) self._editor_provider = EditorProvider() self._plugin_loader = PluginLoader(self, self._get_plugin_dirs(), context.get_core_plugins()) self._plugin_loader.enable_plugins() self.editor = self._get_editor() self.editor.show() self._load_data() self.frame.tree.populate(self.model) self.frame.tree.set_editor(self.editor) self._publish_system_info() if self._updatecheck: UpdateNotifierController(self.settings).notify_update_if_needed(UpdateDialog) wx.CallLater(200, ReleaseNotes(self).bring_to_front) return True
def setUp(self): plugins_dir = [os.path.join(os.path.dirname(__file__), "plugins_for_loader")] app = FakeApplication() self.loader = PluginLoader(app, plugins_dir, [self.used_plugin_class]) app.get_plugins = lambda: self.loader.plugins
class RIDE(wx.App): def __init__(self, path=None, updatecheck=True): self._initial_path = path self._updatecheck = updatecheck context.APP = self wx.App.__init__(self, redirect=False) def OnInit(self): # Needed for SetToolTipString to work wx.HelpProvider_Set(wx.SimpleHelpProvider()) self.settings = RideSettings() librarydatabase.initialize_database() self.preferences = Preferences(self.settings) self.namespace = Namespace(self.settings) self._controller = Project(self.namespace, self.settings) self.frame = RideFrame(self, self._controller) self._editor_provider = EditorProvider() self._plugin_loader = PluginLoader(self, self._get_plugin_dirs(), coreplugins.get_core_plugins()) self._plugin_loader.enable_plugins() self.editor = self._get_editor() self.editor.show() self._load_data() self.frame.tree.populate(self.model) self.frame.tree.set_editor(self.editor) self._publish_system_info() if self._updatecheck: UpdateNotifierController(self.settings).notify_update_if_needed(UpdateDialog) wx.CallLater(200, ReleaseNotes(self).bring_to_front) return True def _publish_system_info(self): RideLogMessage(context.SYSTEM_INFO).publish() @property def model(self): return self._controller def _get_plugin_dirs(self): return [self.settings.get_path('plugins'), os.path.join(self.settings['install root'], 'site-plugins'), contrib.CONTRIB_PATH] def _get_editor(self): from robotide.editor import EditorPlugin for pl in self._plugin_loader.plugins: if isinstance(pl._plugin, EditorPlugin): return pl._plugin def _load_data(self): path = self._initial_path or self._get_latest_path() if path: with self.active_event_loop(): observer = LoadProgressObserver(self.frame) self._controller.load_data(path, observer) def _get_latest_path(self): recent = self._get_recentfiles_plugin() if not recent or not recent.recent_files: return None return recent.recent_files[0] def _get_recentfiles_plugin(self): from robotide.recentfiles import RecentFilesPlugin for pl in self.get_plugins(): if isinstance(pl._plugin, RecentFilesPlugin): return pl._plugin def get_plugins(self): return self._plugin_loader.plugins def register_preference_panel(self, panel_class): '''Add the given panel class to the list of known preference panels''' self.preferences.add(panel_class) def unregister_preference_panel(self, panel_class): '''Remove the given panel class from the list of known preference panels''' self.preferences.remove(panel_class) def register_editor(self, object_class, editor_class, activate): self._editor_provider.register_editor(object_class, editor_class, activate) def unregister_editor(self, object_class, editor_class): self._editor_provider.unregister_editor(object_class, editor_class) def activate_editor(self, object_class, editor_class): self._editor_provider.set_active_editor(object_class, editor_class) def get_editors(self, object_class): return self._editor_provider.get_editors(object_class) def get_editor(self, object_class): return self._editor_provider.get_editor(object_class) @contextmanager def active_event_loop(self): # With wxPython 2.9.1, ProgressBar.Pulse breaks if there's no active # event loop. # See http://code.google.com/p/robotframework-ride/issues/detail?id=798 loop = wx.EventLoop() wx.EventLoop.SetActive(loop) yield del loop
class RIDE(wx.App): def __init__(self, path=None, updatecheck=True): self._initial_path = path self._updatecheck = updatecheck context.APP = self wx.App.__init__(self, redirect=False) def OnInit(self): # Needed for SetToolTipString to work wx.HelpProvider.Set(wx.SimpleHelpProvider()) # TODO adjust to wx versions self.settings = RideSettings() librarydatabase.initialize_database() self.preferences = Preferences(self.settings) self.namespace = Namespace(self.settings) self._controller = Project(self.namespace, self.settings) self.frame = RideFrame(self, self._controller) self._editor_provider = EditorProvider() self._plugin_loader = PluginLoader(self, self._get_plugin_dirs(), coreplugins.get_core_plugins()) self._plugin_loader.enable_plugins() self.frame.Show() self.editor = self._get_editor() self._load_data() self.frame.tree.populate(self.model) self.frame.tree.set_editor(self.editor) self._find_robot_installation() self._publish_system_info() if self._updatecheck: UpdateNotifierController( self.settings).notify_update_if_needed(UpdateDialog) wx.CallLater(200, ReleaseNotes(self).bring_to_front) return True def _publish_system_info(self): publish.RideLogMessage(context.SYSTEM_INFO).publish() @property def model(self): return self._controller def _get_plugin_dirs(self): return [self.settings.get_path('plugins'), os.path.join(self.settings['install root'], 'site-plugins'), contrib.CONTRIB_PATH] def _get_editor(self): from robotide.editor import EditorPlugin for pl in self._plugin_loader.plugins: maybe_editor = pl._plugin if isinstance(maybe_editor, EditorPlugin): maybe_editor.show() return maybe_editor def _load_data(self): path = self._initial_path or self._get_latest_path() if path: observer = LoadProgressObserver(self.frame) self._controller.load_data(path, observer) """ if path: with self.active_event_loop(): # observer = LoadProgressObserver(self.frame) observer = None # Avoid crash in Windows with wxPython 3 self._controller.load_data(path, observer) """ def _find_robot_installation(self): output = utils.run_python_command( ['import robot; print(robot.__file__ + \", \" + robot.__version__)']) if utils.PY2: robot_found = "ImportError" not in output and output else: robot_found = b"ModuleNotFoundError" not in output and output if robot_found: # print("DEBUG: output: %s strip: %s" % (output, output.strip().split(b", "))) rf_file, rf_version = output.strip().split(b", ") if utils.PY2: publish.RideLogMessage( "Found Robot Framework version %s from %s." % ( rf_version, os.path.dirname(rf_file))).publish() else: publish.RideLogMessage( "Found Robot Framework version %s from %s." % ( str(rf_version, 'utf-8'), str(os.path.dirname(rf_file), 'utf-8'))).publish() return rf_version else: publish.RideLogMessage( publish.get_html_message('no_robot'), notify_user=True ).publish() def _get_latest_path(self): recent = self._get_recentfiles_plugin() if not recent or not recent.recent_files: return None return recent.recent_files[0] def _get_recentfiles_plugin(self): from robotide.recentfiles import RecentFilesPlugin for pl in self.get_plugins(): if isinstance(pl._plugin, RecentFilesPlugin): return pl._plugin def get_plugins(self): return self._plugin_loader.plugins def register_preference_panel(self, panel_class): '''Add the given panel class to the list of known preference panels''' self.preferences.add(panel_class) def unregister_preference_panel(self, panel_class): '''Remove the given panel class from the known preference panels''' self.preferences.remove(panel_class) def register_editor(self, object_class, editor_class, activate): self._editor_provider.register_editor(object_class, editor_class, activate) def unregister_editor(self, object_class, editor_class): self._editor_provider.unregister_editor(object_class, editor_class) def activate_editor(self, object_class, editor_class): self._editor_provider.set_active_editor(object_class, editor_class) def get_editors(self, object_class): return self._editor_provider.get_editors(object_class) def get_editor(self, object_class): return self._editor_provider.get_editor(object_class) @contextmanager def active_event_loop(self): # With wxPython 2.9.1, ProgressBar.Pulse breaks if there's no active # event loop. # See http://code.google.com/p/robotframework-ride/issues/detail?id=798 loop = wx.EventLoop() wx.EventLoop.SetActive(loop) yield del loop