Compare commits

...

1 Commits

Author SHA1 Message Date
Clemens Schwaighofer
a8ca5d7a2b Add missing exceptions to Output\Image image rotate
Also create a basic phpunit class to test exceptions only
2023-10-12 17:08:44 +09:00
3 changed files with 109 additions and 11 deletions

View File

@@ -16,17 +16,89 @@ final class CoreLibsOutputImageTest extends TestCase
/** /**
* Undocumented function * Undocumented function
* *
* @testdox Output\Image Class tests * @covers ::createThumbnail
* @testdox createThumbnail checks
* *
* @return void * @return void
*/ */
public function testOutputImage() public function testCreateThumbnail(): void
{ {
// $this->assertTrue(true, 'Output Image Tests not implemented'); // CONVERT does not exist
$this->markTestIncomplete( $this->expectException(\RuntimeException::class);
'Output\Image Tests have not yet been implemented' \CoreLibs\Output\Image::createThumbnail('do_not_exist.png', 200, 200);
// set convert
$paths = [
'/bin',
'/usr/bin',
'/usr/local/bin',
];
// find convert
foreach ($paths as $path) {
if (
file_exists($path . DIRECTORY_SEPARATOR . 'convert') &&
is_file($path . DIRECTORY_SEPARATOR . 'convert')
) {
// image magick convert location
define('CONVERT', $path . DIRECTORY_SEPARATOR . 'convert');
break;
}
}
unset($paths);
// cannot set dummy file
$this->expectException(\Exception::class);
\CoreLibs\Output\Image::createThumbnail('do_not_exist.png', 200, 200);
}
/**
* Undocumented function
*
* @covers ::createThumbnailSimple
* @testdox createThumbnailSimple checks
*
* @return void
*/
public function testCreateThumbnailSimple(): void
{
// file does not exist
$this->expectException(\UnexpectedValueException::class);
\CoreLibs\Output\Image::createThumbnailSimple(
'do_not_exist.png',
200,
200,
cache_folder: '/tmp/',
web_folder: '/tmp/'
); );
// $this->markTestSkipped('No implementation for Output\Image at the moment'); // cache folder is not dir
$this->expectException(\UnexpectedValueException::class);
\CoreLibs\Output\Image::createThumbnailSimple(
'do_not_exist.png',
200,
200,
cache_folder: '/foo/bar/',
web_folder: '/tmp/'
);
// target cache folder is not writeable
// RuntimeException: imagecreatetruecolor failed
// RuntimeException: imagecolorallocatealpha failed
}
/**
* Undocumented function
*
* @covers ::correctImageOrientation
* @testdox correctImageOrientation checks
*
* @return void
*/
public function testCorrectImageOrientation(): void
{
// test file does not exist
$this->expectException(\UnexpectedValueException::class);
\CoreLibs\Output\Image::correctImageOrientation('do_not_exist.png');
// test folder not writeable
// test exit_read_data not present (how)?
// test image rotate
} }
} }

View File

@@ -46,7 +46,13 @@ $image = BASE . LAYOUT . CONTENT_PATH . IMAGES . 'no_picture_square.jpg';
$cache_folder = BASE . LAYOUT . CONTENT_PATH . CACHE . IMAGES; $cache_folder = BASE . LAYOUT . CONTENT_PATH . CACHE . IMAGES;
$web_folder = LAYOUT . CACHE . IMAGES; $web_folder = LAYOUT . CACHE . IMAGES;
// rotate image first // rotate image first
$_image->correctImageOrientation($image); try {
$_image->correctImageOrientation($image);
} catch (\UnexpectedValueException $e) {
print "Message:<br>" . $e->getMessage() . "<br>" . $e . "<br>";
} catch (\RuntimeException $e) {
print "Message:<br>" . $e->getMessage() . "<br>" . $e . "<br>";
}
// thumbnail tests // thumbnail tests
echo "<div>CLASS->CREATETHUMBNAILSIMPLE: " echo "<div>CLASS->CREATETHUMBNAILSIMPLE: "
. basename($image) . ": WIDTH: $thumb_width<br><img src=" . basename($image) . ": WIDTH: $thumb_width<br><img src="
@@ -54,7 +60,13 @@ echo "<div>CLASS->CREATETHUMBNAILSIMPLE: "
// static // static
$image = BASE . LAYOUT . CONTENT_PATH . IMAGES . 'no_picture.jpg'; $image = BASE . LAYOUT . CONTENT_PATH . IMAGES . 'no_picture.jpg';
// rotate image first // rotate image first
$image_class::correctImageOrientation($image); try {
$image_class::correctImageOrientation($image);
} catch (\UnexpectedValueException $e) {
print "Message:<br>" . $e->getMessage() . "<br>" . $e . "<br>";
} catch (\RuntimeException $e) {
print "Message:<br>" . $e->getMessage() . "<br>" . $e . "<br>";
}
// thumbnail tests // thumbnail tests
echo "<div>S::CREATETHUMBNAILSIMPLE: " echo "<div>S::CREATETHUMBNAILSIMPLE: "
. basename($image) . ": WIDTH: $thumb_width<br><img src=" . basename($image) . ": WIDTH: $thumb_width<br><img src="
@@ -87,7 +99,13 @@ foreach ($images as $image) {
echo "<div><b>IMAGE INFO</b>: " . $height . "x" . $width . ", TYPE: " echo "<div><b>IMAGE INFO</b>: " . $height . "x" . $width . ", TYPE: "
. \CoreLibs\Debug\Support::dumpVar($img_type) . " [" . $finfo->file($image) . "]</div>"; . \CoreLibs\Debug\Support::dumpVar($img_type) . " [" . $finfo->file($image) . "]</div>";
// rotate image first // rotate image first
Image::correctImageOrientation($image); try {
Image::correctImageOrientation($image);
} catch (\UnexpectedValueException $e) {
print "Message:<br>" . $e->getMessage() . "<br>" . $e . "<br>";
} catch (\RuntimeException $e) {
print "Message:<br>" . $e->getMessage() . "<br>" . $e . "<br>";
}
// thumbnail tests // thumbnail tests
echo "<div>" . basename($image) . ": WIDTH: $thumb_width<br><img src=" echo "<div>" . basename($image) . ": WIDTH: $thumb_width<br><img src="
. Image::createThumbnailSimple($image, $thumb_width, 0, $cache_folder, $web_folder) . "></div>"; . Image::createThumbnailSimple($image, $thumb_width, 0, $cache_folder, $web_folder) . "></div>";

View File

@@ -470,12 +470,20 @@ class Image
* *
* @param string $filename path + filename to rotate. This file must be writeable * @param string $filename path + filename to rotate. This file must be writeable
* @return void * @return void
* @throws \RuntimeException if exit_read_data is not found
* @throws \UnexpectedValueException if file name not writeable or file name not found
*/ */
public static function correctImageOrientation(string $filename): void public static function correctImageOrientation(string $filename): void
{ {
// function exists & file is writeable, else do nothing // function exists & file is writeable, else do nothing
if (!function_exists('exif_read_data') || !is_writeable($filename)) { if (!function_exists('exif_read_data')) {
return; throw new \RuntimeException('Function \'exit_read_data\' does not exist');
}
if (!file_exists($filename) || !is_file($filename)) {
throw new \UnexpectedValueException('Missing image file: ' . $filename);
}
if (!is_writeable($filename)) {
throw new \UnexpectedValueException('File name is not writeable: ' . $filename);
} }
[$inc_width, $inc_height, $img_type] = getimagesize($filename) ?: [0, 0, null]; [$inc_width, $inc_height, $img_type] = getimagesize($filename) ?: [0, 0, null];
// add @ to avoid "file not supported error" // add @ to avoid "file not supported error"