From 0e5c326a737a3eddfe4ad2a22cfaaa415414c402 Mon Sep 17 00:00:00 2001 From: Juho Saarinen Date: Tue, 31 Dec 2019 14:01:18 +0200 Subject: [PATCH] Added default value handling fixes Fixed only vararg as an argument Fixes #28 Fixes #29 --- pom.xml | 25 +++++++++++++++++-- .../javalib/reflection/ArgumentCollector.java | 4 +-- .../some/own/keyword/AnnotatedKeywords.java | 3 ++- .../javalib/keyword/AnnotatedKeywords.java | 24 ++++++++++++++++++ .../AnnotationLibraryIntegrationTest.java | 25 ++++++++++++++++++- ...leKeywordsWithSameNameIntegrationTest.java | 3 ++- .../acceptance/annotationlibrary.robot | 6 +++++ 7 files changed, 83 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 87ded2f..59bc9c1 100644 --- a/pom.xml +++ b/pom.xml @@ -162,6 +162,27 @@ true + + org.apache.maven.plugins + maven-site-plugin + 3.7.1 + + + com.github.github + site-maven-plugin + 0.12 + + Creating site for ${project.version} + + + + + site + + site + + + @@ -230,9 +251,9 @@ org.apache.maven.plugins maven-javadoc-plugin - 2.8.1 + 3.1.1 - false + public diff --git a/src/main/java/org/robotframework/javalib/reflection/ArgumentCollector.java b/src/main/java/org/robotframework/javalib/reflection/ArgumentCollector.java index 51bdd9b..73a1623 100644 --- a/src/main/java/org/robotframework/javalib/reflection/ArgumentCollector.java +++ b/src/main/java/org/robotframework/javalib/reflection/ArgumentCollector.java @@ -75,7 +75,7 @@ private int getVarargsIndex() { } private Object getParameterValue(String parameterName, int i, List args, Map kwargs) { - String parameterDefaultValue = parameterName.contains("=") && parameterName.split("=").length > 1 ? parameterName.split("=")[1] : null; + String parameterDefaultValue = this.parameterNames.get(i).contains("=") && this.parameterNames.get(i).split("=").length > 1 ? this.parameterNames.get(i).split("=")[1] : null; Object value = args != null && args.size() > i ? args.get(i) : parameterDefaultValue; if (kwargs != null && kwargs.containsKey(parameterName)) { value = kwargs.get(parameterName); @@ -101,7 +101,7 @@ private Object ensureCorrectVarargsType(List varargs) { private boolean keywordHasVarargs() { int varargIndex = this.getVarargsIndex(); return varargIndex > -1 && parameterTypes != null && parameterTypes.length > 0 && - (parameterTypes[parameterTypes.length-1] == List.class || parameterTypes[parameterTypes.length-varargIndex].isArray() || + (parameterTypes[parameterTypes.length-1] == List.class || parameterTypes[parameterTypes.length-1].isArray() || (parameterTypes.length > 1 && (parameterTypes[parameterTypes.length-2] == List.class || parameterTypes[parameterTypes.length-2].isArray()))); } diff --git a/src/test/java/com/some/own/keyword/AnnotatedKeywords.java b/src/test/java/com/some/own/keyword/AnnotatedKeywords.java index 4eacd18..02b1a13 100644 --- a/src/test/java/com/some/own/keyword/AnnotatedKeywords.java +++ b/src/test/java/com/some/own/keyword/AnnotatedKeywords.java @@ -1,7 +1,9 @@ package com.some.own.keyword; +import org.junit.jupiter.api.Assertions; import org.opentest4j.AssertionFailedError; +import org.robotframework.javalib.annotation.ArgumentNames; import org.robotframework.javalib.annotation.RobotKeyword; import org.robotframework.javalib.annotation.RobotKeywords; @@ -22,5 +24,4 @@ public void myFailingKeyword() { public String myKeywordThatReturnsItsArguments(String arg) { return arg; } - } diff --git a/src/test/java/org/robotframework/javalib/keyword/AnnotatedKeywords.java b/src/test/java/org/robotframework/javalib/keyword/AnnotatedKeywords.java index c3c5949..bc0b77b 100644 --- a/src/test/java/org/robotframework/javalib/keyword/AnnotatedKeywords.java +++ b/src/test/java/org/robotframework/javalib/keyword/AnnotatedKeywords.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.Map; +import org.junit.jupiter.api.Assertions; import org.opentest4j.AssertionFailedError; import org.robotframework.javalib.annotation.ArgumentNames; import org.robotframework.javalib.annotation.RobotKeyword; @@ -102,4 +103,27 @@ public class SomeObject implements SomeInterface { public String value; } + @RobotKeyword + @ArgumentNames({"*Technical arguments"}) + public String[] onlyVarargs(String[] arguments) { + return arguments; + } + + @RobotKeyword + @ArgumentNames({"Image or text to wait", "Similarity of images=0.7", "*Technical arguments"}) + public void defaultAndVarargs(String imageNameOrText, double similarity, String[] arguments) { + Assertions.assertEquals(0.7, similarity); + } + + @RobotKeyword + @ArgumentNames({"port=0"}) + public int useInt(int port) { + return port; + } + + @RobotKeyword + @ArgumentNames({"port=0"}) + public Integer useInteger(Integer port) { + return port; + } } diff --git a/src/test/java/org/robotframework/javalib/library/AnnotationLibraryIntegrationTest.java b/src/test/java/org/robotframework/javalib/library/AnnotationLibraryIntegrationTest.java index e907ca3..f58b10c 100644 --- a/src/test/java/org/robotframework/javalib/library/AnnotationLibraryIntegrationTest.java +++ b/src/test/java/org/robotframework/javalib/library/AnnotationLibraryIntegrationTest.java @@ -22,7 +22,8 @@ public void findsAnnotatedKeywordsFromClassPath() throws Exception { List keywordNames = annotationLibrary.getKeywordNames(); List expectedKeywordNames = Arrays.asList("failingKeyword", "someKeyword", "overloaded", keywordThatReturnsItsArguments, "keywordWithVariableArgumentCount", "variousArgs", "defaultValues", - "keywordWithObjectArgument", "getSomeObject", "keywordWithNumericArguments", byteArrayTest ); + "keywordWithObjectArgument", "getSomeObject", "keywordWithNumericArguments", byteArrayTest, "defaultAndVarargs", "onlyVarargs", + "useInt", "useInteger"); keywordNames.sort(Comparator.naturalOrder()); expectedKeywordNames.sort(Comparator.naturalOrder()); assertIterableEquals(keywordNames, expectedKeywordNames); @@ -92,4 +93,26 @@ public void testByteArrayHandlingResponse() { Object response = annotationLibrary.runKeyword(byteArrayTest, Arrays.asList(testString, testString.getBytes())); assertEquals(testString, new String((byte[]) response)); } + + @Test + public void onlyVarargs() { + annotationLibrary.runKeyword("onlyVarargs", Arrays.asList("one given argument")); + } + + @Test + public void defaultAndVarargs() { + annotationLibrary.runKeyword("defaultAndVarargs", Arrays.asList("one given argument")); + } + + @Test + public void useInt() { + Object response = annotationLibrary.runKeyword("useInt", Arrays.asList()); + assertEquals(0, response); + } + + @Test + public void useInteger() { + Object response = annotationLibrary.runKeyword("useInteger", Arrays.asList()); + assertEquals(0, response); + } } diff --git a/src/test/java/org/robotframework/javalib/library/AnnotationLibraryMultipleKeywordsWithSameNameIntegrationTest.java b/src/test/java/org/robotframework/javalib/library/AnnotationLibraryMultipleKeywordsWithSameNameIntegrationTest.java index 3db80cc..4ac4429 100644 --- a/src/test/java/org/robotframework/javalib/library/AnnotationLibraryMultipleKeywordsWithSameNameIntegrationTest.java +++ b/src/test/java/org/robotframework/javalib/library/AnnotationLibraryMultipleKeywordsWithSameNameIntegrationTest.java @@ -29,7 +29,8 @@ public void testFindsAnnotatedKeywordsFromClassPath() { List expectedKeywordNames = Arrays.asList("failingKeyword", "someKeyword", "overloaded", keywordThatReturnsItsArguments, "keywordWithVariableArgumentCount", "variousArgs", "defaultValues", "keywordWithObjectArgument", "getSomeObject", "keywordWithNumericArguments", - "myFailingKeyword", "myKeywordThatReturnsItsArguments", "byteArrayTest"); + "myFailingKeyword", "myKeywordThatReturnsItsArguments", "byteArrayTest", "defaultAndVarargs", "onlyVarargs", + "useInt", "useInteger"); keywordNames.sort(Comparator.naturalOrder()); expectedKeywordNames.sort(Comparator.naturalOrder()); assertIterableEquals(keywordNames, expectedKeywordNames); diff --git a/src/test/robotframework/acceptance/annotationlibrary.robot b/src/test/robotframework/acceptance/annotationlibrary.robot index edea548..fb9d655 100644 --- a/src/test/robotframework/acceptance/annotationlibrary.robot +++ b/src/test/robotframework/acceptance/annotationlibrary.robot @@ -49,3 +49,9 @@ Positional and kwargs Named and kwargs Various Args arg=value hello=world # Logs 'arg: value' and 'kwarg: hello world'. Various Args hello=world arg=value # Same as above. Order does not matter. + +Only varargs + Only varargs testThing + +Default and varargs + Default and varargs Non-default