packages/sql-formatter/tests/Unit/Core/Layout/WriterTest.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\Layout\Writer;
10use SqlParser\Lexer\Token;
11
12#[CoversClass(Writer::class)]
13#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Formatter::class)]
14#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Settings::class)]
15#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\MySql\Dialect::class)]
16#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\PostgreSql\Dialect::class)]
17#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\Sqlite\Dialect::class)]
18#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Facade\DialectFactory::class)]
19final class WriterTest extends TestCase
20{
21 public function testTokenPreservesCommentsAndLiteralNewlines(): void
22 {
23 $writer = new Writer();
24 $writer->token(new Token(1, 'SELECT', 'SELECT', 0), "\n");
25 $writer->token(new Token(2, 'STRING', "'a\nb'", 20, " -- note\n"), ' ');
26 self::assertSame("SELECT -- note\n'a\nb' /* tail */", $writer->finish(' /* tail */'));
27 }
28
29 public function testFinishDropsOnlyWhitespaceTrivia(): void
30 {
31 $writer = new Writer();
32 $writer->token(new Token(1, 'NUM', '1', 3, ' '), '');
33 $writer->token(new Token(0, 'EOF', '', 4, " \n"), ' ');
34 self::assertSame('1', $writer->finish(" \n"));
35 }
36}
37