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