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