Coder Social home page Coder Social logo

gherking / gpc-scenario-numbering Goto Github PK

View Code? Open in Web Editor NEW
0.0 5.0 0.0 571 KB

The ScenarioNumbering precompiler is responsible for adding an index to all scenarios and scenario outlines.

Home Page: https://gherking.github.io/gpc-scenario-numbering/

License: MIT License

TypeScript 42.26% Gherkin 57.74%
gherkin gherking feature-file cucumber typescript gpc precompiler hacktoberfest

gpc-scenario-numbering's Introduction

gherking

Downloads Version@npm Version@git CI Docs

IMPORTANT The gherking package - and the gpc-* ones - are placements of the original gherkin-precompiler package and are not compatible with any code written in it because of the changed API.

GherKing is a tool to make Gherkin smarter! It allows you to handle Cucumber/Gherkin feature files programmatically in your JavaScript/TypeScript code.

It is based on the AST what is provided by gherkin-ast

Usage

const compiler = require('gherking');
const Replacer = require('gpc-replacer');

let ast = await compiler.load('./features/src/login.feature');
ast = await compiler.process(
    ast,
    new Replacer({
        name: 'Hello'
    })
);
await compiler.save('./features/dist/login.feature', ast, {
    lineBreak: '\r\n'
});
import {load, process, save} from "gherking";
import Replacer = require("gpc-replacer");

let ast = await load("./features/src/login.feature");
ast = await process(
    ast,
    new Replacer({
        name: 'Hello'
    })
);
await save('./features/dist/login.feature', ast, {
    lineBreak: '\r\n'
});

Pre-compilers

Some of our base precompilers:

  • Filter - Enables the user to filter out scenarios, based on cucumber-tag-expressions.
  • ForLoop - Enables the user to loop scenarios and scenario outlines in order to repeat them.
  • Macro - Enables the user to create and execute macros.
  • RemoveDuplicates - Removes duplicated tags or example data table rows.
  • Replacer - Replaces keywords in the feature files.
  • ScenarioNumbering - Adds an index to all scenario and scenario outline's name.
  • ScenarioOutlineExpander - Expand the Scenario Outlines to actual scenarios.
  • ScenarioOutlineNumbering - Makes all scenario, generated from scenario outlines unique.
  • StepGroups - Corrects the gherkin keywords of steps to make the tests more readable.

You can find all our precompilers in this list or on our home page.

CLI

The package provides a command-line interface to precompile feature files easily.

# install package globally
npm install -g gherking

# use gherking, precompile or gherkin-precompiler commands
gherking --config .gherking.json --base e2e/features/src --destination e2e/features/dist

Arguments

Usage: gherking --config <path> [options]

Options:
      --version      Show version number                               [boolean]
  -c, --config       The path of the configuration file which contains the
                     precompilers and their configurations.
                                          [string] [default: "./.gherking.json"]
  -s, --source       The pattern or path of feature files which needs to be
                     precompiled.                                       [string]
  -b, --base         The base directory of feature files.               [string]
  -d, --destination  The destination directory of precompiled feature files.
                                                                        [string]
      --install      Whether the missing precompilers (gpc-* packages) should be
                     installed and save to the package.json. Packages will be
                     installed in the current folder, and package.json created
                     if it is not there yet.          [boolean] [default: false]
      --verbose      Whether some information should be displayed on the screen.
                                                      [boolean] [default: false]
      --clean        Whether the destination directory should be clean in
                     advance.                         [boolean] [default: false]
      --help         Show help                                         [boolean]

Important

  • config is a mandatory option since that is the only way to specify the precompilers
  • either a source directory or base directory must be specified either by command line or by configuration
  • if one of the location configurations is missing, it is set based on the given other locations, for example
    • if only base: "e2e/features" set, then source will be e2e/features/**/*.feature and destination will be e2e/features/dist
    • if only source directory is set, then base will be the source directory, destination will be {source}/dist and source will be modified to a glob pattern: {source}/**/*.feature
  • the feature of installing the missing packages relies on the NPM used on the execution platform, thus whether the installed package is added to the package.json or not, depends on it

Configuration

The configuration must contain the precompilers configuration and optionally all options that command-line arguments could specify. It can be a JSON file or a JS file.

The configuration should be recognized by most of the IDE (as GherKing is added to the schemastore).

// .gherking.json
{
   // you can set this schema, so that the IDE will help with the config
   "$schema": "https://gherking.github.io/gherking/gherking.schema.json",
  // ...
}
// .gherking.json
{
    // compilers should be an array of precompiler configurations
    "compilers": [
        // one option is to use precompiler packages,
        {
            // by setting the package
            "path": "gpc-replacer",
            // any by setting the configuration which
            // is passed to the constructor
            "configuration": {
                "user": "[email protected]"
            }
        },
        // other option is to set precompiler object
        {
            // by setting the path to the JS file
            "path": "e2e/utils/myCompiler.js"
        }
    ],
    // source can also be set here
    "source": "e2e/features/src/**/*.feature",
    // base can also be set here
    "base": "e2e/features/src",
    // destination can also be set here
    "destination": "e2e/features/dist",
    // Config file can contain parsing options for
    // gherkin-ast, see documentation for more info:
    // https://github.com/gherking/gherkin-ast
    "parseConfig": {
        "tagFormat": "functional"    
    }  
    // Config file can contain formatting options for
    // gherkin-formatter, see documentation for more info:
    // https://github.com/gherking/gherkin-formatter
    "formatOptions": {
        "compact": true,
        "tagFormat": "assignment"
    }
}

Note: command line arguments should also support setting formatOptions , via object arguments, see Object@yargs.

PreCompiler

If you want to create your precompiler, you only have to extend the Default class and override the filter and event methods you want to use; or create an object with the desired methods.

Event methods

Every element can be modified by using its correspondent event methods.

All event methods (except onFeature ) receives the given element, its parent, and - if applicable - the index of the element. Given that all events receive the given element as an Object , they can be easily modified by modifying the object itself.

The following methods are available, to see exact signature of the given method, click on the name of it:

If the method returns

  • null , then the given element will be deleted
  • an element, then the original element will be replaced with the returned one
  • (only for 1) an element array, in case of an event which process list element (i.e., tag, scenario, examples, step, background, scenario outline), then the original element will be replaced with the returned list
  • nothing, the element won't be replaced

Filter methods

Every element (both single and list) in the AST can be filtered using its correspondent pre- or post filter methods. A pre-filter method is applied before processing the event; the post is applied after it.

All filter methods receive the given element, its parent, and - if applicable - the element's index. If a filter method is set, the method must return true if the element should be kept; otherwise, the element will be discarded. If a filter method is not set, no filtering will happen on the given type of element.

The following methods are available, to see exact signature of the given method, click on the name of it:

Comments

The semantic comments in the Gerhkin AST do not have their event and filter methods in Gherking because of their various types. You can use the respective owner object methods (e.g., to work with a Feature's comments, use onFeature to access them).

Other

This package uses debug for logging, use gherking :

DEBUG=gherking* gherking ...

For detailed documentation see the TypeDocs documentation.

gpc-scenario-numbering's People

Contributors

dependabot[bot] avatar rakur avatar szikszail avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.