packages/sql-catalog/tests/Unit/Facade/BuiltinsTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Facade;
6
7use PHPUnit\Framework\TestCase;
8
9#[\PHPUnit\Framework\Attributes\CoversClass(\SqlCatalog\Facade\Builtins::class)]
10#[\PHPUnit\Framework\Attributes\CoversClass(\SqlCatalog\Core\Sql\Dialects::class)]
11#[\PHPUnit\Framework\Attributes\CoversClass(\SqlCatalog\Reporter\Html\SqlFormatter::class)]
12#[\PHPUnit\Framework\Attributes\CoversClass(\SqlCatalog\Core\Catalog\StatementPart::class)]
13#[\PHPUnit\Framework\Attributes\CoversClass(\SqlCatalog\Platform\MySql\Dialect::class)]
14#[\PHPUnit\Framework\Attributes\CoversClass(\SqlCatalog\Platform\MySql\SqlFormatter::class)]
15#[\PHPUnit\Framework\Attributes\CoversClass(\SqlCatalog\Platform\PostgreSql\Dialect::class)]
16#[\PHPUnit\Framework\Attributes\CoversClass(\SqlCatalog\Platform\PostgreSql\SqlFormatter::class)]
17#[\PHPUnit\Framework\Attributes\CoversClass(\SqlCatalog\Platform\Sqlite\Dialect::class)]
18#[\PHPUnit\Framework\Attributes\CoversClass(\SqlCatalog\Platform\Sqlite\SqlFormatter::class)]
19#[\PHPUnit\Framework\Attributes\CoversClass(\SqlCatalog\Core\Extension\ExtensionRegistry::class)]
20#[\PHPUnit\Framework\Attributes\CoversClass(\SqlCatalog\Core\Reporter\ReporterRegistry::class)]
21final class BuiltinsTest extends TestCase
22{
23 public function testExtensionsRegistersTheShippedImplementationsAndDefaults(): void
24 {
25 $extensions = \SqlCatalog\Facade\Builtins::extensions();
26 self::assertSame(['doctrine', 'laravel', 'mysqli', 'pdo', 'wordpress'], $extensions->names());
27 self::assertSame(['pdo', 'mysqli'], $extensions->defaultNames());
28 }
29
30 public function testReportersRegistersTheShippedFormats(): void
31 {
32 self::assertSame(['html', 'json', 'text'], \SqlCatalog\Facade\Builtins::reporters()->names());
33 }
34
35 public function testDialectsSelectsIndependentPolicies(): void
36 {
37 $dialects = \SqlCatalog\Facade\Builtins::dialects();
38 self::assertSame('`', $dialects->find('mysql')?->identifierQuote());
39 self::assertSame('"', $dialects->find('pgsql')?->identifierQuote());
40 self::assertSame('insert or ignore into ', $dialects->find('sqlite')?->insertPrefix(true));
41 }
42
43 public function testFormattersCoverAllBuiltInLanguages(): void
44 {
45 self::assertCount(3, \SqlCatalog\Facade\Builtins::formatters());
46 }
47
48 public function testSqlFormatterKeepsTheDefaultExpandedPresentation(): void
49 {
50 $parts = \SqlCatalog\Facade\Builtins::sqlFormatter()->format([new \SqlCatalog\Core\Catalog\StatementPart('SELECT 1')]);
51 self::assertSame("SELECT\n 1", $parts[0]->text);
52 }
53}
54