packages/sql-parser/tests/Unit/Lexer/SourcePositionTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Lexer;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\Small;
9use PHPUnit\Framework\TestCase;
10use SqlParser\Lexer\SourcePosition;
11
12#[CoversClass(SourcePosition::class)]
13#[Small]
14final class SourcePositionTest extends TestCase
15{
16    public function testAt(): void
17    {
18        $position = SourcePosition::at("SELECT 1\nFROM t", 12);
19
20        self::assertSame(2, $position->line);
21        self::assertSame(4, $position->column);
22    }
23
24    public function testAtTheStartAndPastTheEnd(): void
25    {
26        self::assertSame([1, 1], [SourcePosition::at('SELECT', 0)->line, SourcePosition::at('SELECT', 0)->column]);
27        self::assertSame([1, 7], [SourcePosition::at('SELECT', 99)->line, SourcePosition::at('SELECT', 99)->column]);
28        self::assertSame(1, SourcePosition::at('SELECT', -5)->column);
29    }
30}
31