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