GitHub - cucumber/gherkin-utils: API for working with Gherkin documents (original) (raw)

Utilities for working with Gherkin documents and AST

npm maven-central build backers sponsors

Features

Install

Gherkin Utils is available on npm for JavaScript:

npm install @cucumber/gherkin-utils

Gherkin Utils is available on Maven Central for Java, by adding the dependency to your pom.xml:

io.cucumber gherkin-utils 9.0.0

Usage

Command line

To run Gherkin Utils as a formatter, try any of the following:

Format file.feature

npx @cucumber/gherkin-utils format features/file.feature

Format file.feature and other.feature

npx @cucumber/gherkin-utils format features/file.feature features/other.feature

Format feature files directly within features/

npx @cucumber/gherkin-utils format features/*.feature

Format feature files ending with _test.feature in features

npx @cucumber/gherkin-utils format features/*_test.feature

Format feature files within immediate subdirectories of features/

npx @cucumber/gherkin-utils format features/**/*.feature

To convert gherkin feature files to Markdown with Gherkin - or the other way around - while formatting, try the following:

Format file.feature to gherkin markdown file.feature.md

npx @cucumber/gherkin-utils format --to-syntax=markdown features/file.feature

Format file.feature.md to gherkin file.feature

npx @cucumber/gherkin-utils format --to-syntax=gherkin features/file.feature.md

For more details on usage, see the help menu.

npx @cucumber/gherkin-utils --help

Library

This module can also be used as a library. It provides two main utilities, pretty and gherkinDocumentWalker.

pretty(gherkinDocument: messages.GherkinDocument, syntax: 'gherkin' | 'markdown')

This function takes a GherkinDocument as input and returns a pretty-printed representation in Gherkin or Markdown.

import { AstBuilder, GherkinClassicTokenMatcher, Parser } from '@cucumber/gherkin' import { pretty } from '@cucumber/gherkin-utils' import { IdGenerator } from '@cucumber/messages'

const uuidFn = IdGenerator.uuid()

const builder = new AstBuilder(uuidFn) const matcher = new GherkinClassicTokenMatcher() const parser = new Parser(builder, matcher)

const feature = Feature: Scenario: Given step text

const gherkinDocument = parser.parse(feature)

const formattedGherkinFeature = pretty(gherkinDocument) /* Feature:

Scenario: Given step text

/ const formattedGherkinMarkdownFeature = pretty(gherkinDocument, 'markdown') /

Feature:

Scenario:

*/

GherkinDocumentWalker class

The GherkinDocumentWalker is a class for walking and filtering the AST produced by Gherkin after parsing a feature file. When running walkGherkinDocument on a GherkinDocument, it will produce a deep copy of the object.

It takes two arguments upon creation:

Filtering keeps the meaning of the original GherkinDocument, which means:

By default, all elements are accepted, which means that if you want to do filtering you should reject all other elements. To ease this, we also provide the rejectAllFilters.

Here's an example:

import { GherkinDocumentWalker, rejectAllFilters } from '@cucumber/gherkin-utils';

// Only keeps scenarios which name include 'magic' const filter = new GherkinDocumentWalker({ ...rejectAllFilters, ...{ acceptScenario: (scenario) => scenario.name.includes('magic') }, })

// Makes a list with all the scenario names const allScenarioNames: string[] = [] const scenarioNameFinder = new GherkinDocumentWalker({}, { handleScenario: (scenario) => allScenarioNames.push(scenario.name), })