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