package org.test4j.junit.suitetest.suite;
import java.lang.annotation.Annotation;
import java.util.Set;
import org.junit.runners.model.RunnerBuilder;
import org.test4j.junit.annotations.TestPath;
import org.test4j.junit.annotations.RunGroup;
import org.test4j.module.core.utility.MessageHelper;
import org.test4j.tools.reflector.FieldAccessor;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class SuiteHelper {
/**
* 在suite类上查找 @ClazFinder 注解
*
* @param suiteClazz
* @param parents
* @return
*/
public static TestPath findClazFinder(Class suiteClazz, RunnerBuilder builder) {
TestPath annotation = findAnnotation(suiteClazz, builder, TestPath.class);
return annotation;
}
/**
* 在suite类上查找 @RunGroup 注解
*
* @param suiteClazz
* @param builder
* @return
*/
public static RunGroup findRunGroup(Class suiteClazz, RunnerBuilder builder) {
RunGroup annotation = findAnnotation(suiteClazz, builder, RunGroup.class);
return annotation;
}
private static <T extends Annotation> T findAnnotation(Class suiteClazz, RunnerBuilder builder,
Class<T> annotationClaz) {
try {
T annotation = (T) suiteClazz.getAnnotation(annotationClaz);
if (annotation != null) {
return annotation;
}
Set<Class> parents = (Set<Class>) FieldAccessor.getFieldValue(builder, "parents");
if (parents == null || parents.size() == 0) {
return null;
}
for (Class parent : parents) {
annotation = (T) parent.getAnnotation(annotationClaz);
if (annotation != null) {
return annotation;
}
}
return null;
} catch (RuntimeException e) {
MessageHelper.error("find annotation[" + annotationClaz.getName() + "] from suite error:" + e.getMessage(),
e);
throw e;
}
}
}