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