packages/sql-faker/tests/Unit/Compiler/Bison/Ast/BisonAlternativeNodeTest.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\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use SqlFaker\Compiler\Bison\Ast\BisonAlternativeNode;
11use SqlFaker\Compiler\Bison\Ast\BisonSymbolForm;
12use SqlFaker\Compiler\Bison\Ast\BisonSymbolNode;
13
14#[CoversClass(BisonAlternativeNode::class)]
15#[CoversClass(BisonSymbolNode::class)]
16#[UsesClass(BisonSymbolForm::class)]
17final class BisonAlternativeNodeTest extends TestCase
18{
19 public function testExposesEveryPartOfTheAlternative(): void
20 {
21 $sym = new BisonSymbolNode(BisonSymbolForm::Identifier, 'SELECT');
22 $node = new BisonAlternativeNode([$sym], '{ $$ = $1; }', 'UMINUS', 1, '<merge>');
23
24 self::assertSame([$sym], $node->symbols);
25 self::assertSame('{ $$ = $1; }', $node->action);
26 self::assertSame('UMINUS', $node->prec);
27 self::assertSame(1, $node->dprec);
28 self::assertSame('<merge>', $node->merge);
29 }
30
31 public function testExposesOmittedPartsAsNull(): void
32 {
33 $node = new BisonAlternativeNode([], null, null, null, null);
34
35 self::assertSame([], $node->symbols);
36 self::assertNull($node->action);
37 self::assertNull($node->prec);
38 self::assertNull($node->dprec);
39 self::assertNull($node->merge);
40 }
41}
42