packages/ztd-query-postgres/tests/Unit/Sql/Relation/RelationReferenceTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql\Relation;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9
10#[CoversClass(\ZtdQuery\Platform\Postgres\Sql\Relation\RelationReference::class)]
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::class)]
12final class RelationReferenceTest extends TestCase
13{
14    public function testClosingToken(): void
15    {
16        $sql = '(SELECT 1)';
17        $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
18        $tokens = $stream->significantTokens();
19
20        self::assertEquals(new \ZtdQuery\Sql\SqlToken(kind: \ZtdQuery\Sql\SqlTokenKind::Symbol, text: ')', offset: 9, depth: 0, bracketDepth: 0), (new \ZtdQuery\Platform\Postgres\Sql\Relation\RelationReference())->closingToken($tokens, 0));
21    }
22
23    public function testReferenceAt(): void
24    {
25        $sql = 'public."Users" u';
26        $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
27        $tokens = $stream->significantTokens();
28
29        self::assertSame(['name' => 'Users', 'start' => 0, 'unqualifiedStart' => 7, 'end' => 14], (new \ZtdQuery\Platform\Postgres\Sql\Relation\RelationReference())->referenceAt($sql, $tokens, 0));
30    }
31
32    public function testIdentifierComponentAt(): void
33    {
34        $sql = 'public."Users" u';
35        $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
36        $tokens = $stream->significantTokens();
37
38        self::assertSame(['Users', 3, 7, 7, 14], (new \ZtdQuery\Platform\Postgres\Sql\Relation\RelationReference())->identifierComponentAt($tokens, 2));
39    }
40
41    public function testTokens(): void
42    {
43        self::assertEquals([new \ZtdQuery\Sql\SqlToken(kind: \ZtdQuery\Sql\SqlTokenKind::Word, text: 'SELECT', offset: 0, depth: 0, bracketDepth: 0), new \ZtdQuery\Sql\SqlToken(kind: \ZtdQuery\Sql\SqlTokenKind::Word, text: 'id', offset: 21, depth: 0, bracketDepth: 0), new \ZtdQuery\Sql\SqlToken(kind: \ZtdQuery\Sql\SqlTokenKind::Word, text: 'FROM', offset: 24, depth: 0, bracketDepth: 0), new \ZtdQuery\Sql\SqlToken(kind: \ZtdQuery\Sql\SqlTokenKind::Word, text: 'users', offset: 29, depth: 0, bracketDepth: 0)], (new \ZtdQuery\Platform\Postgres\Sql\Relation\RelationReference())->tokens('SELECT /* comment */ id FROM users'));
44    }
45}
46