package com.intuit.karate.cucumber; import com.intuit.karate.FileUtils; import com.intuit.karate.ScriptEnv; import java.io.File; import java.io.InputStream; import java.util.List; import org.junit.Test; import static org.junit.Assert.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author pthomas3 */ public class CucumberUtilsTest { private static final Logger logger = LoggerFactory.getLogger(CucumberUtilsTest.class); private void printLines(List<String> lines) { int count = lines.size(); for (int i = 0; i < count; i++) { String line = lines.get(i); logger.trace("{}: {}", i + 1, line); } } private ScriptEnv getEnv() { return new ScriptEnv("dev", new File("."), null, getClass().getClassLoader()); } @Test public void testScenario() { ScriptEnv env = getEnv(); InputStream is = getClass().getResourceAsStream("scenario.feature"); FeatureWrapper fw = FeatureWrapper.fromStream(is, env); List<String> lines = fw.getLines(); printLines(lines); assertEquals(16, lines.size()); assertEquals(1, fw.getSections().size()); ScenarioWrapper sw = fw.getSections().get(0).getScenario(); assertFalse(sw.isChild()); assertEquals(8, sw.getLine()); // scenario on line 8 List<StepWrapper> steps = sw.getSteps(); assertEquals(4, steps.size()); StepWrapper step = steps.get(0); assertTrue(step.isBackground()); String stepText = step.getPriorText(); assertEquals("Feature: simple feature file\n\n# some comment\n\nBackground:", stepText); assertEquals(5, step.getStartLine()); File featureDir = FileUtils.getDirContaining(getClass()); KarateBackend backend = CucumberUtils.getBackend(env, null, null); assertTrue(step.run(backend).isPass()); step = steps.get(1); // first scenario (non-background) step assertFalse(step.isBackground()); stepText = step.getPriorText(); assertEquals("Scenario: test", stepText); assertEquals(8, step.getStartLine()); assertTrue(step.run(backend).isPass()); step = steps.get(2); stepText = step.getPriorText(); assertEquals(1, step.getPriorTextLineCount()); assertTrue(step.isPriorTextPresent()); assertEquals("# another comment", stepText); step = steps.get(3); stepText = step.getPriorText(); assertNull(stepText); assertEquals(0, step.getPriorTextLineCount()); assertFalse(step.isPriorTextPresent()); } @Test public void testScenarioOutline() { InputStream is = getClass().getResourceAsStream("outline.feature"); ScriptEnv env = getEnv(); FeatureWrapper fw = FeatureWrapper.fromStream(is, env); List<String> lines = fw.getLines(); printLines(lines); assertEquals(13, lines.size()); assertEquals(1, fw.getSections().size()); ScenarioOutlineWrapper sow = fw.getSections().get(0).getScenarioOutline(); assertEquals(4, sow.getScenarios().size()); ScenarioWrapper sw = sow.getScenarios().get(0); assertTrue(sw.isChild()); } @Test public void testInsert() { InputStream is = getClass().getResourceAsStream("scenario.feature"); ScriptEnv env = getEnv(); FeatureWrapper fw = FeatureWrapper.fromStream(is, env); fw = fw.addLine(9, "Then assert 2 == 2"); List<String> lines = fw.getLines(); printLines(lines); assertEquals(17, lines.size()); assertEquals(1, fw.getSections().size()); } @Test public void testEdit() { InputStream is = getClass().getResourceAsStream("scenario.feature"); ScriptEnv env = getEnv(); FeatureWrapper fw = FeatureWrapper.fromStream(is, env); printLines(fw.getLines()); StepWrapper step = fw.getSections().get(0).getScenario().getSteps().get(0); int line = step.getStartLine(); fw = fw.replaceLines(line, line, "Then assert 2 == 2"); List<String> lines = fw.getLines(); printLines(lines); assertEquals(16, lines.size()); assertEquals(1, fw.getSections().size()); } @Test public void testMultiLineEdit() { InputStream is = getClass().getResourceAsStream("scenario.feature"); ScriptEnv env = getEnv(); FeatureWrapper fw = FeatureWrapper.fromStream(is, env); printLines(fw.getLines()); StepWrapper step = fw.getSections().get(0).getScenario().getSteps().get(2); fw = fw.replaceStep(step, "Then assert 2 == 2"); List<String> lines = fw.getLines(); printLines(lines); assertEquals(13, lines.size()); assertEquals("# another comment", fw.getLines().get(9)); assertEquals("Then assert 2 == 2", fw.getLines().get(10)); assertEquals("Then match b == { foo: 'bar'}", fw.getLines().get(11)); assertEquals(1, fw.getSections().size()); } @Test public void testIdentifyingStepWhichIsAnHttpCall() { String text = "Feature:\nScenario:\n* method post"; ScriptEnv env = getEnv(); FeatureWrapper fw = FeatureWrapper.fromString(text, env); printLines(fw.getLines()); StepWrapper step = fw.getSections().get(0).getScenario().getSteps().get(0); logger.debug("step name: '{}'", step.getStep().getName()); assertTrue(step.isHttpCall()); } }