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