1
0
mirror of https://github.com/Intervention/image.git synced 2025-01-17 12:18:14 +01:00
intervention_image/tests/Unit/InputHandlerTest.php
2024-11-12 16:15:46 +01:00

73 lines
2.6 KiB
PHP

<?php
declare(strict_types=1);
namespace Intervention\Image\Tests\Unit;
use Generator;
use Intervention\Image\Colors\Rgb\Decoders\HexColorDecoder;
use Intervention\Image\Drivers\Gd\Driver as GdDriver;
use Intervention\Image\Drivers\Imagick\Driver as ImagickDriver;
use Intervention\Image\Exceptions\DecoderException;
use Intervention\Image\InputHandler;
use Intervention\Image\Interfaces\ColorInterface;
use Intervention\Image\Interfaces\ImageInterface;
use Intervention\Image\Tests\BaseTestCase;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\RequiresPhpExtension;
#[RequiresPhpExtension('gd')]
#[RequiresPhpExtension('imagick')]
#[CoversClass(InputHandler::class)]
class InputHandlerTest extends BaseTestCase
{
#[DataProvider('testHandleProvider')]
public function testHandleDefaultDecoders(string $driver, mixed $input, string $outputClassname): void
{
$handler = new InputHandler(driver: new $driver());
if ($outputClassname === ImageInterface::class || $outputClassname === ColorInterface::class) {
$this->assertInstanceOf($outputClassname, $handler->handle($input));
} else {
$this->expectException($outputClassname);
$handler->handle($input);
}
}
public static function testHandleProvider(): Generator
{
$base = [
[null, DecoderException::class],
['', DecoderException::class],
['fff', ColorInterface::class],
['rgba(0, 0, 0, 0)', ColorInterface::class],
['cmyk(0, 0, 0, 0)', ColorInterface::class],
['hsv(0, 0, 0)', ColorInterface::class],
['hsl(0, 0, 0)', ColorInterface::class],
['transparent', ColorInterface::class],
['steelblue', ColorInterface::class],
[self::getTestResourcePath(), ImageInterface::class],
[file_get_contents(self::getTestResourcePath()), ImageInterface::class],
];
$drivers = [GdDriver::class, ImagickDriver::class];
foreach ($drivers as $driver) {
foreach ($base as $line) {
array_unshift($line, $driver); // prepend driver
yield $line;
}
}
}
public function testResolveWithoutDriver(): void
{
$handler = new InputHandler([new HexColorDecoder()]);
$result = $handler->handle('fff');
$this->assertInstanceOf(ColorInterface::class, $result);
$handler = new InputHandler([HexColorDecoder::class]);
$result = $handler->handle('fff');
$this->assertInstanceOf(ColorInterface::class, $result);
}
}