Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/cucumber/tag-expressions

Cucumber tag expression parser
https://github.com/cucumber/tag-expressions

go java javascript perl polyglot-release python ruby tidelift

Last synced: about 21 hours ago
JSON representation

Cucumber tag expression parser

Awesome Lists containing this project

README

        

[![test-go](https://github.com/cucumber/tag-expressions/actions/workflows/test-go.yml/badge.svg)](https://github.com/cucumber/tag-expressions/actions/workflows/test-go.yml)
[![test-java](https://github.com/cucumber/tag-expressions/actions/workflows/test-java.yml/badge.svg)](https://github.com/cucumber/tag-expressions/actions/workflows/test-java.yml)
[![test-javascript](https://github.com/cucumber/tag-expressions/actions/workflows/test-javascript.yml/badge.svg)](https://github.com/cucumber/tag-expressions/actions/workflows/test-javascript.yml)
[![test-perl](https://github.com/cucumber/tag-expressions/actions/workflows/test-perl.yml/badge.svg)](https://github.com/cucumber/tag-expressions/actions/workflows/test-perl.yml)
[![test-python](https://github.com/cucumber/tag-expressions/actions/workflows/test-python.yml/badge.svg)](https://github.com/cucumber/tag-expressions/actions/workflows/test-python.yml)
[![test-ruby](https://github.com/cucumber/tag-expressions/actions/workflows/test-ruby.yml/badge.svg)](https://github.com/cucumber/tag-expressions/actions/workflows/test-ruby.yml)

# Tag Expressions

Tag Expressions is a simple query language for tags. The simplest tag expression is
simply a single tag, for example:

@smoke

A slightly more elaborate expression may combine tags, for example:

@smoke and not @ui

Tag Expressions are used for two purposes:

1. Run a subset of scenarios (using the `--tags expression` option of the [command line](https://cucumber.io/docs/cucumber/api/#running-cucumber))
2. Specify that a hook should only run for a subset of scenarios (using [conditional hooks](https://cucumber.io/docs/cucumber/api/#hooks))

Tag Expressions are [boolean expressions](https://en.wikipedia.org/wiki/Boolean_expression)
of tags with the logical operators `and`, `or` and `not`.

For more complex Tag Expressions you can use parenthesis for clarity, or to change operator precedence:

(@smoke or @ui) and (not @slow)

## Escaping

If you need to use one of the reserved characters `(`, `)`, `\` or ` ` (whitespace) in a tag,
you can escape it with a `\`. Examples:

| Gherkin Tag | Escaped Tag Expression |
| ------------- | ---------------------- |
| @x(y) | @x\\(y\\) |
| @x\y | @x\\\\y |

## Migrating from old style tags

Older versions of Cucumber used a different syntax for tags. The list below
provides some examples illustrating how to migrate to tag expressions.

| Old style command line | Cucumber Expressions style command line |
| ----------------------------- | --------------------------------------- |
| --tags @dev | --tags @dev |
| --tags ~@dev | --tags "not @dev" |
| --tags @foo,@bar | --tags "@foo or @bar" |
| --tags @foo --tags @bar | --tags "@foo and bar" |
| --tags ~@foo --tags @bar,@zap | --tags "not @foo and (@bar or @zap)" |