Example #1
0
 def test_match(self):
     for test, task in [('test', 'task'),
                        ('Test', 'Task'),
                        ('TEST', 'TASK'),
                        ('tESt', 'tASk')]:
         inp = '{%s}' % test
         assert_equal(test_or_task(inp, rpa=False), test)
         assert_equal(test_or_task(inp, rpa=True), task)
Example #2
0
 def _create_skip_message(self, test, new):
     msg = test_or_task(
         '*HTML* {Test} has been re-executed and results merged. '
         'Latter result had %s status and was ignored. Message:\n%s' %
         (self._status_text('SKIP'), self._html(new.message)))
     if not test.message:
         return msg
     return '%s<hr>Original message:\n%s' % (msg, self._html(test.message))
Example #3
0
 def test_failed(self, failure):
     if self._skip_on_failure:
         msg = ("%s skipped with --SkipOnFailure, original error:\n%s"
               % (test_or_task('{Test}', self._rpa) ,unic(failure)))
         self.failure.test = msg
         self.skipped = True
     else:
         self.failure.test = unic(failure)
         self.exit.failure_occurred(failure)
Example #4
0
 def _create_merge_message(self, new, old):
     header = test_or_task(
         '*HTML* <span class="merge">'
         '{Test} has been re-executed and results merged.'
         '</span>', self.rpa)
     return ''.join([
         header, '<hr>',
         self._format_status_and_message('New', new), '<hr>',
         self._format_old_status_and_message(old, header)
     ])
Example #5
0
 def test_failed(self, failure):
     if hasattr(failure, 'skip') and failure.skip:
         self.test_skipped(failure)
     elif self._skip_on_failure:
         msg = (
             "%s failed but its tags matched '--SkipOnFailure' and it was "
             "marked skipped.\n\nOriginal failure:\n%s" %
             (test_or_task('{Test}', self._rpa), unic(failure)))
         self.failure.test = msg
         self.skipped = True
     else:
         self.failure.test = unic(failure)
         self.exit.failure_occurred(failure)
Example #6
0
 def _skip_on_failure_message(self, failure):
     return test_or_task(
         "{Test} failed but its tags matched '--SkipOnFailure' and it was marked "
         "skipped.\n\nOriginal failure:\n%s" % unic(failure),
         rpa=self._rpa)
 def visit_test(self, test):
     if test.name in self._executed_tests:
         self._output.warn("Multiple test cases with name '%s' executed in "
                           "test suite '%s'." %
                           (test.name, self._suite.longname))
     self._executed_tests[test.name] = True
     result = self._suite.tests.create(
         name=self._resolve_setting(test.name),
         doc=self._resolve_setting(test.doc),
         tags=self._resolve_setting(test.tags),
         starttime=get_timestamp(),
         timeout=self._get_timeout(test))
     self._context.start_test(result)
     self._output.start_test(ModelCombiner(test, result))
     status = TestStatus(self._suite_status, result,
                         self._settings.skip_on_failure,
                         self._settings.critical_tags, self._settings.rpa)
     if status.exit:
         self._add_exit_combine()
         result.tags.add('robot:exit')
     if self._skipped_tags.match(test.tags):
         status.test_skipped(
             test_or_task(
                 "{Test} skipped with '--skip' command line option.",
                 self._settings.rpa))
     if not status.failed and not test.name:
         status.test_failed(
             test_or_task('{Test} case name cannot be empty.',
                          self._settings.rpa))
     if not status.failed and not test.body:
         status.test_failed(
             test_or_task('{Test} case contains no keywords.',
                          self._settings.rpa))
     self._run_setup(test.setup, status, result)
     try:
         if not status.failed:
             BodyRunner(self._context,
                        templated=bool(test.template)).run(test.body)
         else:
             if status.skipped:
                 status.test_skipped(status.message)
             else:
                 status.test_failed(status.message)
     except PassExecution as exception:
         err = exception.earlier_failures
         if err:
             status.test_failed(err)
         else:
             result.message = exception.message
     except ExecutionStatus as err:
         status.test_failed(err)
     result.status = status.status
     result.message = status.message or result.message
     if status.teardown_allowed:
         with self._context.test_teardown(result):
             failure = self._run_teardown(test.teardown, status, result)
             if failure:
                 status.failure_occurred()
     if not status.failed and result.timeout and result.timeout.timed_out():
         status.test_failed(result.timeout.get_message())
         result.message = status.message
     if status.skip_if_needed():
         result.message = status.message or result.message
     result.status = status.status
     result.endtime = get_timestamp()
     self._output.end_test(ModelCombiner(test, result))
     self._context.end_test(result)
 def _skip_on_failure_message(self, failure):
     return ("%s failed but its tags matched '--SkipOnFailure' and it was "
             "marked skipped.\n\nOriginal failure:\n%s" %
             (test_or_task('{Test}', self._rpa), unic(failure)))
Example #9
0
 def _skip_on_fail_msg(self, msg):
     return test_or_task(
         "{Test} failed but its tags matched '--SkipOnFailure' and it was marked "
         "skipped.\n\nOriginal failure:\n%s" % msg,
         rpa=self._rpa)
Example #10
0
 def test_no_match(self):
     for inp in ['', 'No match', 'No {match}', '{No} {task} {match}']:
         assert_equal(test_or_task(inp), inp)
         assert_equal(test_or_task(inp, rpa=True), inp)
Example #11
0
 def test_multiple_matches(self):
     assert_equal(test_or_task('Contains {test}, {TEST} and {TesT}', False),
                  'Contains test, TEST and TesT')
     assert_equal(test_or_task('Contains {test}, {TEST} and {TesT}', True),
                  'Contains task, TASK and TasK')
Example #12
0
 def _skip_on_fail_msg(self, msg):
     return test_or_task(
         "{Test} failed but skip-on-failure mode was active and it was marked "
         "skipped.\n\nOriginal failure:\n%s" % msg, rpa=self._rpa
     )
Example #13
0
 def visit_test(self, test):
     settings = self._settings
     if test.tags.robot('exclude'):
         return
     if test.name in self._executed[-1]:
         self._output.warn(
             test_or_task(
                 f"Multiple {{test}}s with name '{test.name}' executed in "
                 f"suite '{test.parent.longname}'.", settings.rpa))
     self._executed[-1][test.name] = True
     result = self._suite.tests.create(self._resolve_setting(test.name),
                                       self._resolve_setting(test.doc),
                                       self._resolve_setting(test.tags),
                                       self._get_timeout(test),
                                       test.lineno,
                                       starttime=get_timestamp())
     self._context.start_test(result)
     self._output.start_test(ModelCombiner(test, result))
     status = TestStatus(self._suite_status, result,
                         settings.skip_on_failure, settings.rpa)
     if status.exit:
         self._add_exit_combine()
         result.tags.add('robot:exit')
     if status.passed:
         if not test.name:
             status.test_failed(
                 test_or_task('{Test} name cannot be empty.', settings.rpa))
         elif not test.body:
             status.test_failed(
                 test_or_task('{Test} contains no keywords.', settings.rpa))
         elif test.tags.robot('skip'):
             status.test_skipped(
                 test_or_task("{Test} skipped using 'robot:skip' tag.",
                              settings.rpa))
         elif self._skipped_tags.match(test.tags):
             status.test_skipped(
                 test_or_task(
                     "{Test} skipped using '--skip' command line option.",
                     settings.rpa))
     self._run_setup(test.setup, status, result)
     if status.passed:
         try:
             BodyRunner(self._context,
                        templated=bool(test.template)).run(test.body)
         except PassExecution as exception:
             err = exception.earlier_failures
             if err:
                 status.test_failed(error=err)
             else:
                 result.message = exception.message
         except ExecutionStatus as err:
             status.test_failed(error=err)
     elif status.skipped:
         status.test_skipped(status.message)
     else:
         status.test_failed(status.message)
     result.status = status.status
     result.message = status.message or result.message
     with self._context.test_teardown(result):
         self._run_teardown(test.teardown, status, result)
     if status.passed and result.timeout and result.timeout.timed_out():
         status.test_failed(result.timeout.get_message())
         result.message = status.message
     if status.skip_on_failure_after_tag_changes:
         result.message = status.message or result.message
     result.status = status.status
     result.endtime = get_timestamp()
     failed_before_listeners = result.failed
     self._output.end_test(ModelCombiner(test, result))
     if result.failed and not failed_before_listeners:
         status.failure_occurred()
     self._context.end_test(result)
Example #14
0
 def _create_add_message(self, item, suite=False):
     item_type = 'Suite' if suite else test_or_task('{Test}', self.rpa)
     prefix = '*HTML* %s added from merged output.' % item_type
     if not item.message:
         return prefix
     return ''.join([prefix, '<hr>', self._html_escape(item.message)])
Example #15
0
 def __init__(self, rpa=False):
     #: Instance of :class:`~robot.model.stats.TotalStat` for all the tests.
     self._stat = TotalStat(test_or_task('All {Test}s', rpa))
     self._rpa = rpa