17 from itertools
import chain
19 from ..
import robotapi
20 from .arguments
import parse_arguments_to_var_dict
21 from .basecontroller
import ControllerWithParent, WithUndoRedoStacks
22 from .settingcontrollers
import (DocumentationController, FixtureController, TagsController, TimeoutController,
23 TemplateController, ArgumentsController, ReturnValueController)
24 from .stepcontrollers
import ForLoopStepController, StepController, IntendedStepController
26 from ..namespace.local_namespace
import LocalNamespace
27 from ..publish.messages
import (RideItemStepsChanged, RideItemNameChanged, RideItemSettingsChanged,
28 RideUserKeywordRemoved)
29 from ..spec.iteminfo
import ResourceUserKeywordInfo, TestCaseUserKeywordInfo
30 from ..utils
import variablematcher
32 KEYWORD_NAME_FIELD =
'Keyword Name'
33 TESTCASE_NAME_FIELD =
'Test Case Name'
46 if isinstance(name, str):
47 return self.
_item_item.name == name
48 return name.match(self.
_item_item.name)
51 return variablematcher.value_contains_variable(self.
_item_item.name, name)
54 print(f
"DEBUG: macrocontrollers.py replace_keyword new_name={new_name}")
61 self.
_item_item.notify_name_changed()
67 return self.
_item_item
74 _name_field = KEYWORD_NAME_FIELD
81 _name_field = TESTCASE_NAME_FIELD
99 return os.path.basename(self.
datadata.source)
if self.
datadata.source
else ''
105 return self.
datadata.name
117 ControllerWithParent.set_parent(self, new_parent)
121 for step
in self.
datadata.steps:
122 if step.is_for_loop():
124 flattened_steps.append(for_loop)
125 flattened_steps.extend(for_loop.steps)
136 max_columns = property
139 return max(chain((len(step)
for step
in self.
stepsstepssteps), [0]))
148 return [s._step
for s
in self.
stepsstepssteps].index(step)
151 corrected_index = index
152 for i
in range(index):
153 if isinstance(self.
stepstep(i), IntendedStepController):
155 self.
datadata.steps[corrected_index] = new_step
160 self.
stepstep(index).move_up()
166 self.
stepstep(index).move_down()
170 self.
datadata.steps = steps
186 if row < 0
or len(steps) <= row:
206 self.
datadata.name = new_name.strip()
211 for orig, copied
in zip(self.settings, new.settings):
212 copied.set_from(orig)
214 new.notify_steps_changed()
218 return [index
for index, step
in enumerate(self.
stepsstepssteps)
222 return step.as_list()
in [[], [
'']]
240 self.
datadata.steps.append(step)
242 previous_step = self.
stepstep(index)
243 previous_step.insert_before(step)
249 if validation.error_message:
250 raise ValueError(validation.error_message)
254 matcher = name.lower()
255 for match
in [
'given ',
'when ',
'then ',
'and ',
'but ']:
256 if matcher.startswith(match):
257 return name[len(match):]
271 return self.
datadata.steps
274 self.
datadata.steps = steps
278 rem_start, rem_end = step_range
279 extracted_steps = self.
stepsstepssteps[rem_start:rem_end + 1]
284 return [
robotapi.Step(s.as_list())
for s
in step_controllers]
292 self.
set_stepsset_steps(steps_before_extraction_point + extracted_kw_step +
293 steps_after_extraction_point)
297 controller.set_steps(extracted_steps)
315 self.
_notify_notify(RideItemSettingsChanged)
319 self.
_notify_notify(RideItemStepsChanged)
323 messageclass(item=self).publish()
341 if other.__class__ != self.__class__:
343 return self.
_test_test == other._test
346 return hash(repr(self))
367 force_tags = property
373 default_tags = property
395 documentation = property
420 return bool(template.value)
423 template = self.
_test_test.template
424 if template.value
is not None:
429 run_passed = property
457 _teardown = _TEARDOWN_NOT_SET
468 if other.__class__ != self.__class__:
470 return self.
_kw_kw == other._kw
473 return hash(repr(self))
484 keyword_name = property
def datafile_controller(self)
def notify_value_changed(self)
def contains_variable(self, name)
def replace_keyword(self, new_name, old_value=None)
def rename(self, new_name)
def contains_keyword(self, name)
def get_local_variables()
def validate_test_name(self, name)
def validate_keyword_name(self, name)
def validate_keyword_name(self, name)
def get_local_variables(self)
def notify_name_changed(self, old_name=None)
def extract_keyword(self, name, argstr, step_range)
def notify_keyword_removed(self)
def get_keyword_info(self, kw_name)
def rename(self, new_name)
def remove_step(self, index)
def __init__(self, parent_controller, data)
def _extract_steps(self, step_range)
def _replace_steps_with_kw(self, name, step_range)
def _is_empty_step(self, step)
def move_step_up(self, index)
def set_parent(self, new_parent)
def is_library_keyword(self, value)
def move_step_down(self, index)
def _remove_step(self, step)
def set_steps(self, steps)
def validate_name(self, name)
def _create_extracted_kw(self, name, argstr, extracted_steps)
def _convert_controller_to_steps(step_controllers)
def _recreate_steps(self)
def create_keyword(self, name, argstr)
def notify_settings_changed(self)
def _notify(self, messageclass)
def create_test(self, name)
def set_raw_steps(self, steps)
def get_local_namespace(self)
def get_local_namespace_for_row(self, row)
def update_namespace(self)
def index_of_step(self, step)
def notify_steps_changed(self)
def add_step(self, index, step=None)
def get_cell_info(self, row, col)
def replace_step(self, index, new_step)
def _remove_bdd_prefix(self, name)
def is_user_keyword(self, value)
def _clear_cached_steps(self)
The parsed resource file object.
Sent when a user keyword is removed from a suite or resource.
def parse_arguments_to_var_dict(args, name)
def LocalNamespace(controller, namespace, row=None)