Search in sources :

Example 36 with Pickle

use of io.cucumber.core.gherkin.Pickle in project cucumber-jvm by cucumber.

the class GherkinMessagesFeatureParser method parse.

@Override
public Optional<Feature> parse(URI path, String source, Supplier<UUID> idGenerator) {
    List<Envelope> sources = singletonList(makeSourceEnvelope(source, path.toString()));
    List<Envelope> envelopes = Gherkin.fromSources(sources, true, true, true, () -> idGenerator.get().toString()).collect(toList());
    GherkinDocument gherkinDocument = envelopes.stream().map(Envelope::getGherkinDocument).filter(Objects::nonNull).findFirst().orElse(null);
    if (gherkinDocument == null || gherkinDocument.getFeature() == null) {
        List<String> errors = envelopes.stream().map(Envelope::getParseError).filter(Objects::nonNull).map(ParseError::getMessage).collect(toList());
        if (!errors.isEmpty()) {
            throw new FeatureParserException("Failed to parse resource at: " + path + "\n" + String.join("\n", errors));
        }
        return Optional.empty();
    }
    CucumberQuery cucumberQuery = new CucumberQuery();
    cucumberQuery.update(gherkinDocument);
    GherkinDialectProvider dialectProvider = new GherkinDialectProvider();
    io.cucumber.messages.types.Feature feature = gherkinDocument.getFeature();
    String language = feature.getLanguage();
    GherkinDialect dialect = dialectProvider.getDialect(language, null);
    List<io.cucumber.messages.types.Pickle> pickleMessages = envelopes.stream().map(Envelope::getPickle).filter(Objects::nonNull).collect(toList());
    List<Pickle> pickles = pickleMessages.stream().map(pickle -> new GherkinMessagesPickle(pickle, path, dialect, cucumberQuery)).collect(toList());
    GherkinMessagesFeature messagesFeature = new GherkinMessagesFeature(feature, path, source, pickles, envelopes);
    return Optional.of(messagesFeature);
}
Also used : Pickle(io.cucumber.core.gherkin.Pickle) FeatureParser(io.cucumber.core.gherkin.FeatureParser) GherkinDialect(io.cucumber.gherkin.GherkinDialect) Envelope(io.cucumber.messages.types.Envelope) Gherkin(io.cucumber.gherkin.Gherkin) UUID(java.util.UUID) Gherkin.makeSourceEnvelope(io.cucumber.gherkin.Gherkin.makeSourceEnvelope) Supplier(java.util.function.Supplier) Collections.singletonList(java.util.Collections.singletonList) Objects(java.util.Objects) GherkinDocument(io.cucumber.messages.types.GherkinDocument) List(java.util.List) Collectors.toList(java.util.stream.Collectors.toList) Feature(io.cucumber.core.gherkin.Feature) FeatureParserException(io.cucumber.core.gherkin.FeatureParserException) Optional(java.util.Optional) ParseError(io.cucumber.messages.types.ParseError) URI(java.net.URI) GherkinDialectProvider(io.cucumber.gherkin.GherkinDialectProvider) Pickle(io.cucumber.core.gherkin.Pickle) FeatureParserException(io.cucumber.core.gherkin.FeatureParserException) GherkinDialectProvider(io.cucumber.gherkin.GherkinDialectProvider) GherkinDialect(io.cucumber.gherkin.GherkinDialect) GherkinDocument(io.cucumber.messages.types.GherkinDocument) Envelope(io.cucumber.messages.types.Envelope) Gherkin.makeSourceEnvelope(io.cucumber.gherkin.Gherkin.makeSourceEnvelope) Objects(java.util.Objects)

Example 37 with Pickle

use of io.cucumber.core.gherkin.Pickle in project cucumber-jvm by cucumber.

the class FeatureParserTest method backgrounds_can_occur_twice.

@Test
void backgrounds_can_occur_twice() throws IOException {
    URI uri = URI.create("classpath:com/example.feature");
    String source = new String(readAllBytes(Paths.get("src/test/resources/io/cucumber/core/gherkin/messages/background.feature")));
    Feature feature = parser.parse(uri, source, UUID::randomUUID).get();
    Pickle pickle = feature.getPickles().get(0);
    List<Step> steps = pickle.getSteps();
    assertEquals(3, steps.size());
}
Also used : Pickle(io.cucumber.core.gherkin.Pickle) Step(io.cucumber.core.gherkin.Step) URI(java.net.URI) Feature(io.cucumber.core.gherkin.Feature) Test(org.junit.jupiter.api.Test)

Example 38 with Pickle

use of io.cucumber.core.gherkin.Pickle in project cucumber-jvm by cucumber.

the class FeatureParserTest method empty_table_is_parsed.

@Test
void empty_table_is_parsed() throws IOException {
    URI uri = URI.create("classpath:com/example.feature");
    String source = new String(readAllBytes(Paths.get("src/test/resources/io/cucumber/core/gherkin/messages/empty-table.feature")));
    Feature feature = parser.parse(uri, source, UUID::randomUUID).get();
    Pickle pickle = feature.getPickles().get(0);
    Step step = pickle.getSteps().get(0);
    DataTableArgument argument = (DataTableArgument) step.getArgument();
    assertEquals(5, argument.getLine());
}
Also used : Pickle(io.cucumber.core.gherkin.Pickle) DataTableArgument(io.cucumber.core.gherkin.DataTableArgument) Step(io.cucumber.core.gherkin.Step) URI(java.net.URI) Feature(io.cucumber.core.gherkin.Feature) Test(org.junit.jupiter.api.Test)

Example 39 with Pickle

use of io.cucumber.core.gherkin.Pickle in project cucumber-jvm by cucumber.

the class FeatureParserTest method empty_doc_string_media_type_is_null.

@Test
void empty_doc_string_media_type_is_null() throws IOException {
    URI uri = URI.create("classpath:com/example.feature");
    String source = new String(readAllBytes(Paths.get("src/test/resources/io/cucumber/core/gherkin/messages/doc-string.feature")));
    Feature feature = parser.parse(uri, source, UUID::randomUUID).get();
    Pickle pickle = feature.getPickles().get(0);
    List<Step> steps = pickle.getSteps();
    assertAll(() -> {
        assertNull(((DocStringArgument) steps.get(0).getArgument()).getContentType());
        assertEquals("text/plain", ((DocStringArgument) steps.get(1).getArgument()).getContentType());
    });
}
Also used : Pickle(io.cucumber.core.gherkin.Pickle) Step(io.cucumber.core.gherkin.Step) URI(java.net.URI) Feature(io.cucumber.core.gherkin.Feature) Test(org.junit.jupiter.api.Test)

Aggregations

Pickle (io.cucumber.core.gherkin.Pickle)39 Test (org.junit.jupiter.api.Test)37 PickleRunner (io.cucumber.junit.PickleRunners.PickleRunner)6 Collections.singletonList (java.util.Collections.singletonList)6 List (java.util.List)6 Glue (io.cucumber.core.backend.Glue)5 Collections.emptyList (java.util.Collections.emptyList)5 Feature (io.cucumber.core.gherkin.Feature)4 URI (java.net.URI)4 HookDefinition (io.cucumber.core.backend.HookDefinition)3 StaticHookDefinition (io.cucumber.core.backend.StaticHookDefinition)3 Step (io.cucumber.core.gherkin.Step)3 InOrder (org.mockito.InOrder)3 Location (io.cucumber.plugin.event.Location)2 DataTableArgument (io.cucumber.core.gherkin.DataTableArgument)1 FeatureParser (io.cucumber.core.gherkin.FeatureParser)1 FeatureParserException (io.cucumber.core.gherkin.FeatureParserException)1 RuntimeOptions (io.cucumber.core.options.RuntimeOptions)1 RuntimeOptionsBuilder (io.cucumber.core.options.RuntimeOptionsBuilder)1 Gherkin (io.cucumber.gherkin.Gherkin)1