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