File: LengthExpressionTest.php

package info (click to toggle)
php-doctrine-dbal 4.3.2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 5,092 kB
  • sloc: php: 60,293; xml: 618; makefile: 23
file content (41 lines) | stat: -rw-r--r-- 1,528 bytes parent folder | download | duplicates (2)
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
<?php

declare(strict_types=1);

namespace Doctrine\DBAL\Tests\Functional\Platform;

use Doctrine\DBAL\Platforms\SQLServerPlatform;
use Doctrine\DBAL\Tests\FunctionalTestCase;
use PHPUnit\Framework\Attributes\DataProvider;

final class LengthExpressionTest extends FunctionalTestCase
{
    /** @link https://docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support */
    #[DataProvider('expressionProvider')]
    public function testLengthExpression(string $value, int $expected, bool $isMultibyte): void
    {
        $platform = $this->connection->getDatabasePlatform();

        if ($isMultibyte && $platform instanceof SQLServerPlatform) {
            $version = $this->connection->fetchOne("SELECT SERVERPROPERTY('ProductMajorVersion')");

            if ($version < 15) {
                self::markTestSkipped('UTF-8 support is only available as of SQL Server 2019');
            }
        }

        $platform = $this->connection->getDatabasePlatform();
        $query    = $platform->getDummySelectSQL($platform->getLengthExpression('?'));

        self::assertEquals($expected, $this->connection->fetchOne($query, [$value]));
    }

    /** @return iterable<string,array{string,int,bool}> */
    public static function expressionProvider(): iterable
    {
        yield '1-byte' => ['Hello, world!', 13, false];
        yield '2-byte' => ['Привет, мир!', 12, true];
        yield '3-byte' => ['你好,世界', 5, true];
        yield '4-byte' => ['💩', 1, true];
    }
}