object = new Types($GLOBALS['dbi']);
}
/**
* Test for isUnaryOperator
*/
public function testUnary(): void
{
$this->assertTrue($this->object->isUnaryOperator('IS NULL'));
$this->assertFalse($this->object->isUnaryOperator('='));
}
/**
* Test for getUnaryOperators
*/
public function testGetUnaryOperators(): void
{
$this->assertEquals(
[
'IS NULL',
'IS NOT NULL',
"= ''",
"!= ''",
],
$this->object->getUnaryOperators()
);
}
/**
* Test for getNullOperators
*/
public function testGetNullOperators(): void
{
$this->assertEquals(
[
'IS NULL',
'IS NOT NULL',
],
$this->object->getNullOperators()
);
}
/**
* Test for getEnumOperators
*/
public function testGetEnumOperators(): void
{
$this->assertEquals(
[
'=',
'!=',
],
$this->object->getEnumOperators()
);
}
/**
* Test for getTextOperators
*/
public function testgetTextOperators(): void
{
$this->assertEquals(
[
'LIKE',
'LIKE %...%',
'NOT LIKE',
'NOT LIKE %...%',
'=',
'!=',
'REGEXP',
'REGEXP ^...$',
'NOT REGEXP',
"= ''",
"!= ''",
'IN (...)',
'NOT IN (...)',
'BETWEEN',
'NOT BETWEEN',
],
$this->object->getTextOperators()
);
}
/**
* Test for getNumberOperators
*/
public function testGetNumberOperators(): void
{
$this->assertEquals(
[
'=',
'>',
'>=',
'<',
'<=',
'!=',
'LIKE',
'LIKE %...%',
'NOT LIKE',
'NOT LIKE %...%',
'IN (...)',
'NOT IN (...)',
'BETWEEN',
'NOT BETWEEN',
],
$this->object->getNumberOperators()
);
}
/**
* Test for getting type operators
*
* @param string $type Type of field
* @param bool $null Whether field can be NULL
* @param string|array $output Expected output
*
* @dataProvider providerForGetTypeOperators
*/
public function testGetTypeOperators(string $type, bool $null, $output): void
{
$this->assertEquals(
$output,
$this->object->getTypeOperators($type, $null)
);
}
/**
* data provider for testGetTypeOperators
*
* @return array data for testGetTypeOperators
*/
public function providerForGetTypeOperators(): array
{
return [
[
'enum',
false,
[
'=',
'!=',
],
],
[
'CHAR',
true,
[
'LIKE',
'LIKE %...%',
'NOT LIKE',
'NOT LIKE %...%',
'=',
'!=',
'REGEXP',
'REGEXP ^...$',
'NOT REGEXP',
'= \'\'',
'!= \'\'',
'IN (...)',
'NOT IN (...)',
'BETWEEN',
'NOT BETWEEN',
'IS NULL',
'IS NOT NULL',
],
[
'int',
false,
[
'=',
'!=',
],
],
],
];
}
/**
* Test for getTypeOperatorsHtml
*
* @param string $type Type of field
* @param bool $null Whether field can be NULL
* @param string $selectedOperator Option to be selected
* @param string $output Expected output
*
* @dataProvider providerForTestGetTypeOperatorsHtml
*/
public function testGetTypeOperatorsHtml(
string $type,
bool $null,
string $selectedOperator,
string $output
): void {
$this->assertEquals(
$output,
$this->object->getTypeOperatorsHtml($type, $null, $selectedOperator)
);
}
/**
* Provider for testGetTypeOperatorsHtml
*
* @return array test data for getTypeOperatorsHtml
*/
public function providerForTestGetTypeOperatorsHtml(): array
{
return [
[
'enum',
false,
'=',
''
. '',
],
];
}
/**
* Test for getTypeDescription
*
* @param string $type The data type to get a description.
*
* @dataProvider providerForTestGetTypeDescription
*/
public function testGetTypeDescription(string $type): void
{
$this->assertNotEquals(
'',
$this->object->getTypeDescription($type)
);
}
/**
* Test for getTypeDescription with unknown value
*/
public function testGetUnknownTypeDescription(): void
{
$this->assertEquals(
'',
$this->object->getTypeDescription('UNKNOWN')
);
}
/**
* Provider for testGetTypeDescription
*
* @return array
*/
public function providerForTestGetTypeDescription(): array
{
return [
['TINYINT'],
['SMALLINT'],
['MEDIUMINT'],
['INT'],
['BIGINT'],
['DECIMAL'],
['FLOAT'],
['DOUBLE'],
['REAL'],
['BIT'],
['BOOLEAN'],
['SERIAL'],
['DATE'],
['DATETIME'],
['TIMESTAMP'],
['TIME'],
['YEAR'],
['CHAR'],
['VARCHAR'],
['TINYTEXT'],
['TEXT'],
['MEDIUMTEXT'],
['LONGTEXT'],
['BINARY'],
['VARBINARY'],
['TINYBLOB'],
['MEDIUMBLOB'],
['BLOB'],
['LONGBLOB'],
['ENUM'],
['SET'],
['GEOMETRY'],
['POINT'],
['LINESTRING'],
['POLYGON'],
['MULTIPOINT'],
['MULTILINESTRING'],
['MULTIPOLYGON'],
['GEOMETRYCOLLECTION'],
];
}
/**
* @param string $class The class to get function list.
* @param array $output Expected function list
*
* @dataProvider providerFortTestGetFunctionsClass
*/
public function testGetFunctionsClass(string $class, array $output): void
{
$this->assertEquals(
$output,
$this->object->getFunctionsClass($class)
);
}
/**
* Data provider for testing function lists
*/
public function providerFortTestGetFunctionsClass(): array
{
return [
[
'CHAR',
[
'AES_DECRYPT',
'AES_ENCRYPT',
'BIN',
'CHAR',
'COMPRESS',
'CURRENT_USER',
'DATABASE',
'DAYNAME',
'DES_DECRYPT',
'DES_ENCRYPT',
'ENCRYPT',
'HEX',
'INET6_NTOA',
'INET_NTOA',
'LOAD_FILE',
'LOWER',
'LTRIM',
'MD5',
'MONTHNAME',
'OLD_PASSWORD',
'PASSWORD',
'QUOTE',
'REVERSE',
'RTRIM',
'SHA1',
'SOUNDEX',
'SPACE',
'TRIM',
'UNCOMPRESS',
'UNHEX',
'UPPER',
'USER',
'UUID',
'VERSION',
],
],
[
'DATE',
[
'CURRENT_DATE',
'CURRENT_TIME',
'DATE',
'FROM_DAYS',
'FROM_UNIXTIME',
'LAST_DAY',
'NOW',
'SEC_TO_TIME',
'SYSDATE',
'TIME',
'TIMESTAMP',
'UTC_DATE',
'UTC_TIME',
'UTC_TIMESTAMP',
'YEAR',
],
],
[
'SPATIAL',
[
'ST_GeomFromText',
'ST_GeomFromWKB',
'ST_GeomCollFromText',
'ST_LineFromText',
'ST_MLineFromText',
'ST_PointFromText',
'ST_MPointFromText',
'ST_PolyFromText',
'ST_MPolyFromText',
'ST_GeomCollFromWKB',
'ST_LineFromWKB',
'ST_MLineFromWKB',
'ST_PointFromWKB',
'ST_MPointFromWKB',
'ST_PolyFromWKB',
'ST_MPolyFromWKB',
],
],
[
'NUMBER',
[
'0' => 'ABS',
'1' => 'ACOS',
'2' => 'ASCII',
'3' => 'ASIN',
'4' => 'ATAN',
'5' => 'BIT_LENGTH',
'6' => 'BIT_COUNT',
'7' => 'CEILING',
'8' => 'CHAR_LENGTH',
'9' => 'CONNECTION_ID',
'10' => 'COS',
'11' => 'COT',
'12' => 'CRC32',
'13' => 'DAYOFMONTH',
'14' => 'DAYOFWEEK',
'15' => 'DAYOFYEAR',
'16' => 'DEGREES',
'17' => 'EXP',
'18' => 'FLOOR',
'19' => 'HOUR',
'20' => 'INET6_ATON',
'21' => 'INET_ATON',
'22' => 'LENGTH',
'23' => 'LN',
'24' => 'LOG',
'25' => 'LOG2',
'26' => 'LOG10',
'27' => 'MICROSECOND',
'28' => 'MINUTE',
'29' => 'MONTH',
'30' => 'OCT',
'31' => 'ORD',
'32' => 'PI',
'33' => 'QUARTER',
'34' => 'RADIANS',
'35' => 'RAND',
'36' => 'ROUND',
'37' => 'SECOND',
'38' => 'SIGN',
'39' => 'SIN',
'40' => 'SQRT',
'41' => 'TAN',
'42' => 'TO_DAYS',
'43' => 'TO_SECONDS',
'44' => 'TIME_TO_SEC',
'45' => 'UNCOMPRESSED_LENGTH',
'46' => 'UNIX_TIMESTAMP',
'47' => 'UUID_SHORT',
'48' => 'WEEK',
'49' => 'WEEKDAY',
'50' => 'WEEKOFYEAR',
'51' => 'YEARWEEK',
],
],
[
'UNKNOWN',
[],
],
];
}
/**
* Test for getFunctions
*/
public function testGetFunctions(): void
{
$this->assertEquals(
[
'AES_DECRYPT',
'AES_ENCRYPT',
'BIN',
'CHAR',
'COMPRESS',
'CURRENT_USER',
'DATABASE',
'DAYNAME',
'DES_DECRYPT',
'DES_ENCRYPT',
'ENCRYPT',
'HEX',
'INET6_NTOA',
'INET_NTOA',
'LOAD_FILE',
'LOWER',
'LTRIM',
'MD5',
'MONTHNAME',
'OLD_PASSWORD',
'PASSWORD',
'QUOTE',
'REVERSE',
'RTRIM',
'SHA1',
'SOUNDEX',
'SPACE',
'TRIM',
'UNCOMPRESS',
'UNHEX',
'UPPER',
'USER',
'UUID',
'VERSION',
],
$this->object->getFunctions('enum')
);
}
/**
* Test for getAllFunctions
*/
public function testGetAllFunctions(): void
{
$this->assertEquals(
[
'ABS',
'ACOS',
'AES_DECRYPT',
'AES_ENCRYPT',
'ASCII',
'ASIN',
'ATAN',
'BIN',
'BIT_COUNT',
'BIT_LENGTH',
'CEILING',
'CHAR',
'CHAR_LENGTH',
'COMPRESS',
'CONNECTION_ID',
'COS',
'COT',
'CRC32',
'CURRENT_DATE',
'CURRENT_TIME',
'CURRENT_USER',
'DATABASE',
'DATE',
'DAYNAME',
'DAYOFMONTH',
'DAYOFWEEK',
'DAYOFYEAR',
'DEGREES',
'DES_DECRYPT',
'DES_ENCRYPT',
'ENCRYPT',
'EXP',
'FLOOR',
'FROM_DAYS',
'FROM_UNIXTIME',
'HEX',
'HOUR',
'INET6_ATON',
'INET6_NTOA',
'INET_ATON',
'INET_NTOA',
'LAST_DAY',
'LENGTH',
'LN',
'LOAD_FILE',
'LOG',
'LOG10',
'LOG2',
'LOWER',
'LTRIM',
'MD5',
'MICROSECOND',
'MINUTE',
'MONTH',
'MONTHNAME',
'NOW',
'OCT',
'OLD_PASSWORD',
'ORD',
'PASSWORD',
'PI',
'QUARTER',
'QUOTE',
'RADIANS',
'RAND',
'REVERSE',
'ROUND',
'RTRIM',
'SECOND',
'SEC_TO_TIME',
'SHA1',
'SIGN',
'SIN',
'SOUNDEX',
'SPACE',
'SQRT',
'SYSDATE',
'TAN',
'TIME',
'TIMESTAMP',
'TIME_TO_SEC',
'TO_DAYS',
'TO_SECONDS',
'TRIM',
'UNCOMPRESS',
'UNCOMPRESSED_LENGTH',
'UNHEX',
'UNIX_TIMESTAMP',
'UPPER',
'USER',
'UTC_DATE',
'UTC_TIME',
'UTC_TIMESTAMP',
'UUID',
'UUID_SHORT',
'VERSION',
'WEEK',
'WEEKDAY',
'WEEKOFYEAR',
'YEAR',
'YEARWEEK',
],
$this->object->getAllFunctions()
);
}
/**
* Test for getAttributes
*/
public function testGetAttributes(): void
{
$this->assertEquals(
[
'',
'BINARY',
'UNSIGNED',
'UNSIGNED ZEROFILL',
'on update CURRENT_TIMESTAMP',
],
$this->object->getAttributes()
);
}
/**
* Test for getColumns
*/
public function testGetColumns(): void
{
$this->assertEquals(
[
0 => 'INT',
1 => 'VARCHAR',
2 => 'TEXT',
3 => 'DATE',
'Numeric' => [
'TINYINT',
'SMALLINT',
'MEDIUMINT',
'INT',
'BIGINT',
'-',
'DECIMAL',
'FLOAT',
'DOUBLE',
'REAL',
'-',
'BIT',
'BOOLEAN',
'SERIAL',
],
'Date and time' => [
'DATE',
'DATETIME',
'TIMESTAMP',
'TIME',
'YEAR',
],
'String' => [
'CHAR',
'VARCHAR',
'-',
'TINYTEXT',
'TEXT',
'MEDIUMTEXT',
'LONGTEXT',
'-',
'BINARY',
'VARBINARY',
'-',
'TINYBLOB',
'BLOB',
'MEDIUMBLOB',
'LONGBLOB',
'-',
'ENUM',
'SET',
],
'Spatial' => [
'GEOMETRY',
'POINT',
'LINESTRING',
'POLYGON',
'MULTIPOINT',
'MULTILINESTRING',
'MULTIPOLYGON',
'GEOMETRYCOLLECTION',
],
'JSON' => ['JSON'],
],
$this->object->getColumns()
);
}
/**
* @param string $type Type to check
* @param string $output Expected result
*
* @dataProvider providerFortTestGetTypeClass
*/
public function testGetTypeClass(string $type, string $output): void
{
$this->assertEquals(
$output,
$this->object->getTypeClass($type)
);
}
/**
* Data provider for type testing
*
* @return array for testing type detection
*/
public function providerFortTestGetTypeClass(): array
{
return [
[
'SERIAL',
'NUMBER',
],
[
'YEAR',
'DATE',
],
[
'GEOMETRYCOLLECTION',
'SPATIAL',
],
[
'SET',
'CHAR',
],
[
'UNKNOWN',
'',
],
];
}
}