packages/sql-parser/tests/Unit/PostgreSql/Lexer/KeywordTableTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\PostgreSql\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\PostgreSql\Lexer\KeywordTable;
13use SqlParser\PostgreSql\PostgreSqlVersion;
14use SqlParser\Resource\SqlVersion;
15use SqlParser\Resource\VersionRegistry;
16
17#[CoversClass(KeywordTable::class)]
18#[UsesClass(PostgreSqlVersion::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(PostgreSqlVersion::resolve()->release->keywordPath);
27
28        self::assertSame('SELECT', $table->lookup('select'));
29        self::assertSame('ABORT_P', $table->lookup('Abort'));
30        self::assertNull($table->lookup('users'));
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(['NCHAR' => 'NCHAR']);
43
44        self::assertSame('NCHAR', $table->lookup('nchar'));
45        self::assertNull($table->lookup('n'));
46    }
47}
48