Revision: 3013
Author: janne.t.harkonen
Date: Fri Apr 16 01:32:58 2010
Log: restructured to achieve clarity
http://code.google.com/p/robotframework/source/detail?r=3013
Modified:
/trunk/src/robot/running/model.py
=======================================
--- /trunk/src/robot/running/model.py Tue Mar 30 04:42:34 2010
+++ /trunk/src/robot/running/model.py Fri Apr 16 01:32:58 2010
@@ -59,20 +59,64 @@
self._exit_on_failure = False
def run(self, output, parent=None, error=None):
+ self._start_run(output, parent, error)
+ self._run_setup(output)
+ self._run_sub_suites(output)
+ self._run_tests(output)
+ self._report_status(output)
+ self._run_teardown(output)
+ self._end_run(output)
+
+ def _start_run(self, output, parent, error):
+ self._run_errors = _RunErrors(error)
+ self._init_run(parent)
+ self._set_variable_dependent_metadata(self.namespace.variables)
+ output.start_suite(self)
+
+ def _init_run(self, parent):
self.status = 'RUNNING'
self.starttime = utils.get_timestamp()
self.namespace = Namespace(self, parent)
self.namespace.variables['${SUITE_NAME}'] = self.longname
self.namespace.variables['${SUITE_SOURCE}'] = self.source
- init_err = self._init_suite(self.namespace.variables)
- output.start_suite(self)
- setup_err = self._run_fixture(self.setup, output, error, init_err)
- child_err = self._get_child_error(error, init_err, setup_err)
+
+ def _set_variable_dependent_metadata(self, varz):
+ errors = []
+ self.doc = varz.replace_meta('Documentation', self.doc, errors)
+ self.setup = Setup(varz.replace_meta('Setup', self.setup, errors))
+ self.teardown = Teardown(
+ varz.replace_meta('Teardown', self.teardown, errors))
+ for name, value in self.metadata.items():
+ self.metadata[name] = varz.replace_meta(name, value, errors)
+ if errors:
+ self._run_errors.init_err('Suite initialization failed:\n%s'
+ % '\n'.join(errors))
+
+ def _run_setup(self, output):
+ self._run_errors.setup_err(self._run_fixture(self.setup, output))
+
+ def _run_teardown(self, output):
+ td_err = self._run_fixture(self.teardown, output)
+ if td_err:
+ self.suite_teardown_failed('Suite teardown failed:\n%s' %
td_err)
+
+ def _run_fixture(self, fixture, output):
+ if fixture and not self._run_errors:
+ try:
+ fixture.run(output, self.namespace)
+ except ExecutionFailed:
+ return utils.get_error_message()
+
+ def _run_sub_suites(self, output):
+ child_err = self._run_errors.child_error()
for suite in self.suites:
suite.run(output, self, child_err)
if self._exit_on_failure and not child_err and \
suite.critical_stats.failed:
child_err = self._exit_on_failure_error
+
+ def _run_tests(self, output):
+ child_err = self._run_errors.child_error()
executed_tests = []
for test in self.tests:
normname = utils.normalize(test.name)
@@ -85,56 +129,20 @@
test.status == 'FAIL' and test.critical == 'yes':
child_err = self._exit_on_failure_error
self._set_prev_test_variables(self.namespace.variables, test)
+
+ def _report_status(self, output):
self.set_status()
- self.message = self._get_my_error(error, init_err, setup_err)
+ self.message = self._run_errors.suite_error()
self.namespace.variables['${SUITE_STATUS}'] = self.status
self.namespace.variables['${SUITE_MESSAGE}'] =
self.get_full_message()
- td_err = self._run_fixture(self.teardown, output, error, init_err)
- if td_err:
- self.suite_teardown_failed('Suite teardown failed:\n%s' %
td_err)
+
+ def _end_run(self, output):
self.endtime = utils.get_timestamp()
self.elapsedtime = utils.get_elapsed_time(self.starttime,
self.endtime)
- self._set_prev_test_variables(GLOBAL_VARIABLES,
- varz=self.namespace.variables)
+ self._set_prev_test_variables(GLOBAL_VARIABLES,
varz=self.namespace.variables)
output.end_suite(self)
self.namespace.end_suite()
- def _init_suite(self, varz):
- errors = []
- self.doc = varz.replace_meta('Documentation', self.doc, errors)
- self.setup = Setup(varz.replace_meta('Setup', self.setup, errors))
- self.teardown = Teardown(
- varz.replace_meta('Teardown', self.teardown, errors))
- for name, value in self.metadata.items():
- self.metadata[name] = varz.replace_meta(name, value, errors)
- if errors:
- return 'Suite initialization failed:\n%s' % '\n'.join(errors)
-
- def _get_child_error(self, error, init_error, setup_error):
- if error:
- return error
- if init_error:
- return 'Initialization of the parent suite failed.'
- if setup_error:
- return 'Setup of the parent suite failed.'
- return None
-
- def _get_my_error(self, error, init_error, setup_error):
- if error:
- return error
- if init_error:
- return init_error
- if setup_error:
- return 'Suite setup failed:\n%s' % setup_error
- return ''
-
- def _run_fixture(self, fixture, output, error, init_error):
- if fixture and not (error or init_error):
- try:
- fixture.run(output, self.namespace)
- except ExecutionFailed:
- return utils.get_error_message()
-
def _set_prev_test_variables(self, destination, test=None, varz=None):
if test is not None:
name, status, message = test.name, test.status, test.message
@@ -146,6 +154,41 @@
destination['${PREV_TEST_MESSAGE}'] = message
+class _RunErrors(object):
+
+ def __init__(self, err):
+ self._parent_err = err
+ self._init_err = None
+ self._setup_err = None
+
+ def __nonzero__(self):
+ return bool(self._parent_err or self._init_err or self._setup_err)
+
+ def init_err(self, err):
+ self._init_err = err
+
+ def setup_err(self, err):
+ self._setup_err = err
+
+ def suite_error(self):
+ if self._parent_err:
+ return self._parent_err
+ if self._init_err:
+ return self._init_err
+ if self._setup_err:
+ return 'Suite setup failed:\n%s' % self._setup_err
+ return ''
+
+ def child_error(self):
+ if self._parent_err:
+ return self._parent_err
+ if self._init_err:
+ return 'Initialization of the parent suite failed.'
+ if self._setup_err:
+ return 'Setup of the parent suite failed.'
+ return None
+
+
class RunnableTestCase(BaseTestCase):
def __init__(self, data, defaults, parent):
--
Subscription settings:
http://groups.google.com/group/robotframework-commit/subscribe?hl=en