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):