diff --git a/CHANGELOG.md b/CHANGELOG.md index 7118d56e..4dd21347 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,7 @@ All notable changes to this project will be documented in this file, in reverse ### Fixed -- Nothing. +- [#179](https://github.com/zendframework/zend-code/pull/179) fixes exception message when invalid value provided in `Zend\Code\Generator\ValueGenerator`. ## 3.4.0 - 2019-10-06 diff --git a/src/Generator/ValueGenerator.php b/src/Generator/ValueGenerator.php index d0c6b69f..28d1fa42 100644 --- a/src/Generator/ValueGenerator.php +++ b/src/Generator/ValueGenerator.php @@ -25,6 +25,7 @@ use function in_array; use function is_array; use function is_int; +use function is_object; use function max; use function sprintf; use function str_repeat; @@ -437,9 +438,10 @@ public function generate() break; case self::TYPE_OTHER: default: - throw new Exception\RuntimeException( - sprintf('Type "%s" is unknown or cannot be used as property default value.', get_class($value)) - ); + throw new Exception\RuntimeException(sprintf( + 'Type "%s" is unknown or cannot be used as property default value.', + is_object($value) ? get_class($value) : gettype($value) + )); } return $output; diff --git a/test/Generator/ValueGeneratorTest.php b/test/Generator/ValueGeneratorTest.php index 13551b1f..c33d521d 100644 --- a/test/Generator/ValueGeneratorTest.php +++ b/test/Generator/ValueGeneratorTest.php @@ -11,8 +11,11 @@ use ArrayAccess; use ArrayObject as SplArrayObject; +use DateTime; +use Generator; use PHPUnit\Framework\TestCase; use Zend\Code\Exception\InvalidArgumentException; +use Zend\Code\Exception\RuntimeException; use Zend\Code\Generator\PropertyGenerator; use Zend\Code\Generator\PropertyValueGenerator; use Zend\Code\Generator\ValueGenerator; @@ -462,4 +465,24 @@ public function getEscapedParameters() ["\\'", "\\\\\\'"], ]; } + + public function invalidValue() : Generator + { + yield 'object' => [new DateTime(), DateTime::class]; + yield 'resource' => [fopen('php://input', 'r'), 'resource']; + } + + /** + * @dataProvider invalidValue + * + * @param mixed $value + */ + public function testExceptionInvalidValue($value, string $type) : void + { + $valueGenerator = new ValueGenerator($value); + + $this->expectException(RuntimeException::class); + $this->expectExceptionMessage('Type "'.$type.'" is unknown or cannot be used'); + $valueGenerator->generate(); + } }