Revision: 3203
Author: janne.t.harkonen
Date: Wed May  5 23:54:49 2010
Log: Moved responsibility to where it belongs
http://code.google.com/p/robotframework/source/detail?r=3203

Modified:
 /trunk/src/robot/errors.py
 /trunk/src/robot/running/keywords.py
 /trunk/src/robot/utils/__init__.py
 /trunk/src/robot/utils/error.py

=======================================
--- /trunk/src/robot/errors.py  Wed May  5 14:42:47 2010
+++ /trunk/src/robot/errors.py  Wed May  5 23:54:49 2010
@@ -77,19 +77,23 @@
     def _continue_on_failure(self, cont):
         if self.timeout or self.syntax or self.exit:
             return False
-        if cont:
-            return True
-        return self._in_test_or_suite_teardown()
-
-    def _in_test_or_suite_teardown(self):
-        from robot.running import NAMESPACES
-        ns = NAMESPACES.current
-        return ns is not None and (ns.test or ns.suite).status != 'RUNNING'
+        return cont

     def get_errors(self):
         return [self]


+class HandlerExecutionFailed(ExecutionFailed):
+
+    def __init__(self, message, orig_error, is_test_or_suite_teardown):
+        timeout = isinstance(orig_error, TimeoutError)
+        syntax = isinstance(orig_error, DataError)
+        exit = bool(getattr(orig_error, 'ROBOT_EXIT_ON_FAILURE', False))
+ cont = bool(getattr(orig_error, 'ROBOT_CONTINUE_ON_FAILURE', False))
+        cont = cont or is_test_or_suite_teardown
+ ExecutionFailed.__init__(self, message, timeout, syntax, exit, cont)
+
+
 class ExecutionFailures(ExecutionFailed):

     def __init__(self, errors):
=======================================
--- /trunk/src/robot/running/keywords.py        Wed May  5 15:02:22 2010
+++ /trunk/src/robot/running/keywords.py        Wed May  5 23:54:49 2010
@@ -13,7 +13,8 @@
 #  limitations under the License.

 from robot import utils
-from robot.errors import FrameworkError, ExecutionFailed, ExecutionFailures, DataError +from robot.errors import FrameworkError, ExecutionFailed, ExecutionFailures, \
+    DataError, HandlerExecutionFailed
 from robot.common import BaseKeyword
 from robot.variables import is_list_var

@@ -94,14 +95,19 @@
         except ExecutionFailed:
             raise
         except:
-            self._report_failure(output)
-
-    def _report_failure(self, output):
-        msg, details, exception = utils.get_execution_failed()
-        output.fail(msg)
+            self._report_failure(output, namespace)
+
+    def _report_failure(self, output, namespace):
+ message, details, orig_error = utils.get_error_details_and_instance()
+        output.fail(message)
         if details:
             output.debug(details)
-        raise exception
+        raise HandlerExecutionFailed(message, orig_error,
+ self._in_test_or_suite_teardown(namespace))
+
+    def _in_test_or_suite_teardown(self, namespace):
+        test_or_suite = namespace.test or namespace.suite
+        return test_or_suite.status != 'RUNNING'


 class SetKeyword(Keyword):
=======================================
--- /trunk/src/robot/utils/__init__.py  Wed Apr 21 23:00:20 2010
+++ /trunk/src/robot/utils/__init__.py  Wed May  5 23:54:49 2010
@@ -20,7 +20,7 @@
 from domwrapper import DomWrapper
 from escaping import escape, unescape, escape_file_name
from error import get_error_message, get_error_details, RERAISED_EXCEPTIONS, \
-    get_execution_failed
+    get_error_details_and_instance
 from htmlutils import html_escape, html_attr_escape
 from htmlwriter import HtmlWriter
 from importing import simple_import, import_
=======================================
--- /trunk/src/robot/utils/error.py     Wed May  5 14:42:47 2010
+++ /trunk/src/robot/utils/error.py     Wed May  5 23:54:49 2010
@@ -20,7 +20,7 @@

 from robottypes import is_str
 from unic import unic
-from robot.errors import DataError, TimeoutError, RemoteError, ExecutionFailed
+from robot.errors import DataError, TimeoutError, RemoteError

 RERAISED_EXCEPTIONS = (KeyboardInterrupt, SystemExit, MemoryError)
 if sys.platform.startswith('java'):
@@ -62,10 +62,10 @@
MUST be used to get messages from all exceptions originating outside the
     framework.
     """
-    return get_execution_failed()[:2]
+    return get_error_details_and_instance()[:2]


-def get_execution_failed():
+def get_error_details_and_instance():
     exc_type, exc_value, exc_traceback = sys.exc_info()
     if exc_type in (KeyboardInterrupt, SystemExit):
         raise exc_value
@@ -75,11 +75,7 @@
     else:
         message = _get_python_message(exc_type, exc_value)
         details = _get_python_details(exc_value, exc_traceback)
-    timeout = isinstance(exc_value, TimeoutError)
-    syntax = isinstance(exc_value, DataError)
-    exit = bool(getattr(exc_value, 'ROBOT_EXIT_ON_FAILURE', False))
-    cont = bool(getattr(exc_value, 'ROBOT_CONTINUE_ON_FAILURE', False))
- return message, details, ExecutionFailed(message, timeout, syntax, exit, cont)
+    return message, details, exc_value


 def _is_java_exception(exc):

Reply via email to