packages/sql-formatter/tests/Unit/Core/Layout/BlockTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Core\Layout;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use SqlFormatter\Core\FormatOptions;
10use SqlFormatter\Core\Layout\Renderer;
11use SqlFormatter\Core\Style;
12use SqlFormatter\Core\Syntax\Document;
13use SqlParser\Sqlite\SqliteParser;
14
15#[CoversClass(Document::class)]
16#[CoversClass(\SqlFormatter\Core\Syntax\Analyzer::class)]
17#[CoversClass(\SqlFormatter\Core\Syntax\Brackets::class)]
18#[CoversClass(\SqlFormatter\Core\Syntax\Expressions::class)]
19#[CoversClass(\SqlFormatter\Core\Syntax\Headers::class)]
20#[CoversClass(\SqlFormatter\Core\Syntax\Markers::class)]
21#[CoversClass(\SqlFormatter\Core\Syntax\Rules::class)]
22#[CoversClass(Renderer::class)]
23#[CoversClass(\SqlFormatter\Core\Layout\Elements::class)]
24#[CoversClass(\SqlFormatter\Core\Layout\Headers::class)]
25#[CoversClass(\SqlFormatter\Core\Layout\Policy::class)]
26#[CoversClass(\SqlFormatter\Core\Layout\Spacing::class)]
27#[CoversClass(\SqlFormatter\Core\Layout\Writer::class)]
28#[CoversClass(FormatOptions::class)]
29#[CoversClass(\SqlFormatter\Core\Layout\Block::class)]
30#[CoversClass(\SqlFormatter\Core\Syntax\Lists::class)]
31#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Formatter::class)]
32#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Settings::class)]
33#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\MySql\Dialect::class)]
34#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\PostgreSql\Dialect::class)]
35#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\Sqlite\Dialect::class)]
36#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Facade\DialectFactory::class)]
37final class BlockTest extends TestCase
38{
39    public function testRenderFormatsNestedBlocks(): void
40    {
41        $document = Document::from((new SqliteParser())->parse('SELECT CASE WHEN a=1 THEN 2 ELSE 3 END FROM t'), (new \SqlFormatter\Platform\Sqlite\Dialect())->syntaxRules());
42        self::assertSame("SELECT\n    CASE\n        WHEN a = 1 THEN 2\n        ELSE 3\n    END\nFROM\n    t", (new Renderer($document, new FormatOptions(Style::Expanded)))->render());
43    }
44}
45