packages/ztd-query-postgres/tests/Unit/Connection/Parameter/TokenBoundaryTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Connection\Parameter;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9
10#[CoversClass(\ZtdQuery\Platform\Postgres\Connection\Parameter\TokenBoundary::class)]
11final class TokenBoundaryTest extends TestCase
12{
13    public function testKeywordExpectsOperandRecognizesContext(): void
14    {
15        self::assertTrue(\ZtdQuery\Platform\Postgres\Connection\Parameter\TokenBoundary::keywordExpectsOperand('SELECT'));
16        self::assertTrue(\ZtdQuery\Platform\Postgres\Connection\Parameter\TokenBoundary::keywordExpectsOperand('AND'));
17        self::assertFalse(\ZtdQuery\Platform\Postgres\Connection\Parameter\TokenBoundary::keywordExpectsOperand('name'));
18    }
19
20    public function testIsIdentifierStartUsesAsciiLettersOrUnderscores(): void
21    {
22        self::assertTrue(\ZtdQuery\Platform\Postgres\Connection\Parameter\TokenBoundary::isIdentifierStart('_'));
23        self::assertTrue(\ZtdQuery\Platform\Postgres\Connection\Parameter\TokenBoundary::isIdentifierStart('z'));
24        self::assertFalse(\ZtdQuery\Platform\Postgres\Connection\Parameter\TokenBoundary::isIdentifierStart('9'));
25    }
26
27    public function testIsIdentifierContinuationAlsoAllowsDigitsAndDollars(): void
28    {
29        self::assertTrue(\ZtdQuery\Platform\Postgres\Connection\Parameter\TokenBoundary::isIdentifierContinuation('9'));
30        self::assertTrue(\ZtdQuery\Platform\Postgres\Connection\Parameter\TokenBoundary::isIdentifierContinuation('$'));
31        self::assertFalse(\ZtdQuery\Platform\Postgres\Connection\Parameter\TokenBoundary::isIdentifierContinuation('-'));
32    }
33
34    public function testIsEscapeStringStartRequiresATokenBoundary(): void
35    {
36        self::assertTrue(\ZtdQuery\Platform\Postgres\Connection\Parameter\TokenBoundary::isEscapeStringStart("e'body'", 1));
37        self::assertFalse(\ZtdQuery\Platform\Postgres\Connection\Parameter\TokenBoundary::isEscapeStringStart("name'body'", 4));
38    }
39
40    public function testDollarQuoteDelimiterPreservesTheTag(): void
41    {
42        self::assertSame('$tag$', \ZtdQuery\Platform\Postgres\Connection\Parameter\TokenBoundary::dollarQuoteDelimiter('prefix$tag$body$tag$', 6));
43        self::assertSame('$$', \ZtdQuery\Platform\Postgres\Connection\Parameter\TokenBoundary::dollarQuoteDelimiter('$$body$$', 0));
44        self::assertNull(\ZtdQuery\Platform\Postgres\Connection\Parameter\TokenBoundary::dollarQuoteDelimiter('$1$', 0));
45    }
46}
47