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