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}