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);
}
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);
}
Aggregations