diff --git a/README.md b/README.md index be2ec6e19..ee54242a6 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Here are the available rules: ### 1. Find duplicated definitions contents (`duplicated-contents`) -Some definitions have similar masks, even identical contents: +Some definitions have similar patterns, even identical contents: ```php use Behat\Step\When; @@ -53,7 +53,7 @@ public function loadUserProfile() } ``` -Better use a one definition with single mask, to make your tests more precise and easier to maintain. +Better use a one definition with single pattern, to make your tests more precise and easier to maintain.
diff --git a/rector.php b/rector.php index 3a97a08e7..be74166c8 100644 --- a/rector.php +++ b/rector.php @@ -22,7 +22,7 @@ ->withSkip([ \Rector\Php55\Rector\String_\StringClassNameToClassConstantRector::class => [ // keep string class names - __DIR__ . '/src/Resolver/ClassMethodMasksResolver.php', + __DIR__ . '/src/Resolver/ClassMethodPatternResolver.php', ], ]) ->withImportNames() diff --git a/src/Analyzer/ContextDefinitionsAnalyzer.php b/src/Analyzer/ContextDefinitionsAnalyzer.php index 33b8dbebd..1ed6bd0c0 100644 --- a/src/Analyzer/ContextDefinitionsAnalyzer.php +++ b/src/Analyzer/ContextDefinitionsAnalyzer.php @@ -10,7 +10,7 @@ use PhpParser\NodeFinder; use PhpParser\PrettyPrinter\Standard; use Rector\Behastan\PhpParser\SimplePhpParser; -use Rector\Behastan\Resolver\ClassMethodMasksResolver; +use Rector\Behastan\Resolver\ClassMethodPatternResolver; use Rector\Behastan\ValueObject\ContextDefinition; use Symfony\Component\Finder\SplFileInfo; @@ -25,7 +25,7 @@ public function __construct( private readonly SimplePhpParser $simplePhpParser, private readonly NodeFinder $nodeFinder, private readonly Standard $printerStandard, - private readonly ClassMethodMasksResolver $classMethodMasksResolver, + private readonly ClassMethodPatternResolver $classMethodPatternResolver, ) { } @@ -84,10 +84,10 @@ public function resolveAndGroupByContentHash(array $contextFileInfos): array } $classMethodHash = $this->createClassMethodHash($classMethod); - $rawMasks = $this->classMethodMasksResolver->resolve($classMethod); + $rawPatterns = $this->classMethodPatternResolver->resolve($classMethod); - // no masks :( - if ($rawMasks === []) { + // no patterns found :( + if ($rawPatterns === []) { continue; } @@ -95,8 +95,8 @@ public function resolveAndGroupByContentHash(array $contextFileInfos): array $contextFileInfo->getRealPath(), $className, $classMethod->name->toString(), - // @todo what about multiple masks? - $rawMasks[0], + // @todo what about multiple patterns? + $rawPatterns[0], $classMethod->getStartLine() ); diff --git a/src/Analyzer/MaskAnalyzer.php b/src/Analyzer/MaskAnalyzer.php deleted file mode 100644 index c575fffce..000000000 --- a/src/Analyzer/MaskAnalyzer.php +++ /dev/null @@ -1,29 +0,0 @@ -getFilename(), '.feature'); } - $maskCollection = $this->definitionMasksExtractor->extract($contextFiles); + $patternCollection = $this->definitionPatternsExtractor->extract($contextFiles); $featureInstructions = $this->usedInstructionResolver->resolveInstructionsFromFeatureFiles($featureFiles); - //$maskProgressBar = $this->outputPrinter->createProgressBar($maskCollection->count()); - $unusedMasks = []; - foreach ($maskCollection->all() as $mask) { - // $maskProgressBar->advance(); - - if ($this->isMaskUsed($mask, $featureInstructions)) { + $unusedPatterns = []; + foreach ($patternCollection->all() as $pattern) { + if ($this->isPatternUsed($pattern, $featureInstructions)) { continue; } - $unusedMasks[] = $mask; + $unusedPatterns[] = $pattern; } - // $maskProgressBar->finish(); - - return $unusedMasks; + return $unusedPatterns; } /** @@ -90,27 +84,27 @@ private function isRegexDefinitionUsed(string $regexBehatDefinition, array $feat /** * @param string[] $featureInstructions */ - private function isMaskUsed(AbstractMask $mask, array $featureInstructions): bool + private function isPatternUsed(AbstractPattern $pattern, array $featureInstructions): bool { - if ($mask instanceof SkippedMask) { + if ($pattern instanceof SkippedPattern) { return true; } // is used? - if ($mask instanceof ExactMask && in_array($mask->mask, $featureInstructions, true)) { + if ($pattern instanceof ExactPattern && in_array($pattern->pattern, $featureInstructions, true)) { return true; } // is used? - if ($mask instanceof RegexMask && $this->isRegexDefinitionUsed($mask->mask, $featureInstructions)) { + if ($pattern instanceof RegexPattern && $this->isRegexDefinitionUsed($pattern->pattern, $featureInstructions)) { return true; } - if ($mask instanceof NamedMask) { - // normalize :mask definition to regex - $regexMask = '#' . Strings::replace($mask->mask, self::MASK_VALUE_REGEX, '(.*?)') . '#'; + if ($pattern instanceof NamedPattern) { + // normalize :pattern definition to regex + $regexPattern = '#' . Strings::replace($pattern->pattern, self::PATTERN_VALUE_REGEX, '(.*?)') . '#'; - if ($this->isRegexDefinitionUsed($regexMask, $featureInstructions)) { + if ($this->isRegexDefinitionUsed($regexPattern, $featureInstructions)) { return true; } } diff --git a/src/Command/AnalyzeCommand.php b/src/Command/AnalyzeCommand.php index 11c5f958c..56deb7342 100644 --- a/src/Command/AnalyzeCommand.php +++ b/src/Command/AnalyzeCommand.php @@ -7,9 +7,9 @@ use Entropy\Console\Contract\CommandInterface; use Entropy\Console\Enum\ExitCode; use Entropy\Console\Output\OutputPrinter; -use Rector\Behastan\DefinitionMasksExtractor; +use Rector\Behastan\DefinitionPatternsExtractor; use Rector\Behastan\Finder\BehatMetafilesFinder; -use Rector\Behastan\Reporting\MaskCollectionStatsPrinter; +use Rector\Behastan\Reporting\PatternCollectionStatsPrinter; use Rector\Behastan\RulesRegistry; use Rector\Behastan\ValueObject\RuleError; use Webmozart\Assert\Assert; @@ -17,8 +17,8 @@ final readonly class AnalyzeCommand implements CommandInterface { public function __construct( - private DefinitionMasksExtractor $definitionMasksExtractor, - private MaskCollectionStatsPrinter $maskCollectionStatsPrinter, + private DefinitionPatternsExtractor $definitionPatternsExtractor, + private PatternCollectionStatsPrinter $patternCollectionStatsPrinter, private OutputPrinter $outputPrinter, private RulesRegistry $rulesRegistry, ) { @@ -65,12 +65,12 @@ public function run(?string $projectDirectory = null, array $skip = []): int count($contextFileInfos), count($featureFileInfos) )); - $this->outputPrinter->writeln('Extracting definitions masks...'); + $this->outputPrinter->writeln('Extracting definitions patterns...'); - $maskCollection = $this->definitionMasksExtractor->extract($contextFileInfos); + $patternCollection = $this->definitionPatternsExtractor->extract($contextFileInfos); $this->outputPrinter->newLine(); - $this->maskCollectionStatsPrinter->print($maskCollection); + $this->patternCollectionStatsPrinter->print($patternCollection); $this->outputPrinter->newLine(); $this->outputPrinter->writeln('Running analysis...'); @@ -85,7 +85,7 @@ public function run(?string $projectDirectory = null, array $skip = []): int continue; } - $ruleErrors = $rule->process($contextFileInfos, $featureFileInfos, $maskCollection, $projectDirectory); + $ruleErrors = $rule->process($contextFileInfos, $featureFileInfos, $patternCollection, $projectDirectory); $allRuleErrors = array_merge($allRuleErrors, $ruleErrors); } diff --git a/src/Contract/MaskInterface.php b/src/Contract/PatternInterface.php similarity index 73% rename from src/Contract/MaskInterface.php rename to src/Contract/PatternInterface.php index 4880470c0..bb94fff47 100644 --- a/src/Contract/MaskInterface.php +++ b/src/Contract/PatternInterface.php @@ -4,6 +4,6 @@ namespace Rector\Behastan\Contract; -interface MaskInterface +interface PatternInterface { } diff --git a/src/Contract/RuleInterface.php b/src/Contract/RuleInterface.php index 8c318b20b..67817957a 100644 --- a/src/Contract/RuleInterface.php +++ b/src/Contract/RuleInterface.php @@ -5,7 +5,7 @@ namespace Rector\Behastan\Contract; use Rector\Behastan\Enum\RuleIdentifier; -use Rector\Behastan\ValueObject\MaskCollection; +use Rector\Behastan\ValueObject\PatternCollection; use Rector\Behastan\ValueObject\RuleError; use Symfony\Component\Finder\SplFileInfo; @@ -20,7 +20,7 @@ interface RuleInterface public function process( array $contextFiles, array $featureFiles, - MaskCollection $maskCollection, + PatternCollection $patternCollection, string $projectDirectory ): array; diff --git a/src/DefinitionMasksExtractor.php b/src/DefinitionPatternsExtractor.php similarity index 76% rename from src/DefinitionMasksExtractor.php rename to src/DefinitionPatternsExtractor.php index a2e2d84b6..e6ed4a3cf 100644 --- a/src/DefinitionMasksExtractor.php +++ b/src/DefinitionPatternsExtractor.php @@ -4,36 +4,36 @@ namespace Rector\Behastan; +use Entropy\Attributes\RelatedTest; use PhpParser\Node\Name; use PhpParser\Node\Stmt\Class_; use PhpParser\NodeFinder; -use Rector\Behastan\Analyzer\MaskAnalyzer; +use Rector\Behastan\Analyzer\PatternAnalyzer; use Rector\Behastan\PhpParser\SimplePhpParser; -use Rector\Behastan\Resolver\ClassMethodMasksResolver; +use Rector\Behastan\Resolver\ClassMethodPatternResolver; +use Rector\Behastan\Tests\DefinitionPatternExtractor\DefinitionPatternExtractorTest; use Rector\Behastan\ValueObject\ContextDefinition; -use Rector\Behastan\ValueObject\Mask\ExactMask; -use Rector\Behastan\ValueObject\Mask\NamedMask; -use Rector\Behastan\ValueObject\Mask\RegexMask; -use Rector\Behastan\ValueObject\Mask\SkippedMask; -use Rector\Behastan\ValueObject\MaskCollection; +use Rector\Behastan\ValueObject\Pattern\ExactPattern; +use Rector\Behastan\ValueObject\Pattern\NamedPattern; +use Rector\Behastan\ValueObject\Pattern\RegexPattern; +use Rector\Behastan\ValueObject\Pattern\SkippedPattern; +use Rector\Behastan\ValueObject\PatternCollection; use SplFileInfo; -/** - * @see \Rector\Behastan\Tests\DefinitionMasksExtractor\DefinitionMasksExtractorTest - */ -final readonly class DefinitionMasksExtractor +#[RelatedTest(DefinitionPatternExtractorTest::class)] +final readonly class DefinitionPatternsExtractor { public function __construct( private SimplePhpParser $simplePhpParser, private NodeFinder $nodeFinder, - private ClassMethodMasksResolver $classMethodMasksResolver, + private ClassMethodPatternResolver $classMethodPatternResolver, ) { } /** * @param SplFileInfo[] $contextFiles */ - public function extract(array $contextFiles): MaskCollection + public function extract(array $contextFiles): PatternCollection { $masks = []; @@ -44,7 +44,7 @@ public function extract(array $contextFiles): MaskCollection // @todo edge case - handle next if (str_contains($rawMask, ' [:')) { - $masks[] = new SkippedMask( + $masks[] = new SkippedPattern( $rawMask, $classMethodContextDefinition->getFilePath(), $classMethodContextDefinition->getMethodLine(), @@ -55,8 +55,8 @@ public function extract(array $contextFiles): MaskCollection } // regex pattern, handled else-where - if (MaskAnalyzer::isRegex($rawMask)) { - $masks[] = new RegexMask( + if (PatternAnalyzer::isRegex($rawMask)) { + $masks[] = new RegexPattern( $rawMask, $classMethodContextDefinition->getFilePath(), $classMethodContextDefinition->getMethodLine(), @@ -67,9 +67,9 @@ public function extract(array $contextFiles): MaskCollection } // handled in mask one - if (MaskAnalyzer::isValueMask($rawMask)) { + if (PatternAnalyzer::isValuePattern($rawMask)) { // if (str_contains($rawMask, ':')) { - $masks[] = new NamedMask( + $masks[] = new NamedPattern( $rawMask, $classMethodContextDefinition->getFilePath(), $classMethodContextDefinition->getMethodLine(), @@ -82,7 +82,7 @@ public function extract(array $contextFiles): MaskCollection // remove \/ escape from mask $rawMask = str_replace('\/', '/', $rawMask); - $masks[] = new ExactMask( + $masks[] = new ExactPattern( $rawMask, $classMethodContextDefinition->getFilePath(), $classMethodContextDefinition->getMethodLine(), @@ -91,7 +91,7 @@ public function extract(array $contextFiles): MaskCollection ); } - return new MaskCollection($masks); + return new PatternCollection($masks); } /** @@ -123,7 +123,7 @@ private function resolveMasksFromFiles(array $fileInfos): array $className = $class->namespacedName->toString(); foreach ($class->getMethods() as $classMethod) { - $rawMasks = $this->classMethodMasksResolver->resolve($classMethod); + $rawMasks = $this->classMethodPatternResolver->resolve($classMethod); foreach ($rawMasks as $rawMask) { $classMethodContextDefinitions[] = new ContextDefinition( diff --git a/src/DependencyInjection/ContainerFactory.php b/src/DependencyInjection/ContainerFactory.php index ad64ef281..35f59507b 100644 --- a/src/DependencyInjection/ContainerFactory.php +++ b/src/DependencyInjection/ContainerFactory.php @@ -17,9 +17,12 @@ public static function create(): Container $container->autodiscover(__DIR__ . '/../Rule'); $container->autodiscover(__DIR__ . '/../Command'); - $container->service(RulesRegistry::class, function (Container $container) { - return new RulesRegistry($container->findByContract(RuleInterface::class)); - }); + $container->service( + RulesRegistry::class, + fn (Container $container): RulesRegistry => new RulesRegistry($container->findByContract( + RuleInterface::class + )) + ); return $container; } diff --git a/src/Enum/RuleIdentifier.php b/src/Enum/RuleIdentifier.php index 0d8348cac..eb81579eb 100644 --- a/src/Enum/RuleIdentifier.php +++ b/src/Enum/RuleIdentifier.php @@ -14,7 +14,7 @@ final class RuleIdentifier /** * @var string */ - public const DUPLICATED_MASKS = 'duplicated-masks'; + public const DUPLICATED_PATTERNS = 'duplicated-patterns'; /** * @var string diff --git a/src/Reporting/MaskCollectionStatsPrinter.php b/src/Reporting/MaskCollectionStatsPrinter.php deleted file mode 100644 index 49b3ecad2..000000000 --- a/src/Reporting/MaskCollectionStatsPrinter.php +++ /dev/null @@ -1,51 +0,0 @@ -outputPrinter->writeln(sprintf('Found %d masks:', $maskCollection->count())); - $this->outputPrinter->writeln(sprintf(' * %d exact', $maskCollection->countByType(ExactMask::class))); - $this->outputPrinter->writeln(sprintf(' * %d /regex/', $maskCollection->countByType(RegexMask::class))); - $this->outputPrinter->writeln(sprintf(' * %d :named', $maskCollection->countByType(NamedMask::class))); - - $this->printSkippedMasks($maskCollection); - } - - private function printSkippedMasks(MaskCollection $maskCollection): void - { - $skippedMasks = $maskCollection->byType(SkippedMask::class); - if ($skippedMasks === []) { - return; - } - - $skippedMasksValues = []; - foreach ($skippedMasks as $skippedMask) { - $skippedMasksValues[] = $skippedMask->mask; - } - - $skippedMasksString = implode('", "', $skippedMasksValues); - - $this->outputPrinter->writeln(sprintf( - ' * %d skipped ("%s")', - $maskCollection->countByType(SkippedMask::class), - $skippedMasksString - )); - } -} diff --git a/src/Reporting/PatternCollectionStatsPrinter.php b/src/Reporting/PatternCollectionStatsPrinter.php new file mode 100644 index 000000000..d782bdae7 --- /dev/null +++ b/src/Reporting/PatternCollectionStatsPrinter.php @@ -0,0 +1,51 @@ +outputPrinter->writeln(sprintf('Found %d patterns:', $patternCollection->count())); + $this->outputPrinter->writeln(sprintf(' * %d exact', $patternCollection->countByType(ExactPattern::class))); + $this->outputPrinter->writeln(sprintf(' * %d /regex/', $patternCollection->countByType(RegexPattern::class))); + $this->outputPrinter->writeln(sprintf(' * %d :named', $patternCollection->countByType(NamedPattern::class))); + + $this->printSkippedMasks($patternCollection); + } + + private function printSkippedMasks(PatternCollection $patternCollection): void + { + $skippedMasks = $patternCollection->byType(SkippedPattern::class); + if ($skippedMasks === []) { + return; + } + + $skippedMasksValues = []; + foreach ($skippedMasks as $skippedMask) { + $skippedMasksValues[] = $skippedMask->pattern; + } + + $skippedMasksString = implode('", "', $skippedMasksValues); + + $this->outputPrinter->writeln(sprintf( + ' * %d skipped ("%s")', + $patternCollection->countByType(SkippedPattern::class), + $skippedMasksString + )); + } +} diff --git a/src/Resolver/ClassMethodMasksResolver.php b/src/Resolver/ClassMethodPatternResolver.php similarity index 88% rename from src/Resolver/ClassMethodMasksResolver.php rename to src/Resolver/ClassMethodPatternResolver.php index 6f0dd6598..d1fa2c104 100644 --- a/src/Resolver/ClassMethodMasksResolver.php +++ b/src/Resolver/ClassMethodPatternResolver.php @@ -8,7 +8,7 @@ use PhpParser\Node\Scalar\String_; use PhpParser\Node\Stmt\ClassMethod; -final class ClassMethodMasksResolver +final class ClassMethodPatternResolver { /** * @var string @@ -20,14 +20,14 @@ final class ClassMethodMasksResolver */ public function resolve(ClassMethod $classMethod): array { - $rawMasks = []; + $rawPatterns = []; // 1. collect from docblock if ($classMethod->getDocComment() instanceof Doc) { preg_match_all(self::INSTRUCTION_DOCBLOCK_REGEX, $classMethod->getDocComment()->getText(), $match); foreach ($match['instruction'] as $instruction) { - $rawMasks[] = $this->clearMask($instruction); + $rawPatterns[] = $this->clearMask($instruction); } } @@ -46,11 +46,11 @@ public function resolve(ClassMethod $classMethod): array continue; } - $rawMasks[] = $firstArgValue->value; + $rawPatterns[] = $firstArgValue->value; } } - return $rawMasks; + return $rawPatterns; } private function clearMask(string $mask): string diff --git a/src/Rule/DuplicatedContextDefinitionContentsRule.php b/src/Rule/DuplicatedContextDefinitionContentsRule.php index 7415f9ba1..fd1b548d9 100644 --- a/src/Rule/DuplicatedContextDefinitionContentsRule.php +++ b/src/Rule/DuplicatedContextDefinitionContentsRule.php @@ -7,7 +7,7 @@ use Rector\Behastan\Analyzer\ContextDefinitionsAnalyzer; use Rector\Behastan\Contract\RuleInterface; use Rector\Behastan\Enum\RuleIdentifier; -use Rector\Behastan\ValueObject\MaskCollection; +use Rector\Behastan\ValueObject\PatternCollection; use Rector\Behastan\ValueObject\RuleError; use Symfony\Component\Finder\SplFileInfo; @@ -27,7 +27,7 @@ public function __construct( public function process( array $contextFiles, array $featureFiles, - MaskCollection $maskCollection, + PatternCollection $patternCollection, string $projectDirectory ): array { $contextDefinitionByContentHash = $this->contextDefinitionsAnalyzer->resolveAndGroupByContentHash( diff --git a/src/Rule/DuplicatedMaskRule.php b/src/Rule/DuplicatedMaskRule.php index 48bc750fd..0fac472ee 100644 --- a/src/Rule/DuplicatedMaskRule.php +++ b/src/Rule/DuplicatedMaskRule.php @@ -8,7 +8,7 @@ use Rector\Behastan\Contract\RuleInterface; use Rector\Behastan\Enum\RuleIdentifier; use Rector\Behastan\ValueObject\ContextDefinition; -use Rector\Behastan\ValueObject\MaskCollection; +use Rector\Behastan\ValueObject\PatternCollection; use Rector\Behastan\ValueObject\RuleError; use Symfony\Component\Finder\SplFileInfo; @@ -27,7 +27,7 @@ public function __construct( public function process( array $contextFiles, array $featureFiles, - MaskCollection $maskCollection, + PatternCollection $patternCollection, string $projectDirectory ): array { // 1. find duplicated masks, e.g. if 2 methods have the same mask, its a race condition problem @@ -66,6 +66,6 @@ public function process( public function getIdentifier(): string { - return RuleIdentifier::DUPLICATED_MASKS; + return RuleIdentifier::DUPLICATED_PATTERNS; } } diff --git a/src/Rule/UnusedContextDefinitionsRule.php b/src/Rule/UnusedContextDefinitionsRule.php index 8915a3b23..1fec97c3b 100644 --- a/src/Rule/UnusedContextDefinitionsRule.php +++ b/src/Rule/UnusedContextDefinitionsRule.php @@ -7,7 +7,7 @@ use Rector\Behastan\Analyzer\UnusedDefinitionsAnalyzer; use Rector\Behastan\Contract\RuleInterface; use Rector\Behastan\Enum\RuleIdentifier; -use Rector\Behastan\ValueObject\MaskCollection; +use Rector\Behastan\ValueObject\PatternCollection; use Rector\Behastan\ValueObject\RuleError; use Symfony\Component\Finder\SplFileInfo; @@ -26,17 +26,17 @@ public function __construct( public function process( array $contextFiles, array $featureFiles, - MaskCollection $maskCollection, + PatternCollection $patternCollection, string $projectDirectory ): array { - $unusedMasks = $this->unusedDefinitionsAnalyzer->analyse($contextFiles, $featureFiles, $maskCollection); + $unusedMasks = $this->unusedDefinitionsAnalyzer->analyse($contextFiles, $featureFiles, $patternCollection); $ruleErrors = []; foreach ($unusedMasks as $unusedMask) { $errorMessage = sprintf( 'The mask "%s" and its definition %s::%s() is never used', - $unusedMask->mask, + $unusedMask->pattern, $unusedMask->className, $unusedMask->methodName ); diff --git a/src/ValueObject/Mask/ExactMask.php b/src/ValueObject/Mask/ExactMask.php deleted file mode 100644 index 6e2e0c6de..000000000 --- a/src/ValueObject/Mask/ExactMask.php +++ /dev/null @@ -1,9 +0,0 @@ - $type + * @param class-string $type */ public function countByType(string $type): int { @@ -31,7 +31,7 @@ public function count(): int } /** - * @return AbstractMask[] + * @return AbstractPattern[] */ public function all(): array { @@ -39,13 +39,13 @@ public function all(): array } /** - * @template TMask as AbstractMask + * @template TMask as AbstractPattern * * @param class-string $type * @return TMask[] */ public function byType(string $type): array { - return array_filter($this->masks, fn (AbstractMask $mask): bool => $mask instanceof $type); + return array_filter($this->masks, fn (AbstractPattern $pattern): bool => $pattern instanceof $type); } } diff --git a/tests/Analyzer/UnusedDefinitionsAnalyzer/Fixture/UnusedMasks/BehatContext.php b/tests/Analyzer/UnusedDefinitionsAnalyzer/Fixture/UnusedPattern/BehatContext.php similarity index 100% rename from tests/Analyzer/UnusedDefinitionsAnalyzer/Fixture/UnusedMasks/BehatContext.php rename to tests/Analyzer/UnusedDefinitionsAnalyzer/Fixture/UnusedPattern/BehatContext.php diff --git a/tests/Analyzer/UnusedDefinitionsAnalyzer/Fixture/UnusedMasks/some.feature b/tests/Analyzer/UnusedDefinitionsAnalyzer/Fixture/UnusedPattern/some.feature similarity index 100% rename from tests/Analyzer/UnusedDefinitionsAnalyzer/Fixture/UnusedMasks/some.feature rename to tests/Analyzer/UnusedDefinitionsAnalyzer/Fixture/UnusedPattern/some.feature diff --git a/tests/Analyzer/UnusedDefinitionsAnalyzer/UnusedDefinitionsAnalyzerTest.php b/tests/Analyzer/UnusedDefinitionsAnalyzer/UnusedDefinitionsAnalyzerTest.php index 6c2098564..e13abdc8c 100644 --- a/tests/Analyzer/UnusedDefinitionsAnalyzer/UnusedDefinitionsAnalyzerTest.php +++ b/tests/Analyzer/UnusedDefinitionsAnalyzer/UnusedDefinitionsAnalyzerTest.php @@ -5,23 +5,23 @@ namespace Rector\Behastan\Tests\Analyzer\UnusedDefinitionsAnalyzer; use Rector\Behastan\Analyzer\UnusedDefinitionsAnalyzer; -use Rector\Behastan\DefinitionMasksExtractor; +use Rector\Behastan\DefinitionPatternsExtractor; use Rector\Behastan\Finder\BehatMetafilesFinder; use Rector\Behastan\Tests\AbstractTestCase; -use Rector\Behastan\ValueObject\Mask\AbstractMask; +use Rector\Behastan\ValueObject\Pattern\AbstractPattern; final class UnusedDefinitionsAnalyzerTest extends AbstractTestCase { private UnusedDefinitionsAnalyzer $unusedDefinitionsAnalyzer; - private DefinitionMasksExtractor $definitionMasksExtractor; + private DefinitionPatternsExtractor $definitionPatternsExtractor; protected function setUp(): void { parent::setUp(); $this->unusedDefinitionsAnalyzer = $this->make(UnusedDefinitionsAnalyzer::class); - $this->definitionMasksExtractor = $this->make(DefinitionMasksExtractor::class); + $this->definitionPatternsExtractor = $this->make(DefinitionPatternsExtractor::class); } public function testEverythingUsed(): void @@ -32,31 +32,35 @@ public function testEverythingUsed(): void $this->assertCount(1, $featureFiles); $this->assertCount(1, $contextFiles); - $maskCollection = $this->definitionMasksExtractor->extract($contextFiles); + $patternCollection = $this->definitionPatternsExtractor->extract($contextFiles); - $unusedDefinitions = $this->unusedDefinitionsAnalyzer->analyse($contextFiles, $featureFiles, $maskCollection); + $unusedDefinitions = $this->unusedDefinitionsAnalyzer->analyse( + $contextFiles, + $featureFiles, + $patternCollection + ); $this->assertCount(0, $unusedDefinitions); } - public function testFoundMask(): void + public function testFoundPattern(): void { - $featureFiles = BehatMetafilesFinder::findFeatureFiles([__DIR__ . '/Fixture/UnusedMasks']); - $contextFiles = BehatMetafilesFinder::findContextFiles([__DIR__ . '/Fixture/UnusedMasks']); + $featureFiles = BehatMetafilesFinder::findFeatureFiles([__DIR__ . '/Fixture/UnusedPattern']); + $contextFiles = BehatMetafilesFinder::findContextFiles([__DIR__ . '/Fixture/UnusedPattern']); $this->assertCount(1, $featureFiles); $this->assertCount(1, $contextFiles); - $maskCollection = $this->definitionMasksExtractor->extract($contextFiles); + $patternCollection = $this->definitionPatternsExtractor->extract($contextFiles); - $unusedMasks = $this->unusedDefinitionsAnalyzer->analyse($contextFiles, $featureFiles, $maskCollection); + $unusedMasks = $this->unusedDefinitionsAnalyzer->analyse($contextFiles, $featureFiles, $patternCollection); $this->assertCount(1, $unusedMasks); - $this->assertContainsOnlyInstancesOf(AbstractMask::class, $unusedMasks); + $this->assertContainsOnlyInstancesOf(AbstractPattern::class, $unusedMasks); - /** @var AbstractMask $unusedMask */ + /** @var AbstractPattern $unusedMask */ $unusedMask = $unusedMasks[0]; - $this->assertSame(__DIR__ . '/Fixture/UnusedMasks/BehatContext.php', $unusedMask->filePath); - $this->assertSame('never used', $unusedMask->mask); + $this->assertSame(__DIR__ . '/Fixture/UnusedPattern/BehatContext.php', $unusedMask->filePath); + $this->assertSame('never used', $unusedMask->pattern); } } diff --git a/tests/DefinitionMasksExtractor/DefinitionMasksExtractorTest.php b/tests/DefinitionMasksExtractor/DefinitionMasksExtractorTest.php deleted file mode 100644 index b9c8140d0..000000000 --- a/tests/DefinitionMasksExtractor/DefinitionMasksExtractorTest.php +++ /dev/null @@ -1,48 +0,0 @@ -definitionMasksExtractor = $this->make(DefinitionMasksExtractor::class); - $this->behatMetafilesFinder = $this->make(BehatMetafilesFinder::class); - } - - public function test(): void - { - $contextFileInfos = $this->behatMetafilesFinder->findContextFiles([__DIR__ . '/Fixture']); - $maskCollection = $this->definitionMasksExtractor->extract($contextFileInfos); - - $this->assertCount(3, $maskCollection->all()); - - $exactMasks = $maskCollection->byType(ExactMask::class); - $this->assertCount(3, $exactMasks); - $this->assertContainsOnlyInstancesOf(ExactMask::class, $exactMasks); - - $firstExactMask = $exactMasks[0]; - - $this->assertSame('I click homepage', $firstExactMask->mask); - $this->assertSame(AnotherBehatContext::class, $firstExactMask->className); - $this->assertSame(__DIR__ . '/Fixture/AnotherBehatContext.php', $firstExactMask->filePath); - - $slashMask = $exactMasks[2]; - - $this->assertSame('Do this and / that', $slashMask->mask); - } -} diff --git a/tests/DefinitionPatternExtractor/DefinitionPatternExtractorTest.php b/tests/DefinitionPatternExtractor/DefinitionPatternExtractorTest.php new file mode 100644 index 000000000..9329192b0 --- /dev/null +++ b/tests/DefinitionPatternExtractor/DefinitionPatternExtractorTest.php @@ -0,0 +1,48 @@ +definitionPatternsExtractor = $this->make(DefinitionPatternsExtractor::class); + $this->behatMetafilesFinder = $this->make(BehatMetafilesFinder::class); + } + + public function test(): void + { + $contextFileInfos = $this->behatMetafilesFinder->findContextFiles([__DIR__ . '/Fixture']); + $patternCollection = $this->definitionPatternsExtractor->extract($contextFileInfos); + + $this->assertCount(3, $patternCollection->all()); + + $exactMasks = $patternCollection->byType(ExactPattern::class); + $this->assertCount(3, $exactMasks); + $this->assertContainsOnlyInstancesOf(ExactPattern::class, $exactMasks); + + $firstExactMask = $exactMasks[0]; + + $this->assertSame('I click homepage', $firstExactMask->pattern); + $this->assertSame(AnotherBehatContext::class, $firstExactMask->className); + $this->assertSame(__DIR__ . '/Fixture/AnotherBehatContext.php', $firstExactMask->filePath); + + $slashMask = $exactMasks[2]; + + $this->assertSame('Do this and / that', $slashMask->pattern); + } +} diff --git a/tests/DefinitionMasksExtractor/Fixture/AnotherBehatContext.php b/tests/DefinitionPatternExtractor/Fixture/AnotherBehatContext.php similarity index 83% rename from tests/DefinitionMasksExtractor/Fixture/AnotherBehatContext.php rename to tests/DefinitionPatternExtractor/Fixture/AnotherBehatContext.php index ec8b2fa0c..36dd8104d 100644 --- a/tests/DefinitionMasksExtractor/Fixture/AnotherBehatContext.php +++ b/tests/DefinitionPatternExtractor/Fixture/AnotherBehatContext.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Rector\Behastan\Tests\DefinitionMasksExtractor\Fixture; +namespace Rector\Behastan\Tests\DefinitionPatternExtractor\Fixture; use Behat\Step\Then;