1 package org.junit.internal.runners;
2
3 import java.lang.annotation.Annotation;
4 import java.lang.reflect.Constructor;
5 import java.lang.reflect.Method;
6 import java.util.ArrayList;
7 import java.util.Collections;
8 import java.util.List;
9
10 import org.junit.AfterClass;
11 import org.junit.Before;
12 import org.junit.BeforeClass;
13 import org.junit.Test;
14 import org.junit.internal.MethodSorter;
15 import org.junit.runners.BlockJUnit4ClassRunner;
16
17
18
19
20
21
22 @Deprecated
23 public class TestClass {
24 private final Class<?> klass;
25
26 public TestClass(Class<?> klass) {
27 this.klass = klass;
28 }
29
30 public List<Method> getTestMethods() {
31 return getAnnotatedMethods(Test.class);
32 }
33
34 List<Method> getBefores() {
35 return getAnnotatedMethods(BeforeClass.class);
36 }
37
38 List<Method> getAfters() {
39 return getAnnotatedMethods(AfterClass.class);
40 }
41
42 public List<Method> getAnnotatedMethods(Class<? extends Annotation> annotationClass) {
43 List<Method> results = new ArrayList<Method>();
44 for (Class<?> eachClass : getSuperClasses(klass)) {
45 Method[] methods = MethodSorter.getDeclaredMethods(eachClass);
46 for (Method eachMethod : methods) {
47 Annotation annotation = eachMethod.getAnnotation(annotationClass);
48 if (annotation != null && !isShadowed(eachMethod, results)) {
49 results.add(eachMethod);
50 }
51 }
52 }
53 if (runsTopToBottom(annotationClass)) {
54 Collections.reverse(results);
55 }
56 return results;
57 }
58
59 private boolean runsTopToBottom(Class<? extends Annotation> annotation) {
60 return annotation.equals(Before.class) || annotation.equals(BeforeClass.class);
61 }
62
63 private boolean isShadowed(Method method, List<Method> results) {
64 for (Method each : results) {
65 if (isShadowed(method, each)) {
66 return true;
67 }
68 }
69 return false;
70 }
71
72 private boolean isShadowed(Method current, Method previous) {
73 if (!previous.getName().equals(current.getName())) {
74 return false;
75 }
76 if (previous.getParameterTypes().length != current.getParameterTypes().length) {
77 return false;
78 }
79 for (int i = 0; i < previous.getParameterTypes().length; i++) {
80 if (!previous.getParameterTypes()[i].equals(current.getParameterTypes()[i])) {
81 return false;
82 }
83 }
84 return true;
85 }
86
87 private List<Class<?>> getSuperClasses(Class<?> testClass) {
88 ArrayList<Class<?>> results = new ArrayList<Class<?>>();
89 Class<?> current = testClass;
90 while (current != null) {
91 results.add(current);
92 current = current.getSuperclass();
93 }
94 return results;
95 }
96
97 public Constructor<?> getConstructor() throws SecurityException, NoSuchMethodException {
98 return klass.getConstructor();
99 }
100
101 public Class<?> getJavaClass() {
102 return klass;
103 }
104
105 public String getName() {
106 return klass.getName();
107 }
108
109 }