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