[Jython-checkins] jython: Fix calling Java vararg methods with no arguments fails
darjus.loktevic
jython-checkins at python.org
Sun Nov 13 17:48:49 EST 2016
https://hg.python.org/jython/rev/f79c9a94b17e
changeset: 7966:f79c9a94b17e
user: James Mudd <james.mudd at gmail.com>
date: Mon Nov 14 09:48:08 2016 +1100
summary:
Fix calling Java vararg methods with no arguments fails
Also add additional testing for vararg methods to improve test coverage
of boxing varargs.
files:
Lib/test/test_joverload.py | 39 ++++++++++++++
src/org/python/core/ReflectedArgs.java | 3 +-
tests/java/javatests/Reflection.java | 23 ++++++++
3 files changed, 64 insertions(+), 1 deletions(-)
diff --git a/Lib/test/test_joverload.py b/Lib/test/test_joverload.py
--- a/Lib/test/test_joverload.py
+++ b/Lib/test/test_joverload.py
@@ -138,6 +138,20 @@
"String...:[abc]")
self.assertEqual(t.test([]),
"String...:[]")
+
+ self.assertEqual(t.testOneFixedArg("abc"),
+ "String arg1:abc String...:[]");
+ self.assertEqual(t.testOneFixedArg("abc", "xyz"),
+ "String arg1:abc String...:[xyz]");
+ self.assertEqual(t.testOneFixedArg("abc", "xyz", "123"),
+ "String arg1:abc String...:[xyz, 123]");
+
+ self.assertEqual(t.testTwoFixedArg("fix1", "fix2"),
+ "String arg1:fix1 String arg2:fix2 String...:[]");
+ self.assertEqual(t.testTwoFixedArg("fix1", "fix2", "var1"),
+ "String arg1:fix1 String arg2:fix2 String...:[var1]");
+ self.assertEqual(t.testTwoFixedArg("fix1", "fix2", "var1", "var2"),
+ "String arg1:fix1 String arg2:fix2 String...:[var1, var2]");
def test_lists(self):
@@ -155,6 +169,31 @@
"List...:[[1, 2, 3]]")
self.assertEqual(t.test([]),
"List...:[]")
+
+ def test_booleans(self):
+ t = Reflection.BooleanVarargs()
+
+
+ self.assertEqual(t.test(True, False),
+ "booleans...:[true, false]")
+ self.assertEqual(t.test(True),
+ "booleans...:[true]")
+ self.assertEqual(t.test(),
+ "booleans...:[]")
+
+ self.assertEqual(t.testOneFixedArg(True),
+ "boolean arg1:true booleans...:[]");
+ self.assertEqual(t.testOneFixedArg(True, False),
+ "boolean arg1:true booleans...:[false]");
+ self.assertEqual(t.testOneFixedArg(True, False, True),
+ "boolean arg1:true booleans...:[false, true]");
+
+ self.assertEqual(t.testTwoFixedArg(True, False),
+ "boolean arg1:true boolean arg2:false booleans...:[]");
+ self.assertEqual(t.testTwoFixedArg(True, False, True),
+ "boolean arg1:true boolean arg2:false booleans...:[true]");
+ self.assertEqual(t.testTwoFixedArg(True, False, True, False),
+ "boolean arg1:true boolean arg2:false booleans...:[true, false]");
class ComplexOverloadingTests(unittest.TestCase):
diff --git a/src/org/python/core/ReflectedArgs.java b/src/org/python/core/ReflectedArgs.java
--- a/src/org/python/core/ReflectedArgs.java
+++ b/src/org/python/core/ReflectedArgs.java
@@ -152,7 +152,8 @@
/* Boxes argument in the varargs position if not already boxed */
private PyObject[] ensureBoxedVarargs(PyObject[] pyArgs, int n) {
if (pyArgs.length == 0) {
- return pyArgs;
+ // If there are no args return an empty list
+ return new PyObject[]{new PyList()};
}
PyObject lastArg = pyArgs[pyArgs.length - 1];
if (lastArg instanceof PySequenceList ||
diff --git a/tests/java/javatests/Reflection.java b/tests/java/javatests/Reflection.java
--- a/tests/java/javatests/Reflection.java
+++ b/tests/java/javatests/Reflection.java
@@ -9,11 +9,34 @@
public class Reflection {
+ public static class BooleanVarargs {
+
+ public String test(boolean... args) {
+ return "booleans...:" + Arrays.toString(args);
+ }
+
+ public String testOneFixedArg(boolean arg1, boolean... args) {
+ return "boolean arg1:" + arg1 + " booleans...:" + Arrays.toString(args);
+ }
+
+ public String testTwoFixedArg(boolean arg1, boolean arg2, boolean... args) {
+ return "boolean arg1:" + arg1 + " boolean arg2:" + arg2 + " booleans...:" + Arrays.toString(args);
+ }
+ }
+
public static class StringVarargs {
public String test(String... args) {
return "String...:" + Arrays.toString(args);
}
+
+ public String testOneFixedArg(String arg1, String... args) {
+ return "String arg1:" + arg1 + " String...:" + Arrays.toString(args);
+ }
+
+ public String testTwoFixedArg(String arg1, String arg2, String... args) {
+ return "String arg1:" + arg1 + " String arg2:" + arg2 + " String...:" + Arrays.toString(args);
+ }
}
public static class ListVarargs {
--
Repository URL: https://hg.python.org/jython
More information about the Jython-checkins
mailing list