InstanceStepConditionMatcher.java
- package org.jbehave.core.condition;
- import static org.apache.commons.lang3.Validate.isTrue;
- import java.util.Collection;
- import java.util.function.Function;
- import java.util.function.Predicate;
- import java.util.stream.Collectors;
- public class InstanceStepConditionMatcher implements StepConditionMatcher {
- private final Collection<Predicate<Object>> conditions;
- public InstanceStepConditionMatcher(Collection<Predicate<Object>> conditions) {
- conditions.stream()
- .map(Predicate::getClass)
- .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
- .forEach((type, count) -> isTrue(count == 1, "Only one instance of %s condition is allowed", type));
- this.conditions = conditions;
- }
- @Override
- public boolean matches(Class<? extends Predicate<Object>> condition, Object value)
- throws StepConditionMatchException {
- return conditions.stream()
- .filter(c -> c.getClass().equals(condition))
- .findFirst()
- .orElseThrow(() -> new StepConditionMatchException(
- String.format("Unable to find implementation for the %s condition", condition)))
- .test(value);
- }
- }