package de.bechte.junit.runners.context.statements.builder.rules;
import org.junit.rules.MethodRule;
import org.junit.rules.TestRule;
import java.util.ArrayList;
import java.util.List;
public class TestRuleDefinitions {
private List<TestRuleInTestHierarchy> testRulePositionInTestHierarchies = new ArrayList<TestRuleInTestHierarchy>();
private List<MethodRuleInTestHierarchy> methodRulePositionInTestHierarchies = new ArrayList<MethodRuleInTestHierarchy>();
private List<Object> hierarchyOfTestsFromLowestToHighest;
public TestRuleDefinitions(List<Object> hierarchyOfTestsFromLowestToHighest) {
this.hierarchyOfTestsFromLowestToHighest = hierarchyOfTestsFromLowestToHighest;
}
public boolean contains(MethodRule methodRule) {
for (TestRuleInTestHierarchy t : testRulePositionInTestHierarchies) {
if (t.getTestRule().equals(methodRule))
return true;
}
return false;
}
public void addTestRules(List<TestRule> testRules, Object instance) {
for (TestRule testRule : testRules)
testRulePositionInTestHierarchies.add(new TestRuleInTestHierarchy(testRule, instance));
}
public void addMethodRules(List<MethodRule> annotatedFieldValues, Object instance) {
for (MethodRule methodRule : annotatedFieldValues)
methodRulePositionInTestHierarchies.add(new MethodRuleInTestHierarchy(methodRule, instance));
}
public boolean testRulesPresent() {
return !testRulePositionInTestHierarchies.isEmpty();
}
public Iterable<TestRule> getTestRulesDefinedForThisHierarchyLevel(Object instance) {
List<TestRule> result = new ArrayList<TestRule>();
for (TestRuleInTestHierarchy testRulePosition : testRulePositionInTestHierarchies)
if (hierarchyOfTestsFromLowestToHighest.indexOf(testRulePosition.getObjectRepresentingHierarchyLevel()) >= hierarchyOfTestsFromLowestToHighest.indexOf(instance))
result.add(testRulePosition.getTestRule());
return result;
}
public List<MethodRule> getMethodRulesDefinedForThisHierarchyLevel(Object hierarchyContext) {
List<MethodRule> result = new ArrayList<MethodRule>();
for (MethodRuleInTestHierarchy testRulePosition : methodRulePositionInTestHierarchies)
if (hierarchyOfTestsFromLowestToHighest.indexOf(testRulePosition.getObjectRepresentingHierarchyLevel()) >= hierarchyOfTestsFromLowestToHighest.indexOf(hierarchyContext))
result.add(testRulePosition.getMethodRule());
return result;
}
}