packages/sql-catalog/tests/Unit/Core/Evaluation/PatternTermTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Core\Evaluation;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use SqlCatalog\Core\Evaluation\PatternTerm;
11use SqlCatalog\Core\Text\LiteralText;
12use SqlCatalog\Core\Text\Origin;
13use SqlCatalog\Core\Text\TextHole;
14use SqlCatalog\Core\Text\TextPattern;
15use SqlCatalog\Core\Type\TypeShape;
16
17#[CoversClass(PatternTerm::class)]
18#[UsesClass(LiteralText::class)]
19#[UsesClass(TextHole::class)]
20#[UsesClass(TextPattern::class)]
21#[UsesClass(TypeShape::class)]
22final class PatternTermTest extends TestCase
23{
24 public function testToPatternIsThePatternItself(): void
25 {
26 $pattern = TextPattern::fromText('WHERE id = ')
27 ->concat(TextPattern::fromHole(new TextHole(Origin::External, TypeShape::unknown())));
28 self::assertSame('WHERE id = {$}', (new PatternTerm($pattern))->toPattern()->display());
29 }
30
31 public function testTypeIsAlwaysString(): void
32 {
33 self::assertSame('string', (new PatternTerm(TextPattern::fromText('x')))->type()->display());
34 }
35
36 public function testSignatureDistinguishesDifferentShapes(): void
37 {
38 $left = new PatternTerm(TextPattern::fromText('a'));
39 $right = new PatternTerm(TextPattern::fromText('b'));
40 self::assertNotSame($left->signature(), $right->signature());
41 }
42}
43