packages/sql-formatter/tests/Unit/Core/Compact/SettingsTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Core\Compact;
6
7#[\PHPUnit\Framework\Attributes\CoversClass(\SqlFormatter\Core\Compact\Settings::class)]
8#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\FormatOptions::class)]
9#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Formatter::class)]
10#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\FormattingException::class)]
11#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Style::class)]
12#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Dialect::class)]
13#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Keywords::class)]
14#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Document::class)]
15#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Visitor::class)]
16#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Rules::class)]
17#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Renderer::class)]
18#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Reductions::class)]
19#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Grouping::class)]
20#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Spacing::class)]
21#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Shape::class)]
22#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Trivia::class)]
23#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Layout\Headers::class)]
24#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Layout\Writer::class)]
25#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Layout\Renderer::class)]
26#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Layout\Policy::class)]
27#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Layout\Spacing::class)]
28#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Layout\Block::class)]
29#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Layout\Elements::class)]
30#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Syntax\Headers::class)]
31#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Syntax\Document::class)]
32#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Syntax\Rules::class)]
33#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Syntax\Markers::class)]
34#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Syntax\Analyzer::class)]
35#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Syntax\Brackets::class)]
36#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Syntax\Fingerprint::class)]
37#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Syntax\Expressions::class)]
38#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Syntax\Lists::class)]
39final class SettingsTest extends \PHPUnit\Framework\TestCase
40{
41 public function testInjectedSeparatorPrecedesLexerProbing(): void
42 {
43 $parser = $this->createMock(\SqlParser\Parser\SqlParser::class);
44 $parser->expects(self::never())->method('tokenize');
45 $settings = new \SqlFormatter\Core\Compact\Settings(
46 new \SqlFormatter\Core\Compact\Keywords([], [], []),
47 new \SqlFormatter\Core\Compact\Rules([], [], []),
48 new \SqlFormatter\Core\Compact\Grouping([]),
49 [],
50 static fn (string $text, int $start, int $offset, int $depth, bool $executable): bool => false,
51 static fn (\SqlParser\Lexer\Token $left, \SqlParser\Lexer\Token $right, ?\SqlParser\Lexer\Token $before): string => ':',
52 );
53 $spacing = new \SqlFormatter\Core\Compact\Spacing($parser, $settings);
54
55 self::assertSame(':', $spacing->between(new \SqlParser\Lexer\Token(1, 'WORD', 'a', 0), new \SqlParser\Lexer\Token(1, 'WORD', 'b', 1), null));
56 }
57}
58