packages/sql-faker/tests/Unit/PostgreSql/Generation/Lexeme/KeywordLexemeGeneratorTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\SqlFaker\PostgreSql\Generation\Lexeme;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use SqlFaker\Generation\Lexeme\Lexeme;
11use SqlFaker\Generation\Lexeme\LexemeGenerator;
12use SqlFaker\Generation\Lexeme\LexemeInput;
13use SqlFaker\Generation\Lexeme\OutputPart;
14use SqlFaker\Generation\Lexeme\ResolvedOutput;
15use SqlFaker\Generation\Token\TerminalSequence;
16use SqlFaker\PostgreSql\Generation\Lexeme\KeywordLexemeGenerator;
17
18#[CoversClass(KeywordLexemeGenerator::class)]
19#[UsesClass(Lexeme::class)]
20#[UsesClass(LexemeGenerator::class)]
21#[UsesClass(LexemeInput::class)]
22#[UsesClass(OutputPart::class)]
23#[UsesClass(ResolvedOutput::class)]
24#[UsesClass(TerminalSequence::class)]
25#[UsesClass(\SqlFaker\Generation\Lexeme\LexemeCandidates::class)]
26#[UsesClass(\SqlFaker\Generation\Lexeme\LexemeSequence::class)]
27#[UsesClass(\SqlFaker\Generation\Candidate\RegisteredLexemeGenerator::class)]
28#[UsesClass(\SqlFaker\Generation\Token\TerminalOccurrence::class)]
29#[UsesClass(\SqlFaker\PostgreSql\Generation\Lookahead\PgLookahead::class)]
30#[UsesClass(\SqlFaker\Generation\Lexeme\SpacingConstraint::class)]
31#[UsesClass(\SqlFaker\Generation\Token\ProductionOccurrence::class)]
32#[UsesClass(\SqlFaker\Generation\Exception\LexicalException::class)]
33final class KeywordLexemeGeneratorTest extends TestCase
34{
35 public function testGenerateChecksTheLookaheadFollowerBeforeOfferingAnAlias(): void
36 {
37 $generator = new KeywordLexemeGenerator(['WITH' => ['WITH']]);
38 $sequence = TerminalSequence::fromNames(['WITH_LA', 'TIME']);
39 $right = new ResolvedOutput([new OutputPart(new Lexeme('TIME', 'keyword', $sequence->terminals[1], 'source'), '', 'time')]);
40 self::assertSame('WITH', [...$generator->generate(new LexemeInput($sequence, 0, $right))->sequences()][0]->lexemes[0]->text);
41 self::assertSame([], [...$generator->generate(new LexemeInput($sequence, 0, new ResolvedOutput()))->sequences()]);
42 }
43}
44