9 new revisions:
Revision: a0ed46356158
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 12:25:23 2013 UTC
Log: Patch from
https://bitbucket.org/userzimmermann/robotframework/commits...
http://code.google.com/p/robotframework/source/detail?r=a0ed46356158
Revision: 03a4229a2d0c
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 14:24:58 2013 UTC
Log: Java keywords that use the kwargs
http://code.google.com/p/robotframework/source/detail?r=03a4229a2d0c
Revision: 646ffe0ba9a5
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 14:25:14 2013 UTC
Log: regen class
http://code.google.com/p/robotframework/source/detail?r=646ffe0ba9a5
Revision: eb0436860814
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 14:26:00 2013 UTC
Log: Tests for java kwargs.
http://code.google.com/p/robotframework/source/detail?r=eb0436860814
Revision: 45444093184d
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 18:42:16 2013 UTC
Log: Test library keyword with many positional arguments and kwargs
http://code.google.com/p/robotframework/source/detail?r=45444093184d
Revision: ee6e410c761e
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 18:42:31 2013 UTC
Log: regen
http://code.google.com/p/robotframework/source/detail?r=ee6e410c761e
Revision: 097da5a12760
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 18:45:24 2013 UTC
Log: java kwargs wont be interpreted as names for positional args
http://code.google.com/p/robotframework/source/detail?r=097da5a12760
Revision: d78fda1469dd
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 18:47:45 2013 UTC
Log: Automated merge with https://code.google.com/p/robotframework/
http://code.google.com/p/robotframework/source/detail?r=d78fda1469dd
Revision: 8f075bea1297
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 19:02:32 2013 UTC
Log: fix unit tests
http://code.google.com/p/robotframework/source/detail?r=8f075bea1297
==============================================================================
Revision: a0ed46356158
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 12:25:23 2013 UTC
Log: Patch from
https://bitbucket.org/userzimmermann/robotframework/commits/branch/javakwargs
Update issue 1583
Merged from
https://bitbucket.org/userzimmermann/robotframework/commits/branch/javakwargs
as a patch without history.
http://code.google.com/p/robotframework/source/detail?r=a0ed46356158
Modified:
/src/robot/running/arguments/argumentparser.py
/src/robot/running/arguments/javaargumentcoercer.py
/src/robot/running/handlers.py
=======================================
--- /src/robot/running/arguments/argumentparser.py Thu Nov 28 14:42:23 2013
UTC
+++ /src/robot/running/arguments/argumentparser.py Fri Nov 29 12:25:23 2013
UTC
@@ -13,7 +13,7 @@
import inspect
if sys.platform.startswith('java'):
from java.lang import Class
- from java.util import List
+ from java.util import List, Map
from robot.errors import DataError
from robot.variables import is_list_var, is_scalar_var
@@ -59,14 +59,23 @@
def _single_signature_arg_spec(self, signature):
args = signature.args
- if args and self._is_varargs_type(args[-1]):
- return self._format_arg_spec(len(args)-1, varargs=True)
- return self._format_arg_spec(len(args))
+ len_ = len(args)
+ if len_:
+ if self._is_varargs_type(args[-1]):
+ return self._format_arg_spec(len_ - 1, varargs=True)
+ if self._is_kwargs_type(args[-1]):
+ varargs = len_ > 1 and self._is_varargs_type(args[-2])
+ return self._format_arg_spec(
+ len_ - (varargs and 2 or 1), varargs=varargs,
kwargs=True)
+ return self._format_arg_spec(len_)
def _is_varargs_type(self, arg):
return isinstance(arg, Class) and (
arg.isArray() or issubclass(arg, List))
+ def _is_kwargs_type(self, arg):
+ return issubclass(arg, Map)
+
def _multi_signature_arg_spec(self, signatures):
mina = maxa = len(signatures[0].args)
for sig in signatures[1:]:
@@ -75,11 +84,14 @@
maxa = max(argc, maxa)
return self._format_arg_spec(maxa, maxa-mina)
- def _format_arg_spec(self, positional=0, defaults=0, varargs=False):
+ def _format_arg_spec(
+ self, positional=0, defaults=0, varargs=False, kwargs=False
+ ):
positional = ['arg%d' % (i+1) for i in range(positional)]
defaults = [''] * defaults
varargs = '*varargs' if varargs else None
- return positional, defaults, varargs
+ kwargs = '**kwargs' if kwargs else None
+ return positional, defaults, varargs, kwargs
class _ArgumentSpecParser(_ArgumentParser):
=======================================
--- /src/robot/running/arguments/javaargumentcoercer.py Thu Nov 28 15:40:56
2013 UTC
+++ /src/robot/running/arguments/javaargumentcoercer.py Fri Nov 29 12:25:23
2013 UTC
@@ -20,12 +20,17 @@
class JavaArgumentCoercer(object):
def __init__(self, signatures, argspec):
+ self._argspec = argspec
self._coercers = CoercerFinder().find_coercers(signatures)
self._varargs_handler = VarargsHandler(argspec)
- def coerce(self, arguments, dryrun=False):
+ def coerce(self, arguments, named, dryrun=False):
arguments = self._varargs_handler.handle(arguments)
- return [c.coerce(a, dryrun) for c, a in zip(self._coercers,
arguments)]
+ arguments = [c.coerce(a, dryrun)
+ for c, a in zip(self._coercers, arguments)]
+ if self._argspec.kwargs:
+ arguments.append(named)
+ return arguments
class CoercerFinder(object):
=======================================
--- /src/robot/running/handlers.py Thu Nov 28 15:40:56 2013 UTC
+++ /src/robot/running/handlers.py Fri Nov 29 12:25:23 2013 UTC
@@ -180,17 +180,15 @@
signatures = self._get_signatures(handler_method)
return JavaArgumentParser().parse(signatures, self.longname)
- def _get_argument_resolver(self, argspec):
- return ArgumentResolver(argspec, resolve_named=False)
-
def _get_signatures(self, handler):
code_object = getattr(handler, 'im_func', handler)
return code_object.argslist[:code_object.nargs]
def resolve_arguments(self, args, variables=None):
positional, named = self._argument_resolver.resolve(args,
variables)
- positional = self._arg_coercer.coerce(positional, dryrun=not
variables)
- return positional, named
+ arguments = self._arg_coercer.coerce(
+ positional, named, dryrun=not variables)
+ return arguments, {}
class _DynamicHandler(_RunnableHandler):
==============================================================================
Revision: 03a4229a2d0c
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 14:24:58 2013 UTC
Log: Java keywords that use the kwargs
http://code.google.com/p/robotframework/source/detail?r=03a4229a2d0c
Modified:
/atest/testresources/testlibs/ArgumentsJava.java
=======================================
--- /atest/testresources/testlibs/ArgumentsJava.java Tue Apr 16 21:30:52
2013 UTC
+++ /atest/testresources/testlibs/ArgumentsJava.java Fri Nov 29 14:24:58
2013 UTC
@@ -1,3 +1,5 @@
+import java.util.*;
+
public class ArgumentsJava {
public ArgumentsJava(String arg, String[] varargs) {
@@ -57,4 +59,36 @@
ret += " " + arg;
return ret;
}
+
+ public String javaKWArgs(Map<String,Object> kwargs) {
+ String ret = "javaKWArgs:";
+ for (String key: kwargs.keySet())
+ ret += " " + key + ":" + kwargs.get(key);
+ return ret;
+ }
+
+ public String javaNormalAndKWArgs(String arg, Map<String,Object>
kwargs) {
+ String ret = "javaNormalAndKWArgs: "+arg;
+ for (String key: kwargs.keySet())
+ ret += " " + key + ":" + kwargs.get(key);
+ return ret;
+ }
+
+ public String javaVarArgsAndKWArgs(List<String> varargs,
Map<String,Object> kwargs) {
+ String ret = "javaVarArgsAndKWArgs:";
+ for (String arg: varargs)
+ ret += " " + arg;
+ for (String key: kwargs.keySet())
+ ret += " " + key + ":" + kwargs.get(key);
+ return ret;
+ }
+
+ public String javaAllArgs(String arg, List<String> varargs,
Map<String,Object> kwargs) {
+ String ret = "javaAllArgs: "+arg;
+ for (String a: varargs)
+ ret += " " + a;
+ for (String key: kwargs.keySet())
+ ret += " " + key + ":" + kwargs.get(key);
+ return ret;
+ }
}
==============================================================================
Revision: 646ffe0ba9a5
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 14:25:14 2013 UTC
Log: regen class
http://code.google.com/p/robotframework/source/detail?r=646ffe0ba9a5
Modified:
/atest/testresources/testlibs/ArgumentsJava.class
=======================================
--- /atest/testresources/testlibs/ArgumentsJava.class Tue Apr 16 21:30:52
2013 UTC
+++ /atest/testresources/testlibs/ArgumentsJava.class Fri Nov 29 14:25:14
2013 UTC
Binary file, no diff available.
==============================================================================
Revision: eb0436860814
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 14:26:00 2013 UTC
Log: Tests for java kwargs.
http://code.google.com/p/robotframework/source/detail?r=eb0436860814
Modified:
/atest/robot/keywords/java_arguments.txt
/atest/testdata/keywords/java_arguments.txt
=======================================
--- /atest/robot/keywords/java_arguments.txt Thu Nov 28 14:43:04 2013 UTC
+++ /atest/robot/keywords/java_arguments.txt Fri Nov 29 14:26:00 2013 UTC
@@ -47,6 +47,18 @@
Varargs Work Also With Lists
[Documentation] Make sure varargs support doesn't make it
impossible to used Java arrays and Python lists with Java keyword expecting
arrays.
Check Test Case ${TESTNAME}
+
+Kwargs on java
+ Check Test Case ${TESTNAME}
+
+Normal and Kwargs on java
+ Check Test Case ${TESTNAME}
+
+Varargs and Kwargs on java
+ Check Test Case ${TESTNAME}
+
+All args on java
+ Check Test Case ${TESTNAME}
Valid Arguments For Keyword Expecting Non String Scalar Arguments
Check Test Case ${TESTNAME}
=======================================
--- /atest/testdata/keywords/java_arguments.txt Thu Nov 28 14:43:04 2013 UTC
+++ /atest/testdata/keywords/java_arguments.txt Fri Nov 29 14:26:00 2013 UTC
@@ -104,6 +104,23 @@
String List ${array1.tolist()}
String List Hello string list world
+Kwargs on java
+ ${res} = javaKWArgs foo=one bar=two
+ Should be equal ${res} javaKWArgs: foo:one bar:two
+
+Normal and Kwargs on java
+ ${res} = javaNormalAndKWArgs hello foo=one bar=two
+ Should be equal ${res} javaNormalAndKWArgs: hello foo:one bar:two
+
+Varargs and Kwargs on java
+ ${res} = javaVarArgsAndKWArgs hello kitty foo=one bar=two
+ Should be equal ${res} javaVarArgsAndKWArgs: hello kitty foo:one
bar:two
+
+All args on java
+ ${res} = javaAllArgs arg hello kitty foo=one bar=two
+ Should be equal ${res} javaAllArgs: arg hello kitty foo:one
bar:two
+
+
Valid Arguments For Keyword Expecting Non String Scalar Arguments
Byte 1 ${1}
Byte 2 ${2}
==============================================================================
Revision: 45444093184d
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 18:42:16 2013 UTC
Log: Test library keyword with many positional arguments and kwargs
http://code.google.com/p/robotframework/source/detail?r=45444093184d
Modified:
/atest/testresources/testlibs/ArgumentsJava.java
=======================================
--- /atest/testresources/testlibs/ArgumentsJava.java Fri Nov 29 14:24:58
2013 UTC
+++ /atest/testresources/testlibs/ArgumentsJava.java Fri Nov 29 18:42:16
2013 UTC
@@ -91,4 +91,11 @@
ret += " " + key + ":" + kwargs.get(key);
return ret;
}
+
+ public String javaManyNormalArgs(String arg, String arg2,
Map<String,Object> kwargs) {
+ String ret = "javaManyNormalArgs: "+arg+" "+arg2;
+ for (String key: kwargs.keySet())
+ ret += " " + key + ":" + kwargs.get(key);
+ return ret;
+ }
}
==============================================================================
Revision: ee6e410c761e
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 18:42:31 2013 UTC
Log: regen
http://code.google.com/p/robotframework/source/detail?r=ee6e410c761e
Modified:
/atest/testresources/testlibs/ArgumentsJava.class
=======================================
--- /atest/testresources/testlibs/ArgumentsJava.class Fri Nov 29 14:25:14
2013 UTC
+++ /atest/testresources/testlibs/ArgumentsJava.class Fri Nov 29 18:42:31
2013 UTC
Binary file, no diff available.
==============================================================================
Revision: 097da5a12760
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 18:45:24 2013 UTC
Log: java kwargs wont be interpreted as names for positional args
http://code.google.com/p/robotframework/source/detail?r=097da5a12760
Modified:
/atest/robot/keywords/java_arguments.txt
/atest/testdata/keywords/java_arguments.txt
/src/robot/running/arguments/argumentmapper.py
/src/robot/running/arguments/argumentparser.py
/src/robot/running/arguments/argumentresolver.py
/src/robot/running/arguments/argumentspec.py
/src/robot/running/arguments/argumentvalidator.py
=======================================
--- /atest/robot/keywords/java_arguments.txt Fri Nov 29 14:26:00 2013 UTC
+++ /atest/robot/keywords/java_arguments.txt Fri Nov 29 18:45:24 2013 UTC
@@ -59,6 +59,9 @@
All args on java
Check Test Case ${TESTNAME}
+
+Java kwargs wont be interpreted as values for positional arguments
+ Check Test Case ${TESTNAME}
Valid Arguments For Keyword Expecting Non String Scalar Arguments
Check Test Case ${TESTNAME}
=======================================
--- /atest/testdata/keywords/java_arguments.txt Fri Nov 29 14:26:00 2013 UTC
+++ /atest/testdata/keywords/java_arguments.txt Fri Nov 29 18:45:24 2013 UTC
@@ -120,6 +120,9 @@
${res} = javaAllArgs arg hello kitty foo=one bar=two
Should be equal ${res} javaAllArgs: arg hello kitty foo:one
bar:two
+Java kwargs wont be interpreted as values for positional arguments
+ ${res} = javaManyNormalArgs foo huu arg1=one
+ Should be equal ${res} javaManyNormalArgs: foo huu arg1:one
Valid Arguments For Keyword Expecting Non String Scalar Arguments
Byte 1 ${1}
=======================================
--- /src/robot/running/arguments/argumentmapper.py Wed Nov 20 17:05:12 2013
UTC
+++ /src/robot/running/arguments/argumentmapper.py Fri Nov 29 18:45:24 2013
UTC
@@ -36,6 +36,7 @@
defaults = variables.replace_list(defaults)
self._positional = argspec.positional
self._kwargs_supported = bool(argspec.kwargs)
+ self._named_arguments = argspec.named_arguments
self.args = [None] * argspec.minargs + [Default(d) for d in
defaults]
self.kwargs = {}
@@ -44,7 +45,7 @@
def fill_named(self, named):
for name, value in named.items():
- if name in self._positional:
+ if name in self._positional and self._named_arguments:
index = self._positional.index(name)
self.args[index] = value
elif self._kwargs_supported:
=======================================
--- /src/robot/running/arguments/argumentparser.py Fri Nov 29 12:25:23 2013
UTC
+++ /src/robot/running/arguments/argumentparser.py Fri Nov 29 18:45:24 2013
UTC
@@ -84,14 +84,12 @@
maxa = max(argc, maxa)
return self._format_arg_spec(maxa, maxa-mina)
- def _format_arg_spec(
- self, positional=0, defaults=0, varargs=False, kwargs=False
- ):
+ def _format_arg_spec(self, positional=0, defaults=0, varargs=False,
kwargs=False):
positional = ['arg%d' % (i+1) for i in range(positional)]
defaults = [''] * defaults
varargs = '*varargs' if varargs else None
kwargs = '**kwargs' if kwargs else None
- return positional, defaults, varargs, kwargs
+ return positional, defaults, varargs, kwargs, False
class _ArgumentSpecParser(_ArgumentParser):
=======================================
--- /src/robot/running/arguments/argumentresolver.py Thu Nov 28 14:49:09
2013 UTC
+++ /src/robot/running/arguments/argumentresolver.py Fri Nov 29 18:45:24
2013 UTC
@@ -58,6 +58,8 @@
name = arg.split('=')[0]
if self._is_escaped(name):
return False
+ if not self._argspec.named_arguments:
+ return self._argspec.kwargs
return name in self._argspec.positional or self._argspec.kwargs
def _is_escaped(self, name):
=======================================
--- /src/robot/running/arguments/argumentspec.py Thu Jun 6 14:00:44 2013
UTC
+++ /src/robot/running/arguments/argumentspec.py Fri Nov 29 18:45:24 2013
UTC
@@ -18,13 +18,14 @@
class ArgumentSpec(object):
def __init__(self, name, type='Keyword', positional=None,
defaults=None,
- varargs=None, kwargs=None):
+ varargs=None, kwargs=None, named_arguments=True):
self.name = name
self.type = type
self.positional = positional or []
self.defaults = defaults or []
self.varargs = varargs
self.kwargs = kwargs
+ self.named_arguments = named_arguments
@property
def minargs(self):
=======================================
--- /src/robot/running/arguments/argumentvalidator.py Mon Sep 23 12:45:27
2013 UTC
+++ /src/robot/running/arguments/argumentvalidator.py Fri Nov 29 18:45:24
2013 UTC
@@ -30,10 +30,15 @@
self._validate_no_mandatory_missing(positional, named,
self._argspec)
def _validate_limits(self, positional, named, spec):
- count = len(positional) + sum(1 for n in named if n in
spec.positional)
+ count = len(positional) + self._named_positionals(named, spec)
if not spec.minargs <= count <= spec.maxargs:
self._raise_wrong_count(count, spec)
+ def _named_positionals(self, named, spec):
+ if not spec.named_arguments:
+ return 0
+ return sum(1 for n in named if n in spec.positional)
+
def _raise_wrong_count(self, count, spec):
minend = plural_or_not(spec.minargs)
if spec.minargs == spec.maxargs:
@@ -49,7 +54,7 @@
def _validate_no_multiple_values(self, positional, named, spec):
for name in spec.positional[:len(positional)]:
- if name in named:
+ if name in named and spec.named_arguments:
raise DataError("%s '%s' got multiple values for
argument '%s'."
% (spec.type, spec.name, name))
==============================================================================
Revision: d78fda1469dd
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 18:47:45 2013 UTC
Log: Automated merge with https://code.google.com/p/robotframework/
http://code.google.com/p/robotframework/source/detail?r=d78fda1469dd
==============================================================================
Revision: 8f075bea1297
Branch: default
Author: Jussi Malinen <[email protected]>
Date: Fri Nov 29 19:02:32 2013 UTC
Log: fix unit tests
http://code.google.com/p/robotframework/source/detail?r=8f075bea1297
Modified:
/utest/running/test_handlers.py
=======================================
--- /utest/running/test_handlers.py Thu Nov 21 15:16:16 2013 UTC
+++ /utest/running/test_handlers.py Fri Nov 29 19:02:32 2013 UTC
@@ -292,11 +292,11 @@
return self.lib.handlers[name]
def _test_coercion(self, handler, args, expected):
- assert_equals(handler._arg_coercer.coerce(args), expected)
+ assert_equals(handler._arg_coercer.coerce(args, {}), expected)
def _test_coercion_fails(self, handler, expected_message):
assert_raises_with_msg(ValueError, expected_message,
- handler._arg_coercer.coerce,
['invalid'])
+ handler._arg_coercer.coerce,
['invalid'], {})
if __name__ == '__main__':
--
---
You received this message because you are subscribed to the Google Groups "robotframework-commit" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.