packages/sql-catalog/tests/Unit/Core/Php/NodeTextTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Core\Php;
6
7use PhpParser\Node\Expr\Variable;
8use PhpParser\Node\Scalar\String_;
9use PhpParser\Node\Stmt\Nop;
10use PHPUnit\Framework\Attributes\CoversClass;
11use PHPUnit\Framework\TestCase;
12use SqlCatalog\Core\Php\NodeText;
13
14#[CoversClass(NodeText::class)]
15final class NodeTextTest extends TestCase
16{
17 public function testRenderWritesAnExpressionOnOneLine(): void
18 {
19 self::assertSame('$name', (new NodeText())->render(new Variable('name')));
20 }
21
22 public function testRenderTruncatesALongExpression(): void
23 {
24 $rendered = (new NodeText())->render(new String_(str_repeat('a', 200)));
25 self::assertSame(NodeText::MAX_LENGTH, mb_strlen($rendered));
26 self::assertStringEndsWith('…', $rendered);
27 }
28
29 public function testRenderHandlesAStatement(): void
30 {
31 self::assertSame('', (new NodeText())->render(new Nop()));
32 }
33
34 public function testAsExprReplacesAnythingThatIsNotAnExpression(): void
35 {
36 $reader = new NodeText();
37 $expression = new Variable('a');
38 self::assertSame($expression, $reader->asExpr($expression));
39 self::assertInstanceOf(String_::class, $reader->asExpr(new Nop()));
40 }
41}
42