package net.serenitybdd.integration.utils; import org.junit.rules.RuleChain; import org.junit.rules.TestRule; import java.util.Arrays; import java.util.List; import static net.serenitybdd.integration.utils.ListFunctions.head; import static net.serenitybdd.integration.utils.ListFunctions.tail; public class RuleChains { public static RuleChain from(TestRule... rules) { return from(Arrays.asList(rules)); } private static RuleChain from(List<TestRule> testRules) { return chained(testRules); } public static <R extends TestRule> RuleChain chained(List<R> customRules) { return chained(RuleChain.emptyRuleChain(), customRules); } public static <R extends TestRule> RuleChain chained(RuleChain acc, List<R> customRules) { return customRules.isEmpty() ? acc : chained(acc.around(head(customRules)), tail(customRules)); } }