MatchingStepMonitor.java
- package org.jbehave.core.embedder;
- import java.lang.reflect.Method;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.apache.commons.lang3.builder.EqualsBuilder;
- import org.apache.commons.lang3.builder.HashCodeBuilder;
- import org.apache.commons.lang3.builder.ToStringBuilder;
- import org.apache.commons.lang3.builder.ToStringStyle;
- import org.jbehave.core.model.StepPattern;
- import org.jbehave.core.steps.DelegatingStepMonitor;
- import org.jbehave.core.steps.StepMonitor;
- import org.jbehave.core.steps.StepType;
- public class MatchingStepMonitor extends DelegatingStepMonitor {
- public MatchingStepMonitor(StepMonitor... delegates) {
- super(delegates);
- }
- private Map<String, StepMatch> matched = new HashMap<>();
- public List<StepMatch> matched() {
- return new ArrayList<>(matched.values());
- }
- @Override
- public void stepMatchesPattern(String step, boolean matches, StepPattern pattern, Method method,
- Object stepsInstance) {
- super.stepMatchesPattern(step, matches, pattern, method, stepsInstance);
- if (matches) {
- String key = pattern.type() + " " + pattern.annotated();
- StepMatch stepMatch = matched.get(key);
- if (stepMatch == null) {
- stepMatch = new StepMatch(pattern);
- matched.put(key, stepMatch);
- }
- }
- }
- public static class StepMatch {
- private final StepType type; // key
- private final String annotatedPattern; // key
- @SuppressWarnings("unused")
- private final String resolvedPattern;
- public StepMatch(StepPattern pattern) {
- this.type = pattern.type();
- this.annotatedPattern = pattern.annotated();
- this.resolvedPattern = pattern.resolved();
- }
- @Override
- public boolean equals(Object o) {
- StepMatch that = (StepMatch) o;
- return new EqualsBuilder().append(this.type, that.type)
- .append(this.annotatedPattern, that.annotatedPattern).isEquals();
- }
- @Override
- public int hashCode() {
- return new HashCodeBuilder().append(type).append(annotatedPattern).toHashCode();
- }
- @Override
- public String toString() {
- return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
- }
- }
- }