From a5ce43206f83ba8737619ad170b60a4b53bfc61c Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Thu, 9 Mar 2023 15:24:59 +0100 Subject: [PATCH 1/2] stop calling static methods in tests as non-static --- tests/LazyRobotLoaderClassFinderTest.php | 2 +- tests/RobotLoaderClassFinderTest.php | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/tests/LazyRobotLoaderClassFinderTest.php b/tests/LazyRobotLoaderClassFinderTest.php index 04fc91b..ad822a5 100644 --- a/tests/LazyRobotLoaderClassFinderTest.php +++ b/tests/LazyRobotLoaderClassFinderTest.php @@ -16,7 +16,7 @@ public function testRebuildRobotLoaderOnlyOnFirstRun(): void ->setMethods(['rebuild']) ->getMock(); $robotLoader - ->expects($this->once()) + ->expects(self::once()) ->method('rebuild'); $lazyClassFinder = new LazyRobotLoaderClassFinder($robotLoader); diff --git a/tests/RobotLoaderClassFinderTest.php b/tests/RobotLoaderClassFinderTest.php index e8e57f9..6b1d246 100644 --- a/tests/RobotLoaderClassFinderTest.php +++ b/tests/RobotLoaderClassFinderTest.php @@ -5,6 +5,7 @@ namespace Consistence\ClassFinder\RobotLoader; use Nette\Loaders\RobotLoader; +use PHPUnit\Framework\Assert; class RobotLoaderClassFinderTest extends \PHPUnit\Framework\TestCase { @@ -13,8 +14,8 @@ public function testFindClass(): void { $classList = array_values($this->getRobotLoaderClassFinder()->findByInterface(ExtendingClass::class)); - $this->assertContains(ExtendingClass::class, $classList); - $this->assertCount(1, $classList); + Assert::assertContains(ExtendingClass::class, $classList); + Assert::assertCount(1, $classList); } public function testFindClassAndChildren(): void @@ -27,15 +28,15 @@ public function testFindClassAndChildren(): void ExtendingClass::class, ]; - $this->assertEquals($expected, $classList); + Assert::assertEquals($expected, $classList); } public function testFindInterface(): void { $classList = array_values($this->getRobotLoaderClassFinder()->findByInterface(NotImplementedInterface::class)); - $this->assertContains(NotImplementedInterface::class, $classList); - $this->assertCount(1, $classList); + Assert::assertContains(NotImplementedInterface::class, $classList); + Assert::assertCount(1, $classList); } public function testFindInterfaceAndImplementations(): void @@ -50,7 +51,7 @@ public function testFindInterfaceAndImplementations(): void ExtendingInterface::class, ]; - $this->assertEquals($expected, $classList); + Assert::assertEquals($expected, $classList); } private function getRobotLoaderClassFinder(): RobotLoaderClassFinder From 68f83ca35e8dcb1935aa86cb11f004c1077f31f7 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Thu, 9 Mar 2023 16:38:13 +0100 Subject: [PATCH 2/2] deduplicate test methods using data provider --- tests/RobotLoaderClassFinderTest.php | 83 ++++++++++++++++------------ 1 file changed, 47 insertions(+), 36 deletions(-) diff --git a/tests/RobotLoaderClassFinderTest.php b/tests/RobotLoaderClassFinderTest.php index 6b1d246..2295a66 100644 --- a/tests/RobotLoaderClassFinderTest.php +++ b/tests/RobotLoaderClassFinderTest.php @@ -4,54 +4,65 @@ namespace Consistence\ClassFinder\RobotLoader; +use Generator; use Nette\Loaders\RobotLoader; use PHPUnit\Framework\Assert; class RobotLoaderClassFinderTest extends \PHPUnit\Framework\TestCase { - public function testFindClass(): void + /** + * @return mixed[][]|\Generator + */ + public function findByInterfaceDataProvider(): Generator { - $classList = array_values($this->getRobotLoaderClassFinder()->findByInterface(ExtendingClass::class)); - - Assert::assertContains(ExtendingClass::class, $classList); - Assert::assertCount(1, $classList); - } - - public function testFindClassAndChildren(): void - { - $classList = array_values($this->getRobotLoaderClassFinder()->findByInterface(BaseClass::class)); - sort($classList); - - $expected = [ - BaseClass::class, - ExtendingClass::class, + yield 'class' => [ + 'interfaceName' => ExtendingClass::class, + 'expectedClassList' => [ + ExtendingClass::class, + ], + ]; + yield 'class and children' => [ + 'interfaceName' => BaseClass::class, + 'expectedClassList' => [ + BaseClass::class, + ExtendingClass::class, + ], + ]; + yield 'not implemented interface' => [ + 'interfaceName' => NotImplementedInterface::class, + 'expectedClassList' => [ + NotImplementedInterface::class, + ], + ]; + yield 'interface and implementations' => [ + 'interfaceName' => BaseInterface::class, + 'expectedClassList' => [ + BaseClass::class, + BaseInterface::class, + ExtendingClass::class, + ExtendingInterface::class, + ], ]; - - Assert::assertEquals($expected, $classList); - } - - public function testFindInterface(): void - { - $classList = array_values($this->getRobotLoaderClassFinder()->findByInterface(NotImplementedInterface::class)); - - Assert::assertContains(NotImplementedInterface::class, $classList); - Assert::assertCount(1, $classList); } - public function testFindInterfaceAndImplementations(): void + /** + * @dataProvider findByInterfaceDataProvider + * + * @param string $interfaceName + * @param string[] $expectedClassList + */ + public function testFindByInterface( + string $interfaceName, + array $expectedClassList + ): void { - $classList = array_values($this->getRobotLoaderClassFinder()->findByInterface(BaseInterface::class)); - sort($classList); - - $expected = [ - BaseClass::class, - BaseInterface::class, - ExtendingClass::class, - ExtendingInterface::class, - ]; + $classList = array_values($this->getRobotLoaderClassFinder()->findByInterface($interfaceName)); - Assert::assertEquals($expected, $classList); + foreach ($expectedClassList as $expectedClass) { + Assert::assertContains($expectedClass, $classList); + } + Assert::assertCount(count($expectedClassList), $classList); } private function getRobotLoaderClassFinder(): RobotLoaderClassFinder