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 }