1 package org.junit.runner.manipulation;
2
3 import org.junit.runner.Description;
4 import org.junit.runner.Request;
5
6
7
8
9
10
11
12
13
14
15
16
17 public abstract class Filter {
18
19
20
21 public static final Filter ALL = new Filter() {
22 @Override
23 public boolean shouldRun(Description description) {
24 return true;
25 }
26
27 @Override
28 public String describe() {
29 return "all tests";
30 }
31
32 @Override
33 public void apply(Object child) throws NoTestsRemainException {
34
35 }
36
37 @Override
38 public Filter intersect(Filter second) {
39 return second;
40 }
41 };
42
43
44
45
46
47 public static Filter matchMethodDescription(final Description desiredDescription) {
48 return new Filter() {
49 @Override
50 public boolean shouldRun(Description description) {
51 if (description.isTest()) {
52 return desiredDescription.equals(description);
53 }
54
55
56 for (Description each : description.getChildren()) {
57 if (shouldRun(each)) {
58 return true;
59 }
60 }
61 return false;
62 }
63
64 @Override
65 public String describe() {
66 return String.format("Method %s", desiredDescription.getDisplayName());
67 }
68 };
69 }
70
71
72
73
74
75
76 public abstract boolean shouldRun(Description description);
77
78
79
80
81
82
83 public abstract String describe();
84
85
86
87
88
89
90
91
92 public void apply(Object child) throws NoTestsRemainException {
93 if (!(child instanceof Filterable)) {
94 return;
95 }
96 Filterable filterable = (Filterable) child;
97 filterable.filter(this);
98 }
99
100
101
102
103
104 public Filter intersect(final Filter second) {
105 if (second == this || second == ALL) {
106 return this;
107 }
108 final Filter first = this;
109 return new Filter() {
110 @Override
111 public boolean shouldRun(Description description) {
112 return first.shouldRun(description)
113 && second.shouldRun(description);
114 }
115
116 @Override
117 public String describe() {
118 return first.describe() + " and " + second.describe();
119 }
120 };
121 }
122 }