packages/sql-parser/tests/Unit/PostgreSql/Lexer/WordScannerTest.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;
15use SqlParser\PostgreSql\Lexer\WordScanner;
16
17#[CoversClass(WordScanner::class)]
18#[UsesClass(Cursor::class)]
19#[UsesClass(Lexeme::class)]
20#[UsesClass(KeywordTable::class)]
21#[UsesClass(Scan::class)]
22#[Small]
23final class WordScannerTest extends TestCase
24{
25 public function testScan(): void
26 {
27 $scanner = new WordScanner();
28 $keywords = new KeywordTable(['SELECT' => 'SELECT']);
29
30 self::assertSame('SELECT', $scanner->scan(new Scan(new Cursor('Select 1'), $keywords))?->name);
31 $identifier = $scanner->scan(new Scan(new Cursor('users$1 x'), $keywords));
32 self::assertNotNull($identifier);
33 self::assertSame('IDENT', $identifier->name);
34 self::assertSame('users$1', $identifier->text);
35 self::assertSame('IDENT', $scanner->scan(new Scan(new Cursor('猫'), $keywords))?->name);
36 self::assertNull($scanner->scan(new Scan(new Cursor('1a'), $keywords)));
37 }
38}
39