diff --git a/.travis.yml b/.travis.yml index fb74d8a..161aa57 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: php -sudo: false +sudo: required branches: only: @@ -11,7 +11,7 @@ cache: - $HOME/.composer/cache php: - - 5.3.3 + - 5.3 - 5.4 - 5.5 - 5.6 @@ -25,6 +25,10 @@ matrix: - php: hhvm before_install: + - sudo add-apt-repository -y ppa:moti-p/cc + - sudo apt-get update + - sudo apt-get -y --reinstall install imagemagick + - if [ "$TRAVIS_PHP_VERSION" = "hhvm" ]; then sudo apt-get -y --reinstall install libmagickwand4; fi; - composer self-update install: diff --git a/Command.php b/Command.php index 7a72690..baee0ec 100644 --- a/Command.php +++ b/Command.php @@ -17,6 +17,9 @@ */ class Command { + const RUN_NORMAL = null; + const RUN_BACKGROUND = ' > /dev/null 2>&1'; + const RUN_DEBUG = ' 2>&1'; /** * @var array The list of allowed ImageMagick binaries @@ -105,13 +108,18 @@ public function __construct($imageMagickPath = '/usr/bin', $referencesDirectory /** * Executes the command and returns its response * - * @param bool $getErrors If set to true, STDERR will be redirected to STDOUT + * @param null $runMode * * @return CommandResponse + * */ - public function run($getErrors = false) + public function run($runMode = self::RUN_NORMAL) { - exec($this->env.' '.$this->command.' '.$this->commandToAppend.($getErrors?' 2>&1':''), $output, $code); + if (!in_array($runMode, array(self::RUN_NORMAL, self::RUN_BACKGROUND, self::RUN_DEBUG))) { + throw new \InvalidArgumentException('The run mode must be one of '.__CLASS__.'::RUN_* constants.'); + } + + exec($this->env.' '.$this->command.' '.$this->commandToAppend.$runMode, $output, $code); return new CommandResponse($output, $code); } diff --git a/ReferenceClasses/Geometry.php b/ReferenceClasses/Geometry.php index b559710..93c98f1 100644 --- a/ReferenceClasses/Geometry.php +++ b/ReferenceClasses/Geometry.php @@ -14,11 +14,14 @@ * Represents an ImageMagick geometry parameter. * Each value is optional so a big regex is used to parse it. * + * How to build the monstruous regexp? Check the gist link. + * + * @link https://gist.github.com/Pierstoval/eac8d182d2c51c93202f * @link http://www.imagemagick.org/script/command-line-processing.php#geometry */ class Geometry { - const REGEX_VALIDATE = '~^(?:x?[0-9]+(?:\.[0-9]+)?%?|[0-9]+(?:\.[0-9]+)?%?x[0-9]+(?:\.[0-9]+)?%?[\^!<>]?)?(?:[+-][0-9]+[+-][0-9]+)?$~'; + const REGEX_VALIDATE = '~(?(?(?:\d*(?:\.\d+)?)?%?)?(?:(?x)(?(?:\d*(?:\.\d+)?)?%?))?)(?[!><@^])?(?(?[+-]\d*(?:\.\d+)?)?(?[+-]\d*(?:\.\d+)?)?)~'; const RATIO_NONE = null; const RATIO_MIN = '^'; @@ -33,17 +36,6 @@ class Geometry */ private $value = ''; - public function __construct($width = null, $height = null, $x = null, $y = null, $aspectRatio = self::RATIO_NONE) - { - $args = func_get_args(); - if (count(array_map(null, $args)) > 1) { - $geometry = call_user_func_array(array($this, 'createFromParameters'), $args); - } else { - $geometry = $width; - } - $this->value = $geometry; - } - /** * @param string|int $width Can be both * @param string|int $height @@ -56,8 +48,17 @@ public function __construct($width = null, $height = null, $x = null, $y = null, public static function createFromParameters($width = null, $height = null, $x = null, $y = null, $aspectRatio = self::RATIO_NONE) { $geometry = $width; + + // If we have a height + // Or if we have width, no height and an offset + // If width is 100, it will result in 100x{offset} + // else, 100{offset} is incorrect + if (null !== $height || $width && !$height && (null !== $x || null !== $y)) { + $geometry .= 'x'; + } + if (null !== $height) { - $geometry .= 'x'.$height; + $geometry .= $height; } if ($aspectRatio && !in_array($aspectRatio, self::$validRatios)) { @@ -82,19 +83,56 @@ public static function createFromParameters($width = null, $height = null, $x = return $geometry; } + public function __construct($width = null, $height = null, $x = null, $y = null, $aspectRatio = self::RATIO_NONE) + { + $args = func_get_args(); + if (count(array_map(null, $args)) > 1) { + $geometry = call_user_func_array(array($this, 'createFromParameters'), $args); + } else { + $geometry = $width; + } + $this->value = $geometry; + } + /** * @throws \InvalidArgumentException * @return string */ public function validate() { - if ( - !preg_match(static::REGEX_VALIDATE, $this->value) - ) { + $errors = array(); + + if (!preg_match(static::REGEX_VALIDATE, $this->value, $matches)) { + $errors[] = 'Invalid regexp.'; + } + + $w = isset($matches['w']) && '' !== $matches['w'] ? $matches['w'] : null; + $h = isset($matches['h']) && '' !== $matches['h'] ? $matches['h'] : null; + $x = isset($matches['x']) && '' !== $matches['x'] ? $matches['x'] : null; + $y = isset($matches['y']) && '' !== $matches['y'] ? $matches['y'] : null; + $offset = isset($matches['offset']) && '' !== $matches['offset'] ? $matches['offset'] : null; + $whseparator = $matches['whseparator']; + $aspect = $matches['aspect']; + + // The next checks will perform post-regexp matching that is impossible with preg_match natively + + if ('0' === $w || '0' === $h) { + $errors[] = 'Cannot specify zero width nor height.'; + } + if ($aspect && !$w && !$h) { + $errors[] = 'Aspect can be used only with width and/or height.'; + } + + if ($w && !$h && ($x || $y) && !$whseparator) { + $errors[] = 'When using offsets and only width, you must specify the "x" separator like this: '.$w.'x'.$offset; + } + + if (count($errors)) { throw new \InvalidArgumentException(sprintf( - "The specified geometry (%s) is invalid.\n". - "Please refer to ImageMagick command line documentation about geometry:\n%s", + "The specified geometry (%s) is invalid.\n%s\n". + "Please refer to ImageMagick command line documentation about geometry:\n%s\n", $this->value, + implode("\n", $errors), 'http://www.imagemagick.org/script/command-line-processing.php#geometry' )); } diff --git a/Tests/AbstractTestCase.php b/Tests/AbstractTestCase.php new file mode 100644 index 0000000..50c97be --- /dev/null +++ b/Tests/AbstractTestCase.php @@ -0,0 +1,40 @@ + +* +* For the full copyright and license information, please view the LICENSE +* file that was distributed with this source code. +*/ + +namespace Orbitale\Component\ImageMagick\Tests; + +class AbstractTestCase extends \PHPUnit_Framework_TestCase +{ + + protected $resourcesDir; + + public function __construct($name = null, array $data = array(), $dataName = '') + { + parent::__construct($name, $data, $dataName); + if (!defined('IMAGEMAGICK_DIR') || !defined('TEST_RESOURCES_DIR')) { + throw new \RuntimeException( + "The \"IMAGEMAGICK_DIR\" constant is not defined.\n" . + "The bootstrap must be correctly included before executing test suite." + ); + } + $this->resourcesDir = TEST_RESOURCES_DIR; + } + + public function setUp() + { + $dir = TEST_RESOURCES_DIR.'/outputs'; + foreach (scandir($dir) as $file) { + if ('.' !== $file && '..' !== $file && '.gitkeep' !== $file) { + unlink($dir.'/'.$file); + } + } + } + +} diff --git a/Tests/CommandTest.php b/Tests/CommandTest.php index bdc3c15..d5ac566 100644 --- a/Tests/CommandTest.php +++ b/Tests/CommandTest.php @@ -12,33 +12,9 @@ use Orbitale\Component\ImageMagick\Command; -class CommandTest extends \PHPUnit_Framework_TestCase +class CommandTest extends AbstractTestCase { - private $resourcesDir; - - public function __construct($name = null, array $data = array(), $dataName = '') - { - parent::__construct($name, $data, $dataName); - if (!defined('IMAGEMAGICK_DIR') || !defined('TEST_RESOURCES_DIR')) { - throw new \RuntimeException( - "The \"IMAGEMAGICK_DIR\" constant is not defined.\n" . - "The bootstrap must be correctly included before executing test suite." - ); - } - $this->resourcesDir = TEST_RESOURCES_DIR; - } - - public function setUp() - { - $dir = TEST_RESOURCES_DIR.'/outputs'; - foreach (scandir($dir) as $file) { - if ('.' !== $file && '..' !== $file && '.gitkeep' !== $file) { - unlink($dir.'/'.$file); - } - } - } - /** * @dataProvider provideWrongConvertDirs */ diff --git a/Tests/GeometryTest.php b/Tests/GeometryTest.php new file mode 100644 index 0000000..0c09fa3 --- /dev/null +++ b/Tests/GeometryTest.php @@ -0,0 +1,821 @@ + +* +* For the full copyright and license information, please view the LICENSE +* file that was distributed with this source code. +*/ + +namespace Orbitale\Component\ImageMagick\Tests; + +use Orbitale\Component\ImageMagick\Command; +use Orbitale\Component\ImageMagick\ReferenceClasses\Geometry; + +class GeometryTest extends AbstractTestCase +{ + + /** + * @dataProvider provideStaticCreations + */ + public function testStaticCreation($expect, $width, $height, $x, $y, $aspectRatio) + { + $this->markTestIncomplete('TODO'); // TODO + } + + public function provideStaticCreations() + { + return array( + array('100x100^+0+0', 100, 100, 0, 0, Geometry::RATIO_MIN), + array('x100^+0+0', null, 100, 0, 0, Geometry::RATIO_MIN), + ); + } + + /** + * @dataProvider provideRightGeometries + */ + public function testGeometry($width, $height, $x, $y, $aspectRatio) + { + $geometry = new Geometry($width, $height, $x, $y, $aspectRatio); + + try { + $validatedGeometry = $geometry->validate(); + } catch (\Exception $e) { + $this->fail($e->getMessage()); + return; + } + + $this->assertInternalType('string', $validatedGeometry); + $this->assertNotEmpty($validatedGeometry); + + if (0 === strlen($validatedGeometry)) { + $this->markTestSkipped('No geometry to check. ['.$validatedGeometry.'] ['.implode(',', func_get_args()).']'); + } + + $command = new Command(IMAGEMAGICK_DIR); + + $command + ->convert($this->resourcesDir.'/moon_180.jpg') + ->resize($geometry) + ->file($this->resourcesDir.'/outputs/moon_180_test_geometry_'.uniqid($width.$height.$x.$y.$aspectRatio.'test_geo', true).'.jpg', false) + ; + + $response = $command->run(Command::RUN_DEBUG); + + $this->assertFalse($response->hasFailed(), "For geometry ".$geometry->validate().", ImageMagick error:\n".$response->getContent(true)); + } + + public function provideRightGeometries() + { + // width, height, x, y, aspectRatio + return array( + array(null, null, null, 0, null), + array(null, null, null, -1, null), + array(null, null, null, 1, null), + array(null, null, 0, null, null), + array(null, null, 0, 0, null), + array(null, null, 0, -1, null), + array(null, null, 0, 1, null), + array(null, null, -1, null, null), + array(null, null, -1, 0, null), + array(null, null, -1, -1, null), + array(null, null, -1, 1, null), + array(null, null, 1, null, null), + array(null, null, 1, 0, null), + array(null, null, 1, -1, null), + array(null, null, 1, 1, null), + array(null, 100, null, null, null), + array(null, 100, null, null, '<'), + array(null, 100, null, null, '!'), + array(null, 100, null, null, '^'), + array(null, 100, null, null, '>'), + array(null, 100, null, 0, null), + array(null, 100, null, 0, '<'), + array(null, 100, null, 0, '!'), + array(null, 100, null, 0, '^'), + array(null, 100, null, 0, '>'), + array(null, 100, null, -1, null), + array(null, 100, null, -1, '<'), + array(null, 100, null, -1, '!'), + array(null, 100, null, -1, '^'), + array(null, 100, null, -1, '>'), + array(null, 100, null, 1, null), + array(null, 100, null, 1, '<'), + array(null, 100, null, 1, '!'), + array(null, 100, null, 1, '^'), + array(null, 100, null, 1, '>'), + array(null, 100, 0, null, null), + array(null, 100, 0, null, '<'), + array(null, 100, 0, null, '!'), + array(null, 100, 0, null, '^'), + array(null, 100, 0, null, '>'), + array(null, 100, 0, 0, null), + array(null, 100, 0, 0, '<'), + array(null, 100, 0, 0, '!'), + array(null, 100, 0, 0, '^'), + array(null, 100, 0, 0, '>'), + array(null, 100, 0, -1, null), + array(null, 100, 0, -1, '<'), + array(null, 100, 0, -1, '!'), + array(null, 100, 0, -1, '^'), + array(null, 100, 0, -1, '>'), + array(null, 100, 0, 1, null), + array(null, 100, 0, 1, '<'), + array(null, 100, 0, 1, '!'), + array(null, 100, 0, 1, '^'), + array(null, 100, 0, 1, '>'), + array(null, 100, -1, null, null), + array(null, 100, -1, null, '<'), + array(null, 100, -1, null, '!'), + array(null, 100, -1, null, '^'), + array(null, 100, -1, null, '>'), + array(null, 100, -1, 0, null), + array(null, 100, -1, 0, '<'), + array(null, 100, -1, 0, '!'), + array(null, 100, -1, 0, '^'), + array(null, 100, -1, 0, '>'), + array(null, 100, -1, -1, null), + array(null, 100, -1, -1, '<'), + array(null, 100, -1, -1, '!'), + array(null, 100, -1, -1, '^'), + array(null, 100, -1, -1, '>'), + array(null, 100, -1, 1, null), + array(null, 100, -1, 1, '<'), + array(null, 100, -1, 1, '!'), + array(null, 100, -1, 1, '^'), + array(null, 100, -1, 1, '>'), + array(null, 100, 1, null, null), + array(null, 100, 1, null, '<'), + array(null, 100, 1, null, '!'), + array(null, 100, 1, null, '^'), + array(null, 100, 1, null, '>'), + array(null, 100, 1, 0, null), + array(null, 100, 1, 0, '<'), + array(null, 100, 1, 0, '!'), + array(null, 100, 1, 0, '^'), + array(null, 100, 1, 0, '>'), + array(null, 100, 1, -1, null), + array(null, 100, 1, -1, '<'), + array(null, 100, 1, -1, '!'), + array(null, 100, 1, -1, '^'), + array(null, 100, 1, -1, '>'), + array(null, 100, 1, 1, null), + array(null, 100, 1, 1, '<'), + array(null, 100, 1, 1, '!'), + array(null, 100, 1, 1, '^'), + array(null, 100, 1, 1, '>'), + array(100, null, null, null, null), + array(100, null, null, null, '<'), + array(100, null, null, null, '!'), + array(100, null, null, null, '^'), + array(100, null, null, null, '>'), + array(100, null, null, 0, null), + array(100, null, null, 0, '<'), + array(100, null, null, 0, '!'), + array(100, null, null, 0, '^'), + array(100, null, null, 0, '>'), + array(100, null, null, -1, null), + array(100, null, null, -1, '<'), + array(100, null, null, -1, '!'), + array(100, null, null, -1, '^'), + array(100, null, null, -1, '>'), + array(100, null, null, 1, null), + array(100, null, null, 1, '<'), + array(100, null, null, 1, '!'), + array(100, null, null, 1, '^'), + array(100, null, null, 1, '>'), + array(100, null, 0, null, null), + array(100, null, 0, null, '<'), + array(100, null, 0, null, '!'), + array(100, null, 0, null, '^'), + array(100, null, 0, null, '>'), + array(100, null, 0, 0, null), + array(100, null, 0, 0, '<'), + array(100, null, 0, 0, '!'), + array(100, null, 0, 0, '^'), + array(100, null, 0, 0, '>'), + array(100, null, 0, -1, null), + array(100, null, 0, -1, '<'), + array(100, null, 0, -1, '!'), + array(100, null, 0, -1, '^'), + array(100, null, 0, -1, '>'), + array(100, null, 0, 1, null), + array(100, null, 0, 1, '<'), + array(100, null, 0, 1, '!'), + array(100, null, 0, 1, '^'), + array(100, null, 0, 1, '>'), + array(100, null, -1, null, null), + array(100, null, -1, null, '<'), + array(100, null, -1, null, '!'), + array(100, null, -1, null, '^'), + array(100, null, -1, null, '>'), + array(100, null, -1, 0, null), + array(100, null, -1, 0, '<'), + array(100, null, -1, 0, '!'), + array(100, null, -1, 0, '^'), + array(100, null, -1, 0, '>'), + array(100, null, -1, -1, null), + array(100, null, -1, -1, '<'), + array(100, null, -1, -1, '!'), + array(100, null, -1, -1, '^'), + array(100, null, -1, -1, '>'), + array(100, null, -1, 1, null), + array(100, null, -1, 1, '<'), + array(100, null, -1, 1, '!'), + array(100, null, -1, 1, '^'), + array(100, null, -1, 1, '>'), + array(100, null, 1, null, null), + array(100, null, 1, null, '<'), + array(100, null, 1, null, '!'), + array(100, null, 1, null, '^'), + array(100, null, 1, null, '>'), + array(100, null, 1, 0, null), + array(100, null, 1, 0, '<'), + array(100, null, 1, 0, '!'), + array(100, null, 1, 0, '^'), + array(100, null, 1, 0, '>'), + array(100, null, 1, -1, null), + array(100, null, 1, -1, '<'), + array(100, null, 1, -1, '!'), + array(100, null, 1, -1, '^'), + array(100, null, 1, -1, '>'), + array(100, null, 1, 1, null), + array(100, null, 1, 1, '<'), + array(100, null, 1, 1, '!'), + array(100, null, 1, 1, '^'), + array(100, null, 1, 1, '>'), + array(100, 100, null, null, null), + array(100, 100, null, null, '<'), + array(100, 100, null, null, '!'), + array(100, 100, null, null, '^'), + array(100, 100, null, null, '>'), + array(100, 100, null, 0, null), + array(100, 100, null, 0, '<'), + array(100, 100, null, 0, '!'), + array(100, 100, null, 0, '^'), + array(100, 100, null, 0, '>'), + array(100, 100, null, -1, null), + array(100, 100, null, -1, '<'), + array(100, 100, null, -1, '!'), + array(100, 100, null, -1, '^'), + array(100, 100, null, -1, '>'), + array(100, 100, null, 1, null), + array(100, 100, null, 1, '<'), + array(100, 100, null, 1, '!'), + array(100, 100, null, 1, '^'), + array(100, 100, null, 1, '>'), + array(100, 100, 0, null, null), + array(100, 100, 0, null, '<'), + array(100, 100, 0, null, '!'), + array(100, 100, 0, null, '^'), + array(100, 100, 0, null, '>'), + array(100, 100, 0, 0, null), + array(100, 100, 0, 0, '<'), + array(100, 100, 0, 0, '!'), + array(100, 100, 0, 0, '^'), + array(100, 100, 0, 0, '>'), + array(100, 100, 0, -1, null), + array(100, 100, 0, -1, '<'), + array(100, 100, 0, -1, '!'), + array(100, 100, 0, -1, '^'), + array(100, 100, 0, -1, '>'), + array(100, 100, 0, 1, null), + array(100, 100, 0, 1, '<'), + array(100, 100, 0, 1, '!'), + array(100, 100, 0, 1, '^'), + array(100, 100, 0, 1, '>'), + array(100, 100, -1, null, null), + array(100, 100, -1, null, '<'), + array(100, 100, -1, null, '!'), + array(100, 100, -1, null, '^'), + array(100, 100, -1, null, '>'), + array(100, 100, -1, 0, null), + array(100, 100, -1, 0, '<'), + array(100, 100, -1, 0, '!'), + array(100, 100, -1, 0, '^'), + array(100, 100, -1, 0, '>'), + array(100, 100, -1, -1, null), + array(100, 100, -1, -1, '<'), + array(100, 100, -1, -1, '!'), + array(100, 100, -1, -1, '^'), + array(100, 100, -1, -1, '>'), + array(100, 100, -1, 1, null), + array(100, 100, -1, 1, '<'), + array(100, 100, -1, 1, '!'), + array(100, 100, -1, 1, '^'), + array(100, 100, -1, 1, '>'), + array(100, 100, 1, null, null), + array(100, 100, 1, null, '<'), + array(100, 100, 1, null, '!'), + array(100, 100, 1, null, '^'), + array(100, 100, 1, null, '>'), + array(100, 100, 1, 0, null), + array(100, 100, 1, 0, '<'), + array(100, 100, 1, 0, '!'), + array(100, 100, 1, 0, '^'), + array(100, 100, 1, 0, '>'), + array(100, 100, 1, -1, null), + array(100, 100, 1, -1, '<'), + array(100, 100, 1, -1, '!'), + array(100, 100, 1, -1, '^'), + array(100, 100, 1, -1, '>'), + array(100, 100, 1, 1, null), + array(100, 100, 1, 1, '<'), + array(100, 100, 1, 1, '!'), + array(100, 100, 1, 1, '^'), + array(100, 100, 1, 1, '>')) + ; + } + + /** + * @dataProvider provideWrongGeometries + */ + public function testWrongGeometry($width, $height, $x, $y, $aspectRatio) + { + $geometry = new Geometry($width, $height, $x, $y, $aspectRatio); + + $expectedGeometry = Geometry::createFromParameters($width, $height, $x, $y, $aspectRatio); + + $message = $validatedGeometry = null; + + try { + $validatedGeometry = $geometry->validate(); + } catch (\InvalidArgumentException $e) { + $message = $e->getMessage(); + } + + $this->assertNotNull($message, 'No exception for geometry "'.$expectedGeometry.'"'); + $this->assertStringStartsWith('The specified geometry ('.$expectedGeometry.') is invalid.', $message, "Wrong exception message:\n$message"); + } + + public function provideWrongGeometries() + { + return array( + array(null, null, null, null, '<'), + array(null, null, null, null, '!'), + array(null, null, null, null, '^'), + array(null, null, null, null, '>'), + array(null, null, null, 0, '<'), + array(null, null, null, 0, '!'), + array(null, null, null, 0, '^'), + array(null, null, null, 0, '>'), + array(null, null, null, -1, '<'), + array(null, null, null, -1, '!'), + array(null, null, null, -1, '^'), + array(null, null, null, -1, '>'), + array(null, null, null, 1, '<'), + array(null, null, null, 1, '!'), + array(null, null, null, 1, '^'), + array(null, null, null, 1, '>'), + array(null, null, 0, null, '<'), + array(null, null, 0, null, '!'), + array(null, null, 0, null, '^'), + array(null, null, 0, null, '>'), + array(null, null, 0, 0, '<'), + array(null, null, 0, 0, '!'), + array(null, null, 0, 0, '^'), + array(null, null, 0, 0, '>'), + array(null, null, 0, -1, '<'), + array(null, null, 0, -1, '!'), + array(null, null, 0, -1, '^'), + array(null, null, 0, -1, '>'), + array(null, null, 0, 1, '<'), + array(null, null, 0, 1, '!'), + array(null, null, 0, 1, '^'), + array(null, null, 0, 1, '>'), + array(null, null, -1, null, '<'), + array(null, null, -1, null, '!'), + array(null, null, -1, null, '^'), + array(null, null, -1, null, '>'), + array(null, null, -1, 0, '<'), + array(null, null, -1, 0, '!'), + array(null, null, -1, 0, '^'), + array(null, null, -1, 0, '>'), + array(null, null, -1, -1, '<'), + array(null, null, -1, -1, '!'), + array(null, null, -1, -1, '^'), + array(null, null, -1, -1, '>'), + array(null, null, -1, 1, '<'), + array(null, null, -1, 1, '!'), + array(null, null, -1, 1, '^'), + array(null, null, -1, 1, '>'), + array(null, null, 1, null, '<'), + array(null, null, 1, null, '!'), + array(null, null, 1, null, '^'), + array(null, null, 1, null, '>'), + array(null, null, 1, 0, '<'), + array(null, null, 1, 0, '!'), + array(null, null, 1, 0, '^'), + array(null, null, 1, 0, '>'), + array(null, null, 1, -1, '<'), + array(null, null, 1, -1, '!'), + array(null, null, 1, -1, '^'), + array(null, null, 1, -1, '>'), + array(null, null, 1, 1, '<'), + array(null, null, 1, 1, '!'), + array(null, null, 1, 1, '^'), + array(null, null, 1, 1, '>'), + array(null, 0, null, null, null), + array(null, 0, null, null, '<'), + array(null, 0, null, null, '!'), + array(null, 0, null, null, '^'), + array(null, 0, null, null, '>'), + array(null, 0, null, 0, null), + array(null, 0, null, 0, '<'), + array(null, 0, null, 0, '!'), + array(null, 0, null, 0, '^'), + array(null, 0, null, 0, '>'), + array(null, 0, null, -1, null), + array(null, 0, null, -1, '<'), + array(null, 0, null, -1, '!'), + array(null, 0, null, -1, '^'), + array(null, 0, null, -1, '>'), + array(null, 0, null, 1, null), + array(null, 0, null, 1, '<'), + array(null, 0, null, 1, '!'), + array(null, 0, null, 1, '^'), + array(null, 0, null, 1, '>'), + array(null, 0, 0, null, null), + array(null, 0, 0, null, '<'), + array(null, 0, 0, null, '!'), + array(null, 0, 0, null, '^'), + array(null, 0, 0, null, '>'), + array(null, 0, 0, 0, null), + array(null, 0, 0, 0, '<'), + array(null, 0, 0, 0, '!'), + array(null, 0, 0, 0, '^'), + array(null, 0, 0, 0, '>'), + array(null, 0, 0, -1, null), + array(null, 0, 0, -1, '<'), + array(null, 0, 0, -1, '!'), + array(null, 0, 0, -1, '^'), + array(null, 0, 0, -1, '>'), + array(null, 0, 0, 1, null), + array(null, 0, 0, 1, '<'), + array(null, 0, 0, 1, '!'), + array(null, 0, 0, 1, '^'), + array(null, 0, 0, 1, '>'), + array(null, 0, -1, null, null), + array(null, 0, -1, null, '<'), + array(null, 0, -1, null, '!'), + array(null, 0, -1, null, '^'), + array(null, 0, -1, null, '>'), + array(null, 0, -1, 0, null), + array(null, 0, -1, 0, '<'), + array(null, 0, -1, 0, '!'), + array(null, 0, -1, 0, '^'), + array(null, 0, -1, 0, '>'), + array(null, 0, -1, -1, null), + array(null, 0, -1, -1, '<'), + array(null, 0, -1, -1, '!'), + array(null, 0, -1, -1, '^'), + array(null, 0, -1, -1, '>'), + array(null, 0, -1, 1, null), + array(null, 0, -1, 1, '<'), + array(null, 0, -1, 1, '!'), + array(null, 0, -1, 1, '^'), + array(null, 0, -1, 1, '>'), + array(null, 0, 1, null, null), + array(null, 0, 1, null, '<'), + array(null, 0, 1, null, '!'), + array(null, 0, 1, null, '^'), + array(null, 0, 1, null, '>'), + array(null, 0, 1, 0, null), + array(null, 0, 1, 0, '<'), + array(null, 0, 1, 0, '!'), + array(null, 0, 1, 0, '^'), + array(null, 0, 1, 0, '>'), + array(null, 0, 1, -1, null), + array(null, 0, 1, -1, '<'), + array(null, 0, 1, -1, '!'), + array(null, 0, 1, -1, '^'), + array(null, 0, 1, -1, '>'), + array(null, 0, 1, 1, null), + array(null, 0, 1, 1, '<'), + array(null, 0, 1, 1, '!'), + array(null, 0, 1, 1, '^'), + array(null, 0, 1, 1, '>'), + array(0, null, null, null, null), + array(0, null, null, null, '<'), + array(0, null, null, null, '!'), + array(0, null, null, null, '^'), + array(0, null, null, null, '>'), + array(0, null, null, 0, null), + array(0, null, null, 0, '<'), + array(0, null, null, 0, '!'), + array(0, null, null, 0, '^'), + array(0, null, null, 0, '>'), + array(0, null, null, -1, null), + array(0, null, null, -1, '<'), + array(0, null, null, -1, '!'), + array(0, null, null, -1, '^'), + array(0, null, null, -1, '>'), + array(0, null, null, 1, null), + array(0, null, null, 1, '<'), + array(0, null, null, 1, '!'), + array(0, null, null, 1, '^'), + array(0, null, null, 1, '>'), + array(0, null, 0, null, null), + array(0, null, 0, null, '<'), + array(0, null, 0, null, '!'), + array(0, null, 0, null, '^'), + array(0, null, 0, null, '>'), + array(0, null, 0, 0, null), + array(0, null, 0, 0, '<'), + array(0, null, 0, 0, '!'), + array(0, null, 0, 0, '^'), + array(0, null, 0, 0, '>'), + array(0, null, 0, -1, null), + array(0, null, 0, -1, '<'), + array(0, null, 0, -1, '!'), + array(0, null, 0, -1, '^'), + array(0, null, 0, -1, '>'), + array(0, null, 0, 1, null), + array(0, null, 0, 1, '<'), + array(0, null, 0, 1, '!'), + array(0, null, 0, 1, '^'), + array(0, null, 0, 1, '>'), + array(0, null, -1, null, null), + array(0, null, -1, null, '<'), + array(0, null, -1, null, '!'), + array(0, null, -1, null, '^'), + array(0, null, -1, null, '>'), + array(0, null, -1, 0, null), + array(0, null, -1, 0, '<'), + array(0, null, -1, 0, '!'), + array(0, null, -1, 0, '^'), + array(0, null, -1, 0, '>'), + array(0, null, -1, -1, null), + array(0, null, -1, -1, '<'), + array(0, null, -1, -1, '!'), + array(0, null, -1, -1, '^'), + array(0, null, -1, -1, '>'), + array(0, null, -1, 1, null), + array(0, null, -1, 1, '<'), + array(0, null, -1, 1, '!'), + array(0, null, -1, 1, '^'), + array(0, null, -1, 1, '>'), + array(0, null, 1, null, null), + array(0, null, 1, null, '<'), + array(0, null, 1, null, '!'), + array(0, null, 1, null, '^'), + array(0, null, 1, null, '>'), + array(0, null, 1, 0, null), + array(0, null, 1, 0, '<'), + array(0, null, 1, 0, '!'), + array(0, null, 1, 0, '^'), + array(0, null, 1, 0, '>'), + array(0, null, 1, -1, null), + array(0, null, 1, -1, '<'), + array(0, null, 1, -1, '!'), + array(0, null, 1, -1, '^'), + array(0, null, 1, -1, '>'), + array(0, null, 1, 1, null), + array(0, null, 1, 1, '<'), + array(0, null, 1, 1, '!'), + array(0, null, 1, 1, '^'), + array(0, null, 1, 1, '>'), + array(0, 0, null, null, null), + array(0, 0, null, null, '<'), + array(0, 0, null, null, '!'), + array(0, 0, null, null, '^'), + array(0, 0, null, null, '>'), + array(0, 0, null, 0, null), + array(0, 0, null, 0, '<'), + array(0, 0, null, 0, '!'), + array(0, 0, null, 0, '^'), + array(0, 0, null, 0, '>'), + array(0, 0, null, -1, null), + array(0, 0, null, -1, '<'), + array(0, 0, null, -1, '!'), + array(0, 0, null, -1, '^'), + array(0, 0, null, -1, '>'), + array(0, 0, null, 1, null), + array(0, 0, null, 1, '<'), + array(0, 0, null, 1, '!'), + array(0, 0, null, 1, '^'), + array(0, 0, null, 1, '>'), + array(0, 0, 0, null, null), + array(0, 0, 0, null, '<'), + array(0, 0, 0, null, '!'), + array(0, 0, 0, null, '^'), + array(0, 0, 0, null, '>'), + array(0, 0, 0, 0, null), + array(0, 0, 0, 0, '<'), + array(0, 0, 0, 0, '!'), + array(0, 0, 0, 0, '^'), + array(0, 0, 0, 0, '>'), + array(0, 0, 0, -1, null), + array(0, 0, 0, -1, '<'), + array(0, 0, 0, -1, '!'), + array(0, 0, 0, -1, '^'), + array(0, 0, 0, -1, '>'), + array(0, 0, 0, 1, null), + array(0, 0, 0, 1, '<'), + array(0, 0, 0, 1, '!'), + array(0, 0, 0, 1, '^'), + array(0, 0, 0, 1, '>'), + array(0, 0, -1, null, null), + array(0, 0, -1, null, '<'), + array(0, 0, -1, null, '!'), + array(0, 0, -1, null, '^'), + array(0, 0, -1, null, '>'), + array(0, 0, -1, 0, null), + array(0, 0, -1, 0, '<'), + array(0, 0, -1, 0, '!'), + array(0, 0, -1, 0, '^'), + array(0, 0, -1, 0, '>'), + array(0, 0, -1, -1, null), + array(0, 0, -1, -1, '<'), + array(0, 0, -1, -1, '!'), + array(0, 0, -1, -1, '^'), + array(0, 0, -1, -1, '>'), + array(0, 0, -1, 1, null), + array(0, 0, -1, 1, '<'), + array(0, 0, -1, 1, '!'), + array(0, 0, -1, 1, '^'), + array(0, 0, -1, 1, '>'), + array(0, 0, 1, null, null), + array(0, 0, 1, null, '<'), + array(0, 0, 1, null, '!'), + array(0, 0, 1, null, '^'), + array(0, 0, 1, null, '>'), + array(0, 0, 1, 0, null), + array(0, 0, 1, 0, '<'), + array(0, 0, 1, 0, '!'), + array(0, 0, 1, 0, '^'), + array(0, 0, 1, 0, '>'), + array(0, 0, 1, -1, null), + array(0, 0, 1, -1, '<'), + array(0, 0, 1, -1, '!'), + array(0, 0, 1, -1, '^'), + array(0, 0, 1, -1, '>'), + array(0, 0, 1, 1, null), + array(0, 0, 1, 1, '<'), + array(0, 0, 1, 1, '!'), + array(0, 0, 1, 1, '^'), + array(0, 0, 1, 1, '>'), + array(0, 100, null, null, null), + array(0, 100, null, null, '<'), + array(0, 100, null, null, '!'), + array(0, 100, null, null, '^'), + array(0, 100, null, null, '>'), + array(0, 100, null, 0, null), + array(0, 100, null, 0, '<'), + array(0, 100, null, 0, '!'), + array(0, 100, null, 0, '^'), + array(0, 100, null, 0, '>'), + array(0, 100, null, -1, null), + array(0, 100, null, -1, '<'), + array(0, 100, null, -1, '!'), + array(0, 100, null, -1, '^'), + array(0, 100, null, -1, '>'), + array(0, 100, null, 1, null), + array(0, 100, null, 1, '<'), + array(0, 100, null, 1, '!'), + array(0, 100, null, 1, '^'), + array(0, 100, null, 1, '>'), + array(0, 100, 0, null, null), + array(0, 100, 0, null, '<'), + array(0, 100, 0, null, '!'), + array(0, 100, 0, null, '^'), + array(0, 100, 0, null, '>'), + array(0, 100, 0, 0, null), + array(0, 100, 0, 0, '<'), + array(0, 100, 0, 0, '!'), + array(0, 100, 0, 0, '^'), + array(0, 100, 0, 0, '>'), + array(0, 100, 0, -1, null), + array(0, 100, 0, -1, '<'), + array(0, 100, 0, -1, '!'), + array(0, 100, 0, -1, '^'), + array(0, 100, 0, -1, '>'), + array(0, 100, 0, 1, null), + array(0, 100, 0, 1, '<'), + array(0, 100, 0, 1, '!'), + array(0, 100, 0, 1, '^'), + array(0, 100, 0, 1, '>'), + array(0, 100, -1, null, null), + array(0, 100, -1, null, '<'), + array(0, 100, -1, null, '!'), + array(0, 100, -1, null, '^'), + array(0, 100, -1, null, '>'), + array(0, 100, -1, 0, null), + array(0, 100, -1, 0, '<'), + array(0, 100, -1, 0, '!'), + array(0, 100, -1, 0, '^'), + array(0, 100, -1, 0, '>'), + array(0, 100, -1, -1, null), + array(0, 100, -1, -1, '<'), + array(0, 100, -1, -1, '!'), + array(0, 100, -1, -1, '^'), + array(0, 100, -1, -1, '>'), + array(0, 100, -1, 1, null), + array(0, 100, -1, 1, '<'), + array(0, 100, -1, 1, '!'), + array(0, 100, -1, 1, '^'), + array(0, 100, -1, 1, '>'), + array(0, 100, 1, null, null), + array(0, 100, 1, null, '<'), + array(0, 100, 1, null, '!'), + array(0, 100, 1, null, '^'), + array(0, 100, 1, null, '>'), + array(0, 100, 1, 0, null), + array(0, 100, 1, 0, '<'), + array(0, 100, 1, 0, '!'), + array(0, 100, 1, 0, '^'), + array(0, 100, 1, 0, '>'), + array(0, 100, 1, -1, null), + array(0, 100, 1, -1, '<'), + array(0, 100, 1, -1, '!'), + array(0, 100, 1, -1, '^'), + array(0, 100, 1, -1, '>'), + array(0, 100, 1, 1, null), + array(0, 100, 1, 1, '<'), + array(0, 100, 1, 1, '!'), + array(0, 100, 1, 1, '^'), + array(0, 100, 1, 1, '>'), + array(100, 0, null, null, null), + array(100, 0, null, null, '<'), + array(100, 0, null, null, '!'), + array(100, 0, null, null, '^'), + array(100, 0, null, null, '>'), + array(100, 0, null, 0, null), + array(100, 0, null, 0, '<'), + array(100, 0, null, 0, '!'), + array(100, 0, null, 0, '^'), + array(100, 0, null, 0, '>'), + array(100, 0, null, -1, null), + array(100, 0, null, -1, '<'), + array(100, 0, null, -1, '!'), + array(100, 0, null, -1, '^'), + array(100, 0, null, -1, '>'), + array(100, 0, null, 1, null), + array(100, 0, null, 1, '<'), + array(100, 0, null, 1, '!'), + array(100, 0, null, 1, '^'), + array(100, 0, null, 1, '>'), + array(100, 0, 0, null, null), + array(100, 0, 0, null, '<'), + array(100, 0, 0, null, '!'), + array(100, 0, 0, null, '^'), + array(100, 0, 0, null, '>'), + array(100, 0, 0, 0, null), + array(100, 0, 0, 0, '<'), + array(100, 0, 0, 0, '!'), + array(100, 0, 0, 0, '^'), + array(100, 0, 0, 0, '>'), + array(100, 0, 0, -1, null), + array(100, 0, 0, -1, '<'), + array(100, 0, 0, -1, '!'), + array(100, 0, 0, -1, '^'), + array(100, 0, 0, -1, '>'), + array(100, 0, 0, 1, null), + array(100, 0, 0, 1, '<'), + array(100, 0, 0, 1, '!'), + array(100, 0, 0, 1, '^'), + array(100, 0, 0, 1, '>'), + array(100, 0, -1, null, null), + array(100, 0, -1, null, '<'), + array(100, 0, -1, null, '!'), + array(100, 0, -1, null, '^'), + array(100, 0, -1, null, '>'), + array(100, 0, -1, 0, null), + array(100, 0, -1, 0, '<'), + array(100, 0, -1, 0, '!'), + array(100, 0, -1, 0, '^'), + array(100, 0, -1, 0, '>'), + array(100, 0, -1, -1, null), + array(100, 0, -1, -1, '<'), + array(100, 0, -1, -1, '!'), + array(100, 0, -1, -1, '^'), + array(100, 0, -1, -1, '>'), + array(100, 0, -1, 1, null), + array(100, 0, -1, 1, '<'), + array(100, 0, -1, 1, '!'), + array(100, 0, -1, 1, '^'), + array(100, 0, -1, 1, '>'), + array(100, 0, 1, null, null), + array(100, 0, 1, null, '<'), + array(100, 0, 1, null, '!'), + array(100, 0, 1, null, '^'), + array(100, 0, 1, null, '>'), + array(100, 0, 1, 0, null), + array(100, 0, 1, 0, '<'), + array(100, 0, 1, 0, '!'), + array(100, 0, 1, 0, '^'), + array(100, 0, 1, 0, '>'), + array(100, 0, 1, -1, null), + array(100, 0, 1, -1, '<'), + array(100, 0, 1, -1, '!'), + array(100, 0, 1, -1, '^'), + array(100, 0, 1, -1, '>'), + array(100, 0, 1, 1, null), + array(100, 0, 1, 1, '<'), + array(100, 0, 1, 1, '!'), + array(100, 0, 1, 1, '^'), + array(100, 0, 1, 1, '>'), + ); + } +} diff --git a/Tests/ReferencesTest.php b/Tests/ReferencesTest.php index ea26cb2..0467091 100644 --- a/Tests/ReferencesTest.php +++ b/Tests/ReferencesTest.php @@ -125,62 +125,4 @@ public function provideIncorrectColors() ); } - /** - * @dataProvider provideCorrectGeometries - * @param string $geometry - */ - public function testCorrectGeometries($geometry) - { - $exception = false; - try { - $checked = $this->ref->geometry($geometry); - $this->assertEquals($checked, trim($geometry)); - } catch (\InvalidArgumentException $e) { - $exception = true; - } - $this->assertFalse($exception, sprintf("Failed in checking valid geometry (%s)", $geometry)); - } - - public function provideCorrectGeometries() - { - return array( - array('x100'), - array('100x100'), - array('100'), - array('+0+0'), - array('x100+0+0'), - array('100+0+0'), - array('100x100+0+0'), - array('100%x100%+0+0'), - ); - } - - /** - * @dataProvider provideIncorrectGeometries - * @param string $geometry - */ - public function testIncorrectGeometries($geometry) - { - $msg = ''; - try { - $this->ref->geometry($geometry); - } catch (\InvalidArgumentException $e) { - $msg = $e->getMessage(); - } - $this->assertContains( - sprintf("The specified geometry (%s) is invalid", $geometry), - $msg - ); - } - - public function provideIncorrectGeometries() - { - return array( - array('100x'), - array('+0'), - array('x100+0'), - array('100%x100%+0'), - ); - } - } diff --git a/Tests/bootstrap.php b/Tests/bootstrap.php index e52fa3e..f0f43e0 100644 --- a/Tests/bootstrap.php +++ b/Tests/bootstrap.php @@ -42,3 +42,6 @@ "in the global PATH variable, or that it is accessible in /usr/bin" ); } + +echo "Analyzed ImageMagick directory: ".IMAGEMAGICK_DIR."\n"; +system(IMAGEMAGICK_DIR.'convert -version');