Completed
Push — master ( 0e8ad2...954ce2 )
by Luís
17s
created

testParseColumnCommentFromSQL()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 6
nc 1
nop 3
1
<?php
2
3
namespace Doctrine\Tests\DBAL\Schema;
4
5
use Doctrine\DBAL\Connection;
6
use Doctrine\DBAL\Platforms\SqlitePlatform;
7
use Doctrine\DBAL\Schema\SqliteSchemaManager;
8
9
class SqliteSchemaManagerTest extends \PHPUnit\Framework\TestCase
10
{
11
    /**
12
     * @dataProvider getDataColumnCollation
13
     *
14
     * @group 2865
15
     */
16
    public function testParseColumnCollation(?string $collation, string $column, string $sql) : void
17
    {
18
        $conn = $this->createMock(Connection::class);
19
        $conn->method('getDatabasePlatform')->willReturn(new SqlitePlatform());
20
21
        $manager = new SqliteSchemaManager($conn);
22
        $ref     = new \ReflectionMethod($manager, 'parseColumnCollationFromSQL');
23
        $ref->setAccessible(true);
24
25
        self::assertSame($collation, $ref->invoke($manager, $column, $sql));
26
    }
27
28
    public function getDataColumnCollation()
29
    {
30
        return [
31
            ['RTRIM', 'a', 'CREATE TABLE "a" ("a" text DEFAULT "aa" COLLATE "RTRIM" NOT NULL)'],
32
            ['utf-8', 'a', 'CREATE TABLE "a" ("b" text UNIQUE NOT NULL COLLATE NOCASE, "a" text DEFAULT "aa" COLLATE "utf-8" NOT NULL)'],
33
            ['NOCASE', 'a', 'CREATE TABLE "a" ("a" text DEFAULT (lower(ltrim(" a") || rtrim("a "))) CHECK ("a") NOT NULL COLLATE NOCASE UNIQUE, "b" text COLLATE RTRIM)'],
34
            [null, 'a', 'CREATE TABLE "a" ("a" text CHECK ("a") NOT NULL, "b" text COLLATE RTRIM)'],
35
            ['RTRIM', 'a"b', 'CREATE TABLE "a" ("a""b" text COLLATE RTRIM)'],
36
            ['BINARY', 'b', 'CREATE TABLE "a" (bb TEXT COLLATE RTRIM, b VARCHAR(42) NOT NULL COLLATE BINARY)'],
37
            ['BINARY', 'b', 'CREATE TABLE "a" (bbb TEXT COLLATE NOCASE, bb TEXT COLLATE RTRIM, b VARCHAR(42) NOT NULL COLLATE BINARY)'],
38
            ['BINARY', 'b', 'CREATE TABLE "a" (b VARCHAR(42) NOT NULL COLLATE BINARY, bb TEXT COLLATE RTRIM)'],
39
        ];
40
    }
41
42
    /**
43
     * @dataProvider getDataColumnComment
44
     *
45
     * @group 2865
46
     */
47
    public function testParseColumnCommentFromSQL(?string $comment, string $column, string $sql) : void
48
    {
49
        $conn = $this->createMock(Connection::class);
50
        $conn->method('getDatabasePlatform')->willReturn(new SqlitePlatform());
51
52
        $manager = new SqliteSchemaManager($conn);
53
        $ref     = new \ReflectionMethod($manager, 'parseColumnCommentFromSQL');
54
        $ref->setAccessible(true);
55
56
        self::assertSame($comment, $ref->invoke($manager, $column, $sql));
57
    }
58
59
    public function getDataColumnComment()
60
    {
61
        return [
62
            'Single column with no comment' => [
63
                null, 'a', 'CREATE TABLE "a" ("a" TEXT DEFAULT "a" COLLATE RTRIM)',
64
            ],
65
            'Single column with type comment' => [
66
                '(DC2Type:x)', 'a', 'CREATE TABLE "a" ("a" CLOB DEFAULT NULL COLLATE BINARY --(DC2Type:x)
67
)',
68
            ],
69
            'Multiple similar columns with type comment 1' => [
70
                null, 'b', 'CREATE TABLE "a" (a TEXT COLLATE RTRIM, "b" TEXT DEFAULT "a" COLLATE RTRIM, "bb" CLOB DEFAULT NULL COLLATE BINARY --(DC2Type:x)
71
)',
72
            ],
73
            'Multiple similar columns with type comment 2' => [
74
                '(DC2Type:x)', 'b', 'CREATE TABLE "a" (a TEXT COLLATE RTRIM, "bb" TEXT DEFAULT "a" COLLATE RTRIM, "b" CLOB DEFAULT NULL COLLATE BINARY --(DC2Type:x)
75
)',
76
            ],
77
            'Multiple similar columns on different lines, with type comment 1' => [
78
                null, 'bb', 'CREATE TABLE "a" (a TEXT COLLATE RTRIM, "b" CLOB DEFAULT NULL COLLATE BINARY --(DC2Type:x)
79
, "bb" TEXT DEFAULT "a" COLLATE RTRIM',
80
            ],
81
            'Multiple similar columns on different lines, with type comment 2' => [
82
                '(DC2Type:x)', 'bb', 'CREATE TABLE "a" (a TEXT COLLATE RTRIM, "bb" CLOB DEFAULT NULL COLLATE BINARY --(DC2Type:x)
83
, "b" TEXT DEFAULT "a" COLLATE RTRIM',
84
            ],
85
            'Column with numeric but no comment 1' => [
86
                null, 'a', 'CREATE TABLE "a" ("a" NUMERIC(10, 0) NOT NULL, "b" CLOB NOT NULL --(DC2Type:array)
87
, "c" CHAR(36) NOT NULL --(DC2Type:guid)
88
)',
89
            ],
90
            'Column with numeric but no comment 2' => [
91
                null, 'a', 'CREATE TABLE "b" ("a" NUMERIC(10, 0) NOT NULL, "b" CLOB NOT NULL --(DC2Type:array)
92
, "c" CHAR(36) NOT NULL --(DC2Type:guid)
93
)',
94
            ],
95
            'Column with numeric but no comment 3' => [
96
                '(DC2Type:guid)', 'c', 'CREATE TABLE "b" ("a" NUMERIC(10, 0) NOT NULL, "b" CLOB NOT NULL --(DC2Type:array)
97
, "c" CHAR(36) NOT NULL --(DC2Type:guid)
98
)',
99
            ],
100
        ];
101
    }
102
}
103