1
0
mirror of https://github.com/Intervention/image.git synced 2025-08-20 12:41:23 +02:00

Refactor Decoders

This commit is contained in:
Oliver Vogel
2023-11-25 11:14:37 +01:00
parent 8054bc813f
commit 7dc31dfb32
8 changed files with 73 additions and 160 deletions

View File

@@ -1,38 +0,0 @@
<?php
namespace Intervention\Image\Drivers\Abstract\Encoders;
use Intervention\Image\Interfaces\EncoderInterface;
abstract class AbstractEncoder implements EncoderInterface
{
protected $quality;
/**
* Get return value of callback through output buffer
*
* @param callable $callback
* @return string
*/
protected function getBuffered(callable $callback): string
{
ob_start();
$callback();
$buffer = ob_get_contents();
ob_end_clean();
return $buffer;
}
public function setQuality(int $quality): EncoderInterface
{
$this->quality = $quality;
return $this;
}
public function getQuality(): int
{
return $this->quality;
}
}

View File

@@ -1,48 +0,0 @@
<?php
declare(strict_types=1);
namespace Intervention\Image\Tests\Drivers\Abstract\Encoders;
use Intervention\Image\Drivers\Abstract\Encoders\AbstractEncoder;
use Intervention\Image\EncodedImage;
use Intervention\Image\Interfaces\EncoderInterface;
use Intervention\Image\Interfaces\ImageInterface;
use Intervention\Image\Tests\TestCase;
/**
* @covers \Intervention\Image\Drivers\Abstract\Encoders\AbstractEncoder
*
* @internal
*/
class AbstractEncoderTest extends TestCase
{
public function testGetBuffered(): void
{
$callback = function () { echo 'hello'; };
static::assertSame('hello', $this->getAbstractEncoder()->getBuffered($callback));
}
public function testSetGetQuality(): void
{
$encoder = $this->getAbstractEncoder();
$encoder->setQuality(55);
static::assertSame(55, $encoder->getQuality());
}
private function getAbstractEncoder(): AbstractEncoder
{
return new class () extends AbstractEncoder implements EncoderInterface {
public function getBuffered(callable $callback): string
{
return parent::getBuffered($callback);
}
public function encode(ImageInterface $image): EncodedImage
{
}
};
}
}

View File

@@ -1,67 +0,0 @@
<?php
declare(strict_types=1);
namespace Intervention\Image\Tests\Drivers\Abstract\Modifiers;
use Intervention\Image\Drivers\Abstract\Modifiers\AbstractPadModifier;
use Intervention\Image\Drivers\Imagick\Factory;
use Intervention\Image\Interfaces\ImageInterface;
use Intervention\Image\Interfaces\SizeInterface;
use Intervention\Image\Tests\TestCase;
/**
* @covers \Intervention\Image\Drivers\Abstract\Modifiers\AbstractPadModifier
*
* @internal
*/
final class AbstractPadModifierTest extends TestCase
{
public function providerCropSize(): iterable
{
yield '150x100' => [150, 100, 100, 67, 0, 67];
yield '100x150' => [100, 150, 100, 150, 0, 25];
}
/** @dataProvider providerCropSize */
public function testGetCropSize(int $width, int $height, int $expectedWidth, int $expectedHeight, int $expectedX, int $expectedY): void
{
$modifier = $this->getModifier(100, 200, 'ffffff', 'center');
$image = (new Factory())->newImage($width, $height);
$size = $modifier->getCropSize($image);
static::assertSame($expectedWidth, $size->width());
static::assertSame($expectedHeight, $size->height());
static::assertSame($expectedX, $size->getPivot()->x());
static::assertSame($expectedY, $size->getPivot()->y());
}
public function testGetResizeSize(): void
{
$modifier = $this->getModifier(200, 100, 'ffffff', 'center');
$image = (new Factory())->newImage(300, 200);
$resize = $modifier->getResizeSize($image);
static::assertSame(200, $resize->width());
static::assertSame(100, $resize->height());
static::assertSame(0, $resize->getPivot()->x());
static::assertSame(0, $resize->getPivot()->y());
}
private function getModifier(int $width, int $height, $background, string $position): AbstractPadModifier
{
return new class($width, $height, $background, $position) extends AbstractPadModifier {
public function getCropSize(ImageInterface $image): SizeInterface
{
return parent::getCropSize($image);
}
public function getResizeSize(ImageInterface $image): SizeInterface
{
return parent::getResizeSize($image);
}
};
}
}

View File

@@ -2,16 +2,16 @@
declare(strict_types=1);
namespace Intervention\Image\Tests\Drivers\Abstract\Decoders;
namespace Intervention\Image\Tests\Drivers;
use Intervention\Image\Drivers\Abstract\Decoders\AbstractDecoder;
use Intervention\Image\Drivers\AbstractDecoder;
use Intervention\Image\Exceptions\DecoderException;
use Intervention\Image\Interfaces\ColorInterface;
use Intervention\Image\Tests\TestCase;
use Mockery;
/**
* @covers \Intervention\Image\Drivers\Abstract\Decoders\AbstractDecoder
* @covers \Intervention\Image\Drivers\AbstractDecoder
*/
class AbstractDecoderTest extends TestCase
{

View File

@@ -0,0 +1,28 @@
<?php
declare(strict_types=1);
namespace Intervention\Image\Tests\Drivers;
use Intervention\Image\Drivers\AbstractDriver;
use Intervention\Image\Encoders\PngEncoder as GenericEncoder;
use Intervention\Image\Drivers\Encoders\PngEncoder as SpecializedEncoder;
use Intervention\Image\Tests\TestCase;
use Mockery;
/**
* @covers \Intervention\Image\Drivers\AbstractDriver
*
* @internal
*/
class AbstractDriverTest extends TestCase
{
public function testResolve(): void
{
$driver = Mockery::mock(AbstractDriver::class)->makePartial();
$encoder = new GenericEncoder();
$this->assertInstanceOf(GenericEncoder::class, $encoder);
$result = $driver->resolve(new GenericEncoder());
$this->assertInstanceOf(SpecializedEncoder::class, $result);
}
}

View File

@@ -2,16 +2,16 @@
declare(strict_types=1);
namespace Intervention\Image\Tests\Drivers\Abstract;
namespace Intervention\Image\Tests\Drivers;
use Intervention\Image\Drivers\Abstract\AbstractInputHandler;
use Intervention\Image\Drivers\Abstract\Decoders\AbstractDecoder;
use Intervention\Image\Drivers\AbstractDecoder;
use Intervention\Image\Drivers\AbstractInputHandler;
use Intervention\Image\Interfaces\ImageInterface;
use Intervention\Image\Tests\TestCase;
use Mockery;
/**
* @covers \Intervention\Image\Drivers\Abstract\AbstractInputHandler
* @covers \Intervention\Image\Drivers\AbstractInputHandler
*/
final class AbstractInputHandlerTest extends TestCase
{

View File

@@ -0,0 +1,38 @@
<?php
declare(strict_types=1);
namespace Intervention\Image\Tests\Drivers;
use Intervention\Image\Drivers\DriverEncoder;
use Intervention\Image\Encoders\PngEncoder;
use Intervention\Image\Interfaces\DriverInterface;
use Intervention\Image\Tests\TestCase;
use Mockery;
/**
* @covers \Intervention\Image\Drivers\DriverEncoder
*
* @internal
*/
class DriverEncoderTest extends TestCase
{
public function testGetBuffered(): void
{
$encoder = Mockery::mock(DriverEncoder::class)->makePartial();
$result = $encoder->getBuffered(function () {
echo 'result';
});
$this->assertEquals('result', $result);
}
public function testGetAttributes(): void
{
$encoder = Mockery::mock(DriverEncoder::class, [
new PngEncoder(color_limit: 123),
Mockery::mock(DriverInterface::class),
])->makePartial();
$this->assertEquals(123, $encoder->color_limit);
}
}