package com.intuit.karate.core; import com.intuit.karate.FileUtils; import com.intuit.karate.Resource; 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 FeatureEditTest { private static final Logger logger = LoggerFactory.getLogger(FeatureEditTest.class); private Feature parse(String name) { InputStream is = getClass().getResourceAsStream(name); String text = FileUtils.toString(is); Resource resource = Resource.EMPTY; return FeatureParser.parseText(new Feature(resource), text); } 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); } } @Test public void testScenario() { Feature feature = parse("scenario.feature"); List<String> lines = feature.getLines(); assertEquals(16, lines.size()); assertEquals(1, feature.getSections().size()); Background background = feature.getBackground(); Step step = background.getSteps().get(0); assertEquals("def a = 1", step.getText()); Scenario scenario = feature.getSections().get(0).getScenario(); assertFalse(scenario.isOutline()); assertEquals(8, scenario.getLine()); // scenario on line 8 List<Step> steps = scenario.getSteps(); assertEquals(3, steps.size()); step = steps.get(0); assertEquals(9, step.getLine()); step = steps.get(1); assertEquals(11, step.getLine()); } @Test public void testScenarioOutline() { Feature feature = parse("outline.feature"); List<String> lines = feature.getLines(); assertEquals(13, lines.size()); assertEquals(1, feature.getSections().size()); ScenarioOutline so = feature.getSections().get(0).getScenarioOutline(); assertEquals(4, so.getScenarios().size()); Scenario scenario = so.getScenarios().get(0); assertTrue(scenario.isOutline()); } @Test public void testInsert() { Feature feature = parse("scenario.feature"); feature = feature.addLine(9, "Then assert 2 == 2"); List<String> lines = feature.getLines(); assertEquals(17, lines.size()); assertEquals(1, feature.getSections().size()); } @Test public void testEdit() { Feature feature = parse("scenario.feature"); Step step = feature.getSections().get(0).getScenario().getSteps().get(0); int line = step.getLine(); feature = feature.replaceLines(line, line, "Then assert 2 == 2"); assertEquals(1, feature.getSections().size()); } @Test public void testMultiLineEditDocString() { Feature feature = parse("scenario.feature"); printLines(feature.getLines()); Step step = feature.getSections().get(0).getScenario().getSteps().get(1); assertEquals("def b =", step.getText()); assertEquals(11, step.getLine()); assertEquals(14, step.getEndLine()); feature = feature.replaceStep(step, "Then assert 2 == 2"); List<String> lines = feature.getLines(); printLines(lines); assertEquals(13, lines.size()); assertEquals("# another comment", feature.getLines().get(9)); assertEquals("Then assert 2 == 2", feature.getLines().get(10)); assertEquals("Then match b == { foo: 'bar'}", feature.getLines().get(11)); assertEquals(1, feature.getSections().size()); } @Test public void testMultiLineEditTable() { Feature feature = parse("table.feature"); printLines(feature.getLines()); Step step = feature.getSections().get(0).getScenario().getSteps().get(0); assertEquals("table cats", step.getText()); assertEquals(4, step.getLine()); assertEquals(8, step.getEndLine()); feature = feature.replaceStep(step, "Then assert 2 == 2"); List<String> lines = feature.getLines(); printLines(lines); assertEquals(7, lines.size()); assertEquals("Then assert 2 == 2", feature.getLines().get(3)); assertEquals("* match cats == [{name: 'Bob', age: 2}, {name: 'Wild', age: 4}, {name: 'Nyan', age: 3}]", feature.getLines().get(5)); } @Test public void testIdentifyingStepWhichIsAnHttpCall() { String text = "Feature:\nScenario:\n* method post"; Resource resource = Resource.EMPTY; Feature feature = FeatureParser.parseText(new Feature(resource), text); Step step = feature.getSections().get(0).getScenario().getSteps().get(0); logger.debug("step name: '{}'", step.getText()); assertTrue(step.getText().startsWith("method")); } }