packages/sql-faker/tests/Unit/Generation/Lexeme/ResolvedOutputTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\SqlFaker\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\OutputPart;
12use SqlFaker\Generation\Lexeme\ResolvedOutput;
13use SqlFaker\Generation\Token\TerminalOccurrence;
14
15#[CoversClass(ResolvedOutput::class)]
16#[UsesClass(Lexeme::class)]
17#[UsesClass(OutputPart::class)]
18#[UsesClass(TerminalOccurrence::class)]
19#[UsesClass(\SqlFaker\Generation\Lexeme\LexemeSequence::class)]
20#[UsesClass(\SqlFaker\Generation\Lexeme\SpacingConstraint::class)]
21final class ResolvedOutputTest extends TestCase
22{
23    public function testPiecesPreservesChosenJoinsAndSpacesWithoutFormatting(): void
24    {
25        $origin = new TerminalOccurrence('IDENT', 0);
26        $output = new ResolvedOutput([
27            new OutputPart(new Lexeme('a', 'identifier', $origin, 'source'), '', 'a'),
28            new OutputPart(new Lexeme('.', 'symbol', $origin, 'source'), ' ', 'dot'),
29            new OutputPart(new Lexeme('b', 'identifier', $origin, 'source'), '', 'b'),
30        ]);
31        self::assertSame(['a', '', '.', ' ', 'b', ''], $output->pieces());
32        self::assertSame([], (new ResolvedOutput())->pieces());
33    }
34}
35