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