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}