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