packages/sql-formatter/tests/Unit/Core/Layout/PolicyTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Core\Layout;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\TestWith;
9use PHPUnit\Framework\TestCase;
10use SqlFormatter\Core\FormatOptions;
11use SqlFormatter\Core\Layout\Policy;
12use SqlFormatter\Core\Style;
13
14#[CoversClass(Policy::class)]
15#[CoversClass(FormatOptions::class)]
16#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Formatter::class)]
17#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Settings::class)]
18#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\MySql\Dialect::class)]
19#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\PostgreSql\Dialect::class)]
20#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\Sqlite\Dialect::class)]
21#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Facade\DialectFactory::class)]
22final class PolicyTest extends TestCase
23{
24 #[TestWith([Style::Expanded, "\n ", "\n ", 4])]
25 #[TestWith([Style::Tabular, "\n ", ' ', 11])]
26 #[TestWith([Style::River, "\n ", ' ', 11])]
27 public function testBeforeHeaderAndBodyPlacement(Style $style, string $before, string $after, int $indent): void
28 {
29 $policy = new Policy(new FormatOptions($style, 2), 2, 8);
30 self::assertSame($before, $policy->beforeHeader(4));
31 self::assertSame($after, $policy->afterHeader(4));
32 self::assertSame($indent, $policy->bodyIndent());
33 }
34 public function testLineUsesRequestedColumn(): void
35 {
36 $policy = new Policy(new FormatOptions(), 0, 0);
37 self::assertSame("\n ", $policy->line(3));
38 }
39
40 public function testAfterHeaderBreaksExpandedBody(): void
41 {
42 $policy = new Policy(new FormatOptions(), 0, 6);
43 self::assertSame("\n ", $policy->afterHeader(6));
44 }
45
46 public function testBodyIndentUsesAlignedContentColumn(): void
47 {
48 $policy = new Policy(new FormatOptions(Style::River), 4, 8);
49 self::assertSame(13, $policy->bodyIndent());
50 }
51}
52