packages/ztd-query-sqlite/tests/Unit/Sql/Dml/Expression/ValueListParserTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql\Dml\Expression;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use ZtdQuery\Platform\Sqlite\Sql\Dml\Expression\ValueListParser;
11
12#[CoversClass(ValueListParser::class)]
13#[UsesClass(\ZtdQuery\Platform\Sqlite\Sql\Lexing\ExpressionSpan::class)]
14#[UsesClass(\ZtdQuery\Platform\Sqlite\Sql\Lexing\QuotedSpan::class)]
15final class ValueListParserTest extends TestCase
16{
17    public function testParseValueSetsPreservesExpressions(): void
18    {
19        self::assertSame([['1', "'a,b'", 'coalesce(2, 3)'], ['4', "'x''y'", 'NULL']], (new ValueListParser())->parseValueSets("(1, 'a,b', coalesce(2, 3)), (4, 'x''y', NULL) RETURNING id"));
20    }
21
22    public function testParseValueSetsHandlesEmptyAndIncompleteRows(): void
23    {
24        $parser = new ValueListParser();
25        self::assertSame([], $parser->parseValueSets(''));
26        self::assertSame([], $parser->parseValueSets('()'));
27        self::assertSame([], $parser->parseValueSets('1, 2'));
28        self::assertSame([['1']], $parser->parseValueSets('(1, incomplete'));
29    }
30
31}
32