packages/sql-formatter/tests/Unit/Core/DialectTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Core;
6
7#[\PHPUnit\Framework\Attributes\CoversNothing]
8final class DialectTest extends \PHPUnit\Framework\TestCase
9{
10    public function testCompactRulesCanProvideAnIndependentGrammar(): void
11    {
12        $tree = new \SqlParser\Parser\Node('custom_statement', 0, [new \SqlParser\Lexer\Token(1, 'WORD', 'value', 0)]);
13        $parser = $this->createMock(\SqlParser\Parser\SqlParser::class);
14        $parser->expects(self::exactly(2))->method('parse')->willReturn($tree);
15        $dialect = $this->createMock(\SqlFormatter\Core\Dialect::class);
16        $dialect->expects(self::never())->method('syntaxRules');
17        $dialect->expects(self::once())->method('compactRules')->willReturn(new \SqlFormatter\Core\Compact\Settings(
18            new \SqlFormatter\Core\Compact\Keywords([], [], []),
19            new \SqlFormatter\Core\Compact\Rules([], [], []),
20            new \SqlFormatter\Core\Compact\Grouping([]),
21            [],
22            static fn (string $text, int $start, int $offset, int $depth, bool $executable): bool => false,
23            static fn (\SqlParser\Lexer\Token $left, \SqlParser\Lexer\Token $right, ?\SqlParser\Lexer\Token $before): string => ':',
24        ));
25        $formatter = new \SqlFormatter\Core\Formatter($parser, $dialect, new \SqlFormatter\Core\FormatOptions(\SqlFormatter\Core\Style::Compact));
26
27        self::assertSame('VALUE', $formatter->format('value'));
28    }
29    public function testSyntaxRulesCanProvideAnIndependentGrammar(): void
30    {
31        $tree = new \SqlParser\Parser\Node('custom_statement', 0, [new \SqlParser\Lexer\Token(1, 'WORD', 'value', 0)]);
32        $parser = $this->createMock(\SqlParser\Parser\SqlParser::class);
33        $parser->expects(self::exactly(2))->method('parse')->with('value')->willReturn($tree);
34        $dialect = $this->createMock(\SqlFormatter\Core\Dialect::class);
35        $dialect->expects(self::once())->method('syntaxRules')->willReturn(new \SqlFormatter\Core\Syntax\Rules([], []));
36        $dialect->expects(self::never())->method('compactRules');
37
38        self::assertSame('value', (new \SqlFormatter\Core\Formatter($parser, $dialect))->format('value'));
39    }
40}
41