packages/sql-parser/tests/Unit/PostgreSql/Lexer/ScanTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\PostgreSql\Lexer;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\Small;
9use PHPUnit\Framework\Attributes\UsesClass;
10use PHPUnit\Framework\TestCase;
11use SqlParser\Lexer\Cursor;
12use SqlParser\Lexer\Lexeme;
13use SqlParser\PostgreSql\Lexer\KeywordTable;
14use SqlParser\PostgreSql\Lexer\Scan;
15
16#[CoversClass(Scan::class)]
17#[UsesClass(Cursor::class)]
18#[UsesClass(Lexeme::class)]
19#[UsesClass(KeywordTable::class)]
20#[Small]
21final class ScanTest extends TestCase
22{
23    public function testLexeme(): void
24    {
25        $scan = new Scan(new Cursor('SELECT 1'), new KeywordTable([]));
26        $scan->cursor->take(6);
27
28        self::assertSame('SELECT', $scan->lexeme('SELECT', 0)->text);
29    }
30
31    public function testStartsIdentifier(): void
32    {
33        self::assertTrue(Scan::startsIdentifier('a'));
34        self::assertTrue(Scan::startsIdentifier('_'));
35        self::assertTrue(Scan::startsIdentifier("\xC3"));
36        self::assertFalse(Scan::startsIdentifier('1'));
37        self::assertFalse(Scan::startsIdentifier('$'));
38        self::assertFalse(Scan::startsIdentifier(''));
39    }
40}
41