Revision: 3142
Author: KariHusa
Date: Tue May 4 04:28:08 2010
Log: Refatoring
http://code.google.com/p/robotframework/source/detail?r=3142
Modified:
/trunk/src/robot/errors.py
/trunk/src/robot/running/keywords.py
/trunk/src/robot/running/runerrors.py
/trunk/src/robot/running/userkeyword.py
=======================================
--- /trunk/src/robot/errors.py Tue May 4 01:05:02 2010
+++ /trunk/src/robot/errors.py Tue May 4 04:28:08 2010
@@ -46,37 +46,37 @@
class ExecutionFailed(RobotError):
"""Used for communicating failures in test execution"""
- msg = property(lambda self: self._msg)
def __init__(self, message, timeout=False, exit=False, cont=False,
syntax=False):
RobotError.__init__(self, message)
- self._msg = message
self.timeout = timeout
self.exit = exit
self.cont = cont
self.syntax = syntax
def get_errors(self):
- return [self.msg]
+ return [self]
class MultipleErrors(ExecutionFailed):
- msg = property(lambda self: ''.join(self._errors))
def __init__(self, errors):
- exit = any(err for err in errors if err.exit)
- cont = any(err for err in errors if err.cont)
- timeout = any(err for err in errors if err.timeout)
- syntax = any(err for err in errors if err.syntax)
- self._errors= []
- for e in errors:
- self._errors.extend(e.get_errors())
- ExecutionFailed.__init__(self, '', timeout, exit, cont, syntax)
+ self.exit = any(err.exit for err in errors)
+ self.cont = all(err.cont for err in errors)
+ self.timeout = any(err.timeout for err in errors)
+ self.syntax = any(err.syntax for err in errors)
+ self._errors = errors
def get_errors(self):
return self._errors
+ def __unicode__(self):
+ if len(self._errors) == 1:
+ return str(self._errors[0])
+ return '\n\n'.join('Error %d: %s' % (i+1, err)
+ for i, err in enumerate(self._errors))
+
class TimeoutError(RobotError):
"""Used when test execution is timed out"""
=======================================
--- /trunk/src/robot/running/keywords.py Tue May 4 03:17:01 2010
+++ /trunk/src/robot/running/keywords.py Tue May 4 04:28:08 2010
@@ -18,65 +18,28 @@
from robot.variables import is_list_var
-class _Keywords(object):
+class Keywords(object):
def __init__(self, kwdata):
self._keywords = [ _KeywordFactory(kw) for kw in kwdata ]
- def __iter__(self):
- return iter(self._keywords)
-
- def _run(self, output, namespace):
+ def run(self, output, namespace):
errors = []
for kw in self._keywords:
- error = self._run_with_error_handling(kw, output, namespace)
- if error:
- errors.append(error)
- if not error.cont:
+ try:
+ kw.run(output, namespace)
+ except ExecutionFailed, err:
+ errors.extend(err.get_errors())
+ if not err.cont:
break
- return self._report_errors(errors)
-
- def _run_with_error_handling(self, kw, output, namespace):
- try:
- kw.run(output, namespace)
- return None
- except ExecutionFailed, err:
- self._keyword_failed(err)
- return err
-
- def _keyword_failed(self, err):
- pass
+ if errors:
+ raise MultipleErrors(errors)
def __nonzero__(self):
return bool(self._keywords)
-
-class TestCaseKeywords(_Keywords):
-
- def run(self, output, namespace, test_timeout, suite_run_errors):
- self.test_timeout = test_timeout
- self.suite_run_errors = suite_run_errors
- return self._run(output, namespace)
-
- def _keyword_failed(self, err):
- self.test_timeout.set_keyword_timeout(err.timeout)
- self.suite_run_errors.test_failed(exit=err.exit)
-
- def _report_errors(self, errors):
- all_errors = []
- for err in errors:
- all_errors.extend(err.get_errors())
- return all_errors
-
-
-class UserKeywordKeywords(_Keywords):
-
- def run(self, output, namespace):
- self._run(output, namespace)
-
- def _report_errors(self, errors):
- if errors:
- raise MultipleErrors(errors)
+ def __iter__(self):
+ return iter(self._keywords)
def _KeywordFactory(kwdata):
=======================================
--- /trunk/src/robot/running/runerrors.py Tue May 4 01:05:02 2010
+++ /trunk/src/robot/running/runerrors.py Tue May 4 04:28:08 2010
@@ -111,7 +111,7 @@
self._parent_err = err.child_error() if err else None
self._init_err = None
self._setup_err = None
- self._kw_errs = []
+ self._kw_err = None
self._teardown_err = None
def is_allowed_to_run(self):
@@ -121,22 +121,16 @@
self._init_err = err
def setup_err(self, err):
- if isinstance(err, basestring):
- self._setup_err = err
- else:
- self._setup_err = self._form_error_message(err)
+ self._setup_err = err
def setup_failed(self):
return bool(self._setup_err)
- def kw_err(self, errors):
- self._kw_errs = errors
+ def kw_err(self, error):
+ self._kw_err = error
def teardown_err(self, err):
- if isinstance(err, basestring):
- self._teardown_err = err
- else:
- self._teardown_err = self._form_error_message(err)
+ self._teardown_err = err
def teardown_failed(self):
return bool(self._teardown_err)
@@ -144,7 +138,7 @@
def get_message(self):
if self._setup_err:
return 'Setup failed:\n%s' % self._setup_err
- return self._form_error_message(self._kw_errs)
+ return self._kw_err
def get_teardown_message(self, message):
if message == '':
@@ -153,8 +147,3 @@
def parent_or_init_error(self):
return self._parent_err or self._init_err
-
- def _form_error_message(self, errors):
- """Returns list of errors formatted as a string (empty string is
returned if list is empty)"""
- return '\n\n'.join(errors if len(errors) == 1 else
[ 'Error %d: %s' % (i+1, err)
- for i, err in
enumerate(errors) ])
=======================================
--- /trunk/src/robot/running/userkeyword.py Tue May 4 01:05:02 2010
+++ /trunk/src/robot/running/userkeyword.py Tue May 4 04:28:08 2010
@@ -20,7 +20,7 @@
from robot.variables import is_list_var, VariableSplitter
from robot import utils
-from keywords import UserKeywordKeywords
+from keywords import Keywords
from timeouts import KeywordTimeout
from arguments import UserKeywordArguments
@@ -109,7 +109,7 @@
self.name = utils.printable_name(handlerdata.name)
self._libname = libname
self._set_variable_dependent_metadata(handlerdata.metadata)
- self.keywords = UserKeywordKeywords(handlerdata.keywords)
+ self.keywords = Keywords(handlerdata.keywords)
self.arguments = UserKeywordArguments(handlerdata.args,
handlerdata.defaults,
handlerdata.varargs,