package org.jbehave.core.reporters; import java.io.PrintStream; import java.util.List; import org.jbehave.core.steps.Stepdoc; import static java.text.MessageFormat.format; public class PrintStreamStepdocReporter implements StepdocReporter { private static final String STEP_MATCHED_BY = "Step ''{0}'' is matched by annotated patterns:"; private static final String STEP_NOT_MATCHED = "Step ''{0}'' is not matched by any pattern"; private static final String STEPDOC = "''{0} {1}''"; private PrintStream output; public PrintStreamStepdocReporter() { this(System.out); } public PrintStreamStepdocReporter(PrintStream output) { this.output = output; } public void stepdocsMatching(String stepAsString, List<Stepdoc> stepdocs, List<Object> stepsInstances) { if (stepdocs.size() > 0) { output(format(STEP_MATCHED_BY, stepAsString)); outputStepdocs(stepdocs); } else { output(format(STEP_NOT_MATCHED, stepAsString)); } outputStepsInstances(stepsInstances); } public void stepdocs(List<Stepdoc> stepdocs, List<Object> stepsInstances) { outputStepdocs(stepdocs); outputStepsInstances(stepsInstances); } private void outputStepdocs(List<Stepdoc> stepdocs) { for (Stepdoc stepdoc : stepdocs) { output(format(STEPDOC, stepdoc.getStartingWord(), stepdoc.getPattern())); output(stepdoc.getMethodSignature()); } } private void outputStepsInstances(List<Object> stepsInstances) { if (stepsInstances.size() > 0) { output("from steps instances:"); for (Object stepsInstance : stepsInstances) { output(stepsInstance.getClass().getName()); } } else { output("as no steps instances are provided"); } } private void output(Object object) { Format.println(output, object); } }