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
|
<?php
declare(strict_types=1);
namespace Doctrine\DBAL\Tests\Types;
use Doctrine\DBAL\Types\Exception\InvalidFormat;
use Doctrine\DBAL\Types\Exception\InvalidType;
use Doctrine\DBAL\Types\Exception\ValueNotConvertible;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
use stdClass;
use Throwable;
use function get_debug_type;
use function sprintf;
use function tmpfile;
class ConversionExceptionTest extends TestCase
{
public function testConversionFailedPreviousException(): void
{
$previous = $this->createMock(Throwable::class);
$exception = ValueNotConvertible::new('foo', 'foo', null, $previous);
self::assertSame($previous, $exception->getPrevious());
}
#[DataProvider('scalarsProvider')]
public function testConversionFailedInvalidTypeWithScalar(mixed $scalarValue, string $expected): void
{
$exception = InvalidType::new($scalarValue, 'foo', ['bar', 'baz']);
self::assertStringContainsString(
$expected,
$exception->getMessage(),
);
}
#[DataProvider('nonScalarsProvider')]
public function testConversionFailedInvalidTypeWithNonScalar(mixed $nonScalar): void
{
$exception = InvalidType::new($nonScalar, 'foo', ['bar', 'baz']);
self::assertSame(
sprintf(
'Could not convert PHP value of type %s to type foo.'
. ' Expected one of the following types: bar, baz.',
get_debug_type($nonScalar),
),
$exception->getMessage(),
);
}
public function testConversionFailedInvalidTypePreviousException(): void
{
$previous = $this->createMock(Throwable::class);
$exception = InvalidType::new('foo', 'foo', ['bar', 'baz'], $previous);
self::assertSame($previous, $exception->getPrevious());
}
public function testConversionFailedFormatPreservesPreviousException(): void
{
$previous = $this->createMock(Throwable::class);
$exception = InvalidFormat::new('foo', 'bar', 'baz', $previous);
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'],
];
}
}
|