8000 Test cucumber/gherkin compatibility layer · Codeception/Codeception@643eb81 · GitHub
[go: up one dir, main page]

Skip to content

Commit 643eb81

Browse files
committed
Test cucumber/gherkin compatibility layer
1 parent 6021a4a commit 643eb81

File tree

3 files changed

+32
-10
lines changed

3 files changed

+32
-10
lines changed

.github/workflows/build.yml

Lines changed: 4 additions & 0 deletions
< 8000 div data-testid="addition diffstat" class="DiffSquares-module__diffSquare--h5kjy DiffSquares-module__addition--jeNtt">
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ jobs:
8181
if: matrix.mode == 'stable'
8282
run: composer update --prefer-source --no-interaction --no-progress --optimize-autoloader --ansi
8383

84+
- name: Test cucumber/gherkin compatibility layer in experimental mode
85+
if: matrix.mode == 'experimental'
86+
run: composer require --no-update cucumber/gherkin behat/gherkin:"dev-cucumber-gherkin as 4.99.99"
87+
8488
- name: Composer install lowest versions of dependencies on PHP 8.0 in experimental mode
8589
if: matrix.php == '8.0' && matrix.mode == 'experimental'
8690
run: composer update --prefer-source --prefer-lowest --no-interaction --no-progress --optimize-autoloader --ansi

composer.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,12 @@
6565
"replace": {
6666
"codeception/phpunit-wrapper": "*"
6767
},
68-
68+
"repositories": [
69+
{
70+
"type": "vcs",
71+
"url": "git@github.com:ciaranmcnulty/Gherkin-1.git"
72+
}
73+
],
6974
"autoload": {
7075
"classmap": [
7176
"src/PHPUnit/TestCase.php"

src/Codeception/Test/Loader/Gherkin.php

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
use Behat\Gherkin\Filter\RoleFilter;
88
use Behat\Gherkin\Keywords\ArrayKeywords as GherkinKeywords;
99
use Behat\Gherkin\Lexer as GherkinLexer;
10+
use Behat\Gherkin\Loader\CucumberGherkinLoader;
11+
use Behat\Gherkin\Loader\GherkinFileLoader;
1012
use Behat\Gherkin\Node\ExampleNode;
1113
use Behat\Gherkin\Node\FeatureNode;
1214
use Behat\Gherkin\Node\OutlineNode;
@@ -57,7 +59,7 @@ class Gherkin implements LoaderInterface
5759
*/
5860
protected array $tests = [];
5961

60-
protected GherkinParser $parser;
62+
protected GherkinFileLoader|CucumberGherkinLoader $gherkinFileLoader;
6163

6264
protected array $settings = [];
6365

@@ -73,12 +75,21 @@ public function __construct(array $settings = [])
7375
if (!class_exists(GherkinKeywords::class)) {
7476
throw new TestParseException('Feature file can only be parsed with Behat\Gherkin library. Please install `behat/gherkin` with Composer');
7577
}
76-
$gherkin = new ReflectionClass(\Behat\Gherkin\Gherkin::class);
77-
$gherkinClassPath = dirname($gherkin->getFileName());
78-
$i18n = require $gherkinClassPath . '/../../../i18n.php';
79-
$keywords = new GherkinKeywords($i18n);
80-
$lexer = new GherkinLexer($keywords);
81-
$this->parser = new GherkinParser($lexer);
78+
79+
if (
80+
class_exists(CucumberGherkinLoader::class) // if supporting older behat/gherkin
81+
&& CucumberGherkinLoader::isAvailable()
82+
) {
83+
$this->gherkinFileLoader = new CucumberGherkinLoader();
84+
} else {
85+
$gherkin = new ReflectionClass(\Behat\Gherkin\Gherkin::class);
86+
$gherkinClassPath = dirname($gherkin->getFileName());
87+
$i18n = require $gherkinClassPath . '/../../../i18n.php';
88+
$keywords = new GherkinKeywords($i18n);
89+
$lexer = new GherkinLexer($keywords);
90+
$parser = new GherkinParser($lexer);
91+
$this->gherkinFileLoader = new GherkinFileLoader($parser);
92+
}
8293
$this->fetchGherkinSteps();
8394
}
8495

@@ -190,12 +201,14 @@ private function validatePattern(string $pattern): void
190201

191202
public function loadTests(string $filename): void
192203
{
193-
$featureNode = $this->parser->parse(file_get_contents($filename), $filename);
204+
$featureNodes = $this->gherkinFileLoader->load($filename);
194205

195-
if (!$featureNode instanceof FeatureNode) {
206+
if ($featureNodes === [] || !$featureNodes[0] instanceof FeatureNode) {
196207
return;
197208
}
198209

210+
$featureNode = $featureNodes[0];
211+
199212
foreach ($featureNode->getScenarios() as $scenarioNode) {
200213
/** @var ScenarioInterface $scenarioNode */
201214
$steps = $this->steps['default']; // load default context

0 commit comments

Comments
 (0)
0