diff --git a/packages-tests/Skipper/Skipper/Skip/SkipSkipperTest.php b/packages-tests/Skipper/Skipper/Skip/SkipSkipperTest.php index fcb85843e1c..569fd8977f4 100644 --- a/packages-tests/Skipper/Skipper/Skip/SkipSkipperTest.php +++ b/packages-tests/Skipper/Skipper/Skip/SkipSkipperTest.php @@ -6,36 +6,49 @@ use Iterator; use PHPUnit\Framework\Attributes\DataProvider; -use PHPUnit\Framework\TestCase; -use Rector\Core\Kernel\RectorKernel; +use Rector\Core\Configuration\Option; +use Rector\Core\Configuration\Parameter\SimpleParameterProvider; use Rector\Skipper\Skipper\Skipper; +use Rector\Testing\PHPUnit\AbstractLazyTestCase; use Rector\Tests\Skipper\Skipper\Skip\Source\AnotherClassToSkip; use Rector\Tests\Skipper\Skipper\Skip\Source\NotSkippedClass; use Rector\Tests\Skipper\Skipper\Skip\Source\SomeClassToSkip; -final class SkipSkipperTest extends TestCase +final class SkipSkipperTest extends AbstractLazyTestCase { private Skipper $skipper; protected function setUp(): void { - $rectorKernel = new RectorKernel(); - $containerBuilder = $rectorKernel->createFromConfigs([__DIR__ . '/config/config.php']); + SimpleParameterProvider::setParameter(Option::SKIP, [ + // classes + SomeClassToSkip::class, - $this->skipper = $containerBuilder->get(Skipper::class); + // classes only in specific paths + AnotherClassToSkip::class => ['Fixture/someFile', '*/someDirectory/*'], + + // file paths + __DIR__ . '/Fixture/AlwaysSkippedPath', + '*\PathSkippedWithMask\*', + ]); + + $this->skipper = $this->make(Skipper::class); + } + + protected function tearDown(): void + { + // null the parameter + SimpleParameterProvider::setParameter(Option::SKIP, []); } #[DataProvider('provideCheckerAndFile')] - #[DataProvider('provideAnythingAndFilePath')] + #[DataProvider('provideFilePath')] public function test(string $element, string $filePath, bool $expectedSkip): void { $resolvedSkip = $this->skipper->shouldSkipElementAndFilePath($element, $filePath); $this->assertSame($expectedSkip, $resolvedSkip); } - /** - * @return Iterator[]|class-string[]|class-string[]> - */ public static function provideCheckerAndFile(): Iterator { yield [SomeClassToSkip::class, __DIR__ . '/Fixture', true]; @@ -48,10 +61,7 @@ public static function provideCheckerAndFile(): Iterator yield [NotSkippedClass::class, __DIR__ . '/Fixture/someOtherFile', false]; } - /** - * @return Iterator - */ - public static function provideAnythingAndFilePath(): Iterator + public static function provideFilePath(): Iterator { yield ['anything', __DIR__ . '/Fixture/AlwaysSkippedPath/some_file.txt', true]; yield ['anything', __DIR__ . '/Fixture/PathSkippedWithMask/another_file.txt', true]; diff --git a/packages-tests/Skipper/Skipper/Skip/config/config.php b/packages-tests/Skipper/Skipper/Skip/config/config.php deleted file mode 100644 index 92cee4dbb6e..00000000000 --- a/packages-tests/Skipper/Skipper/Skip/config/config.php +++ /dev/null @@ -1,21 +0,0 @@ -skip([ - // classes - SomeClassToSkip::class, - - // classes only in specific paths - AnotherClassToSkip::class => ['Fixture/someFile', '*/someDirectory/*'], - - // file paths - __DIR__ . '/../Fixture/AlwaysSkippedPath', - '*\PathSkippedWithMask\*', - ]); -}; diff --git a/packages-tests/Skipper/Skipper/Skipper/SkipperTest.php b/packages-tests/Skipper/Skipper/Skipper/SkipperTest.php index 7fc612c3124..63e215a529e 100644 --- a/packages-tests/Skipper/Skipper/Skipper/SkipperTest.php +++ b/packages-tests/Skipper/Skipper/Skipper/SkipperTest.php @@ -6,23 +6,39 @@ use Iterator; use PHPUnit\Framework\Attributes\DataProvider; -use PHPUnit\Framework\TestCase; -use Rector\Core\Kernel\RectorKernel; +use Rector\Core\Configuration\Option; +use Rector\Core\Configuration\Parameter\SimpleParameterProvider; use Rector\Skipper\Skipper\Skipper; +use Rector\Testing\PHPUnit\AbstractLazyTestCase; use Rector\Tests\Skipper\Skipper\Skipper\Fixture\Element\FifthElement; use Rector\Tests\Skipper\Skipper\Skipper\Fixture\Element\SixthSense; use Rector\Tests\Skipper\Skipper\Skipper\Fixture\Element\ThreeMan; -final class SkipperTest extends TestCase +final class SkipperTest extends AbstractLazyTestCase { private Skipper $skipper; protected function setUp(): void { - $rectorKernel = new RectorKernel(); - $containerBuilder = $rectorKernel->createFromConfigs([__DIR__ . '/config/config.php']); + SimpleParameterProvider::setParameter(Option::SKIP, [ + // windows like path + '*\SomeSkipped\*', - $this->skipper = $containerBuilder->get(Skipper::class); + __DIR__ . '/Fixture/SomeSkippedPath', + __DIR__ . '/Fixture/SomeSkippedPathToFile/any.txt', + + // elements + FifthElement::class, + SixthSense::class, + ]); + + $this->skipper = $this->make(Skipper::class); + } + + protected function tearDown(): void + { + // cleanup configuration + SimpleParameterProvider::setParameter(Option::SKIP, []); } #[DataProvider('provideDataShouldSkipFileInfo')] diff --git a/packages-tests/Skipper/Skipper/Skipper/config/config.php b/packages-tests/Skipper/Skipper/Skipper/config/config.php deleted file mode 100644 index e79c559bafd..00000000000 --- a/packages-tests/Skipper/Skipper/Skipper/config/config.php +++ /dev/null @@ -1,21 +0,0 @@ -skip([ - // windows like path - '*\SomeSkipped\*', - - __DIR__ . '/../Fixture/SomeSkippedPath', - __DIR__ . '/../Fixture/SomeSkippedPathToFile/any.txt', - - // elements - FifthElement::class, - SixthSense::class, - ]); -}; diff --git a/packages/Skipper/SkipCriteriaResolver/SkippedClassResolver.php b/packages/Skipper/SkipCriteriaResolver/SkippedClassResolver.php index da75983ea6a..664da9ff417 100644 --- a/packages/Skipper/SkipCriteriaResolver/SkippedClassResolver.php +++ b/packages/Skipper/SkipCriteriaResolver/SkippedClassResolver.php @@ -25,7 +25,8 @@ public function __construct( */ public function resolve(): array { - if ($this->skippedClasses !== []) { + // skip cache in tests + if ($this->skippedClasses !== [] && ! defined('PHPUNIT_COMPOSER_INSTALL')) { return $this->skippedClasses; } diff --git a/packages/Skipper/SkipCriteriaResolver/SkippedPathsResolver.php b/packages/Skipper/SkipCriteriaResolver/SkippedPathsResolver.php index 218c575d3a7..d5b9cd79bf1 100644 --- a/packages/Skipper/SkipCriteriaResolver/SkippedPathsResolver.php +++ b/packages/Skipper/SkipCriteriaResolver/SkippedPathsResolver.php @@ -28,7 +28,8 @@ public function __construct( */ public function resolve(): array { - if ($this->skippedPaths !== []) { + // disable cache in tests + if ($this->skippedPaths !== [] && ! defined('PHPUNIT_COMPOSER_INSTALL')) { return $this->skippedPaths; } diff --git a/phpstan.neon b/phpstan.neon index a6bf89f3a8a..15d1d661fe6 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -707,3 +707,5 @@ parameters: # false positive - '#Parameter \#1 \$commands of method Symfony\\Component\\Console\\Application\:\:addCommands\(\) expects array, iterable given#' + + - '#Property Rector\\Core\\Console\\Command\\ListRulesCommand\:\:\$rectors \(array\) does not accept array\|iterable#' diff --git a/src/Console/Command/ListRulesCommand.php b/src/Console/Command/ListRulesCommand.php index 02a75067f28..60857f55dfd 100644 --- a/src/Console/Command/ListRulesCommand.php +++ b/src/Console/Command/ListRulesCommand.php @@ -35,10 +35,10 @@ public function __construct( ) { parent::__construct(); if ($rectors instanceof RewindableGenerator) { - $rectors = $rectors->getIterator(); + $rectors = iterator_to_array($rectors->getIterator()); } - $this->rectors = iterator_to_array($rectors); + $this->rectors = $rectors; } protected function configure(): void