diff --git a/phpstan.neon b/phpstan.neon index 594689ff4..dcc255a26 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -2,6 +2,7 @@ parameters: level: 8 paths: + - bin - src - tests diff --git a/src/Analyzer/UnusedDefinitionsAnalyzer.php b/src/Analyzer/UnusedDefinitionsAnalyzer.php index dfceea212..621f8117a 100644 --- a/src/Analyzer/UnusedDefinitionsAnalyzer.php +++ b/src/Analyzer/UnusedDefinitionsAnalyzer.php @@ -15,6 +15,7 @@ use Rector\Behastan\ValueObject\Mask\SkippedMask; use Symfony\Component\Console\Style\SymfonyStyle; use Symfony\Component\Finder\SplFileInfo; +use Webmozart\Assert\Assert; /** * @see \Rector\Behastan\Tests\Analyzer\UnusedDefinitionsAnalyzer\UnusedDefinitionsAnalyzerTest @@ -42,7 +43,18 @@ public function __construct( */ public function analyse(array $contextFiles, array $featureFiles): array { + Assert::allIsInstanceOf($contextFiles, SplFileInfo::class); + foreach ($contextFiles as $contextFile) { + Assert::endsWith($contextFile->getFilename(), '.php'); + } + + Assert::allIsInstanceOf($featureFiles, SplFileInfo::class); + foreach ($featureFiles as $featureFile) { + Assert::endsWith($featureFile->getFilename(), '.feature'); + } + $maskCollection = $this->definitionMasksResolver->resolve($contextFiles); + $this->maskCollectionStatsPrinter->printStats($maskCollection); $featureInstructions = $this->usedInstructionResolver->resolveInstructionsFromFeatureFiles($featureFiles); diff --git a/tests/Analyzer/UnusedDefinitionsAnalyzer/Fixture/Contexts/SomeContext.php b/tests/Analyzer/UnusedDefinitionsAnalyzer/Fixture/EverythingUsed/SomeContext.php similarity index 69% rename from tests/Analyzer/UnusedDefinitionsAnalyzer/Fixture/Contexts/SomeContext.php rename to tests/Analyzer/UnusedDefinitionsAnalyzer/Fixture/EverythingUsed/SomeContext.php index 1051bc83a..b55c41c0c 100644 --- a/tests/Analyzer/UnusedDefinitionsAnalyzer/Fixture/Contexts/SomeContext.php +++ b/tests/Analyzer/UnusedDefinitionsAnalyzer/Fixture/EverythingUsed/SomeContext.php @@ -1,6 +1,6 @@ unusedDefinitionsAnalyzer = $this->make(UnusedDefinitionsAnalyzer::class); } - public function test(): void + public function testEverythingUsed(): void { - $featureFiles = BehatMetafilesFinder::findFeatureFiles([__DIR__ . '/Fixture/Features']); - $this->assertCount(1, $featureFiles); + $featureFiles = BehatMetafilesFinder::findFeatureFiles([__DIR__ . '/Fixture/EverythingUsed']); + $contextFiles = BehatMetafilesFinder::findContextFiles([__DIR__ . '/Fixture/EverythingUsed']); - $contextFiles = BehatMetafilesFinder::findContextFiles([__DIR__ . '/Fixture/Contexts']); + $this->assertCount(1, $featureFiles); $this->assertCount(1, $contextFiles); $unusedDefinitions = $this->unusedDefinitionsAnalyzer->analyse($contextFiles, $featureFiles); $this->assertCount(0, $unusedDefinitions); } + + public function testFoundMask(): void + { + $featureFiles = BehatMetafilesFinder::findFeatureFiles([__DIR__ . '/Fixture/UnusedMasks']); + $contextFiles = BehatMetafilesFinder::findContextFiles([__DIR__ . '/Fixture/UnusedMasks']); + + $this->assertCount(1, $featureFiles); + $this->assertCount(1, $contextFiles); + + $unusedMasks = $this->unusedDefinitionsAnalyzer->analyse($contextFiles, $featureFiles); + $this->assertCount(1, $unusedMasks); + $this->assertContainsOnlyInstancesOf(AbstractMask::class, $unusedMasks); + + /** @var AbstractMask $unusedMask */ + $unusedMask = $unusedMasks[0]; + $this->assertSame(__DIR__ . '/Fixture/UnusedMasks/BehatContext.php', $unusedMask->filePath); + $this->assertSame('never used', $unusedMask->mask); + } } diff --git a/tests/BehastanTest.php b/tests/BehastanTest.php deleted file mode 100644 index 5d00f71d7..000000000 --- a/tests/BehastanTest.php +++ /dev/null @@ -1,48 +0,0 @@ -unusedDefinitionsAnalyzer = $this->make(UnusedDefinitionsAnalyzer::class); - $this->behatMetafilesFinder = $this->make(BehatMetafilesFinder::class); - - // silence output in tests - $symfonyStyle = $this->make(SymfonyStyle::class); - $symfonyStyle->setVerbosity(Output::VERBOSITY_QUIET); - } - - public function test(): void - { - $featureFiles = $this->behatMetafilesFinder->findFeatureFiles([__DIR__ . '/Fixture']); - $contextFiles = $this->behatMetafilesFinder->findContextFiles([__DIR__ . '/Fixture']); - - $this->assertCount(1, $featureFiles); - $this->assertCount(1, $contextFiles); - - $unusedMasks = $this->unusedDefinitionsAnalyzer->analyse($contextFiles, $featureFiles); - $this->assertCount(1, $unusedMasks); - $this->assertContainsOnlyInstancesOf(AbstractMask::class, $unusedMasks); - - /** @var AbstractMask $unusedMask */ - $unusedMask = $unusedMasks[0]; - $this->assertSame(__DIR__ . '/Fixture/BehatContext.php', $unusedMask->filePath); - $this->assertSame('never used', $unusedMask->mask); - } -}