1/**
2 *
3 */
4package org.junit.internal.requests;
5
6import org.junit.internal.runners.ErrorReportingRunner;
7import org.junit.runner.Request;
8import org.junit.runner.Runner;
9import org.junit.runner.manipulation.Filter;
10import org.junit.runner.manipulation.NoTestsRemainException;
11
12/**
13 * A filtered {@link Request}.
14 */
15public final class FilterRequest extends Request {
16	private final Request fRequest;
17	private final Filter fFilter;
18
19	/**
20	 * Creates a filtered Request
21	 * @param classRequest a {@link Request} describing your Tests
22	 * @param filter {@link Filter} to apply to the Tests described in
23	 * <code>classRequest</code>
24	 */
25	public FilterRequest(Request classRequest, Filter filter) {
26		fRequest= classRequest;
27		fFilter= filter;
28	}
29
30	@Override
31	public Runner getRunner() {
32		try {
33			Runner runner= fRequest.getRunner();
34			fFilter.apply(runner);
35			return runner;
36		} catch (NoTestsRemainException e) {
37			return new ErrorReportingRunner(Filter.class, new Exception(String
38					.format("No tests found matching %s from %s", fFilter
39							.describe(), fRequest.toString())));
40		}
41	}
42}