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