Skip to content

Commit 7bd3e7b

Browse files
committed
Map and List arg usage
1 parent 43dac36 commit 7bd3e7b

7 files changed

Lines changed: 62 additions & 27 deletions

File tree

pom.xml

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,24 @@
103103
<artifactId>maven-failsafe-plugin</artifactId>
104104
<version>2.22.2</version>
105105
</plugin>
106+
<!-- Source plugin -->
107+
<plugin>
108+
<groupId>org.apache.maven.plugins</groupId>
109+
<artifactId>maven-source-plugin</artifactId>
110+
<version>2.4</version>
111+
<executions>
112+
<execution>
113+
<id>attach-sources</id>
114+
<goals>
115+
<goal>jar-no-fork</goal>
116+
</goals>
117+
</execution>
118+
</executions>
119+
</plugin>
106120
<plugin>
107121
<groupId>org.robotframework</groupId>
108122
<artifactId>robotframework-maven-plugin</artifactId>
109-
<version>1.5.1</version>
123+
<version>1.5.2</version>
110124
<executions>
111125
<execution>
112126
<goals>
@@ -191,20 +205,6 @@
191205
<id>deploy</id>
192206
<build>
193207
<plugins>
194-
<!-- Source plugin -->
195-
<plugin>
196-
<groupId>org.apache.maven.plugins</groupId>
197-
<artifactId>maven-source-plugin</artifactId>
198-
<version>2.4</version>
199-
<executions>
200-
<execution>
201-
<id>attach-sources</id>
202-
<goals>
203-
<goal>jar-no-fork</goal>
204-
</goals>
205-
</execution>
206-
</executions>
207-
</plugin>
208208
<!-- Javadoc plugin -->
209209
<plugin>
210210
<groupId>org.apache.maven.plugins</groupId>

src/main/java/org/robotframework/javalib/reflection/ArgumentCollector.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -99,15 +99,12 @@ private Object ensureCorrectVarargsType(List varargs) {
9999
}
100100

101101
private boolean keywordHasVarargs() {
102-
int varargIndex = this.getVarargsIndex();
103-
return varargIndex > -1 && parameterTypes != null && parameterTypes.length > 0 &&
104-
(parameterTypes[parameterTypes.length-1] == List.class || parameterTypes[parameterTypes.length-1].isArray() ||
105-
(parameterTypes.length > 1 && (parameterTypes[parameterTypes.length-2] == List.class || parameterTypes[parameterTypes.length-2].isArray())));
102+
return this.getVarargsIndex() > -1;
106103
}
107104

108105
private boolean keywordHasKwargs() {
109-
return parameterTypes != null && parameterTypes.length > 0 &&
110-
(parameterTypes[parameterTypes.length-1] == Map.class);
106+
return parameterNames != null && parameterNames.size() > 0 &&
107+
(parameterNames.get(parameterNames.size()-1).startsWith("**"));
111108
}
112109

113110
private Object convertToType(Class<?> clazz, Object object) {
@@ -128,10 +125,14 @@ private Object convertToType(Class<?> clazz, Object object) {
128125
return Double.valueOf(object.toString());
129126
} else if (clazz == String.class) {
130127
return object.toString();
131-
} else if (clazz.isAssignableFrom(object.getClass())) {
132-
return object;
128+
} else if (object.getClass().isArray() && clazz.isAssignableFrom(List.class)) {
129+
//convert array to list. Needed at least with jrobotremotelibrary
130+
return Arrays.asList((Object[])object);
131+
} else if (List.class.isAssignableFrom(object.getClass()) && clazz.isArray()) {
132+
//convert list to array. Needed at least with jrobotremotelibrary
133+
return ((List)object).toArray();
133134
}
134135
}
135-
return null;
136+
return object;
136137
}
137138
}

src/test/java/org/robotframework/javalib/keyword/AnnotatedKeywords.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,16 @@ public int useInt(int port) {
126126
public Integer useInteger(Integer port) {
127127
return port;
128128
}
129+
130+
@RobotKeyword
131+
@ArgumentNames("arg")
132+
public List<?> listAsArgument(List<?> arg) {
133+
return arg;
134+
}
135+
136+
@RobotKeyword
137+
@ArgumentNames({ "arg" })
138+
public Map<Object, Object> mapAsArgument(Map<Object, Object> arg) {
139+
return arg;
140+
}
129141
}

src/test/java/org/robotframework/javalib/library/AnnotationLibraryIntegrationTest.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public void findsAnnotatedKeywordsFromClassPath() throws Exception {
2323
List expectedKeywordNames = Arrays.asList("failingKeyword", "someKeyword", "overloaded",
2424
keywordThatReturnsItsArguments, "keywordWithVariableArgumentCount", "variousArgs", "defaultValues",
2525
"keywordWithObjectArgument", "getSomeObject", "keywordWithNumericArguments", byteArrayTest, "defaultAndVarargs", "onlyVarargs",
26-
"useInt", "useInteger");
26+
"useInt", "useInteger", "listAsArgument", "mapAsArgument");
2727
keywordNames.sort(Comparator.naturalOrder());
2828
expectedKeywordNames.sort(Comparator.naturalOrder());
2929
assertIterableEquals(keywordNames, expectedKeywordNames);
@@ -115,4 +115,18 @@ public void useInteger() {
115115
Object response = annotationLibrary.runKeyword("useInteger", Arrays.asList());
116116
assertEquals(0, response);
117117
}
118+
119+
@Test
120+
public void listAsArgument() {
121+
Object testList = Arrays.asList("first", 2, 4.4);
122+
Object response = annotationLibrary.runKeyword("listAsArgument", Arrays.asList(testList));
123+
assertEquals(testList, response);
124+
}
125+
126+
@Test
127+
public void mapAsArgument() {
128+
Map testMap = Collections.singletonMap("first_key", "first_value");
129+
Object response = annotationLibrary.runKeyword("mapAsArgument", Arrays.asList(testMap));
130+
assertEquals(testMap, response);
131+
}
118132
}

src/test/java/org/robotframework/javalib/library/AnnotationLibraryMultipleKeywordsWithSameNameIntegrationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public void testFindsAnnotatedKeywordsFromClassPath() {
3030
keywordThatReturnsItsArguments, "keywordWithVariableArgumentCount", "variousArgs", "defaultValues",
3131
"keywordWithObjectArgument", "getSomeObject", "keywordWithNumericArguments",
3232
"myFailingKeyword", "myKeywordThatReturnsItsArguments", "byteArrayTest", "defaultAndVarargs", "onlyVarargs",
33-
"useInt", "useInteger");
33+
"useInt", "useInteger", "listAsArgument", "mapAsArgument");
3434
keywordNames.sort(Comparator.naturalOrder());
3535
expectedKeywordNames.sort(Comparator.naturalOrder());
3636
assertIterableEquals(keywordNames, expectedKeywordNames);

src/test/robotframework/acceptance/annotationlibrarywithmultiplepatterns.robot

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,10 @@ Finds Annotated Keywords
1616
Extracts Inner Exception From Failing Keywords
1717
runKeywordAndExpectError Assertion failed failingKeyword
1818
runKeywordAndExpectError Assertion failed myFailingKeyword
19+
20+
Test lists
21+
${returned list} List As Argument ${LIST}
22+
Should Be Equal ${LIST} ${returned list}
23+
${returned list} List As Argument ${EMPTY LIST}
24+
Should Be Equal ${EMPTY LIST} ${returned list}
25+

src/test/robotframework/acceptance/variables.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from java.util import ArrayList
2-
2+
LIST = ['One', -2, False]
3+
EMPTY_LIST = []
34

45
keyword_patterns = ArrayList()
56
keyword_patterns.add("org/**/keyword/**/**.class")

0 commit comments

Comments
 (0)