packages/ztd-query-sqlite/tests/Unit/Sql/Lexing/OpaqueSqlSpanTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql\Lexing;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use ZtdQuery\Platform\Sqlite\Sql\Lexing\OpaqueSqlSpan;
11
12#[CoversClass(OpaqueSqlSpan::class)]
13#[UsesClass(\ZtdQuery\Platform\Sqlite\Sql\Lexing\QuotedSpan::class)]
14final class OpaqueSqlSpanTest extends TestCase
15{
16    public function testLengthDistinguishesSyntaxAndOpaqueSpans(): void
17    {
18        $span = new OpaqueSqlSpan();
19        self::assertNull($span->length('SELECT'));
20        self::assertNull($span->length(''));
21        self::assertSame(5, $span->length("-- x\nSELECT"));
22        self::assertSame(3, $span->length("#x\nSELECT"));
23        self::assertSame(7, $span->length('/* x */SELECT'));
24        self::assertSame(4, $span->length('/* x'));
25        self::assertSame(6, $span->length("'a''b' + 1"));
26        self::assertSame(3, $span->length('"a" + 1'));
27        self::assertSame(3, $span->length('`a` + 1'));
28        self::assertSame(3, $span->length('[a] + 1'));
29        self::assertSame(2, $span->length('[a'));
30    }
31
32}
33