[FEATURE] Doctrine: Implement SchemaMigrationService
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Tests / Unit / Database / Schema / Parser / DataTypeAttributes / CharacterTypeAttributesTest.php
1 <?php
2 declare(strict_types=1);
3
4 namespace TYPO3\CMS\Core\Tests\Unit\Database\Schema\Parser\DataTypeAttributes;
5
6 /*
7 * This file is part of the TYPO3 CMS project.
8 *
9 * It is free software; you can redistribute it and/or modify it under
10 * the terms of the GNU General Public License, either version 2
11 * of the License, or any later version.
12 *
13 * For the full copyright and license information, please read the
14 * LICENSE.txt file that was distributed with this source code.
15 *
16 * The TYPO3 project - inspiring people to share!
17 */
18
19 use TYPO3\CMS\Core\Tests\Unit\Database\Schema\Parser\AbstractDataTypeBaseTestCase;
20
21 /**
22 * MySQL supports the SQL standard integer types INTEGER (or INT) and SMALLINT.
23 * As an extension to the standard, MySQL also supports the integer types TINYINT, MEDIUMINT, and BIGINT.
24 */
25 class CharacterTypeAttributesTest extends AbstractDataTypeBaseTestCase
26 {
27
28 /**
29 * Data provider for canParseCharacterDataTypeAttributes()
30 *
31 * @return array
32 */
33 public function canParseCharacterDataTypeAttributesProvider(): array
34 {
35 return [
36 'BINARY' => [
37 'VARCHAR(255) BINARY',
38 ['binary' => true, 'charset' => null, 'collation' => null],
39 ],
40 'CHARACTER SET' => [
41 'TEXT CHARACTER SET latin1',
42 ['binary' => false, 'charset' => 'latin1', 'collation' => null],
43 ],
44 'COLLATE' => [
45 'CHAR(20) COLLATE latin1_german1_ci',
46 ['binary' => false, 'charset' => null, 'collation' => 'latin1_german1_ci'],
47 ],
48 'CHARACTER SET + COLLATE' => [
49 'CHAR(20) CHARACTER SET latin1 COLLATE latin1_german1_ci',
50 ['binary' => false, 'charset' => 'latin1', 'collation' => 'latin1_german1_ci'],
51 ],
52 'BINARY, CHARACTER SET + COLLATE' => [
53 'CHAR(20) BINARY CHARACTER SET latin1 COLLATE latin1_german1_ci',
54 ['binary' => true, 'charset' => 'latin1', 'collation' => 'latin1_german1_ci'],
55 ],
56 ];
57 }
58
59 /**
60 * @test
61 * @dataProvider canParseCharacterDataTypeAttributesProvider
62 * @param string $columnDefinition
63 * @param array $options
64 */
65 public function canParseDataType(string $columnDefinition, array $options)
66 {
67 $subject = $this->createSubject($columnDefinition);
68
69 $this->assertSame($options, $subject->dataType->getOptions());
70 }
71 }