packages/sql-catalog/tests/Unit/Core/Text/OriginTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Core\Text;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\DataProvider;
9use PHPUnit\Framework\TestCase;
10use SqlCatalog\Core\Text\Origin;
11
12#[CoversClass(Origin::class)]
13final class OriginTest extends TestCase
14{
15 public function testIsExternallyControlledOnlyForExternalInput(): void
16 {
17 self::assertTrue(Origin::External->isExternallyControlled());
18 self::assertFalse(Origin::Parameter->isExternallyControlled());
19 self::assertFalse(Origin::Unresolved->isExternallyControlled());
20 }
21
22 #[DataProvider('providerDescribe')]
23 public function testDescribe(Origin $origin, string $expected): void
24 {
25 self::assertSame($expected, $origin->describe());
26 }
27
28 /**
29 * @return list<array{Origin, string}>
30 */
31 public static function providerDescribe(): array
32 {
33 return [
34 [Origin::External, 'external input'],
35 [Origin::Parameter, 'a function parameter'],
36 [Origin::Property, 'an object property'],
37 [Origin::Call, 'a call the analyzer did not follow'],
38 [Origin::Loop, 'a value built by a loop'],
39 [Origin::Branch, 'values that differ between branches'],
40 [Origin::Unresolved, 'an expression the analyzer could not resolve'],
41 ];
42 }
43}
44