packages/sql-formatter/tests/Unit/Core/Compact/GroupingTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Core\Compact;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\DataProvider;
9use PHPUnit\Framework\TestCase;
10
11#[CoversClass(\SqlFormatter\Core\Compact\Reductions::class)]
12#[CoversClass(\SqlFormatter\Core\Compact\Document::class)]
13#[CoversClass(\SqlFormatter\Core\Compact\Grouping::class)]
14#[CoversClass(\SqlFormatter\Core\Compact\Keywords::class)]
15#[CoversClass(\SqlFormatter\Core\Compact\Renderer::class)]
16#[CoversClass(\SqlFormatter\Core\Compact\Rules::class)]
17#[CoversClass(\SqlFormatter\Core\Compact\Shape::class)]
18#[CoversClass(\SqlFormatter\Core\Compact\Spacing::class)]
19#[CoversClass(\SqlFormatter\Core\Compact\Trivia::class)]
20#[CoversClass(\SqlFormatter\Core\Compact\Visitor::class)]
21#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Formatter::class)]
22#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Settings::class)]
23#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\MySql\Dialect::class)]
24#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\PostgreSql\Dialect::class)]
25#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\Sqlite\Dialect::class)]
26#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Facade\DialectFactory::class)]
27final class GroupingTest extends TestCase
28{
29 /**
30 * @param class-string<\SqlParser\MySql\MySqlParser|\SqlParser\PostgreSql\PostgreSqlParser|\SqlParser\Sqlite\SqliteParser> $parserClass
31 */
32 #[DataProvider('providerParsers')]
33 public function testPairsDistinguishesGroupingFromOtherParentheses(string $parserClass): void
34 {
35 $parser = new $parserClass();
36 $tree = $parser->parse('SELECT f((a+b)), (SELECT a FROM t), ((a)) FROM t');
37 self::assertCount(3, \SqlFormatter\Facade\DialectFactory::forParser($parser)->compactRules()->grouping->pairs($tree));
38 }
39 /**
40 * @return list<array{class-string<\SqlParser\MySql\MySqlParser|\SqlParser\PostgreSql\PostgreSqlParser|\SqlParser\Sqlite\SqliteParser>}>
41 */
42 public static function providerParsers(): array
43 {
44 return [[\SqlParser\MySql\MySqlParser::class], [\SqlParser\PostgreSql\PostgreSqlParser::class], [\SqlParser\Sqlite\SqliteParser::class]];
45 }
46}
47