Revision: 3153
Author: janne.t.harkonen
Date: Tue May 4 07:58:35 2010
Log: Moved responsibility of running fixtures to their own class
http://code.google.com/p/robotframework/source/detail?r=3153
Modified:
/trunk/src/robot/running/fixture.py
/trunk/src/robot/running/model.py
/trunk/src/robot/running/runerrors.py
=======================================
--- /trunk/src/robot/running/fixture.py Sun Apr 19 13:26:54 2009
+++ /trunk/src/robot/running/fixture.py Tue May 4 07:58:35 2010
@@ -13,20 +13,34 @@
# limitations under the License.
from robot import utils
+from robot.errors import ExecutionFailed
from keywords import Keyword
-def Setup(kwdata=None):
- return Fixture(kwdata, 'setup')
-
-
-def Teardown(kwdata=None):
- return Fixture(kwdata, 'teardown')
-
-
-def Fixture(kwdata, type):
- kwdata = utils.to_list(kwdata)
- if kwdata == []:
+class _Fixture(object):
+
+ def __init__(self, kwdata=None):
+ self._keyword = self._fixture_keyword(kwdata)
+
+ def _fixture_keyword(self, kwdata):
+ kwdata = utils.to_list(kwdata)
+ if kwdata == []:
+ return None
+ return Keyword(kwdata[0], kwdata[1:],
type=self.__class__.__name__.lower())
+
+ def run(self, output, namespace):
+ if self._keyword:
+ try:
+ self._keyword.run(output, namespace)
+ except ExecutionFailed, err:
+ return err
return None
- return Keyword(kwdata[0], kwdata[1:], type=type)
+
+ def serialize(self, serializer):
+ serializer.start_keyword(self._keyword)
+ serializer.end_keyword(self._keyword)
+
+
+class Setup(_Fixture): pass
+class Teardown(_Fixture): pass
=======================================
--- /trunk/src/robot/running/model.py Tue May 4 06:50:22 2010
+++ /trunk/src/robot/running/model.py Tue May 4 07:58:35 2010
@@ -96,21 +96,14 @@
def _run_setup(self, output):
if self._run_errors.is_suite_setup_allowed():
- self._run_errors.suite_setup_err(self._run_fixture(self.setup,
output))
+ self._run_errors.suite_setup_err(self.setup.run(output,
+
self.namespace))
def _run_teardown(self, output):
if self._run_errors.is_suite_teardown_allowed():
- td_err = self._run_fixture(self.teardown, output)
+ td_err = self.teardown.run(output, self.namespace)
if td_err:
- self.suite_teardown_failed('Suite teardown failed:\n%s' %
td_err)
-
- def _run_fixture(self, fixture, output):
- if fixture:
- try:
- fixture.run(output, self.namespace)
- except ExecutionFailed, err:
- return unicode(err)
- return None
+ self.suite_teardown_failed('Suite teardown failed:\n%s' %
unicode(td_err))
def _run_sub_suites(self, output):
for suite in self.suites:
@@ -218,9 +211,8 @@
namespace.variables['@{TEST_TAGS}'] = self.tags
def _run_setup(self, output, namespace):
- if self.setup:
- self._run_fixture(self.setup, output, namespace,
- self._run_errors.setup_err)
+ self._run_fixture(self.setup, output, namespace,
+ self._run_errors.setup_err)
def _report_status(self, namespace):
message = self._run_errors.get_message()
@@ -233,9 +225,8 @@
namespace.variables['${TEST_STATUS}'] = self.status
def _run_teardown(self, output, namespace):
- if self.teardown:
- self._run_fixture(self.teardown, output, namespace,
- self._run_errors.teardown_err)
+ self._run_fixture(self.teardown, output, namespace,
+ self._run_errors.teardown_err)
def _report_status_after_teardown(self):
if self._run_errors.teardown_failed():
@@ -258,12 +249,11 @@
namespace.end_test()
def _run_fixture(self, fixture, output, namespace, error_reporter):
- try:
- fixture.run(output, namespace)
- except ExecutionFailed, err:
- self.timeout.set_keyword_timeout(err.timeout)
- self._suite_errors.test_failed(exit=err.exit)
- error_reporter(unicode(err))
+ error = fixture.run(output, namespace)
+ if error:
+ self.timeout.set_keyword_timeout(error.timeout)
+ self._suite_errors.test_failed(exit=error.exit)
+ error_reporter(unicode(error))
class _TestCaseDefaults:
=======================================
--- /trunk/src/robot/running/runerrors.py Tue May 4 04:28:08 2010
+++ /trunk/src/robot/running/runerrors.py Tue May 4 07:58:35 2010
@@ -68,7 +68,7 @@
def suite_setup_err(self, err):
self._current_suite_setup_executed = True
- self._current_setup_err = err or self._NO_ERROR
+ self._current_setup_err = unicode(err) if err else self._NO_ERROR
def suite_error(self):
if self._earlier_init_erros_occurred():