org.junit.experimental.theories.ParameterSignature Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of junit Show documentation
Show all versions of junit Show documentation
JUnit is a regression testing framework written by Erich Gamma and Kent Beck.
It is used by the developer who implements unit tests in Java.
package org.junit.experimental.theories;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ParameterSignature {
public static ArrayList signatures(Method method) {
return signatures(method.getParameterTypes(), method
.getParameterAnnotations());
}
public static List signatures(Constructor constructor) {
return signatures(constructor.getParameterTypes(), constructor
.getParameterAnnotations());
}
private static ArrayList signatures(
Class[] parameterTypes, Annotation[][] parameterAnnotations) {
ArrayList sigs = new ArrayList();
for (int i = 0; i < parameterTypes.length; i++) {
sigs.add(new ParameterSignature(parameterTypes[i],
parameterAnnotations[i]));
}
return sigs;
}
private final Class type;
private final Annotation[] annotations;
private ParameterSignature(Class type, Annotation[] annotations) {
this.type = type;
this.annotations = annotations;
}
public boolean canAcceptType(Class candidate) {
return type.isAssignableFrom(candidate);
}
public Class getType() {
return type;
}
public List getAnnotations() {
return Arrays.asList(annotations);
}
public boolean canAcceptArrayType(Class type) {
return type.isArray() && canAcceptType(type.getComponentType());
}
public boolean hasAnnotation(Class type) {
return getAnnotation(type) != null;
}
public T findDeepAnnotation(Class annotationType) {
Annotation[] annotations2 = annotations;
return findDeepAnnotation(annotations2, annotationType, 3);
}
private T findDeepAnnotation(
Annotation[] annotations, Class annotationType, int depth) {
if (depth == 0) {
return null;
}
for (Annotation each : annotations) {
if (annotationType.isInstance(each)) {
return annotationType.cast(each);
}
Annotation candidate = findDeepAnnotation(each.annotationType()
.getAnnotations(), annotationType, depth - 1);
if (candidate != null) {
return annotationType.cast(candidate);
}
}
return null;
}
public T getAnnotation(Class annotationType) {
for (Annotation each : getAnnotations()) {
if (annotationType.isInstance(each)) {
return annotationType.cast(each);
}
}
return null;
}
}