package cucumber.runtime.model;
import cucumber.runtime.TestHelper;
import gherkin.formatter.model.Comment;
import gherkin.formatter.model.Examples;
import gherkin.formatter.model.ExamplesTableRow;
import gherkin.formatter.model.Feature;
import gherkin.formatter.model.ScenarioOutline;
import gherkin.formatter.model.Step;
import gherkin.formatter.model.Tag;
import org.junit.Test;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
import static org.junit.Assert.assertEquals;
public class CucumberExamplesTest {
private static final List<Comment> COMMENTS = emptyList();
private static final List<Tag> FEATURE_TAGS = asList(new Tag("@feature", 1));
private static final List<Tag> SO_TAGS = asList(new Tag("@scenario_outline", 1));
private static final List<Tag> E_TAGS = asList(new Tag("@example", 1));
@Test
public void should_create_example_scenarios() {
CucumberFeature cucumberFeature = new CucumberFeature(new Feature(COMMENTS, FEATURE_TAGS, "Feature", "", "", 2, "fid"), "f.feature");
ScenarioOutline so = new ScenarioOutline(COMMENTS, SO_TAGS, "Scenario Outline", "", "", 4, "");
CucumberScenarioOutline cso = new CucumberScenarioOutline(cucumberFeature, null, so);
cso.step(new Step(COMMENTS, "Given ", "I have 5 <what> in my <where>", 5, null, null));
Examples examples = new Examples(COMMENTS, E_TAGS, "Examples", "", "", 6, "", asList(
new ExamplesTableRow(COMMENTS, asList("what", "where"), 7, ""),
new ExamplesTableRow(COMMENTS, asList("cukes", "belly"), 8, ""),
new ExamplesTableRow(COMMENTS, asList("apples", "basket"), 9, "")
));
CucumberExamples cucumberExamples = new CucumberExamples(cso, examples);
List<CucumberScenario> exampleScenarios = cucumberExamples.createExampleScenarios();
assertEquals(2, exampleScenarios.size());
Set<Tag> expectedTags = new HashSet<Tag>();
expectedTags.addAll(FEATURE_TAGS);
expectedTags.addAll(SO_TAGS);
expectedTags.addAll(E_TAGS);
assertEquals(expectedTags, exampleScenarios.get(0).tagsAndInheritedTags());
CucumberScenario cucumberScenario = exampleScenarios.get(0);
Step step = cucumberScenario.getSteps().get(0);
assertEquals("I have 5 cukes in my belly", step.getName());
}
@Test
public void should_concatenate_outline_description_and_examples_description() throws IOException {
CucumberFeature feature = TestHelper.feature("path/test.feature", "" +
"Feature: feature name\n" +
" Scenario Outline: outline name\n" +
" outline description\n" +
" Given first step\n" +
" Examples: examples name\n "+
" examples description\n" +
" | dummy |\n" +
" | 1 |\n");
CucumberScenarioOutline cso = (CucumberScenarioOutline) feature.getFeatureElements().get(0);
CucumberExamples cucumberExamples = cso.getCucumberExamplesList().get(0);
List<CucumberScenario> exampleScenarios = cucumberExamples.createExampleScenarios();
assertEquals("outline description, examples description", exampleScenarios.get(0).getGherkinModel().getDescription());
}
@Test
public void should_use_outline_description_when_examples_description_is_empty() throws IOException {
CucumberFeature feature = TestHelper.feature("path/test.feature", "" +
"Feature: feature name\n" +
" Scenario Outline: outline name\n" +
" outline description\n" +
" Given first step\n" +
" Examples: examples name\n "+
" | dummy |\n" +
" | 1 |\n");
CucumberScenarioOutline cso = (CucumberScenarioOutline) feature.getFeatureElements().get(0);
CucumberExamples cucumberExamples = cso.getCucumberExamplesList().get(0);
List<CucumberScenario> exampleScenarios = cucumberExamples.createExampleScenarios();
assertEquals("outline description", exampleScenarios.get(0).getGherkinModel().getDescription());
}
@Test
public void should_use_examples_description_when_outline_description_is_empty() throws IOException {
CucumberFeature feature = TestHelper.feature("path/test.feature", "" +
"Feature: feature name\n" +
" Scenario Outline: outline name\n" +
" Given first step\n" +
" Examples: examples name\n "+
" examples description\n" +
" | dummy |\n" +
" | 1 |\n");
CucumberScenarioOutline cso = (CucumberScenarioOutline) feature.getFeatureElements().get(0);
CucumberExamples cucumberExamples = cso.getCucumberExamplesList().get(0);
List<CucumberScenario> exampleScenarios = cucumberExamples.createExampleScenarios();
assertEquals("examples description", exampleScenarios.get(0).getGherkinModel().getDescription());
}
}