packages/sql-parser/tests/Unit/Sqlite/Lexer/ScanTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sqlite\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\Sqlite\Lexer\KeywordTable;
14use SqlParser\Sqlite\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 testLast(): void
32 {
33 $scan = new Scan(new Cursor(''), new KeywordTable([]));
34
35 self::assertNull($scan->last());
36 $scan->lexemes[] = new Lexeme('RP', ')', 0);
37 self::assertSame('RP', $scan->last()?->name);
38 }
39
40 public function testIsIdentifierByte(): void
41 {
42 self::assertTrue(Scan::isIdentifierByte('a'));
43 self::assertTrue(Scan::isIdentifierByte('$'));
44 self::assertTrue(Scan::isIdentifierByte("\xE7"));
45 self::assertFalse(Scan::isIdentifierByte('.'));
46 self::assertFalse(Scan::isIdentifierByte(''));
47 }
48}
49