21 def __init__(self, execution_result, root_handler=None):
25 handler, result = self.
_stack_stack[-1]
26 handler = handler.get_child_handler(elem.tag)
28 if result
is not None:
29 result = handler.start(elem, result)
30 self.
_stack_stack.append((handler, result))
33 handler, result = self.
_stack_stack.pop()
34 if result
is not None:
35 handler.end(elem, result)
41 children = frozenset()
51 raise DataError(
"Incompatible root element '%s'." % tag)
52 raise DataError(
"Incompatible child element '%s' for '%s'."
59 def end(self, elem, result):
63 timestamp = elem.get(attr_name)
64 return timestamp
if timestamp !=
'N/A' else None
68 children = frozenset((
'robot',))
71 @ElementHandler.register
74 children = frozenset((
'suite',
'statistics',
'errors'))
77 generator = elem.get(
'generator',
'unknown').split()[0].upper()
78 result.generated_by_robot = generator ==
'ROBOT'
79 if result.rpa
is None:
80 result.rpa = elem.get(
'rpa',
'false') ==
'true'
84 @ElementHandler.register
88 children = frozenset((
'doc',
'metadata',
'meta',
'status',
'kw',
'test',
'suite'))
91 if hasattr(result,
'suite'):
92 return result.suite.config(name=elem.get(
'name',
''),
93 source=elem.get(
'source'),
95 return result.suites.create(name=elem.get(
'name',
''),
96 source=elem.get(
'source'),
102 return ElementHandler.get_child_handler(self, tag)
105 @ElementHandler.register
109 children = frozenset((
'doc',
'tags',
'tag',
'timeout',
'status',
'kw',
'if',
'for',
110 'try',
'while',
'return',
'break',
'continue',
'msg'))
113 lineno = elem.get(
'line')
116 return result.tests.create(name=elem.get(
'name',
''), lineno=lineno)
119 @ElementHandler.register
123 children = frozenset((
'doc',
'arguments',
'arg',
'assign',
'var',
'tags',
'tag',
124 'timeout',
'status',
'msg',
'kw',
'if',
'for',
'try',
125 'while',
'return',
'break',
'continue'))
128 elem_type = elem.get(
'type')
132 creator = getattr(self,
'_create_%s' % elem_type.lower().replace(
' ',
'_'))
133 return creator(elem, result)
138 except AttributeError:
140 return body.create_keyword(kwname=elem.get(
'name',
''),
141 libname=elem.get(
'library'),
142 sourcename=elem.get(
'sourcename'))
150 kw_type =
'teardown' if result.tests
or result.suites
else 'setup'
151 keyword = getattr(result, kw_type)
153 keyword.config(kwname=
'Implicit %s' % kw_type, status=keyword.PASS)
157 return result.setup.config(kwname=elem.get(
'name',
''),
158 libname=elem.get(
'library'))
161 return result.teardown.config(kwname=elem.get(
'name',
''),
162 libname=elem.get(
'library'))
167 return result.body.create_keyword(kwname=elem.get(
'name'), type=
'FOR')
170 return result.body.create_keyword(kwname=elem.get(
'name'), type=
'ITERATION')
175 _create_iteration = _create_foritem
178 @ElementHandler.register
181 children = frozenset((
'var',
'value',
'iter',
'status',
'doc',
'msg',
'kw'))
184 return result.body.create_for(flavor=elem.get(
'flavor'))
187 @ElementHandler.register
190 children = frozenset((
'iter',
'status',
'doc',
'msg',
'kw'))
193 return result.body.create_while(
194 condition=elem.get(
'condition'),
195 limit=elem.get(
'limit')
199 @ElementHandler.register
202 children = frozenset((
'var',
'doc',
'status',
'kw',
'if',
'for',
'msg',
'try',
203 'while',
'return',
'break',
'continue'))
206 return result.body.create_iteration()
209 @ElementHandler.register
212 children = frozenset((
'branch',
'status',
'doc',
'msg',
'kw'))
215 return result.body.create_if()
218 @ElementHandler.register
221 children = frozenset((
'status',
'kw',
'if',
'for',
'try',
'while',
'msg',
'doc',
222 'return',
'pattern',
'break',
'continue'))
225 return result.body.create_branch(**elem.attrib)
228 @ElementHandler.register
231 children = frozenset((
'branch',
'status',
'doc',
'msg',
'kw'))
234 return result.body.create_try()
237 @ElementHandler.register
240 children = frozenset()
242 def end(self, elem, result):
243 result.patterns += (elem.text
or '',)
246 @ElementHandler.register
249 children = frozenset((
'status',
'value',
'msg',
'kw'))
252 return result.body.create_return()
255 @ElementHandler.register
258 children = frozenset((
'status',
'msg',
'kw'))
261 return result.body.create_continue()
264 @ElementHandler.register
267 children = frozenset((
'status',
'msg',
'kw'))
270 return result.body.create_break()
273 @ElementHandler.register
277 def end(self, elem, result):
278 html_true = (
'true',
'yes')
279 result.body.create_message(elem.text
or '',
280 elem.get(
'level',
'INFO'),
281 elem.get(
'html')
in html_true,
285 @ElementHandler.register
292 def end(self, elem, result):
294 result.status = elem.get(
'status',
'FAIL')
295 result.starttime = self.
_timestamp_timestamp(elem,
'starttime')
296 result.endtime = self.
_timestamp_timestamp(elem,
'endtime')
298 result.message = elem.text
301 @ElementHandler.register
305 def end(self, elem, result):
306 result.doc = elem.text
or ''
309 @ElementHandler.register
312 children = frozenset((
'item',))
315 @ElementHandler.register
319 def end(self, elem, result):
320 result.metadata[elem.get(
'name',
'')] = elem.text
or ''
323 @ElementHandler.register
327 def end(self, elem, result):
328 result.metadata[elem.get(
'name',
'')] = elem.text
or ''
331 @ElementHandler.register
334 children = frozenset((
'tag',))
337 @ElementHandler.register
341 def end(self, elem, result):
342 result.tags.add(elem.text
or '')
345 @ElementHandler.register
349 def end(self, elem, result):
350 result.timeout = elem.get(
'value')
353 @ElementHandler.register
356 children = frozenset((
'var',))
359 @ElementHandler.register
363 def end(self, elem, result):
364 value = elem.text
or ''
365 if result.type == result.KEYWORD:
366 result.assign += (value,)
367 elif result.type == result.FOR:
368 result.variables += (value,)
369 elif result.type == result.ITERATION:
370 result.variables[elem.get(
'name')] = value
372 raise DataError(
"Invalid element '%s' for result '%r'." % (elem, result))
375 @ElementHandler.register
378 children = frozenset((
'arg',))
381 @ElementHandler.register
385 def end(self, elem, result):
386 result.args += (elem.text
or '',)
389 @ElementHandler.register
393 def end(self, elem, result):
394 result.values += (elem.text
or '',)
397 @ElementHandler.register
410 def end(self, elem, result):
411 html_true = (
'true',
'yes')
412 result.messages.create(elem.text
or '',
413 elem.get(
'level',
'INFO'),
414 elem.get(
'html')
in html_true,
418 @ElementHandler.register
def end(self, elem, result)
def start(self, elem, result)
def start(self, elem, result)
def start(self, elem, result)
def end(self, elem, result)
def get_child_handler(self, tag)
def end(self, elem, result)
def start(self, elem, result)
dictionary element_handlers
def _timestamp(self, elem, attr_name)
def register(cls, handler)
def end(self, elem, result)
def get_child_handler(self, tag)
def start(self, elem, result)
def start(self, elem, result)
def start(self, elem, result)
def start(self, elem, result)
def _create_foritem(self, elem, result)
def _create_for(self, elem, result)
def start(self, elem, result)
def _get_body_for_suite_level_keyword(self, result)
def _create_keyword(self, elem, result)
def _create_setup(self, elem, result)
def _create_teardown(self, elem, result)
def end(self, elem, result)
def end(self, elem, result)
def start(self, elem, result)
def start(self, elem, result)
def get_child_handler(self, tag)
def __init__(self, set_status=True)
def end(self, elem, result)
def start(self, elem, result)
def get_child_handler(self, tag)
def end(self, elem, result)
def start(self, elem, result)
def end(self, elem, result)
def start(self, elem, result)
def end(self, elem, result)
def end(self, elem, result)
def start(self, elem, result)
def __init__(self, execution_result, root_handler=None)