packages/sql-faker/tests/Unit/Compiler/Bison/Ast/BisonAstTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\SqlFaker\Compiler\Bison\Ast;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use SqlFaker\Compiler\Bison\Ast\BisonAlternativeNode;
10use SqlFaker\Compiler\Bison\Ast\BisonAst;
11use SqlFaker\Compiler\Bison\Ast\BisonRuleNode;
12use SqlFaker\Compiler\Bison\Ast\BisonStartDeclaration;
13
14#[CoversClass(BisonAst::class)]
15#[CoversClass(BisonStartDeclaration::class)]
16#[CoversClass(BisonRuleNode::class)]
17#[CoversClass(BisonAlternativeNode::class)]
18final class BisonAstTest extends TestCase
19{
20 public function testExposesEveryPartOfTheGrammarFile(): void
21 {
22 $declaration = new BisonStartDeclaration('start');
23 $rule = new BisonRuleNode('start', [
24 new BisonAlternativeNode([], null, null, null, null),
25 ]);
26
27 $ast = new BisonAst('start', '%{ code %}', [$declaration], [$rule], 'epilogue');
28
29 self::assertSame('start', $ast->startSymbol);
30 self::assertSame('%{ code %}', $ast->prologue);
31 self::assertSame([$declaration], $ast->declarations);
32 self::assertSame([$rule], $ast->rules);
33 self::assertSame('epilogue', $ast->epilogue);
34 }
35
36 public function testExposesOmittedPartsAsNull(): void
37 {
38 $ast = new BisonAst('start', null, [], [], null);
39
40 self::assertSame('start', $ast->startSymbol);
41 self::assertNull($ast->prologue);
42 self::assertSame([], $ast->declarations);
43 self::assertSame([], $ast->rules);
44 self::assertNull($ast->epilogue);
45 }
46}
47