packages/sql-formatter/tests/Unit/Core/Syntax/AnalyzerTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Core\Syntax;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use SqlFormatter\Core\Syntax\Document;
10use SqlParser\Sqlite\SqliteParser;
11
12#[CoversClass(Document::class)]
13#[CoversClass(\SqlFormatter\Core\Syntax\Analyzer::class)]
14#[CoversClass(\SqlFormatter\Core\Syntax\Brackets::class)]
15#[CoversClass(\SqlFormatter\Core\Syntax\Expressions::class)]
16#[CoversClass(\SqlFormatter\Core\Syntax\Headers::class)]
17#[CoversClass(\SqlFormatter\Core\Syntax\Markers::class)]
18#[CoversClass(\SqlFormatter\Core\Syntax\Rules::class)]
19#[CoversClass(\SqlFormatter\Core\Syntax\Lists::class)]
20#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Formatter::class)]
21#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Settings::class)]
22#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\MySql\Dialect::class)]
23#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\PostgreSql\Dialect::class)]
24#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\Sqlite\Dialect::class)]
25#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Facade\DialectFactory::class)]
26final class AnalyzerTest extends TestCase
27{
28    public function testVisitKeepsTokensInSourceOrder(): void
29    {
30        $document = Document::from((new SqliteParser())->parse('SELECT id, name FROM users'), (new \SqlFormatter\Platform\Sqlite\Dialect())->syntaxRules());
31        self::assertSame(['SELECT', 'id', ',', 'name', 'FROM', 'users'], array_column($document->tokens, 'text'));
32        self::assertSame(0, $document->clauses[0]);
33        self::assertSame(4, $document->clauses[4]);
34    }
35}
36