packages/sql-parser/tests/Unit/MySql/Lexer/ScanTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\MySql\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\MySql\Lexer\KeywordTable;
14use SqlParser\MySql\Lexer\LexerState;
15use SqlParser\MySql\Lexer\Scan;
16use SqlParser\MySql\MySqlVersion;
17use SqlParser\MySql\SqlMode;
18
19#[CoversClass(Scan::class)]
20#[UsesClass(Cursor::class)]
21#[UsesClass(Lexeme::class)]
22#[UsesClass(KeywordTable::class)]
23#[UsesClass(MySqlVersion::class)]
24#[UsesClass(SqlMode::class)]
25#[UsesClass(\SqlParser\Resource\SqlVersion::class)]
26#[UsesClass(\SqlParser\Resource\VersionRegistry::class)]
27#[Small]
28final class ScanTest extends TestCase
29{
30 public function testLexeme(): void
31 {
32 $scan = new Scan(new Cursor('SELECT 1'), new KeywordTable([], []), new SqlMode(), MySqlVersion::resolve());
33 $scan->cursor->take(6);
34 $lexeme = $scan->lexeme('SELECT_SYM', 0);
35
36 self::assertSame('SELECT', $lexeme->text);
37 self::assertSame(0, $lexeme->offset);
38 self::assertSame(LexerState::Start, $scan->next);
39 self::assertFalse($scan->inVersionComment);
40 }
41
42 public function testIsIdentifierByte(): void
43 {
44 self::assertTrue(Scan::isIdentifierByte('a'));
45 self::assertTrue(Scan::isIdentifierByte('9'));
46 self::assertTrue(Scan::isIdentifierByte('_'));
47 self::assertTrue(Scan::isIdentifierByte('$'));
48 self::assertTrue(Scan::isIdentifierByte("\xC3"));
49 self::assertFalse(Scan::isIdentifierByte('-'));
50 self::assertFalse(Scan::isIdentifierByte(''));
51 }
52}
53