mirror of
https://github.com/Intervention/image.git
synced 2025-08-21 05:01:20 +02:00
Refactor Decoders
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
@@ -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
|
||||
{
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
@@ -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
|
||||
{
|
28
tests/Drivers/AbstractDriverTest.php
Normal file
28
tests/Drivers/AbstractDriverTest.php
Normal 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);
|
||||
}
|
||||
}
|
@@ -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
|
||||
{
|
38
tests/Drivers/DriverEncoderTest.php
Normal file
38
tests/Drivers/DriverEncoderTest.php
Normal 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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user