diff --git a/packages/fractor/src/Application/ProcessorSkipper.php b/packages/fractor/src/Application/ProcessorSkipper.php index 551364d5..fe4ced26 100644 --- a/packages/fractor/src/Application/ProcessorSkipper.php +++ b/packages/fractor/src/Application/ProcessorSkipper.php @@ -4,8 +4,6 @@ namespace a9f\Fractor\Application; -use a9f\Fractor\Application\Contract\FileProcessor; -use a9f\Fractor\Application\Contract\FractorRule; use a9f\Fractor\Configuration\ValueObject\SkipConfiguration; final readonly class ProcessorSkipper @@ -15,9 +13,6 @@ public function __construct( ) { } - /** - * @param class-string> $processor - */ public function shouldSkip(string $processor): bool { $configuredSkip = $this->configuration->getSkip(); diff --git a/packages/fractor/tests/Application/ProcessorSkipper/ProcessorSkipperTest.php b/packages/fractor/tests/Application/ProcessorSkipper/ProcessorSkipperTest.php new file mode 100644 index 00000000..643680ee --- /dev/null +++ b/packages/fractor/tests/Application/ProcessorSkipper/ProcessorSkipperTest.php @@ -0,0 +1,109 @@ +shouldSkip($processorClass)); + } + } + + /** + * @return \Generator + */ + public static function skippableProcessorProvider(): \Generator + { + foreach (self::allProcessorClasses() as $processorClass) { + $shortName = (new \ReflectionClass($processorClass))->getShortName(); + yield $shortName => [$processorClass]; + } + } + + #[Test] + #[DataProvider('skippableProcessorProvider')] + public function singleProcessorInSkipListIsSkipped(string $processorClass): void + { + $configuration = new SkipConfiguration([$processorClass]); + $subject = new ProcessorSkipper($configuration); + + self::assertTrue($subject->shouldSkip($processorClass)); + } + + #[Test] + #[DataProvider('skippableProcessorProvider')] + public function otherProcessorsAreNotAffectedWhenOneIsSkipped(string $skippedProcessor): void + { + $configuration = new SkipConfiguration([$skippedProcessor]); + $subject = new ProcessorSkipper($configuration); + + foreach (self::allProcessorClasses() as $processor) { + if ($processor === $skippedProcessor) { + self::assertTrue($subject->shouldSkip($processor), $processor . ' should be skipped'); + } else { + self::assertFalse($subject->shouldSkip($processor), $processor . ' should not be skipped'); + } + } + } + + #[Test] + public function multipleProcessorsCanBeSkippedSimultaneously(): void + { + $configuration = new SkipConfiguration([ + FluidFileProcessor::class, + XmlFileProcessor::class, + YamlFileProcessor::class, + ]); + $subject = new ProcessorSkipper($configuration); + + self::assertTrue($subject->shouldSkip(FluidFileProcessor::class)); + self::assertFalse($subject->shouldSkip(HtaccessFileProcessor::class)); + self::assertFalse($subject->shouldSkip(TypoScriptFileProcessor::class)); + self::assertTrue($subject->shouldSkip(XmlFileProcessor::class)); + self::assertTrue($subject->shouldSkip(YamlFileProcessor::class)); + } + + #[Test] + public function allProcessorsCanBeSkipped(): void + { + $configuration = new SkipConfiguration(self::allProcessorClasses()); + $subject = new ProcessorSkipper($configuration); + + foreach (self::allProcessorClasses() as $processorClass) { + self::assertTrue($subject->shouldSkip($processorClass)); + } + } + + /** + * @return list + */ + private static function allProcessorClasses(): array + { + return [ + FluidFileProcessor::class, + HtaccessFileProcessor::class, + TypoScriptFileProcessor::class, + XmlFileProcessor::class, + YamlFileProcessor::class, + ]; + } +}