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