packages/sql-catalog/tests/Unit/Core/Evaluation/ArrayEntryTest.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\ArrayEntry;
11use SqlCatalog\Core\Evaluation\Domain;
12use SqlCatalog\Core\Evaluation\LiteralTerm;
13use SqlCatalog\Core\Evaluation\OpaqueTerm;
14use SqlCatalog\Core\Text\LiteralText;
15use SqlCatalog\Core\Text\TextPattern;
16use SqlCatalog\Core\Type\TypeShape;
17
18#[CoversClass(ArrayEntry::class)]
19#[UsesClass(Domain::class)]
20#[UsesClass(LiteralTerm::class)]
21#[UsesClass(OpaqueTerm::class)]
22#[UsesClass(LiteralText::class)]
23#[UsesClass(TextPattern::class)]
24#[UsesClass(TypeShape::class)]
25final class ArrayEntryTest extends TestCase
26{
27 public function testScalarKeyReadsAResolvedStringKey(): void
28 {
29 $entry = new ArrayEntry(Domain::literal(':id'), Domain::literal(1));
30 self::assertSame(':id', $entry->scalarKey());
31 }
32
33 public function testScalarKeyReadsAResolvedIntegerKey(): void
34 {
35 self::assertSame(2, (new ArrayEntry(Domain::literal(2), Domain::literal('x')))->scalarKey());
36 }
37
38 public function testScalarKeyIsNullWithoutAKey(): void
39 {
40 self::assertNull((new ArrayEntry(null, Domain::literal('x')))->scalarKey());
41 }
42
43 public function testScalarKeyIsNullWhenTheKeyDidNotResolve(): void
44 {
45 self::assertNull((new ArrayEntry(Domain::unknown(), Domain::literal('x')))->scalarKey());
46 }
47
48 public function testScalarKeyIsNullForANonStringScalar(): void
49 {
50 self::assertNull((new ArrayEntry(Domain::literal(true), Domain::literal('x')))->scalarKey());
51 }
52
53 public function testSignatureCombinesKeyAndValue(): void
54 {
55 $keyed = new ArrayEntry(Domain::literal('a'), Domain::literal(1));
56 $unkeyed = new ArrayEntry(null, Domain::literal(1));
57 self::assertNotSame($keyed->signature(), $unkeyed->signature());
58 }
59}
60