packages/sql-parser/tests/Unit/Sqlite/Lexer/KeywordTableTest.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 RuntimeException;
12use SqlParser\Resource\SqlVersion;
13use SqlParser\Resource\VersionRegistry;
14use SqlParser\Sqlite\Lexer\KeywordTable;
15use SqlParser\Sqlite\SqliteVersion;
16
17#[CoversClass(KeywordTable::class)]
18#[UsesClass(SqliteVersion::class)]
19#[UsesClass(SqlVersion::class)]
20#[UsesClass(VersionRegistry::class)]
21#[Small]
22final class KeywordTableTest extends TestCase
23{
24 public function testLoad(): void
25 {
26 $table = KeywordTable::load(SqliteVersion::resolve()->release->keywordPath);
27
28 self::assertSame('JOIN_KW', $table->lookup('left'));
29 self::assertSame('LIKE_KW', $table->lookup('GLOB'));
30 self::assertNull($table->lookup('within'));
31 }
32
33 public function testLoadRejectsAMissingFile(): void
34 {
35 $this->expectException(RuntimeException::class);
36
37 KeywordTable::load('/nowhere/keywords.php');
38 }
39
40 public function testLookup(): void
41 {
42 $table = new KeywordTable(['SELECT' => 'SELECT']);
43
44 self::assertSame('SELECT', $table->lookup('select'));
45 self::assertNull($table->lookup('users'));
46 }
47}
48