From 65400f557f6b8ff79959d546f296b640a38f0b44 Mon Sep 17 00:00:00 2001 From: Shantanu Patil Date: Sun, 2 Feb 2020 17:20:57 +0530 Subject: [PATCH 1/3] #19 added unit test to validate fix #19 --- .../KeywordInvokerGroupingArgumentsTest.java | 53 +++++++++++++++++-- .../org.mockito.plugins.MockMaker | 1 + 2 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker diff --git a/src/test/java/org/robotframework/javalib/reflection/KeywordInvokerGroupingArgumentsTest.java b/src/test/java/org/robotframework/javalib/reflection/KeywordInvokerGroupingArgumentsTest.java index e5e3f13..bc406d0 100644 --- a/src/test/java/org/robotframework/javalib/reflection/KeywordInvokerGroupingArgumentsTest.java +++ b/src/test/java/org/robotframework/javalib/reflection/KeywordInvokerGroupingArgumentsTest.java @@ -17,17 +17,62 @@ package org.robotframework.javalib.reflection; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertIterableEquals; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; - +import java.util.Map; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertIterableEquals; -import static org.mockito.Mockito.*; - public class KeywordInvokerGroupingArgumentsTest { private static TestKeywordInvoker testKeywordInvoker = new TestKeywordInvoker(); + @Test + public void testSingleArgumentWithMapForKeywordInvoker() { + Parameter mockParam = mock(Parameter.class); + doReturn(Map.class).when(mockParam).getType(); + when(mockParam.getName()).thenReturn("arg0"); + Parameter[] parameters = new Parameter[]{mockParam}; + Method mockedMethod = mock(Method.class); + when(mockedMethod.getParameterCount()).thenReturn(1); + when(mockedMethod.getParameters()).thenReturn(parameters); + doReturn(new Class[]{Map.class}).when(mockedMethod).getParameterTypes(); + KeywordInvoker keywordInvoker = new KeywordInvoker(new Object(), mockedMethod); + List parameterNames = keywordInvoker.getParameterNames(); + assertEquals(1, parameterNames.size()); + assertEquals("**arg0", parameterNames.get(0)); + + List args = Arrays.asList(buildHashMap()); + ArgumentCollector argumentCollector = new ArgumentCollector(mockedMethod.getParameterTypes(), parameterNames); + + List collectedArgs = argumentCollector.collectArguments(args, null); + assertEquals(1, collectedArgs.size()); + } + + private Map buildHashMap() { + Map map = new HashMap(); + map.put("key1", "value1"); + map.put("key2", "value2"); + map.put("key3", "value3"); + return map; + } + + private Parameter[] buildParameters() { + Parameter mockParam = mock(Parameter.class); + doReturn(Map.class).when(mockParam).getType(); + when(mockParam.getName()).thenReturn("arg0"); + return new Parameter[]{mockParam}; + } + @Test public void testGroupsRestOfTheArgumentsIfProvidedArgumentCountIsGreaterThanActualArgumentCount() { List providedArguments = Arrays.asList("arg1", "arg2", "arg3"); diff --git a/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 0000000..1f0955d --- /dev/null +++ b/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-inline From 4a5e2b13b368544f369614ac11f12f425ba0d341 Mon Sep 17 00:00:00 2001 From: Shantanu Patil Date: Sun, 2 Feb 2020 17:53:28 +0530 Subject: [PATCH 2/3] #19 corrected unit test expectation. - build fails as now the test fails but expectations are correct --- .../reflection/KeywordInvokerGroupingArgumentsTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/robotframework/javalib/reflection/KeywordInvokerGroupingArgumentsTest.java b/src/test/java/org/robotframework/javalib/reflection/KeywordInvokerGroupingArgumentsTest.java index bc406d0..65f7daa 100644 --- a/src/test/java/org/robotframework/javalib/reflection/KeywordInvokerGroupingArgumentsTest.java +++ b/src/test/java/org/robotframework/javalib/reflection/KeywordInvokerGroupingArgumentsTest.java @@ -28,7 +28,6 @@ import java.lang.reflect.Parameter; import java.util.Arrays; import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.junit.jupiter.api.Test; @@ -55,7 +54,8 @@ public void testSingleArgumentWithMapForKeywordInvoker() { ArgumentCollector argumentCollector = new ArgumentCollector(mockedMethod.getParameterTypes(), parameterNames); List collectedArgs = argumentCollector.collectArguments(args, null); - assertEquals(1, collectedArgs.size()); + // since the map has 3 entries + assertEquals(3, collectedArgs.size()); } private Map buildHashMap() { From 7199397f89191ccd417b829a17b3da4b3777fa90 Mon Sep 17 00:00:00 2001 From: Shantanu Patil Date: Sun, 2 Feb 2020 17:59:15 +0530 Subject: [PATCH 3/3] #19 corrected unit test expectation. - build fails as now the test fails but expectations are correct --- .../reflection/KeywordInvokerGroupingArgumentsTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/robotframework/javalib/reflection/KeywordInvokerGroupingArgumentsTest.java b/src/test/java/org/robotframework/javalib/reflection/KeywordInvokerGroupingArgumentsTest.java index 65f7daa..f9764f2 100644 --- a/src/test/java/org/robotframework/javalib/reflection/KeywordInvokerGroupingArgumentsTest.java +++ b/src/test/java/org/robotframework/javalib/reflection/KeywordInvokerGroupingArgumentsTest.java @@ -55,7 +55,8 @@ public void testSingleArgumentWithMapForKeywordInvoker() { List collectedArgs = argumentCollector.collectArguments(args, null); // since the map has 3 entries - assertEquals(3, collectedArgs.size()); + assertEquals(1, collectedArgs.size()); + assertEquals(3, ((HashMap) collectedArgs.get(0)).size()); } private Map buildHashMap() {