packages/sql-faker/tests/Unit/Sqlite/Grammar/SqliteGrammarTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\SqlFaker\Sqlite\Grammar;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use RuntimeException;
11use SqlFaker\Grammar\Model\Grammar;
12use SqlFaker\Grammar\Model\NonTerminal;
13use SqlFaker\Grammar\Model\Production;
14use SqlFaker\Grammar\Model\ProductionRule;
15use SqlFaker\Grammar\Model\Terminal;
16use SqlFaker\Grammar\Resource\SqlVersion;
17use SqlFaker\Grammar\Resource\SqlVersionRegistry;
18use SqlFaker\Sqlite\Grammar\SqliteGrammar;
19
20#[CoversClass(SqliteGrammar::class)]
21#[CoversClass(Grammar::class)]
22#[CoversClass(ProductionRule::class)]
23#[CoversClass(Production::class)]
24#[CoversClass(Terminal::class)]
25#[CoversClass(NonTerminal::class)]
26#[UsesClass(SqlVersion::class)]
27#[UsesClass(SqlVersionRegistry::class)]
28final class SqliteGrammarTest extends TestCase
29{
30 public function testLoad(): void
31 {
32 $grammar = SqliteGrammar::load();
33
34 self::assertNotEmpty($grammar->ruleMap);
35 }
36
37 public function testLoadWithExplicitVersion(): void
38 {
39 $grammar = SqliteGrammar::load('sqlite-3.47.2');
40
41 self::assertNotEmpty($grammar->ruleMap);
42 }
43
44 public function testResolveVersionUsesExactConfiguredDefault(): void
45 {
46 self::assertSame('sqlite-3.47.2', SqliteGrammar::resolveVersion());
47 self::assertSame('sqlite-3.47.2', SqliteGrammar::resolveVersion('sqlite-3.47.2'));
48 }
49
50 public function testLoadWithNonExistentVersionThrows(): void
51 {
52 $this->expectException(RuntimeException::class);
53
54 SqliteGrammar::load('sqlite-999.999');
55 }
56
57 public function testLoadedGrammarStartSymbol(): void
58 {
59 $grammar = SqliteGrammar::load();
60
61 self::assertArrayHasKey($grammar->startSymbol, $grammar->ruleMap);
62 }
63
64 public function testLoadedGrammarStructure(): void
65 {
66 $grammar = SqliteGrammar::load();
67
68 self::assertArrayHasKey('cmd', $grammar->ruleMap);
69 self::assertArrayHasKey('select', $grammar->ruleMap);
70 self::assertArrayHasKey('expr', $grammar->ruleMap);
71 }
72}
73