Search in sources :

Example 1 with GherkinDocument

use of io.cucumber.messages.types.GherkinDocument in project cucumber-jvm by cucumber.

the class TestSourcesModel method parseGherkinSource.

private void parseGherkinSource(URI path) {
    if (!pathToReadEventMap.containsKey(path)) {
        return;
    }
    String source = pathToReadEventMap.get(path).getSource();
    List<Envelope> sources = singletonList(makeSourceEnvelope(source, path.toString()));
    List<Envelope> envelopes = Gherkin.fromSources(sources, true, true, true, () -> String.valueOf(UUID.randomUUID())).collect(toList());
    GherkinDocument gherkinDocument = envelopes.stream().map(Envelope::getGherkinDocument).filter(Objects::nonNull).findFirst().orElse(null);
    pathToAstMap.put(path, gherkinDocument);
    Map<Long, AstNode> nodeMap = new HashMap<>();
    AstNode currentParent = new AstNode(gherkinDocument.getFeature(), null);
    for (FeatureChild child : gherkinDocument.getFeature().getChildren()) {
        processFeatureDefinition(nodeMap, child, currentParent);
    }
    pathToNodeMap.put(path, nodeMap);
}
Also used : HashMap(java.util.HashMap) Objects(java.util.Objects) FeatureChild(io.cucumber.messages.types.FeatureChild) GherkinDocument(io.cucumber.messages.types.GherkinDocument) Envelope(io.cucumber.messages.types.Envelope) Gherkin.makeSourceEnvelope(io.cucumber.gherkin.Gherkin.makeSourceEnvelope)

Example 2 with GherkinDocument

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

Gherkin.makeSourceEnvelope (io.cucumber.gherkin.Gherkin.makeSourceEnvelope)2 Envelope (io.cucumber.messages.types.Envelope)2 GherkinDocument (io.cucumber.messages.types.GherkinDocument)2 Objects (java.util.Objects)2 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 GherkinDialect (io.cucumber.gherkin.GherkinDialect)1 GherkinDialectProvider (io.cucumber.gherkin.GherkinDialectProvider)1 FeatureChild (io.cucumber.messages.types.FeatureChild)1 ParseError (io.cucumber.messages.types.ParseError)1 URI (java.net.URI)1 Collections.singletonList (java.util.Collections.singletonList)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Optional (java.util.Optional)1 UUID (java.util.UUID)1 Supplier (java.util.function.Supplier)1