packages/lemon-parser/tests/Unit/Ast/RhsItemTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Ast;
6
7use LemonParser\Ast\Location;
8use LemonParser\Ast\RhsItem;
9use LemonParser\Ast\Symbol;
10use PHPUnit\Framework\Attributes\CoversClass;
11use PHPUnit\Framework\Attributes\Small;
12use PHPUnit\Framework\Attributes\UsesClass;
13use PHPUnit\Framework\TestCase;
14
15#[CoversClass(RhsItem::class)]
16#[UsesClass(Location::class)]
17#[UsesClass(Symbol::class)]
18#[Small]
19final class RhsItemTest extends TestCase
20{
21 public function testIsMultiTerminal(): void
22 {
23 $single = new RhsItem([new Symbol('expr', new Location(1, 10))], 'A');
24 $shared = new RhsItem([new Symbol('PLUS', new Location(1, 15)), new Symbol('MINUS', new Location(1, 20))], null);
25
26 self::assertFalse($single->isMultiTerminal());
27 self::assertTrue($shared->isMultiTerminal());
28 self::assertSame('A', $single->alias);
29 }
30
31 public function testLocation(): void
32 {
33 $item = new RhsItem([new Symbol('PLUS', new Location(1, 15)), new Symbol('MINUS', new Location(1, 20))], null);
34
35 self::assertSame('1:15', (string) $item->location());
36 }
37}
38