packages/sql-faker/tests/Unit/MySql/Generation/Rewrite/Name/HostNameRuleTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\SqlFaker\MySql\Generation\Rewrite\Name;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\DataProvider;
9use PHPUnit\Framework\Attributes\UsesClass;
10use PHPUnit\Framework\TestCase;
11use SqlFaker\Generation\Token\ProductionOccurrence;
12use SqlFaker\Generation\Token\TerminalOccurrence;
13use SqlFaker\Generation\Token\TerminalSequence;
14use SqlFaker\MySql\Generation\Rewrite\Name\HostNameRule;
15
16#[CoversClass(HostNameRule::class)]
17#[UsesClass(ProductionOccurrence::class)]
18#[UsesClass(TerminalOccurrence::class)]
19#[UsesClass(TerminalSequence::class)]
20final class HostNameRuleTest extends TestCase
21{
22    /**
23     * @param list<string> $input
24     * @param list<string> $expected
25     */
26    #[DataProvider('providerStates')]
27    public function testRewriteRequiresTheSingleAtSignScannerState(array $input, array $expected): void
28    {
29        $sequence = TerminalSequence::fromNames($input);
30        $rule = new HostNameRule();
31        $result = $rule->rewrite($sequence);
32        self::assertSame($expected, $result->names());
33        self::assertSame($sequence->original, $result->original);
34        self::assertSame($result, $rule->rewrite($result));
35    }
36
37    /**
38     * @return list<array{list<string>, list<string>}>
39     */
40    public static function providerStates(): array
41    {
42        return [
43            [['LEX_HOSTNAME'], ['IDENT']],
44            [['SERVER', 'LEX_HOSTNAME'], ['SERVER', 'IDENT']],
45            [['LEX_HOSTNAME', '@', 'LEX_HOSTNAME'], ['IDENT', '@', 'LEX_HOSTNAME']],
46            [['@', 'LEX_HOSTNAME'], ['@', 'LEX_HOSTNAME']],
47            [['@', '@', 'LEX_HOSTNAME'], ['@', '@', 'IDENT']],
48            [['IDENT'], ['IDENT']],
49        ];
50    }
51}
52