Search in sources :

Example 1 with ParseError

use of io.cucumber.messages.types.ParseError 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)

Aggregations

Feature (io.cucumber.core.gherkin.Feature)1 FeatureParser (io.cucumber.core.gherkin.FeatureParser)1 FeatureParserException (io.cucumber.core.gherkin.FeatureParserException)1 Pickle (io.cucumber.core.gherkin.Pickle)1 Gherkin (io.cucumber.gherkin.Gherkin)1 Gherkin.makeSourceEnvelope (io.cucumber.gherkin.Gherkin.makeSourceEnvelope)1 GherkinDialect (io.cucumber.gherkin.GherkinDialect)1 GherkinDialectProvider (io.cucumber.gherkin.GherkinDialectProvider)1 Envelope (io.cucumber.messages.types.Envelope)1 GherkinDocument (io.cucumber.messages.types.GherkinDocument)1 ParseError (io.cucumber.messages.types.ParseError)1 URI (java.net.URI)1 Collections.singletonList (java.util.Collections.singletonList)1 List (java.util.List)1 Objects (java.util.Objects)1 Optional (java.util.Optional)1 UUID (java.util.UUID)1 Supplier (java.util.function.Supplier)1 Collectors.toList (java.util.stream.Collectors.toList)1