Skip to content

Commit cbeb675

Browse files
authored
fix raw mask escape (#5)
1 parent 978f458 commit cbeb675

File tree

6 files changed

+73
-7
lines changed

6 files changed

+73
-7
lines changed

src/DefinitionMasksResolver.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
use Rector\Behastan\ValueObject\MaskCollection;
1919
use SplFileInfo;
2020

21+
/**
22+
* @see \Rector\Behastan\Tests\DefinitionMasksResolver\DefinitionMasksResolverTest
23+
*/
2124
final readonly class DefinitionMasksResolver
2225
{
2326
public function __construct(
@@ -76,6 +79,9 @@ public function resolve(array $contextFiles): MaskCollection
7679
continue;
7780
}
7881

82+
// remove \/ escape from mask
83+
$rawMask = str_replace('\/', '/', $rawMask);
84+
7985
$masks[] = new ExactMask(
8086
$rawMask,
8187
$classMethodContextDefinition->getFilePath(),

src/UsedInstructionResolver.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
use RuntimeException;
99
use Symfony\Component\Finder\SplFileInfo;
1010

11+
/**
12+
* @see \Rector\Behastan\Tests\UsedInstructionResolver\UsedInstructionResolverTest
13+
*/
1114
final class UsedInstructionResolver
1215
{
1316
/**

tests/DefinitionMasksResolver/DefinitionMasksResolverTest.php

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,37 @@
1212

1313
final class DefinitionMasksResolverTest extends AbstractTestCase
1414
{
15-
public function test(): void
15+
private DefinitionMasksResolver $definitionMasksResolver;
16+
17+
private BehatMetafilesFinder $behatMetafilesFinder;
18+
19+
protected function setUp(): void
1620
{
17-
$behatMetafilesFinder = $this->make(BehatMetafilesFinder::class);
18-
$contextFileInfos = $behatMetafilesFinder->findContextFiles([__DIR__ . '/Fixture']);
21+
parent::setUp();
1922

20-
$definitionMasksResolver = $this->make(DefinitionMasksResolver::class);
23+
$this->definitionMasksResolver = $this->make(DefinitionMasksResolver::class);
2124

22-
$maskCollection = $definitionMasksResolver->resolve($contextFileInfos);
25+
$this->behatMetafilesFinder = $this->make(BehatMetafilesFinder::class);
26+
}
2327

24-
$this->assertCount(2, $maskCollection->all());
28+
public function test(): void
29+
{
30+
$contextFileInfos = $this->behatMetafilesFinder->findContextFiles([__DIR__ . '/Fixture']);
31+
$maskCollection = $this->definitionMasksResolver->resolve($contextFileInfos);
32+
33+
$this->assertCount(3, $maskCollection->all());
2534

2635
$exactMasks = $maskCollection->byType(ExactMask::class);
27-
$this->assertCount(2, $exactMasks);
36+
$this->assertCount(3, $exactMasks);
2837
$this->assertContainsOnlyInstancesOf(ExactMask::class, $exactMasks);
2938

3039
$firstExactMask = $exactMasks[0];
3140
$this->assertSame('I click homepage', $firstExactMask->mask);
3241
$this->assertSame(AnotherBehatContext::class, $firstExactMask->className);
3342
$this->assertSame(__DIR__ . '/Fixture/AnotherBehatContext.php', $firstExactMask->filePath);
43+
44+
$slashMask = $exactMasks[2];
45+
46+
$this->assertSame('Do this and / that', $slashMask->mask);
3447
}
3548
}

tests/DefinitionMasksResolver/Fixture/AnotherBehatContext.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,9 @@ public function action(): void
1919
public function deadAction(): void
2020
{
2121
}
22+
23+
#[Then('Do this and \/ that')]
24+
public function trickyAction(): void
25+
{
26+
}
2227
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Feature: User login
2+
Scenario: Successful login
3+
Given I am on the login page
4+
When I fill in valid credentials
5+
Then I should see the dashboard
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Behastan\Tests\UsedInstructionResolver;
6+
7+
use Rector\Behastan\Tests\AbstractTestCase;
8+
use Rector\Behastan\UsedInstructionResolver;
9+
use Symfony\Component\Finder\SplFileInfo;
10+
11+
final class UsedInstructionResolverTest extends AbstractTestCase
12+
{
13+
private UsedInstructionResolver $usedInstructionResolver;
14+
15+
protected function setUp(): void
16+
{
17+
parent::setUp();
18+
19+
$this->usedInstructionResolver = $this->make(UsedInstructionResolver::class);
20+
}
21+
22+
public function test(): void
23+
{
24+
$fileInfo = new SplFileInfo(__DIR__ . '/Fixture/some_file.feature', '', '');
25+
26+
$instructions = $this->usedInstructionResolver->resolveInstructionsFromFeatureFiles([$fileInfo]);
27+
28+
$this->assertSame([
29+
'I am on the login page',
30+
'I fill in valid credentials',
31+
'I should see the dashboard',
32+
], $instructions);
33+
}
34+
}

0 commit comments

Comments
 (0)