FilterRequest.java revision aeb93fc33cae3aadbb9b46083350ad2dc9aea645
1package org.junit.internal.requests;
2
3import org.junit.internal.runners.ErrorReportingRunner;
4import org.junit.runner.Request;
5import org.junit.runner.Runner;
6import org.junit.runner.manipulation.Filter;
7import org.junit.runner.manipulation.NoTestsRemainException;
8
9/**
10 * A filtered {@link Request}.
11 */
12public 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}