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