3 declare(strict_types
=1);
5 namespace PhpMyAdmin\Tests
;
7 use PhpMyAdmin\Dbal\DatabaseInterface
;
8 use PhpMyAdmin\TypeClass
;
10 use PHPUnit\Framework\Attributes\CoversClass
;
11 use PHPUnit\Framework\Attributes\DataProvider
;
13 #[CoversClass(Types::class)]
14 class TypesTest
extends AbstractTestCase
16 protected Types
$object;
19 * Sets up the fixture, for example, opens a network connection.
20 * This method is called before a test is executed.
22 protected function setUp(): void
26 DatabaseInterface
::$instance = $this->createDatabaseInterface();
27 $this->object = new Types(DatabaseInterface
::getInstance());
31 * Test for isUnaryOperator
33 public function testUnary(): void
35 self
::assertTrue($this->object->isUnaryOperator('IS NULL'));
36 self
::assertFalse($this->object->isUnaryOperator('='));
40 * Test for getting type operators
42 * @param string $type Type of field
43 * @param bool $null Whether field can be NULL
44 * @param string|string[] $output Expected output
46 #[DataProvider('providerForGetTypeOperators')]
47 public function testGetTypeOperators(string $type, bool $null, string|
array $output): void
51 $this->object->getTypeOperators($type, $null),
56 * data provider for testGetTypeOperators
58 * @return array<array{string, bool, string|string[]}>
60 public static function providerForGetTypeOperators(): array
63 ['enum', false, ['=', '!=']],
110 ['=', '!=', 'LIKE', 'LIKE %...%', 'NOT LIKE', 'NOT LIKE %...%', 'IN (...)', 'NOT IN (...)'],
132 * Test for getTypeOperatorsHtml
134 * @param string $type Type of field
135 * @param bool $null Whether field can be NULL
136 * @param string $selectedOperator Option to be selected
137 * @param string $output Expected output
139 #[DataProvider('providerForTestGetTypeOperatorsHtml')]
140 public function testGetTypeOperatorsHtml(
143 string $selectedOperator,
148 $this->object->getTypeOperatorsHtml($type, $null, $selectedOperator),
153 * Provider for testGetTypeOperatorsHtml
155 * @return array<array{string, bool, string, string}>
157 public static function providerForTestGetTypeOperatorsHtml(): array
160 ['enum', false, '=', '<option value="=" selected>=</option><option value="!=">!=</option>'],
165 * Test for getTypeDescription
167 * @param string $type The data type to get a description.
169 #[DataProvider('providerForTestGetTypeDescription')]
170 public function testGetTypeDescription(string $type): void
174 $this->object->getTypeDescription($type),
179 * Test for getTypeDescription with unknown value
181 public function testGetUnknownTypeDescription(): void
185 $this->object->getTypeDescription('UNKNOWN'),
190 * Provider for testGetTypeDescription
192 * @return array<array{string}>
194 public static function providerForTestGetTypeDescription(): array
235 ['GEOMETRYCOLLECTION'],
243 * @param TypeClass $class The class to get function list.
244 * @param string[] $output Expected function list
246 #[DataProvider('providerFortTestGetFunctionsClass')]
247 public function testGetFunctionsClass(TypeClass
$class, array $output): void
251 $this->object->getFunctionsClass($class),
255 /** @return array<array{TypeClass, string[]}> */
256 public static function providerFortTestGetFunctionsClass(): array
325 'ST_GeomCollFromText',
333 'ST_GeomCollFromWKB',
390 'UNCOMPRESSED_LENGTH',
399 [TypeClass
::Unknown
, []],
404 * Test for getAllFunctions
406 public function testGetAllFunctions(): void
487 'ST_GeomCollFromText',
488 'ST_GeomCollFromWKB',
512 'UNCOMPRESSED_LENGTH',
529 $this->object->getAllFunctions(),
534 * Test for getAttributes
536 public function testGetAttributes(): void
539 ['', 'BINARY', 'UNSIGNED', 'UNSIGNED ZEROFILL', 'on update CURRENT_TIMESTAMP'],
540 $this->object->getAttributes(),
545 * Test for getColumns
547 public function testGetColumns(): void
571 'Date and time' => ['DATE', 'DATETIME', 'TIMESTAMP', 'TIME', 'YEAR'],
600 'GEOMETRYCOLLECTION',
604 $this->object->getColumns(),
609 * @param string $type Type to check
610 * @param TypeClass $output Expected result
612 #[DataProvider('providerFortTestGetTypeClass')]
613 public function testGetTypeClass(string $type, TypeClass
$output): void
617 $this->object->getTypeClass($type),
622 * Data provider for type testing
624 * @return array<array{string, TypeClass}>
626 public static function providerFortTestGetTypeClass(): array
629 ['SERIAL', TypeClass
::Number
],
630 ['YEAR', TypeClass
::Date
],
631 ['GEOMETRYCOLLECTION', TypeClass
::Spatial
],
632 ['SET', TypeClass
::Char
],
633 ['JSON', TypeClass
::Json
],
634 ['UUID', TypeClass
::Uuid
],
635 ['UNKNOWN', TypeClass
::Unknown
],