Revision: 3122
Author: janne.t.harkonen
Date: Mon May  3 05:28:24 2010
Log: hack to fix continuable errors in nested user keywords, to be refactored
http://code.google.com/p/robotframework/source/detail?r=3122

Modified:
 /trunk/src/robot/running/runerrors.py
 /trunk/src/robot/running/userkeyword.py

=======================================
--- /trunk/src/robot/running/runerrors.py       Mon May  3 00:10:16 2010
+++ /trunk/src/robot/running/runerrors.py       Mon May  3 05:28:24 2010
@@ -121,16 +121,25 @@
         self._init_err = err

     def setup_err(self, err):
-        self._setup_err = err
+        if isinstance(err, basestring):
+            self._setup_err = err
+        else:
+            self._setup_err = self._form_error_message(err)

     def setup_failed(self):
         return bool(self._setup_err)

     def kw_err(self, err):
-        self._kw_errs.append(err)
+        if isinstance(err, basestring):
+            self._kw_errs.append(err)
+        else:
+            self._kw_errs.extend(err)

     def teardown_err(self, err):
-        self._teardown_err = err
+        if isinstance(err, basestring):
+            self._teardown_err = err
+        else:
+            self._teardown_err = self._form_error_message(err)

     def teardown_failed(self):
         return bool(self._teardown_err)
@@ -138,7 +147,7 @@
     def get_message(self):
         if self._setup_err:
             return 'Setup failed:\n%s' % self._setup_err
-        return _form_error_message(self._kw_errs)
+        return self._form_error_message(self._kw_errs)

     def get_teardown_message(self, message):
         if message == '':
@@ -147,24 +156,8 @@

     def parent_or_init_error(self):
         return self._parent_err or self._init_err
-
-
-class UserKeywordRunErrors(object):
-
-    def __init__(self):
-        self._errors = []
-
-    def add(self, msg):
-        self._errors.append(msg)
-
-    def has_errors(self):
-        return bool(self._errors)
-
-    def get_message(self):
-        return _form_error_message(self._errors)
-
-
-def _form_error_message(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) ])
+
+    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     Mon May  3 02:44:18 2010
+++ /trunk/src/robot/running/userkeyword.py     Mon May  3 05:28:24 2010
@@ -23,7 +23,6 @@
 from keywords import KeywordFactory
 from timeouts import KeywordTimeout
 from arguments import UserKeywordArguments
-from runerrors import UserKeywordRunErrors


 def PublicUserLibrary(path):
@@ -144,11 +143,11 @@
                                      output)
         self._verify_keyword_is_valid()
         self.timeout.start()
-        errs = UserKeywordRunErrors()
+        errs = []
         for kw in self.keywords:
             self._run_with_error_handling(kw, output, namespace, errs)
-        if errs.has_errors():
-            raise ExecutionFailed(errs.get_message(), cont=True)
+        if errs:
+            raise ExecutionFailed(errs, cont=True)
         return self._get_return_value(namespace.variables)

     def _verify_keyword_is_valid(self):
@@ -163,9 +162,13 @@
         try:
             kw.run(output, namespace)
         except ExecutionFailed, err:
-            errs.add(err.msg)
+            if isinstance(err.msg, basestring):
+                errs.append(err.msg)
+            else:
+                errs.extend(err.msg)
             if not err.cont:
- raise ExecutionFailed(errs.get_message(),exit=err.exit,syntax=err.syntax,timeout=err.timeout)
+                raise ExecutionFailed(errs, exit=err.exit,
+ syntax=err.syntax,timeout=err.timeout)

     def _get_return_value(self, variables):
         if not self.return_value:

Reply via email to