View Javadoc
1   package org.junit.internal.requests;
2   
3   import org.junit.internal.runners.ErrorReportingRunner;
4   import org.junit.runner.Request;
5   import org.junit.runner.Runner;
6   import org.junit.runner.manipulation.Filter;
7   import org.junit.runner.manipulation.NoTestsRemainException;
8   
9   /**
10   * A filtered {@link Request}.
11   */
12  public final class FilterRequest extends Request {
13      private final Request request;
14      /*
15       * We have to use the f prefix, because IntelliJ's JUnit4IdeaTestRunner uses
16       * reflection to access this field. See
17       * https://github.com/junit-team/junit/issues/960
18       */
19      private final Filter fFilter;
20  
21      /**
22       * Creates a filtered Request
23       *
24       * @param request a {@link Request} describing your Tests
25       * @param filter {@link Filter} to apply to the Tests described in
26       * <code>request</code>
27       */
28      public FilterRequest(Request request, Filter filter) {
29          this.request = request;
30          this.fFilter = filter;
31      }
32  
33      @Override
34      public Runner getRunner() {
35          try {
36              Runner runner = request.getRunner();
37              fFilter.apply(runner);
38              return runner;
39          } catch (NoTestsRemainException e) {
40              return new ErrorReportingRunner(Filter.class, new Exception(String
41                      .format("No tests found matching %s from %s", fFilter
42                              .describe(), request.toString())));
43          }
44      }
45  }