Robot Framework Integrated Development Environment (RIDE)
model.py
Go to the documentation of this file.
1 # Copyright 2008-2015 Nokia Networks
2 # Copyright 2016- Robot Framework Foundation
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 
16 
35 
36 from robotide.lib.robot import model
37 from robotide.lib.robot.conf import RobotSettings
38 from robotide.lib.robot.output import LOGGER, Output, pyloggingconf
39 from robotide.lib.robot.utils import setter
40 
41 from .steprunner import StepRunner
42 from .randomizer import Randomizer
43 
44 
45 
53  __slots__ = []
54  message_class = None #: Internal usage only.
55 
56 
60  def run(self, context):
61  return StepRunner(context).run_step(self)
62 
63 
64 
69  __slots__ = ['flavor']
70  keyword_class = Keyword #: Internal usage only.
71 
72  def __init__(self, variables, values, flavor):
73  Keyword.__init__(self, assign=variables, args=values,
74  type=Keyword.FOR_LOOP_TYPE)
75  self.flavorflavor = flavor
76 
77  @property
78  variables = property
79 
80  def variables(self):
81  return self.assignassign
82 
83  @property
84  values = property
85 
86  def values(self):
87  return self.argsargs
88 
89 
90 
95  __slots__ = ['template']
96  keyword_class = Keyword #: Internal usage only.
97 
98  def __init__(self, name='', doc='', tags=None, timeout=None, template=None):
99  model.TestCase.__init__(self, name, doc, tags, timeout)
100  #: Name of the keyword that has been used as template
101  #: when building the test. ``None`` if no is template used.
102  self.templatetemplate = template
103 
104  @setter
105 
109  def timeout(self, timeout):
110  return Timeout(*timeout) if timeout else None
111 
112 
113 
118  __slots__ = ['resource']
119  test_class = TestCase #: Internal usage only.
120  keyword_class = Keyword #: Internal usage only.
121 
122  def __init__(self, name='', doc='', metadata=None, source=None, rpa=False):
123  model.TestSuite.__init__(self, name, doc, metadata, source, rpa)
124  #: :class:`ResourceFile` instance containing imports, variables and
125  #: keywords the suite owns. When data is parsed from the file system,
126  #: this data comes from the same test case file that creates the suite.
127  self.resourceresource = ResourceFile(source=source)
128 
129 
143  def configure(self, randomize_suites=False, randomize_tests=False,
144  randomize_seed=None, **options):
145  model.TestSuite.configure(self, **options)
146  self.randomizerandomize(randomize_suites, randomize_tests, randomize_seed)
147 
148 
155  def randomize(self, suites=True, tests=True, seed=None):
156  self.visitvisit(Randomizer(suites, tests, seed))
157 
158 
212  def run(self, settings=None, **options):
213  from .namespace import IMPORTER
214  from .signalhandler import STOP_SIGNAL_MONITOR
215  from .runner import Runner
216 
217  with LOGGER:
218  if not settings:
219  settings = RobotSettings(options)
220  LOGGER.register_console_logger(**settings.console_output_config)
221  with pyloggingconf.robot_handler_enabled(settings.log_level):
222  with STOP_SIGNAL_MONITOR:
223  IMPORTER.reset()
224  output = Output(settings)
225  runner = Runner(output, settings)
226  self.visitvisit(runner)
227  output.close(runner.result)
228  return runner.result
229 
230 
231 class Variable():
232 
233  def __init__(self, name, value, source=None):
234  self.namename = name
235  self.valuevalue = value
236  self.sourcesource = source
237 
238  def report_invalid_syntax(self, message, level='ERROR'):
239  LOGGER.write("Error in file '%s': Setting variable '%s' failed: %s"
240  % (self.sourcesource or '<unknown>', self.namename, message), level)
241 
242 
243 class Timeout():
244 
245  def __init__(self, value, message=None):
246  self.valuevalue = value
247  self.messagemessage = message
248 
249  def __str__(self):
250  return self.valuevalue
251 
252 
253 class ResourceFile():
254 
255  def __init__(self, doc='', source=None):
256  self.docdoc = doc
257  self.sourcesource = source
258  self.importsimportsimports = []
259  self.keywordskeywordskeywords = []
260  self.variablesvariablesvariables = []
261 
262  @setter
263  def imports(self, imports):
264  return model.Imports(self.sourcesource, imports)
265 
266  @setter
267  def keywords(self, keywords):
268  return model.ItemList(UserKeyword, items=keywords)
269 
270  @setter
271  def variables(self, variables):
272  return model.ItemList(Variable, {'source': self.sourcesource}, items=variables)
273 
274 
275 class UserKeyword():
276 
277  def __init__(self, name, args=(), doc='', tags=(), return_=None, timeout=None):
278  self.namename = name
279  self.argsargs = args
280  self.docdoc = doc
281  self.tagstagstags = tags
282  self.return_return_ = return_ or ()
283  self.timeouttimeouttimeout = timeout
284  self.keywordskeywordskeywords = []
285 
286  @setter
287  def keywords(self, keywords):
288  return model.Keywords(Keyword, self, keywords)
289 
290  @setter
291 
292  def timeout(self, timeout):
293  return Timeout(*timeout) if timeout else None
294 
295  @setter
296  def tags(self, tags):
297  return model.Tags(tags)
A list-like object representing keywords in a suite, a test or a keyword.
Definition: keyword.py:135
def visit(self, visitor)
:mod:Visitor interface <robot.model.visitor> entry-point.
Definition: testsuite.py:178
Represents a for loop in test data.
Definition: model.py:68
def __init__(self, variables, values, flavor)
Definition: model.py:72
Represents a single executable keyword.
Definition: model.py:52
def run(self, context)
Execute the keyword.
Definition: model.py:60
def __init__(self, doc='', source=None)
Definition: model.py:255
Represents a single executable test case.
Definition: model.py:94
def __init__(self, name='', doc='', tags=None, timeout=None, template=None)
Definition: model.py:98
Represents a single executable test suite.
Definition: model.py:117
def randomize(self, suites=True, tests=True, seed=None)
Randomizes the order of suites and/or tests, recursively.
Definition: model.py:155
def run(self, settings=None, **options)
Executes the suite based based the given settings or options.
Definition: model.py:212
def __init__(self, name='', doc='', metadata=None, source=None, rpa=False)
Definition: model.py:122
def configure(self, randomize_suites=False, randomize_tests=False, randomize_seed=None, **options)
A shortcut to configure a suite using one method call.
Definition: model.py:144
def __init__(self, value, message=None)
Definition: model.py:245
def timeout(self, timeout)
Keyword timeout as a :class:Timeout instance or None.
Definition: model.py:292
def __init__(self, name, args=(), doc='', tags=(), return_=None, timeout=None)
Definition: model.py:277
def __init__(self, name, value, source=None)
Definition: model.py:233
def report_invalid_syntax(self, message, level='ERROR')
Definition: model.py:238