packages/sql-parser/tests/Unit/MySql/MySqlVersionTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\MySql;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\Small;
9use PHPUnit\Framework\Attributes\UsesClass;
10use PHPUnit\Framework\TestCase;
11use RuntimeException;
12use SqlParser\MySql\MySqlVersion;
13use SqlParser\Resource\SqlVersion;
14use SqlParser\Resource\VersionRegistry;
15
16#[CoversClass(MySqlVersion::class)]
17#[UsesClass(SqlVersion::class)]
18#[UsesClass(VersionRegistry::class)]
19#[Small]
20final class MySqlVersionTest extends TestCase
21{
22    public function testResolve(): void
23    {
24        self::assertSame('mysql-8.4.7', MySqlVersion::resolve()->name());
25        self::assertSame('mysql-5.6.51', MySqlVersion::resolve('mysql-5.6.51')->name());
26    }
27
28    public function testResolveRejectsAnUnknownRelease(): void
29    {
30        $this->expectException(RuntimeException::class);
31
32        MySqlVersion::resolve('mysql-4.1.0');
33    }
34
35    public function testName(): void
36    {
37        self::assertSame('mysql-9.1.0', MySqlVersion::resolve('mysql-9.1.0')->name());
38    }
39
40    public function testId(): void
41    {
42        self::assertSame(80407, MySqlVersion::resolve('mysql-8.4.7')->id());
43        self::assertSame(50651, MySqlVersion::resolve('mysql-5.6.51')->id());
44        self::assertSame(90100, MySqlVersion::resolve('mysql-9.1.0')->id());
45    }
46
47    public function testHasJsonOperators(): void
48    {
49        self::assertFalse(MySqlVersion::resolve('mysql-5.6.51')->hasJsonOperators());
50        self::assertTrue(MySqlVersion::resolve('mysql-5.7.44')->hasJsonOperators());
51    }
52
53    public function testHasDollarQuotedStrings(): void
54    {
55        self::assertFalse(MySqlVersion::resolve('mysql-8.0.44')->hasDollarQuotedStrings());
56        self::assertTrue(MySqlVersion::resolve('mysql-8.1.0')->hasDollarQuotedStrings());
57    }
58
59    public function testMergesWithCube(): void
60    {
61        self::assertTrue(MySqlVersion::resolve('mysql-5.7.44')->mergesWithCube());
62        self::assertFalse(MySqlVersion::resolve('mysql-8.0.44')->mergesWithCube());
63    }
64}
65