Revision: 3592
Author: pekka.klarck
Date: Thu May 27 10:07:54 2010
Log: cleanup + fix for handling varargs
http://code.google.com/p/robotframework/source/detail?r=3592

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

=======================================
--- /trunk/src/robot/running/arguments.py       Thu May 27 07:11:21 2010
+++ /trunk/src/robot/running/arguments.py       Thu May 27 10:07:54 2010
@@ -14,6 +14,7 @@

 import sys
 import inspect
+from array import ArrayType

 from robot.errors import DataError, FrameworkError
 from robot.variables import is_list_var, is_scalar_var
@@ -21,7 +22,6 @@

 if utils.is_jython:
     from javaargcoercer import ArgumentCoercer
-    from array import ArrayType


 class _KeywordArguments(object):
@@ -429,23 +429,16 @@
     def resolve(self, values, variables):
         values = variables.replace_list(values)
         self._arguments.check_arg_limits(values)
-        return self._handle_varargs_and_coerce(values)
-
-    def _handle_varargs_and_coerce(self, args):
-        if self._maxargs == sys.maxint:
-            args = self._handle_varargs(args)
-        return self._arguments.arg_coercer(args), {}
-
-    def _handle_varargs(self, args):
-        if len(args) == self._minargs:
-            args.append([])
- elif len(args) == self._minargs + 1 and isinstance(args[-1], ArrayType):
-            pass
-        else:
-            varargs = args[self._minargs:]
-            args = args[:self._minargs]
-            args.append(varargs)
-        return args
+        if self._expects_varargs() and self._last_is_not_list(values):
+            values[self._minargs:] = [values[self._minargs:]]
+        return self._arguments.arg_coercer(values), {}
+
+    def _expects_varargs(self):
+        return self._maxargs == sys.maxint
+
+    def _last_is_not_list(self, args):
+        return not (len(args) == self._minargs + 1
+                    and isinstance(args[-1], (list, tuple, ArrayType)))


 class _ArgLimitChecker(object):

Reply via email to