package net.thucydides.core.reports.adaptors.specflow; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import net.thucydides.core.model.TestStep; import java.util.List; import java.util.Set; public class ScenarioStepReader { private static final Set<String> STEP_KEYWORDS = ImmutableSet.of("given", "when", "then", "and"); private static final String RESULT_LEAD = "-> "; public static boolean isResult(String line) { return line.trim().startsWith(RESULT_LEAD); } public TestStep consumeNextStepFrom(List<String> lines) { ScenarioStep scenarioStep = new ScenarioStep(consumeLinesFromNextStep(lines)); TestStep step = TestStep.forStepCalled(scenarioStep.getTitle()).withResult(scenarioStep.getResult()); if (scenarioStep.getDuration().isPresent()) { step.setDuration(scenarioStep.getDuration().get().longValue()); } if (scenarioStep.getException().isPresent()) { step.failedWith(scenarioStep.getException().get()); } return step; } private List<String> consumeLinesFromNextStep(List<String> lines) { List<String> stepLines = Lists.newArrayList(); String title = lines.remove(0); stepLines.add(title); while (!lines.isEmpty() && !isStepTitle(lines.get(0))) { stepLines.add(lines.remove(0)); } return stepLines; } private boolean isStepTitle(String line) { String trimmedLowerCaseLine = line.trim().toLowerCase(); for(String keyword : STEP_KEYWORDS) { if (trimmedLowerCaseLine.startsWith(keyword)) { return true; } } return false; } }