diff --git a/src/Codeception/Lib/GroupManager.php b/src/Codeception/Lib/GroupManager.php index c796033bac..1eb2c5a545 100644 --- a/src/Codeception/Lib/GroupManager.php +++ b/src/Codeception/Lib/GroupManager.php @@ -5,6 +5,7 @@ use Codeception\Test\Interfaces\Reported; use Codeception\Test\Descriptor; use Codeception\TestInterface; +use Codeception\Test\Gherkin; use Symfony\Component\Finder\Finder; use Symfony\Component\Finder\SplFileInfo; @@ -118,6 +119,10 @@ public function groupsForTest(\PHPUnit\Framework\Test $test) if (strpos($filename . ':' . $test->getName(false), $testPattern) === 0) { $groups[] = $group; } + if ($test instanceof Gherkin + && mb_strtolower($filename . ':' . $test->getMetadata()->getFeature()) === mb_strtolower($testPattern)) { + $groups[] = $group; + } if ($test instanceof \PHPUnit\Framework\TestSuite\DataProvider) { $firstTest = $test->testAt(0); if ($firstTest != false && $firstTest instanceof TestInterface) { diff --git a/tests/data/gherkinGroup1 b/tests/data/gherkinGroup1 new file mode 100644 index 0000000000..e92fe6e789 --- /dev/null +++ b/tests/data/gherkinGroup1 @@ -0,0 +1 @@ +tests/data/refund.feature:Jeff returns a faulty microwave \ No newline at end of file diff --git a/tests/data/gherkinGroup2 b/tests/data/gherkinGroup2 new file mode 100644 index 0000000000..537815f703 --- /dev/null +++ b/tests/data/gherkinGroup2 @@ -0,0 +1 @@ +tests/data/refund2.feature:ジェフは不完全な電子レンジを返します \ No newline at end of file diff --git a/tests/data/refund2.feature b/tests/data/refund2.feature new file mode 100644 index 0000000000..4fe179b5a4 --- /dev/null +++ b/tests/data/refund2.feature @@ -0,0 +1,10 @@ +@important +Feature: Refund item + In order to get satisfaction + As a customer + I need to be able to get refunds + + Scenario: ジェフは不完全な電子レンジを返します + Given Jeff has bought a microwave for "$100" + When he returns the microwave + Then Jeff should be refunded $100 diff --git a/tests/unit/Codeception/Lib/GroupManagerTest.php b/tests/unit/Codeception/Lib/GroupManagerTest.php index 7d67a2f6e4..729b02f788 100644 --- a/tests/unit/Codeception/Lib/GroupManagerTest.php +++ b/tests/unit/Codeception/Lib/GroupManagerTest.php @@ -2,6 +2,7 @@ namespace Codeception\Lib; use Codeception\Util\Stub; +use Codeception\Test\Loader\Gherkin as GherkinLoader; class GroupManagerTest extends \Codeception\Test\Unit { @@ -75,6 +76,24 @@ public function testGroupsFileHandlesWhitespace() $this->assertEmpty($this->manager->groupsForTest($badTest)); } + public function testLoadSpecificScenarioFromFile() + { + $this->manager = new GroupManager(['gherkinGroup1' => 'tests/data/gherkinGroup1']); + $loader = new GherkinLoader(); + $loader->loadTests(codecept_absolute_path('tests/data/refund.feature')); + $test = $loader->getTests()[0]; + $this->assertContains('gherkinGroup1', $this->manager->groupsForTest($test)); + } + + public function testLoadSpecificScenarioWithMultibyteStringFromFile() + { + $this->manager = new GroupManager(['gherkinGroup2' => 'tests/data/gherkinGroup2']); + $loader = new GherkinLoader(); + $loader->loadTests(codecept_absolute_path('tests/data/refund2.feature')); + $test = $loader->getTests()[0]; + $this->assertContains('gherkinGroup2', $this->manager->groupsForTest($test)); + } + protected function makeTestCase($file, $name = '') { return Stub::make(