packages/sql-catalog/tests/Unit/Core/Evaluation/LiteralTermTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Core\Evaluation;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\DataProvider;
9use PHPUnit\Framework\Attributes\UsesClass;
10use PHPUnit\Framework\TestCase;
11use SqlCatalog\Core\Evaluation\LiteralTerm;
12use SqlCatalog\Core\Text\LiteralText;
13use SqlCatalog\Core\Text\TextPattern;
14use SqlCatalog\Core\Type\TypeShape;
15
16#[CoversClass(LiteralTerm::class)]
17#[UsesClass(LiteralText::class)]
18#[UsesClass(TextPattern::class)]
19#[UsesClass(TypeShape::class)]
20final class LiteralTermTest extends TestCase
21{
22 public function testToPatternResolvesFully(): void
23 {
24 self::assertSame('users', (new LiteralTerm('users'))->toPattern()->text());
25 }
26
27 #[DataProvider('providerToText')]
28 public function testToText(string|int|float|bool|null $value, string $expected): void
29 {
30 self::assertSame($expected, (new LiteralTerm($value))->toText());
31 }
32
33 /**
34 * @return list<array{string|int|float|bool|null, string}>
35 */
36 public static function providerToText(): array
37 {
38 return [
39 ['users', 'users'],
40 [7, '7'],
41 [1.5, '1.5'],
42 [true, '1'],
43 [false, ''],
44 [null, ''],
45 ];
46 }
47
48 #[DataProvider('providerType')]
49 public function testType(string|int|float|bool|null $value, string $expected): void
50 {
51 self::assertSame($expected, (new LiteralTerm($value))->type()->display());
52 }
53
54 /**
55 * @return list<array{string|int|float|bool|null, string}>
56 */
57 public static function providerType(): array
58 {
59 return [
60 ['users', 'string'],
61 [7, 'int'],
62 [1.5, 'float'],
63 [true, 'bool'],
64 [null, 'null'],
65 ];
66 }
67
68 public function testSignatureKeepsNumbersAndTheirStringsApart(): void
69 {
70 self::assertNotSame((new LiteralTerm(1))->signature(), (new LiteralTerm('1'))->signature());
71 }
72}
73