packages/ztd-query-core/tests/Unit/Sql/LexicalDelimitersTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use ZtdQuery\Exception\InvalidDefinitionException;
11use ZtdQuery\Sql\LexicalDelimiters;
12use ZtdQuery\Sql\LexicalPattern;
13
14#[CoversClass(LexicalDelimiters::class)]
15#[UsesClass(LexicalPattern::class)]
16#[UsesClass(InvalidDefinitionException::class)]
17final class LexicalDelimitersTest extends TestCase
18{
19    public function testNonEmptyAnswersTheDelimitersItWasGiven(): void
20    {
21        self::assertSame(['--', '#'], (new LexicalDelimiters())->nonEmpty(['--', '#']));
22    }
23
24    public function testPairsAnswersThePairsItWasGiven(): void
25    {
26        self::assertSame(['/*' => '*/'], (new LexicalDelimiters())->pairs(['/*' => '*/'], 'Block comment'));
27    }
28
29    public function testPairsNamesWhatItWasRefusingInTheRefusal(): void
30    {
31        $this->expectExceptionMessage('String quote delimiters must not be empty.');
32
33        (new LexicalDelimiters())->pairs(['' => "'"], 'String quote');
34    }
35
36    public function testPerPrefixListsAnswersTheListsItWasGiven(): void
37    {
38        self::assertSame([':' => ['.']], (new LexicalDelimiters())->perPrefixLists([':' => ['.']]));
39    }
40
41    public function testPerPrefixPatternsAnswersThePatternsItWasGiven(): void
42    {
43        self::assertSame(
44            [':' => '/^\d+/'],
45            (new LexicalDelimiters())->perPrefixPatterns([':' => '/^\d+/']),
46        );
47    }
48
49    public function testValidPatternsAnswersThePatternsItWasGiven(): void
50    {
51        self::assertSame(['/^\d+/'], (new LexicalDelimiters())->validPatterns(['/^\d+/']));
52    }
53
54}
55