packages/sql-parser/tests/Unit/Sqlite/Lexer/TriviaScannerTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sqlite\Lexer;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\Small;
9use PHPUnit\Framework\Attributes\UsesClass;
10use PHPUnit\Framework\TestCase;
11use SqlParser\Lexer\Cursor;
12use SqlParser\Sqlite\Lexer\KeywordTable;
13use SqlParser\Sqlite\Lexer\Scan;
14use SqlParser\Sqlite\Lexer\TriviaScanner;
15
16#[CoversClass(TriviaScanner::class)]
17#[UsesClass(Cursor::class)]
18#[UsesClass(KeywordTable::class)]
19#[UsesClass(Scan::class)]
20#[Small]
21final class TriviaScannerTest extends TestCase
22{
23 public function testSkip(): void
24 {
25 $scan = new Scan(new Cursor("\xEF\xBB\xBF \t-- c\n/* b */ x"), new KeywordTable([]));
26 (new TriviaScanner())->skip($scan);
27
28 self::assertSame('x', $scan->cursor->take(1));
29 }
30
31 public function testSkipRunsAnUnterminatedCommentToTheEnd(): void
32 {
33 $scan = new Scan(new Cursor('/* open'), new KeywordTable([]));
34 (new TriviaScanner())->skip($scan);
35
36 self::assertTrue($scan->cursor->eof());
37 }
38
39 public function testSkipLeavesASlashBeforeTheEndAlone(): void
40 {
41 $scan = new Scan(new Cursor('/*'), new KeywordTable([]));
42 (new TriviaScanner())->skip($scan);
43
44 self::assertSame('/', $scan->cursor->peek());
45 }
46}
47