org.testng.internal.reflect.ArrayEndingMethodMatcher Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of testng Show documentation
Show all versions of testng Show documentation
Testing framework for Java
package org.testng.internal.reflect;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import static org.testng.internal.reflect.InjectableParameter.Assistant.ALL_INJECTS;
/**
* Checks for array ending method argument match with or without filtering injectables.
*
* @author Nitin Verma
* @see ReflectionRecipes#matchArrayEnding(Class[], Object[])
*/
public class ArrayEndingMethodMatcher extends AbstractNodeMethodMatcher {
public ArrayEndingMethodMatcher(final MethodMatcherContext context) {
super(context);
}
/** {@inheritDoc} */
@Override
protected List> getConformanceInjectsOrder() {
final List> injectsOrder = new ArrayList<>(1);
injectsOrder.add(ALL_INJECTS);
return injectsOrder;
}
/**
* {@inheritDoc}
*
* @see ReflectionRecipes#matchArrayEnding(Class[], Object[])
*/
@Override
protected boolean match(final Parameter[] parameters, final Object[] arguments) {
return ReflectionRecipes.matchArrayEnding(parameters, getContext().getArguments());
}
/** {@inheritDoc} */
@Override
protected Object[] matchingArguments(final Parameter[] parameters, final Object[] arguments) {
final Class[] classes = ReflectionRecipes.classesFromParameters(parameters);
final Object[] objects = new Object[classes.length];
final Class componentType = classes[classes.length - 1].getComponentType();
final Object array = Array.newInstance(componentType, arguments.length - classes.length + 1);
System.arraycopy(arguments, 0, objects, 0, classes.length - 1);
int j = 0;
for (int i = classes.length - 1; i < arguments.length; i++, j++) {
Array.set(array, j, arguments[i]);
}
objects[classes.length - 1] = array;
return objects;
}
}