packages/sql-faker/tests/Unit/Sqlite/Generation/Tokenization/KeywordIndexTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\SqlFaker\Sqlite\Generation\Tokenization;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use SqlFaker\Sqlite\Generation\Tokenization\KeywordIndex;
10
11#[CoversClass(KeywordIndex::class)]
12final class KeywordIndexTest extends TestCase
13{
14    public function testReversedMapsEverySpellingBackToItsTerminal(): void
15    {
16        $index = (new KeywordIndex())->reversed([
17            'SELECT_SYM' => ['SELECT'],
18            'OR2_SYM' => ['||', 'OR'],
19        ]);
20
21        self::assertSame(
22            ['SELECT' => 'SELECT_SYM', '||' => 'OR2_SYM', 'OR' => 'OR2_SYM'],
23            $index,
24        );
25    }
26
27    public function testReversedKeysSpellingsInUpperCase(): void
28    {
29        self::assertSame(
30            ['SELECT' => 'SELECT_SYM'],
31            (new KeywordIndex())->reversed(['SELECT_SYM' => ['select']]),
32        );
33    }
34
35    public function testReversedLetsTheLastTerminalWinAContestedSpelling(): void
36    {
37        $index = (new KeywordIndex())->reversed([
38            'FIRST_SYM' => ['SHARED'],
39            'SECOND_SYM' => ['SHARED'],
40        ]);
41
42        self::assertSame(['SHARED' => 'SECOND_SYM'], $index);
43    }
44
45    public function testReversedIsEmptyForAProfileThatSpellsNothing(): void
46    {
47        self::assertSame([], (new KeywordIndex())->reversed([]));
48    }
49
50
51
52}
53