From 4ab382990ecb9db90386f8ec1a4d87ac8f7c5dd7 Mon Sep 17 00:00:00 2001 From: Clemens Schwaighofer Date: Thu, 12 Oct 2023 17:12:15 +0900 Subject: [PATCH] Output\Image Exceptions update --- src/Output/Image.php | 12 ++- .../Output/CoreLibsOutputImageTest.php | 84 +++++++++++++++++-- 2 files changed, 88 insertions(+), 8 deletions(-) diff --git a/src/Output/Image.php b/src/Output/Image.php index 5af6ce3..897e649 100644 --- a/src/Output/Image.php +++ b/src/Output/Image.php @@ -470,12 +470,20 @@ class Image * * @param string $filename path + filename to rotate. This file must be writeable * @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 { // function exists & file is writeable, else do nothing - if (!function_exists('exif_read_data') || !is_writeable($filename)) { - return; + if (!function_exists('exif_read_data')) { + 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]; // add @ to avoid "file not supported error" diff --git a/test/phpunit/Output/CoreLibsOutputImageTest.php b/test/phpunit/Output/CoreLibsOutputImageTest.php index 5384093..aa8dff9 100644 --- a/test/phpunit/Output/CoreLibsOutputImageTest.php +++ b/test/phpunit/Output/CoreLibsOutputImageTest.php @@ -16,17 +16,89 @@ final class CoreLibsOutputImageTest extends TestCase /** * Undocumented function * - * @testdox Output\Image Class tests + * @covers ::createThumbnail + * @testdox createThumbnail checks * * @return void */ - public function testOutputImage() + public function testCreateThumbnail(): void { - // $this->assertTrue(true, 'Output Image Tests not implemented'); - $this->markTestIncomplete( - 'Output\Image Tests have not yet been implemented' + // CONVERT does not exist + $this->expectException(\RuntimeException::class); + \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 } }