MatchingStepMonitor.java

  1. package org.jbehave.core.embedder;

  2. import java.lang.reflect.Method;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;

  7. import org.apache.commons.lang3.builder.EqualsBuilder;
  8. import org.apache.commons.lang3.builder.HashCodeBuilder;
  9. import org.apache.commons.lang3.builder.ToStringBuilder;
  10. import org.apache.commons.lang3.builder.ToStringStyle;
  11. import org.jbehave.core.model.StepPattern;
  12. import org.jbehave.core.steps.DelegatingStepMonitor;
  13. import org.jbehave.core.steps.StepMonitor;
  14. import org.jbehave.core.steps.StepType;

  15. public class MatchingStepMonitor extends DelegatingStepMonitor {

  16.     public MatchingStepMonitor(StepMonitor... delegates) {
  17.         super(delegates);
  18.     }

  19.     private Map<String, StepMatch> matched = new HashMap<>();

  20.     public List<StepMatch> matched() {
  21.         return new ArrayList<>(matched.values());
  22.     }

  23.     @Override
  24.     public void stepMatchesPattern(String step, boolean matches, StepPattern pattern, Method method,
  25.             Object stepsInstance) {
  26.         super.stepMatchesPattern(step, matches, pattern, method, stepsInstance);
  27.         if (matches) {
  28.             String key = pattern.type() + " " + pattern.annotated();
  29.             StepMatch stepMatch = matched.get(key);
  30.             if (stepMatch == null) {
  31.                 stepMatch = new StepMatch(pattern);
  32.                 matched.put(key, stepMatch);
  33.             }
  34.         }
  35.     }

  36.     public static class StepMatch {
  37.         private final StepType type; // key
  38.         private final String annotatedPattern; // key
  39.         @SuppressWarnings("unused")
  40.         private final String resolvedPattern;

  41.         public StepMatch(StepPattern pattern) {
  42.             this.type = pattern.type();
  43.             this.annotatedPattern = pattern.annotated();
  44.             this.resolvedPattern = pattern.resolved();
  45.         }

  46.         @Override
  47.         public boolean equals(Object o) {
  48.             StepMatch that = (StepMatch) o;
  49.             return new EqualsBuilder().append(this.type, that.type)
  50.                     .append(this.annotatedPattern, that.annotatedPattern).isEquals();
  51.         }

  52.         @Override
  53.         public int hashCode() {
  54.             return new HashCodeBuilder().append(type).append(annotatedPattern).toHashCode();
  55.         }

  56.         @Override
  57.         public String toString() {
  58.             return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
  59.         }

  60.     }

  61. }