packages/ztd-query-postgres/tests/Unit/Sql/Transaction/KeywordFormTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql\Transaction;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9
10#[CoversClass(\ZtdQuery\Platform\Postgres\Sql\Transaction\KeywordForm::class)]
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::class)]
12final class KeywordFormTest extends TestCase
13{
14    public function testMatchesAny(): void
15    {
16        $sql = 'START TRANSACTION';
17        $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
18        $tokens = $stream->significantTokens();
19
20        self::assertSame(true, (new \ZtdQuery\Platform\Postgres\Sql\Transaction\KeywordForm())->matchesAny($tokens, [['BEGIN'], ['START', 'TRANSACTION']]));
21    }
22
23    public function testNameAfter(): void
24    {
25        $sql = 'SAVEPOINT "SaveHere"';
26        $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
27        $tokens = $stream->significantTokens();
28
29        self::assertSame('SaveHere', (new \ZtdQuery\Platform\Postgres\Sql\Transaction\KeywordForm())->nameAfter($tokens, [['SAVEPOINT']]));
30    }
31
32    public function testMatches(): void
33    {
34        $sql = 'ROLLBACK WORK';
35        $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
36        $tokens = $stream->significantTokens();
37
38        self::assertSame(true, (new \ZtdQuery\Platform\Postgres\Sql\Transaction\KeywordForm())->matches($tokens, ['ROLLBACK', 'WORK']));
39    }
40
41    public function testUnquote(): void
42    {
43        self::assertSame('SaveHere', (new \ZtdQuery\Platform\Postgres\Sql\Transaction\KeywordForm())->unquote('"SaveHere"'));
44    }
45}
46