18 from ..controller
import ctrlcommands, filecontrollers, macrocontrollers, settingcontrollers
19 from ..controller.ctrlcommands
import SortTests, SortVariables
28 from ..editor.editordialogs
import (TestCaseNameDialog, UserKeywordNameDialog, ScalarVariableDialog, ListVariableDialog,
29 CopyUserKeywordDialog, DictionaryVariableDialog)
30 from ..publish
import RideOpenVariableDialog, RideTestSelectedForRunningChanged, PUBLISHER
31 from ..ui.progress
import LoadProgressObserver
32 from ..ui.resourcedialogs
import FolderDeleteDialog
33 from ..usages.UsageRunner
import Usages, ResourceFileUsages
34 from ..utils
import overrides
35 from ..widgets
import PopupMenuItems
36 from .filedialogs
import (AddSuiteDialog, AddDirectoryDialog, ChangeFormatDialog, NewResourceDialog,
38 from .progress
import RenameProgressObserver
39 from .resourcedialogs
import ResourceRenameDialog, ResourceDeleteDialog
40 from ..ui.resourcedialogs
import FolderDeleteDialog
45 filecontrollers.TestDataDirectoryController: TestDataDirectoryHandler,
46 filecontrollers.ResourceFileController: ResourceFileHandler,
47 filecontrollers.TestCaseFileController: TestCaseFileHandler,
48 macrocontrollers.TestCaseController: TestCaseHandler,
49 macrocontrollers.UserKeywordController: UserKeywordHandler,
50 settingcontrollers.VariableController: VariableHandler,
51 filecontrollers.ExcludedDirectoryController: ExcludedDirectoryHandler
52 }[controller.__class__]
56 is_user_keyword =
False
63 _label_add_suite =
'New Suite\tCtrl-Shift-F'
67 _label_add_directory =
'New Directory'
71 _label_new_test_case =
'New Test Case\tCtrl-Shift-T'
75 _label_new_user_keyword =
'New User Keyword\tCtrl-Shift-K'
79 _label_sort_variables =
'Sort Variables'
83 _label_sort_tests =
'Sort Tests'
87 _label_sort_keywords =
'Sort Keywords'
91 _label_new_scalar =
'New Scalar\tCtrl-Shift-V'
95 _label_new_list_variable =
'New List Variable\tCtrl-Shift-L'
99 _label_new_dict_variable =
'New Dictionary Variable'
103 _label_change_format =
'Change Format'
107 _label_copy_macro =
'Copy\tCtrl-Shift-C'
111 _label_rename =
'Rename\tF2'
115 _label_add_resource =
'Add Resource'
119 _label_new_resource =
'New Resource'
123 _label_find_usages =
'Find Usages'
127 _label_select_all =
'Select All Tests'
131 _label_deselect_all =
'Deselect All Tests'
135 _label_select_failed_tests =
'Select Only Failed Tests'
139 _label_select_passed_tests =
'Select Only Passed Tests'
143 _label_delete =
'Delete\tCtrl-Shift-D'
147 _label_delete_no_kbsc =
'Delete'
151 _label_exclude =
'Exclude'
155 _label_include =
'Include'
159 _label_expand_all =
'Expand all'
163 _label_collapse_all =
'Collapse all'
167 _label_remove_readonly =
'Remove Read Only'
171 _label_open_folder =
'Open Containing Folder'
173 def __init__(self, controller, tree, node, settings):
191 return self.
_node_node
194 self.
_popup_creator_popup_creator.show(self.
_tree_tree, PopupMenuItems(self, self._actions),
240 self._tree.SelectAllTests(self._node)
243 self.
_tree_tree.SelectAllTests(self.
_node_node,
False)
246 self.
_tree_tree.SelectFailedTests(self.
_node_node)
249 self.
_tree_tree.SelectPassedTests(self.
_node_node)
261 class _CanBeRenamed():
264 self._tree.label_editor.OnLabelEdit()
269 node = self._tree._controller.find_node_by_controller(
272 self._tree.EditLabel(node)
276 wx.CallAfter(label_edit)
280 if not event.IsEditCancelled():
282 self.rename(event.GetLabel())
287 validation = self.controller.validate_name(label)
288 if validation.error_message:
294 wx.MessageBox(err_msg,
'Validation Error', style=wx.ICON_ERROR)
299 is_test_suite =
False
300 can_be_rendered =
False
304 _actions = [_ActionHandler._label_new_resource]
311 accepts_drag =
lambda self, dragged: (isinstance(dragged, UserKeywordHandler)
or
312 isinstance(dragged, VariableHandler))
339 self.
controllercontroller.add_test_or_keyword(item)
350 self.
controllercontroller.execute(ctrlcommands.SortKeywords())
357 can_be_rendered = property
365 return (self.
itemitemitem.keyword_table
or self.
itemitemitem.testcase_table
or
376 if dlg.ShowModal() == wx.ID_OK:
377 self.
controllercontroller.execute(ctrlcommands.AddKeyword(dlg.get_name(), dlg.get_args()))
381 self.
_new_var_new_var(ScalarVariableDialog)
385 global_settings = self.
_settings_settings
386 self.
_new_var_new_var(ListVariableDialog, plugin=FakePlugin())
390 global_settings = self.
_settings_settings
391 self.
_new_var_new_var(DictionaryVariableDialog, plugin=FakePlugin())
395 if dlg.ShowModal() == wx.ID_OK:
396 name, value = dlg.get_value()
397 comment = dlg.get_comment()
398 self.
controllercontroller.execute(ctrlcommands.AddVariable(name, value, comment))
401 _var_controller = property
404 return self.
controllercontroller.datafile_controller.variables
410 TestDataHandler.__init__(self, *args)
412 _ActionHandler._label_add_suite,
413 _ActionHandler._label_add_directory,
414 _ActionHandler._label_new_resource,
416 _ActionHandler._label_new_user_keyword,
417 _ActionHandler._label_new_scalar,
418 _ActionHandler._label_new_list_variable,
419 _ActionHandler._label_new_dict_variable,
421 _ActionHandler._label_change_format
424 self.
_actions_actions.extend([_ActionHandler._label_delete_no_kbsc])
428 _ActionHandler._label_select_all,
429 _ActionHandler._label_deselect_all,
430 _ActionHandler._label_select_failed_tests,
431 _ActionHandler._label_select_passed_tests
434 self.
_actions_actions.extend([
'---',
435 _ActionHandler._label_exclude])
436 self.
_actions_actions.extend([
'---',
437 _ActionHandler._label_expand_all,
438 _ActionHandler._label_collapse_all])
441 self.
_tree_tree.ExpandAllSubNodes(self.
_node_node)
444 self.
_tree_tree.CollapseAllSubNodes(self.
_node_node)
460 self.
controllercontroller.execute(ctrlcommands.Exclude())
461 except filecontrollers.DirtyRobotDataException:
462 wx.MessageBox(
'Directory contains unsaved data!\n'
463 'You must save data before excluding.')
468 @overrides(_CanBeRenamed)
472 return _CanBeRenamed.begin_label_edit(self)
474 @overrides(_CanBeRenamed)
476 if not event.IsEditCancelled():
477 result = self.controller.execute(
481 self.
_old_label_old_label = self.controller.basename
491 raise NotImplementedError(self.__class__)
494 self._tree.SetItemText(self._node, label)
498 is_test_suite =
False
502 _actions = [_ActionHandler._label_new_user_keyword,
503 _ActionHandler._label_new_scalar,
504 _ActionHandler._label_new_list_variable,
505 _ActionHandler._label_new_dict_variable,
507 _ActionHandler._label_rename,
508 _ActionHandler._label_change_format,
509 _ActionHandler._label_sort_keywords,
510 _ActionHandler._label_find_usages,
511 _ActionHandler._label_delete,
513 _ActionHandler._label_sort_variables,
514 _ActionHandler._label_sort_keywords,
516 _ActionHandler._label_remove_readonly,
517 _ActionHandler._label_open_folder
524 self.
controllercontroller.is_modifiable = returnTrue
525 self.
controllercontroller.execute(ctrlcommands.RemoveReadOnly())
528 self.
controllercontroller.execute(ctrlcommands.OpenContainingFolder())
539 @overrides(_FileHandlerThanCanBeRenamed)
541 return ctrlcommands.RenameResourceFile(
549 accepts_drag =
lambda *args:
True
553 _actions = [_ActionHandler._label_new_test_case,
554 _ActionHandler._label_new_user_keyword,
555 _ActionHandler._label_new_scalar,
556 _ActionHandler._label_new_list_variable,
557 _ActionHandler._label_new_dict_variable,
559 _ActionHandler._label_rename,
560 _ActionHandler._label_change_format,
561 _ActionHandler._label_sort_keywords,
562 _ActionHandler._label_delete,
564 _ActionHandler._label_sort_variables,
565 _ActionHandler._label_sort_tests,
566 _ActionHandler._label_sort_keywords,
568 _ActionHandler._label_select_all,
569 _ActionHandler._label_deselect_all,
570 _ActionHandler._label_select_failed_tests,
571 _ActionHandler._label_select_passed_tests,
573 _ActionHandler._label_remove_readonly,
574 _ActionHandler._label_open_folder
581 self.
controllercontroller.is_modifiable = returnTrue
582 self.
controllercontroller.execute(ctrlcommands.RemoveReadOnly())
586 self.
controllercontroller.execute(ctrlcommands.OpenContainingFolder())
590 if dlg.ShowModal() == wx.ID_OK:
591 self.
controllercontroller.execute(ctrlcommands.AddTestCase(dlg.get_name()))
595 if wx.MessageBox(
'Delete test case file', caption=
'Confirm',
596 style=wx.YES_NO | wx.ICON_QUESTION) == wx.YES:
597 self.
controllercontroller.execute(ctrlcommands.DeleteFile())
602 @overrides(_FileHandlerThanCanBeRenamed)
604 return ctrlcommands.RenameFile(label)
606 @overrides(_FileHandlerThanCanBeRenamed)
608 self.
_tree_tree.SelectAllTests(self.
_node_node,
False)
612 accepts_drag =
lambda *args:
False
618 _ActionHandler._label_copy_macro,
620 'Move Down\tCtrl-Down',
621 _ActionHandler._label_rename,
630 self.
controllercontroller.execute(self._create_rename_command(new_name))
634 if dlg.ShowModal() == wx.ID_OK:
635 self.
controllercontroller.execute(ctrlcommands.CopyMacroAs(dlg.get_name()))
651 def __init__(self, controller, tree, node, settings):
652 _TestOrUserKeywordHandler.__init__(self, controller, tree, node, settings)
658 _datalist = property(
lambda self: self.
itemitemitem.datalist)
662 _copy_name_dialog_class = TestCaseNameDialog
665 self.
_tree_tree.add_test(parent_node, copied)
668 return ctrlcommands.RenameTest(new_name)
671 if self.
controllercontroller
in message.tests:
672 if not self.
nodenodenode.GetValue():
680 is_user_keyword =
True
684 _datalist = property(
lambda self: self.
itemitemitem.datalist)
688 _copy_name_dialog_class = CopyUserKeywordDialog
692 _actions = _TestOrUserKeywordHandler._actions + [
693 _ActionHandler._label_find_usages]
696 self.
_tree_tree.add_keyword(parent_node, copied)
699 return ctrlcommands.RenameKeywordOccurrences(
709 accepts_drag =
lambda *args:
False
712 OnMoveUp = OnMoveDown =
lambda *args:
None
718 'Move Down\tCtrl-Down',
719 _ActionHandler._label_rename,
724 @overrides(_ActionHandler)
735 self.
controllercontroller.execute(ctrlcommands.UpdateVariableName(new_name))
753 can_be_rendered = is_draggable = is_user_keyword = is_test_suite =
False
754 rename =
lambda self, new_name:
False
755 accepts_drag =
lambda self, dragged:
False
759 _actions = [_ActionHandler._label_add_resource]
779 TestDataHandler.__init__(self, *args)
783 self.
controllercontroller.execute(ctrlcommands.Include())
Sent when variable dialog is requested to be open.
def OnNewResource(self, event)
def OnInclude(self, event)
def __init__(self, *args)
def OnOpenContainingFolder(self, event)
def OnRemoveReadOnly(self, event)
def _rename_command(self, label)
def OnSafeDelete(self, event)
def OnFindUsages(self, event)
def OnDelete(self, event)
def _check_should_rename_static_imports(self)
def OnAddResource(self, event)
def _rename_command(self, label)
def OnRemoveReadOnly(self, event)
def OnOpenContainingFolder(self, event)
def OnNewTestCase(self, event)
def _rename_ok_handler(self)
def OnDelete(self, event)
def OnSafeDelete(self, event)
def _create_rename_command(self, new_name)
def test_selection_changed(self, message)
def _add_copy_to_tree(self, parent_node, copied)
def __init__(self, controller, tree, node, settings)
def OnNewResource(self, event)
def OnExpandAll(self, event)
def OnExclude(self, event)
def OnCollapseAll(self, event)
def OnNewDirectory(self, event)
def OnDelete(self, event)
def OnNewSuite(self, event)
def __init__(self, *args)
def rename(self, new_name)
def OnNewDictionaryVariable(self, event)
def OnSortTests(self, event)
Sorts the tests inside the treenode.
def OnChangeFormat(self, event)
def _var_controller(self)
def OnSortKeywords(self, event)
Sorts the keywords inside the treenode.
def _new_var(self, dialog_class, plugin=None)
def OnSortVariables(self, event)
Sorts the variables inside the treenode.
def has_been_modified_on_disk(self)
def OnNewUserKeyword(self, event)
def OnNewListVariable(self, event)
def OnNewScalar(self, event)
def _create_rename_command(self, new_name)
def _add_copy_to_tree(self, parent_node, copied)
def OnFindUsages(self, event)
def OnDelete(self, event)
def rename(self, new_name)
def OnMoveDown(self, event)
def OnNewSuite(self, event)
def OnDeselectAllTests(self, event)
def OnExclude(self, event)
def end_label_edit(self, event)
def OnNewScalar(self, event)
def OnDelete(self, event)
def OnSelectAllTests(self, event)
def begin_label_edit(self)
def __init__(self, controller, tree, node, settings)
def OnNewDirectory(self, event)
def OnSafeDelete(self, event)
def OnNewListVariable(self, event)
def OnFindUsages(self, event)
def OnNewDictionaryVariable(self, event)
def OnNewUserKeyword(self, event)
def OnSelectOnlyPassedTests(self, event)
def OnNewTestCase(self, event)
def OnInclude(self, event)
def OnSelectOnlyFailedTests(self, event)
def OnNewResource(self, event)
def begin_label_edit(self)
def _show_validation_error(self, err_msg)
def OnRename(self, event)
def _is_valid_rename(self, label)
def end_label_edit(self, event)
def _set_node_label(self, label)
def begin_label_edit(self)
def _rename_command(self, label)
def _rename_ok_handler(self)
def end_label_edit(self, event)
def OnMoveUp(self, event)
def OnMoveDown(self, event)
def rename(self, new_name)
def OnDelete(self, event)
def action_handler_class(controller)