Commit f0534f3d authored by Marco Pivetta's avatar Marco Pivetta

#869 - DBAL-1293 - basic coverage for the conversion exception

parent ae0a2051
...@@ -77,19 +77,20 @@ class ConversionException extends \Doctrine\DBAL\DBALException ...@@ -77,19 +77,20 @@ class ConversionException extends \Doctrine\DBAL\DBALException
*/ */
static public function conversionFailedInvalidType($value, $toType, array $possibleTypes) static public function conversionFailedInvalidType($value, $toType, array $possibleTypes)
{ {
$actualType = gettype($value); $actualType = is_object($value) ? get_class($value) : gettype($value);
if ($actualType === 'object') {
$actualType .= ' (' . get_class($value) . ')'; if (is_scalar($value)) {
if (!method_exists($value, '__toString')) { return new self(sprintf(
$value = 'object'; "Could not convert PHP value '%s' of type '%s' to type '%s'. Expected one of the following types: %s",
} $value,
$actualType,
$toType,
implode(', ', $possibleTypes)
));
} }
$value = (string)$value;
$value = (strlen($value) > 32) ? substr($value, 0, 20) . "..." : $value;
return new self(sprintf( return new self(sprintf(
"Could not convert PHP value '%s' of type '%s' to type '%s'. Expected one of the following: %s", "Could not convert PHP value of type '%s' to type '%s'. Expected one of the following types: %s",
$value,
$actualType, $actualType,
$toType, $toType,
implode(', ', $possibleTypes) implode(', ', $possibleTypes)
......
<?php
namespace Doctrine\Tests\DBAL\Types;
use Doctrine\DBAL\Types\ConversionException;
use PHPUnit_Framework_TestCase;
class ConversionExceptionTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider scalarsProvider
*
* @param mixed $scalarValue
*/
public function testConversionFailedInvalidTypeWithScalar($scalarValue)
{
$exception = ConversionException::conversionFailedInvalidType($scalarValue, 'foo', ['bar', 'baz']);
$this->assertInstanceOf('Doctrine\DBAL\Types\ConversionException', $exception);
$this->assertRegExp(
'/^Could not convert PHP value \'.*\' of type \'(string|boolean|float|double|integer)\' to type \'foo\'. '
. 'Expected one of the following types: bar, baz$/',
$exception->getMessage()
);
}
public function scalarsProvider()
{
return [
[''],
['foo'],
[123],
[-123],
[12.34],
[true],
[false],
];
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment