1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
<?php
namespace Doctrine\DBAL\Tests\Types;
use Doctrine\DBAL\Types\ConversionException;
use PHPUnit\Framework\TestCase;
use stdClass;
use Throwable;
use function tmpfile;
class ConversionExceptionTest extends TestCase
{
public function testConversionFailedPreviousException(): void
{
$previous = $this->createMock(Throwable::class);
$exception = ConversionException::conversionFailed('foo', 'foo', $previous);
self::assertInstanceOf(ConversionException::class, $exception);
self::assertSame($previous, $exception->getPrevious());
}
/**
* @param mixed $scalarValue
*
* @dataProvider scalarsProvider
*/
public function testConversionFailedInvalidTypeWithScalar($scalarValue, string $expected): void
{
$exception = ConversionException::conversionFailedInvalidType($scalarValue, 'foo', ['bar', 'baz']);
self::assertInstanceOf(ConversionException::class, $exception);
self::assertStringContainsString(
$expected,
$exception->getMessage(),
);
}
/**
* @param mixed $nonScalar
*
* @dataProvider nonScalarsProvider
*/
public function testConversionFailedInvalidTypeWithNonScalar($nonScalar): void
{
$exception = ConversionException::conversionFailedInvalidType($nonScalar, 'foo', ['bar', 'baz']);
self::assertInstanceOf(ConversionException::class, $exception);
self::assertMatchesRegularExpression(
'/^Could not convert PHP value of type (.*) to type foo. '
. 'Expected one of the following types: bar, baz$/',
$exception->getMessage(),
);
}
public function testConversionFailedInvalidTypePreviousException(): void
{
$previous = $this->createMock(Throwable::class);
$exception = ConversionException::conversionFailedInvalidType('foo', 'foo', ['bar', 'baz'], $previous);
self::assertInstanceOf(ConversionException::class, $exception);
self::assertSame($previous, $exception->getPrevious());
}
public function testConversionFailedFormatPreservesPreviousException(): void
{
$previous = $this->createMock(Throwable::class);
$exception = ConversionException::conversionFailedFormat('foo', 'bar', 'baz', $previous);
self::assertInstanceOf(ConversionException::class, $exception);
self::assertSame($previous, $exception->getPrevious());
}
/** @return mixed[][] */
public static function nonScalarsProvider(): iterable
{
return [
[[]],
[new stdClass()],
[tmpfile()],
];
}
/** @return mixed[][] */
public static function scalarsProvider(): iterable
{
return [
['foo', "PHP value 'foo'"],
[123, 'PHP value 123'],
[-123, 'PHP value -123'],
[12.34, 'PHP value 12.34'],
[true, 'PHP value true'],
[false, 'PHP value false'],
[null, 'PHP value NULL'],
];
}
}
|