001 package org.junit.rules; 002 003 import org.junit.runner.Description; 004 import org.junit.runners.model.Statement; 005 006 /** 007 * Runs a collection of rules on a statement. 008 * 009 * @since 4.9 010 */ 011 public class RunRules extends Statement { 012 private final Statement statement; 013 014 public RunRules(Statement base, Iterable<TestRule> rules, Description description) { 015 statement = applyAll(base, rules, description); 016 } 017 018 @Override 019 public void evaluate() throws Throwable { 020 statement.evaluate(); 021 } 022 023 private static Statement applyAll(Statement result, Iterable<TestRule> rules, 024 Description description) { 025 for (TestRule each : rules) { 026 result = each.apply(result, description); 027 } 028 return result; 029 } 030 }