packages/lemon-parser/tests/Unit/Ast/Declaration/TokenDeclarationTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Ast\Declaration;
6
7use LemonParser\Ast\Declaration\TokenDeclaration;
8use LemonParser\Ast\Location;
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(TokenDeclaration::class)]
16#[UsesClass(Location::class)]
17#[UsesClass(Symbol::class)]
18#[Small]
19final class TokenDeclarationTest extends TestCase
20{
21    public function testLocation(): void
22    {
23        $declaration = new TokenDeclaration([new Symbol('SEMI', new Location(3, 8)), new Symbol('LP', new Location(3, 13))], new Location(3, 1));
24
25        self::assertSame('3:1', (string) $declaration->location());
26        self::assertSame(['SEMI', 'LP'], array_map(static fn (Symbol $symbol): string => $symbol->name, $declaration->symbols));
27    }
28}
29