1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.surefire.common.junit3;
20
21 import java.lang.reflect.Method;
22
23 import org.apache.maven.surefire.api.filter.NonAbstractClassFilter;
24 import org.apache.maven.surefire.api.util.ScannerFilter;
25
26 import static java.lang.reflect.Modifier.isPublic;
27 import static java.lang.reflect.Modifier.isStatic;
28 import static org.apache.maven.surefire.api.util.ReflectionUtils.tryGetMethod;
29 import static org.apache.maven.surefire.api.util.ReflectionUtils.tryLoadClass;
30
31
32
33
34
35
36
37
38
39 public class JUnit3TestChecker implements ScannerFilter {
40 private static final Class[] EMPTY_CLASS_ARRAY = new Class[0];
41
42 private final Class<?> junitClass;
43
44 private final NonAbstractClassFilter nonAbstractClassFilter = new NonAbstractClassFilter();
45
46 public JUnit3TestChecker(ClassLoader testClassLoader) {
47 junitClass = tryLoadClass(testClassLoader, "junit.framework.Test");
48 }
49
50 @Override
51 public boolean accept(Class testClass) {
52 return nonAbstractClassFilter.accept(testClass) && isValidJUnit3Test(testClass);
53 }
54
55 private boolean isValidJUnit3Test(Class<?> testClass) {
56 return junitClass != null && (junitClass.isAssignableFrom(testClass) || isSuiteOnly(testClass));
57 }
58
59 private boolean isSuiteOnly(Class testClass) {
60 final Method suite = tryGetMethod(testClass, "suite", EMPTY_CLASS_ARRAY);
61 if (suite != null) {
62 final int modifiers = suite.getModifiers();
63 if (isPublic(modifiers) && isStatic(modifiers)) {
64 return junit.framework.Test.class.isAssignableFrom(suite.getReturnType());
65 }
66 }
67 return false;
68 }
69 }