. */ declare(strict_types=1); namespace App\Tests\Doctrine\Functions; use App\Doctrine\Functions\Regexp; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Platforms\MySQLPlatform; use Doctrine\DBAL\Platforms\PostgreSQLPlatform; use Doctrine\DBAL\Platforms\SQLitePlatform; use Doctrine\DBAL\Platforms\SQLServerPlatform; use PHPUnit\Framework\Attributes\DataProvider; final class RegexpTest extends AbstractDoctrineFunctionTestCase { public static function regexpPlatformProvider(): \Generator { yield 'mysql' => [new MySQLPlatform(), '(part_name REGEXP :regex)']; yield 'sqlite' => [new SQLitePlatform(), '(part_name REGEXP :regex)']; yield 'postgres' => [new PostgreSQLPlatform(), '(part_name ~* :regex)']; } #[DataProvider('regexpPlatformProvider')] public function testRegexpUsesExpectedOperator(AbstractPlatform $platform, string $expectedSql): void { $function = new Regexp('REGEXP'); $this->setObjectProperty($function, 'value', $this->createNode('part_name')); $this->setObjectProperty($function, 'regexp', $this->createNode(':regex')); $sql = $function->getSql($this->createSqlWalker($platform)); $this->assertSame($expectedSql, $sql); } public function testRegexpThrowsOnUnsupportedPlatform(): void { $function = new Regexp('REGEXP'); $this->setObjectProperty($function, 'value', $this->createNode('part_name')); $this->setObjectProperty($function, 'regexp', $this->createNode(':regex')); $this->expectException(\RuntimeException::class); $this->expectExceptionMessage('does not support regular expressions'); $function->getSql($this->createSqlWalker(new SQLServerPlatform())); } }