Revision: 2850
Author: KariHusa
Date: Wed Apr  7 04:14:44 2010
Log: Mandatory args must be given before optional args
http://code.google.com/p/robotframework/source/detail?r=2850

Modified:
 /trunk/src/robot/running/argtypes.py
 /trunk/src/robot/running/handlers.py
 /trunk/src/robot/running/userkeyword.py

=======================================
--- /trunk/src/robot/running/argtypes.py        Wed Apr  7 02:16:21 2010
+++ /trunk/src/robot/running/argtypes.py        Wed Apr  7 04:14:44 2010
@@ -14,22 +14,25 @@

 class _ArgTypeResolver(object):

-    def __init__(self, names, values):
+    def __init__(self, names, defaults, values):
         self._names = names
         self._values = values
+        self._mand_arg_count = len(names) - len(defaults)
         self.posargs, self.kwargs = self._resolve()

     def _resolve(self):
+        origposargs = self._values[:self._mand_arg_count]
         posargs = []
+        remargs = self._values[self._mand_arg_count:]
         kwargs = {}
         kwargs_allowed = True
-        for arg in reversed(self._values):
+        for arg in reversed(remargs):
             if kwargs_allowed and self._is_kwarg(arg):
                 kwargs.update(self._parse_kwarg(arg))
             else:
                 posargs.append(self._parse_posarg(arg))
                 kwargs_allowed = False
-        return reversed(posargs), kwargs
+        return origposargs + list(reversed(posargs)), kwargs

     def _is_kwarg(self, arg):
         if self._is_str_with_kwarg_sep(arg):
=======================================
--- /trunk/src/robot/running/handlers.py        Wed Apr  7 02:47:03 2010
+++ /trunk/src/robot/running/handlers.py        Wed Apr  7 04:14:44 2010
@@ -128,7 +128,8 @@
         return self.check_arg_limits(args)

     def _run_handler(self, handler, args, output, timeout):
-        arg_resolver = LibraryKeywordArgTypeResolver(self.args, args)
+ arg_resolver = LibraryKeywordArgTypeResolver(self.args, self.defaults,
+                                                     args)
         posargs, kwargs = arg_resolver.posargs, arg_resolver.kwargs
         if timeout is not None and timeout.active():
return timeout.run(handler, args=posargs, kwargs=kwargs, logger=output)
=======================================
--- /trunk/src/robot/running/userkeyword.py     Wed Apr  7 03:32:58 2010
+++ /trunk/src/robot/running/userkeyword.py     Wed Apr  7 04:14:44 2010
@@ -198,7 +198,8 @@
             variables[name] = value

     def _fill(self, template, arguments):
-        arg_resolver = UserKeywordArgTypeResolver(self._names, arguments)
+ arg_resolver = UserKeywordArgTypeResolver(self._names, self._defaults,
+                                                  arguments)
         for name, value in arg_resolver.kwargs.items():
             template[self._names.index(name)] = value
         for index, value in enumerate(arg_resolver.posargs):

Reply via email to