Fixes JIRA issue SGF-297 enabling Spring Data GemFire POJO, Function annotated methods to be invoked from Gfsh when arguments are injected during Function argument resolution.
This commit is contained in:
@@ -28,7 +28,7 @@ class DefaultFunctionArgumentResolver implements FunctionArgumentResolver {
|
||||
*/
|
||||
@Override
|
||||
public Object[] resolveFunctionArguments(final FunctionContext functionContext) {
|
||||
return (isArray(functionContext.getArguments())) ? (Object[]) functionContext.getArguments()
|
||||
return (isArray(functionContext.getArguments())) ? toObjectArray((Object[]) functionContext.getArguments())
|
||||
: getArguments(functionContext);
|
||||
}
|
||||
|
||||
@@ -36,8 +36,20 @@ class DefaultFunctionArgumentResolver implements FunctionArgumentResolver {
|
||||
return (value != null && value.getClass().isArray());
|
||||
}
|
||||
|
||||
private Object[] toObjectArray(final Object[] arguments) {
|
||||
Object[] result = new Object[arguments.length];
|
||||
|
||||
int index = 0;
|
||||
|
||||
for (Object arg : arguments) {
|
||||
result[index++] = arg;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private Object[] getArguments(final FunctionContext context) {
|
||||
final Object arguments = context.getArguments();
|
||||
Object arguments = context.getArguments();
|
||||
return (arguments != null ? new Object[] { arguments } : EMPTY_ARRAY);
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
package org.springframework.data.gemfire.function;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertSame;
|
||||
import static org.mockito.Mockito.mock;
|
||||
@@ -39,7 +40,7 @@ import com.gemstone.gemfire.cache.execute.ResultSender;
|
||||
public class FunctionArgumentResolverTest {
|
||||
|
||||
@Test
|
||||
public void testDefaultFunctionArgumentResolverNoArguments() {
|
||||
public void testDefaultFunctionArgumentResolverWithNoArguments() {
|
||||
FunctionArgumentResolver functionArgumentResolver = new DefaultFunctionArgumentResolver();
|
||||
FunctionContext mockFunctionContext = mock(FunctionContext.class);
|
||||
|
||||
@@ -51,32 +52,35 @@ public class FunctionArgumentResolverTest {
|
||||
assertEquals(0, args.length);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDefaultFunctionArgumentResolverSingleArg() {
|
||||
FunctionArgumentResolver far = new DefaultFunctionArgumentResolver();
|
||||
@Test
|
||||
public void testDefaultFunctionArgumentResolverWithArgumentArray() {
|
||||
FunctionArgumentResolver functionArgumentResolver = new DefaultFunctionArgumentResolver();
|
||||
FunctionContext functionContext = mock(FunctionContext.class);
|
||||
|
||||
when(functionContext.getArguments()).thenReturn(new String[] { "one", "two", "three" });
|
||||
|
||||
Object[] args = functionArgumentResolver.resolveFunctionArguments(functionContext);
|
||||
|
||||
assertNotNull(args);
|
||||
assertFalse(args instanceof String[]);
|
||||
assertEquals(3, args.length);
|
||||
assertEquals("one", args[0]);
|
||||
assertEquals("two", args[1]);
|
||||
assertEquals("three", args[2]);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDefaultFunctionArgumentResolverWithSingleArgument() {
|
||||
FunctionArgumentResolver functionArgumentResolver = new DefaultFunctionArgumentResolver();
|
||||
FunctionContext functionContext = mock(FunctionContext.class);
|
||||
|
||||
when(functionContext.getArguments()).thenReturn("hello");
|
||||
when(functionContext.getArguments()).thenReturn("test");
|
||||
|
||||
Object[] args = far.resolveFunctionArguments(functionContext);
|
||||
Object[] args = functionArgumentResolver.resolveFunctionArguments(functionContext);
|
||||
|
||||
assertNotNull(args);
|
||||
assertEquals(1, args.length);
|
||||
assertEquals("hello", args[0]);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDefaultFunctionArgumentResolverSingleArgAsArray() {
|
||||
FunctionArgumentResolver far = new DefaultFunctionArgumentResolver();
|
||||
|
||||
FunctionContext functionContext = mock(FunctionContext.class);
|
||||
|
||||
when(functionContext.getArguments()).thenReturn(new String[]{"hello"});
|
||||
|
||||
Object[] args = far.resolveFunctionArguments(functionContext);
|
||||
|
||||
assertEquals(1, args.length);
|
||||
assertEquals("hello", args[0]);
|
||||
assertEquals("test", args[0]);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user