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.junit48;
20
21 import org.apache.maven.surefire.api.filter.NonAbstractClassFilter;
22 import org.apache.maven.surefire.api.util.ScannerFilter;
23 import org.apache.maven.surefire.common.junit4.JUnit4TestChecker;
24 import org.junit.experimental.runners.Enclosed;
25
26
27
28
29
30
31 public class JUnit48TestChecker implements ScannerFilter {
32 private final NonAbstractClassFilter nonAbstractClassFilter;
33
34 private final JUnit4TestChecker jUnit4TestChecker;
35
36 public JUnit48TestChecker(ClassLoader testClassLoader) {
37 this.jUnit4TestChecker = new JUnit4TestChecker(testClassLoader);
38 this.nonAbstractClassFilter = new NonAbstractClassFilter();
39 }
40
41 @Override
42 public boolean accept(Class testClass) {
43 return jUnit4TestChecker.accept(testClass) || isAbstractWithEnclosedRunner(testClass);
44 }
45
46 @SuppressWarnings({"unchecked"})
47 private boolean isAbstractWithEnclosedRunner(Class testClass) {
48 return jUnit4TestChecker.isRunWithPresentInClassLoader()
49 && isAbstract(testClass)
50 && isRunWithEnclosedRunner(testClass);
51 }
52
53 private boolean isRunWithEnclosedRunner(Class testClass) {
54 @SuppressWarnings("unchecked")
55 org.junit.runner.RunWith runWithAnnotation =
56 (org.junit.runner.RunWith) testClass.getAnnotation(org.junit.runner.RunWith.class);
57 return (runWithAnnotation != null && Enclosed.class.equals(runWithAnnotation.value()));
58 }
59
60 private boolean isAbstract(Class testClass) {
61 return !nonAbstractClassFilter.accept(testClass);
62 }
63 }