Revision: 3406
Author: janne.t.harkonen
Date: Mon May 24 03:38:52 2010
Log: validate also items and keywords in for loop
http://code.google.com/p/robotframework/source/detail?r=3406

Modified:
 /trunk/src/robot/running/keywords.py

=======================================
--- /trunk/src/robot/running/keywords.py        Fri May 21 06:19:41 2010
+++ /trunk/src/robot/running/keywords.py        Mon May 24 03:38:52 2010
@@ -208,7 +208,7 @@

     def _raise_invalid_return_value(self, ret, wrong_type=False):
         if wrong_type:
- err = 'Expected list like object, got %s instead' % utils.type_as_str(ret, True) + err = 'Expected list-like object, got %s instead' % utils.type_as_str(ret, True)
         else:
             err = 'Need more values than %d' % len(ret)
raise DataError("Cannot assign return value to variables: %s." % err)
@@ -232,7 +232,7 @@
         self.starttime = utils.get_timestamp()
         context.output.start_keyword(self)
         try:
-            self._validate_vars()
+            self._validate()
             self._run(context)
         except ExecutionFailed, err:
             error = err
@@ -249,12 +249,16 @@
         if error:
             raise error

-    def _validate_vars(self):
+    def _validate(self):
         if not self.vars:
-            raise DataError('FOR loop variables missing.')
+            raise DataError('FOR loop has no loop variables.')
         for var in self.vars:
             if not is_scalar_var(var):
                 raise DataError("Invalid FOR loop variable '%s'." % var)
+        if not self.items:
+            raise DataError('FOR loop has no loop values.')
+        if not self.keywords:
+            raise DataError('FOR loop contains no keywords.')

     def _run(self, context):
         errors = []
@@ -297,9 +301,8 @@
         if len(items) % len(self.vars) == 0:
             return items
         raise DataError('Number of FOR loop values should be multiple of '
-                        'variables. Got %d variables (%s) but %d value%s.'
-                        % (len(self.vars), utils.seq2str(self.vars),
-                           len(items), utils.plural_or_not(items)))
+                        'variables. Got %d variables but %d value%s.'
+ % (len(self.vars), len(items), utils.plural_or_not(items)))

     def _get_range_items(self, items):
         try:

Reply via email to