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