packages/bison-parser/tests/Unit/Ast/Rule/RuleTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Ast\Rule;
6
7use BisonParser\Ast\Location;
8use BisonParser\Ast\Rule\Alternative;
9use BisonParser\Ast\Rule\Rule;
10use BisonParser\Ast\Symbol;
11use BisonParser\Ast\SymbolKind;
12use PHPUnit\Framework\Attributes\CoversClass;
13use PHPUnit\Framework\Attributes\Small;
14use PHPUnit\Framework\Attributes\UsesClass;
15use PHPUnit\Framework\TestCase;
16
17#[CoversClass(Rule::class)]
18#[UsesClass(Alternative::class)]
19#[UsesClass(Location::class)]
20#[UsesClass(Symbol::class)]
21#[UsesClass(SymbolKind::class)]
22#[Small]
23final class RuleTest extends TestCase
24{
25    public function testAlternatives(): void
26    {
27        $rule = new Rule(new Symbol(SymbolKind::Identifier, 'expr', new Location(4, 1)), 'e', [new Alternative([], new Location(4, 9))], new Location(4, 1));
28
29        self::assertSame('expr', $rule->name->value);
30        self::assertSame('e', $rule->namedReference);
31        self::assertCount(1, $rule->alternatives);
32        self::assertSame('4:1', (string) $rule->location);
33    }
34}
35