From e40fd0ec93d994b3c8311b427a24189641cb8212 Mon Sep 17 00:00:00 2001 From: Oliver Vogel Date: Sun, 3 Aug 2025 07:33:58 +0200 Subject: [PATCH] Externalize data provider --- tests/Providers/ResizeDataProvider.php | 149 ++++++++++++++++++ tests/Unit/Geometry/RectangleResizerTest.php | 156 ++----------------- 2 files changed, 158 insertions(+), 147 deletions(-) create mode 100644 tests/Providers/ResizeDataProvider.php diff --git a/tests/Providers/ResizeDataProvider.php b/tests/Providers/ResizeDataProvider.php new file mode 100644 index 00000000..8b14a356 --- /dev/null +++ b/tests/Providers/ResizeDataProvider.php @@ -0,0 +1,149 @@ + 150], new Rectangle(150, 200)]; + yield [new Rectangle(300, 200), ['height' => 150], new Rectangle(300, 150)]; + yield [new Rectangle(300, 200), ['width' => 20, 'height' => 10], new Rectangle(20, 10)]; + yield [new Rectangle(300, 200), [], new Rectangle(300, 200)]; + } + + public static function resizeDownDataProvider(): Generator + { + yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 2000], new Rectangle(800, 600)]; + yield [new Rectangle(800, 600), ['width' => 400, 'height' => 1000], new Rectangle(400, 600)]; + yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 400], new Rectangle(800, 400)]; + yield [new Rectangle(800, 600), ['width' => 400, 'height' => 300], new Rectangle(400, 300)]; + yield [new Rectangle(800, 600), ['width' => 1000], new Rectangle(800, 600)]; + yield [new Rectangle(800, 600), ['height' => 1000], new Rectangle(800, 600)]; + yield [new Rectangle(800, 600), [], new Rectangle(800, 600)]; + } + + public static function scaleDataProvider(): Generator + { + yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 2000], new Rectangle(1000, 750)]; + yield [new Rectangle(800, 600), ['width' => 2000, 'height' => 1000], new Rectangle(1333, 1000)]; + yield [new Rectangle(800, 600), ['height' => 3000], new Rectangle(4000, 3000)]; + yield [new Rectangle(800, 600), ['width' => 8000], new Rectangle(8000, 6000)]; + yield [new Rectangle(800, 600), ['width' => 100, 'height' => 400], new Rectangle(100, 75)]; + yield [new Rectangle(800, 600), ['width' => 400, 'height' => 100], new Rectangle(133, 100)]; + yield [new Rectangle(800, 600), ['height' => 300], new Rectangle(400, 300)]; + yield [new Rectangle(800, 600), ['width' => 80], new Rectangle(80, 60)]; + yield [new Rectangle(640, 480), ['width' => 225], new Rectangle(225, 169)]; + yield [new Rectangle(640, 480), ['width' => 223], new Rectangle(223, 167)]; + yield [new Rectangle(600, 800), ['width' => 300, 'height' => 300], new Rectangle(225, 300)]; + yield [new Rectangle(800, 600), ['width' => 400, 'height' => 10], new Rectangle(13, 10)]; + yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 1200], new Rectangle(1000, 750)]; + yield [new Rectangle(12000, 12), ['width' => 4000, 'height' => 3000], new Rectangle(4000, 4)]; + yield [new Rectangle(12, 12000), ['width' => 4000, 'height' => 3000], new Rectangle(3, 3000)]; + yield [new Rectangle(12000, 6000), ['width' => 4000, 'height' => 3000], new Rectangle(4000, 2000)]; + yield [new Rectangle(3, 3000), ['height' => 300], new Rectangle(1, 300)]; + yield [new Rectangle(800, 600), [], new Rectangle(800, 600)]; + } + + public static function scaleDownDataProvider(): Generator + { + yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 2000], new Rectangle(800, 600)]; + yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 600], new Rectangle(800, 600)]; + yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 300], new Rectangle(400, 300)]; + yield [new Rectangle(800, 600), ['width' => 400, 'height' => 1000], new Rectangle(400, 300)]; + yield [new Rectangle(800, 600), ['width' => 400], new Rectangle(400, 300)]; + yield [new Rectangle(800, 600), ['height' => 300], new Rectangle(400, 300)]; + yield [new Rectangle(800, 600), ['width' => 1000], new Rectangle(800, 600)]; + yield [new Rectangle(800, 600), ['height' => 1000], new Rectangle(800, 600)]; + yield [new Rectangle(800, 600), ['width' => 100], new Rectangle(100, 75)]; + yield [new Rectangle(800, 600), ['width' => 300, 'height' => 200], new Rectangle(267, 200)]; + yield [new Rectangle(600, 800), ['width' => 300, 'height' => 300], new Rectangle(225, 300)]; + yield [new Rectangle(800, 600), ['width' => 400, 'height' => 10], new Rectangle(13, 10)]; + yield [new Rectangle(3, 3000), ['height' => 300], new Rectangle(1, 300)]; + yield [new Rectangle(800, 600), [], new Rectangle(800, 600)]; + } + + public static function coverDataProvider(): Generator + { + yield [new Rectangle(800, 600), new Rectangle(100, 100), new Rectangle(133, 100)]; + yield [new Rectangle(800, 600), new Rectangle(200, 100), new Rectangle(200, 150)]; + yield [new Rectangle(800, 600), new Rectangle(100, 200), new Rectangle(267, 200)]; + yield [new Rectangle(800, 600), new Rectangle(2000, 10), new Rectangle(2000, 1500)]; + yield [new Rectangle(800, 600), new Rectangle(10, 2000), new Rectangle(2667, 2000)]; + yield [new Rectangle(800, 600), new Rectangle(800, 600), new Rectangle(800, 600)]; + yield [new Rectangle(400, 300), new Rectangle(120, 120), new Rectangle(160, 120)]; + yield [new Rectangle(600, 800), new Rectangle(100, 100), new Rectangle(100, 133)]; + yield [new Rectangle(100, 100), new Rectangle(800, 600), new Rectangle(800, 800)]; + } + + public static function containDataProvider(): Generator + { + yield [new Rectangle(800, 600), new Rectangle(100, 100), new Rectangle(100, 75)]; + yield [new Rectangle(800, 600), new Rectangle(200, 100), new Rectangle(133, 100)]; + yield [new Rectangle(800, 600), new Rectangle(100, 200), new Rectangle(100, 75)]; + yield [new Rectangle(800, 600), new Rectangle(2000, 10), new Rectangle(13, 10)]; + yield [new Rectangle(800, 600), new Rectangle(10, 2000), new Rectangle(10, 8)]; + yield [new Rectangle(800, 600), new Rectangle(800, 600), new Rectangle(800, 600)]; + yield [new Rectangle(400, 300), new Rectangle(120, 120), new Rectangle(120, 90)]; + yield [new Rectangle(600, 800), new Rectangle(100, 100), new Rectangle(75, 100)]; + yield [new Rectangle(100, 100), new Rectangle(800, 600), new Rectangle(600, 600)]; + } + + public static function cropDataProvider(): Generator + { + yield [ + new Rectangle(800, 600), + new Rectangle(100, 100), + 'center', + new Rectangle(100, 100, new Point(350, 250)) + ]; + yield [ + new Rectangle(800, 600), + new Rectangle(200, 100), + 'center', + new Rectangle(200, 100, new Point(300, 250)) + ]; + yield [ + new Rectangle(800, 600), + new Rectangle(100, 200), + 'center', + new Rectangle(100, 200, new Point(350, 200)) + ]; + yield [ + new Rectangle(800, 600), + new Rectangle(2000, 10), + 'center', + new Rectangle(2000, 10, new Point(-600, 295)) + ]; + yield [ + new Rectangle(800, 600), + new Rectangle(10, 2000), + 'center', + new Rectangle(10, 2000, new Point(395, -700)) + ]; + yield [ + new Rectangle(800, 600), + new Rectangle(800, 600), + 'center', + new Rectangle(800, 600, new Point(0, 0)) + ]; + yield [ + new Rectangle(400, 300), + new Rectangle(120, 120), + 'center', + new Rectangle(120, 120, new Point(140, 90)) + ]; + yield [ + new Rectangle(600, 800), + new Rectangle(100, 100), + 'center', + new Rectangle(100, 100, new Point(250, 350)) + ]; + } +} diff --git a/tests/Unit/Geometry/RectangleResizerTest.php b/tests/Unit/Geometry/RectangleResizerTest.php index bc06e55d..b5b0698c 100644 --- a/tests/Unit/Geometry/RectangleResizerTest.php +++ b/tests/Unit/Geometry/RectangleResizerTest.php @@ -4,13 +4,12 @@ declare(strict_types=1); namespace Intervention\Image\Tests\Unit\Geometry; -use Generator; use Intervention\Image\Alignment; use PHPUnit\Framework\Attributes\CoversClass; -use PHPUnit\Framework\Attributes\DataProvider; -use Intervention\Image\Geometry\Point; use Intervention\Image\Geometry\Rectangle; use Intervention\Image\Geometry\Tools\RectangleResizer; +use Intervention\Image\Tests\Providers\ResizeDataProvider; +use PHPUnit\Framework\Attributes\DataProviderExternal; use PHPUnit\Framework\TestCase; #[CoversClass(RectangleResizer::class)] @@ -55,7 +54,7 @@ final class RectangleResizerTest extends TestCase /** * @param $resizeParameters array */ - #[DataProvider('resizeDataProvider')] + #[DataProviderExternal(ResizeDataProvider::class, 'resizeDataProvider')] public function testResize(Rectangle $input, array $resizeParameters, Rectangle $result): void { $resizer = new RectangleResizer(...$resizeParameters); @@ -64,18 +63,10 @@ final class RectangleResizerTest extends TestCase $this->assertEquals($result->height(), $resized->height()); } - public static function resizeDataProvider(): Generator - { - yield [new Rectangle(300, 200), ['width' => 150], new Rectangle(150, 200)]; - yield [new Rectangle(300, 200), ['height' => 150], new Rectangle(300, 150)]; - yield [new Rectangle(300, 200), ['width' => 20, 'height' => 10], new Rectangle(20, 10)]; - yield [new Rectangle(300, 200), [], new Rectangle(300, 200)]; - } - /** * @param $resizeParameters array */ - #[DataProvider('resizeDownDataProvider')] + #[DataProviderExternal(ResizeDataProvider::class, 'resizeDownDataProvider')] public function testResizeDown(Rectangle $input, array $resizeParameters, Rectangle $result): void { $resizer = new RectangleResizer(...$resizeParameters); @@ -84,21 +75,10 @@ final class RectangleResizerTest extends TestCase $this->assertEquals($result->height(), $resized->height()); } - public static function resizeDownDataProvider(): Generator - { - yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 2000], new Rectangle(800, 600)]; - yield [new Rectangle(800, 600), ['width' => 400, 'height' => 1000], new Rectangle(400, 600)]; - yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 400], new Rectangle(800, 400)]; - yield [new Rectangle(800, 600), ['width' => 400, 'height' => 300], new Rectangle(400, 300)]; - yield [new Rectangle(800, 600), ['width' => 1000], new Rectangle(800, 600)]; - yield [new Rectangle(800, 600), ['height' => 1000], new Rectangle(800, 600)]; - yield [new Rectangle(800, 600), [], new Rectangle(800, 600)]; - } - /** * @param $resizeParameters array */ - #[DataProvider('scaleDataProvider')] + #[DataProviderExternal(ResizeDataProvider::class, 'scaleDataProvider')] public function testScale(Rectangle $input, array $resizeParameters, Rectangle $result): void { $resizer = new RectangleResizer(...$resizeParameters); @@ -107,32 +87,10 @@ final class RectangleResizerTest extends TestCase $this->assertEquals($result->height(), $resized->height()); } - public static function scaleDataProvider(): Generator - { - yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 2000], new Rectangle(1000, 750)]; - yield [new Rectangle(800, 600), ['width' => 2000, 'height' => 1000], new Rectangle(1333, 1000)]; - yield [new Rectangle(800, 600), ['height' => 3000], new Rectangle(4000, 3000)]; - yield [new Rectangle(800, 600), ['width' => 8000], new Rectangle(8000, 6000)]; - yield [new Rectangle(800, 600), ['width' => 100, 'height' => 400], new Rectangle(100, 75)]; - yield [new Rectangle(800, 600), ['width' => 400, 'height' => 100], new Rectangle(133, 100)]; - yield [new Rectangle(800, 600), ['height' => 300], new Rectangle(400, 300)]; - yield [new Rectangle(800, 600), ['width' => 80], new Rectangle(80, 60)]; - yield [new Rectangle(640, 480), ['width' => 225], new Rectangle(225, 169)]; - yield [new Rectangle(640, 480), ['width' => 223], new Rectangle(223, 167)]; - yield [new Rectangle(600, 800), ['width' => 300, 'height' => 300], new Rectangle(225, 300)]; - yield [new Rectangle(800, 600), ['width' => 400, 'height' => 10], new Rectangle(13, 10)]; - yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 1200], new Rectangle(1000, 750)]; - yield [new Rectangle(12000, 12), ['width' => 4000, 'height' => 3000], new Rectangle(4000, 4)]; - yield [new Rectangle(12, 12000), ['width' => 4000, 'height' => 3000], new Rectangle(3, 3000)]; - yield [new Rectangle(12000, 6000), ['width' => 4000, 'height' => 3000], new Rectangle(4000, 2000)]; - yield [new Rectangle(3, 3000), ['height' => 300], new Rectangle(1, 300)]; - yield [new Rectangle(800, 600), [], new Rectangle(800, 600)]; - } - /** * @param $resizeParameters array */ - #[DataProvider('scaleDownDataProvider')] + #[DataProviderExternal(ResizeDataProvider::class, 'scaleDownDataProvider')] public function testScaleDown(Rectangle $input, array $resizeParameters, Rectangle $result): void { $resizer = new RectangleResizer(...$resizeParameters); @@ -141,25 +99,7 @@ final class RectangleResizerTest extends TestCase $this->assertEquals($result->height(), $resized->height()); } - public static function scaleDownDataProvider(): Generator - { - yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 2000], new Rectangle(800, 600)]; - yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 600], new Rectangle(800, 600)]; - yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 300], new Rectangle(400, 300)]; - yield [new Rectangle(800, 600), ['width' => 400, 'height' => 1000], new Rectangle(400, 300)]; - yield [new Rectangle(800, 600), ['width' => 400], new Rectangle(400, 300)]; - yield [new Rectangle(800, 600), ['height' => 300], new Rectangle(400, 300)]; - yield [new Rectangle(800, 600), ['width' => 1000], new Rectangle(800, 600)]; - yield [new Rectangle(800, 600), ['height' => 1000], new Rectangle(800, 600)]; - yield [new Rectangle(800, 600), ['width' => 100], new Rectangle(100, 75)]; - yield [new Rectangle(800, 600), ['width' => 300, 'height' => 200], new Rectangle(267, 200)]; - yield [new Rectangle(600, 800), ['width' => 300, 'height' => 300], new Rectangle(225, 300)]; - yield [new Rectangle(800, 600), ['width' => 400, 'height' => 10], new Rectangle(13, 10)]; - yield [new Rectangle(3, 3000), ['height' => 300], new Rectangle(1, 300)]; - yield [new Rectangle(800, 600), [], new Rectangle(800, 600)]; - } - - #[DataProvider('coverDataProvider')] + #[DataProviderExternal(ResizeDataProvider::class, 'coverDataProvider')] public function testCover(Rectangle $origin, Rectangle $target, Rectangle $result): void { $resizer = new RectangleResizer(); @@ -169,20 +109,7 @@ final class RectangleResizerTest extends TestCase $this->assertEquals($result->height(), $resized->height()); } - public static function coverDataProvider(): Generator - { - yield [new Rectangle(800, 600), new Rectangle(100, 100), new Rectangle(133, 100)]; - yield [new Rectangle(800, 600), new Rectangle(200, 100), new Rectangle(200, 150)]; - yield [new Rectangle(800, 600), new Rectangle(100, 200), new Rectangle(267, 200)]; - yield [new Rectangle(800, 600), new Rectangle(2000, 10), new Rectangle(2000, 1500)]; - yield [new Rectangle(800, 600), new Rectangle(10, 2000), new Rectangle(2667, 2000)]; - yield [new Rectangle(800, 600), new Rectangle(800, 600), new Rectangle(800, 600)]; - yield [new Rectangle(400, 300), new Rectangle(120, 120), new Rectangle(160, 120)]; - yield [new Rectangle(600, 800), new Rectangle(100, 100), new Rectangle(100, 133)]; - yield [new Rectangle(100, 100), new Rectangle(800, 600), new Rectangle(800, 800)]; - } - - #[DataProvider('containDataProvider')] + #[DataProviderExternal(ResizeDataProvider::class, 'containDataProvider')] public function testContain(Rectangle $origin, Rectangle $target, Rectangle $result): void { $resizer = new RectangleResizer(); @@ -192,20 +119,7 @@ final class RectangleResizerTest extends TestCase $this->assertEquals($result->height(), $resized->height()); } - public static function containDataProvider(): Generator - { - yield [new Rectangle(800, 600), new Rectangle(100, 100), new Rectangle(100, 75)]; - yield [new Rectangle(800, 600), new Rectangle(200, 100), new Rectangle(133, 100)]; - yield [new Rectangle(800, 600), new Rectangle(100, 200), new Rectangle(100, 75)]; - yield [new Rectangle(800, 600), new Rectangle(2000, 10), new Rectangle(13, 10)]; - yield [new Rectangle(800, 600), new Rectangle(10, 2000), new Rectangle(10, 8)]; - yield [new Rectangle(800, 600), new Rectangle(800, 600), new Rectangle(800, 600)]; - yield [new Rectangle(400, 300), new Rectangle(120, 120), new Rectangle(120, 90)]; - yield [new Rectangle(600, 800), new Rectangle(100, 100), new Rectangle(75, 100)]; - yield [new Rectangle(100, 100), new Rectangle(800, 600), new Rectangle(600, 600)]; - } - - #[DataProvider('cropDataProvider')] + #[DataProviderExternal(ResizeDataProvider::class, 'cropDataProvider')] public function testCrop(Rectangle $origin, Rectangle $target, string|Alignment $position, Rectangle $result): void { $resizer = new RectangleResizer(); @@ -216,56 +130,4 @@ final class RectangleResizerTest extends TestCase $this->assertEquals($result->pivot()->x(), $resized->pivot()->x()); $this->assertEquals($result->pivot()->y(), $resized->pivot()->y()); } - - public static function cropDataProvider(): Generator - { - yield [ - new Rectangle(800, 600), - new Rectangle(100, 100), - 'center', - new Rectangle(100, 100, new Point(350, 250)) - ]; - yield [ - new Rectangle(800, 600), - new Rectangle(200, 100), - 'center', - new Rectangle(200, 100, new Point(300, 250)) - ]; - yield [ - new Rectangle(800, 600), - new Rectangle(100, 200), - 'center', - new Rectangle(100, 200, new Point(350, 200)) - ]; - yield [ - new Rectangle(800, 600), - new Rectangle(2000, 10), - 'center', - new Rectangle(2000, 10, new Point(-600, 295)) - ]; - yield [ - new Rectangle(800, 600), - new Rectangle(10, 2000), - 'center', - new Rectangle(10, 2000, new Point(395, -700)) - ]; - yield [ - new Rectangle(800, 600), - new Rectangle(800, 600), - 'center', - new Rectangle(800, 600, new Point(0, 0)) - ]; - yield [ - new Rectangle(400, 300), - new Rectangle(120, 120), - 'center', - new Rectangle(120, 120, new Point(140, 90)) - ]; - yield [ - new Rectangle(600, 800), - new Rectangle(100, 100), - 'center', - new Rectangle(100, 100, new Point(250, 350)) - ]; - } }