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():

Reply via email to