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.junit4;
20
21 import java.util.ArrayList;
22 import java.util.List;
23
24 import org.junit.runner.Description;
25 import org.junit.runner.manipulation.Filter;
26
27
28
29
30
31
32 public final class MatchDescriptions extends Filter {
33 private final List<Filter> filters = new ArrayList<>();
34
35 public MatchDescriptions(Iterable<Description> descriptions) {
36 for (Description description : descriptions) {
37 filters.add(matchDescription(description));
38 }
39 }
40
41 @Override
42 public boolean shouldRun(Description description) {
43 for (Filter filter : filters) {
44 if (filter.shouldRun(description)) {
45 return true;
46 }
47 }
48 return false;
49 }
50
51 @Override
52 public String describe() {
53 StringBuilder description = new StringBuilder("Matching description ");
54 for (int i = 0; i < filters.size(); i++) {
55 description.append(filters.get(i).describe());
56 if (i != filters.size() - 1) {
57 description.append(" OR ");
58 }
59 }
60 return description.toString();
61 }
62
63 private static Filter matchDescription(final Description desiredDescription) {
64 return new Filter() {
65 @Override
66 public boolean shouldRun(Description description) {
67 if (description.isTest()) {
68 return desiredDescription.equals(description);
69 }
70
71 for (Description each : description.getChildren()) {
72 if (shouldRun(each)) {
73 return true;
74 }
75 }
76
77 return false;
78 }
79
80 @Override
81 public String describe() {
82 return String.format("Method %s", desiredDescription.getDisplayName());
83 }
84 };
85 }
86 }