package org.camunda.bpm.engine.test;
import org.junit.rules.RuleChain;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
/**
* Helper for chaining TestRules.
*
* @author Jan Galinski, Holisticon AG
*/
public abstract class ChainedTestRule<O extends TestRule, I extends TestRule> implements TestRule {
public static ChainedTestRule<TestRule, TestRule> newChain(final TestRule outerRule, final TestRule innerRule) {
return new ChainedTestRule<TestRule, TestRule>(outerRule) {
@Override
protected TestRule innerRule() {
return innerRule;
}
};
}
protected O outerRule;
public ChainedTestRule(final O outerRule) {
this.outerRule = outerRule;
}
protected abstract I innerRule();
@Override
public Statement apply(Statement base, Description description) {
return RuleChain.outerRule(outerRule).around(innerRule()).apply(base, description);
}
}