packages/ztd-query-postgres/tests/Unit/Schema/Key/DefinitionTokensTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Schema\Key;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9
10#[CoversClass(\ZtdQuery\Platform\Postgres\Schema\Key\DefinitionTokens::class)]
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::class)]
12final class DefinitionTokensTest extends TestCase
13{
14    public function testTableBody(): void
15    {
16        self::assertSame('id INT, parent_id INT REFERENCES parents (id)', (new \ZtdQuery\Platform\Postgres\Schema\Key\DefinitionTokens())->tableBody('CREATE TABLE children (id INT, parent_id INT REFERENCES parents (id))'));
17    }
18
19    public function testKeywordIndex(): void
20    {
21        $sql = 'FOREIGN KEY (parent_id) REFERENCES parents (id) ON DELETE CASCADE';
22        $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
23        $tokens = $stream->significantTokens();
24
25        self::assertSame(5, \ZtdQuery\Platform\Postgres\Schema\Key\DefinitionTokens::keywordIndex($tokens, 'REFERENCES'));
26    }
27
28    public function testSymbolIndex(): void
29    {
30        $sql = 'FOREIGN KEY (parent_id) REFERENCES parents (id) ON DELETE CASCADE';
31        $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
32        $tokens = $stream->significantTokens();
33
34        self::assertSame(2, \ZtdQuery\Platform\Postgres\Schema\Key\DefinitionTokens::symbolIndex($tokens, '(', 0));
35    }
36
37    public function testIsSymbol(): void
38    {
39        self::assertSame(false, \ZtdQuery\Platform\Postgres\Schema\Key\DefinitionTokens::isSymbol(null, '('));
40    }
41}
42