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