packages/sql-formatter/tests/Unit/Core/Syntax/HeadersTest.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 SqlFormatter\Core\Syntax\Headers;
11use SqlParser\Lexer\Token;
12
13#[CoversClass(Headers::class)]
14#[CoversClass(Document::class)]
15#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Formatter::class)]
16#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Settings::class)]
17#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\MySql\Dialect::class)]
18#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\PostgreSql\Dialect::class)]
19#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\Sqlite\Dialect::class)]
20#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Facade\DialectFactory::class)]
21final class HeadersTest extends TestCase
22{
23 public function testMarkRecognizesLongestHeader(): void
24 {
25 $document = new Document('');
26 $document->tokens = [new Token(1, 'LEFT', 'LEFT', 0), new Token(2, 'OUTER', 'OUTER', 5), new Token(3, 'JOIN', 'JOIN', 11)];
27 (new Headers($document, (new \SqlFormatter\Platform\Sqlite\Dialect())->syntaxRules()))->mark(0);
28 self::assertSame([0 => 2], $document->clauses);
29 }
30
31 public function testMarkDoesNotTreatIdentifierAsClause(): void
32 {
33 $document = new Document('');
34 $document->tokens = [new Token(1, 'IDENT', 'users', 0)];
35 (new Headers($document, (new \SqlFormatter\Platform\Sqlite\Dialect())->syntaxRules()))->mark(0);
36 self::assertSame([], $document->clauses);
37 }
38}
39