Unit tests for charset conversions

Added test cases for:

1. libraries/char*
2. libraries/iconv*
3. libraries/kanji*
This commit is contained in:
ayushchd 2013-06-12 16:14:09 +05:45
parent 896adcda3e
commit febc05dae0
5 changed files with 603 additions and 1 deletions

View File

@ -255,7 +255,27 @@ $GLOBALS['dummy_queries'] = array(
'query' => "SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.`SCHEMA_PRIVILEGES` WHERE GRANTEE='''pma_test''@''localhost''' AND PRIVILEGE_TYPE='TRIGGER' AND TABLE_SCHEMA='pma'",
'result' => array(),
),
array(
'query' => 'SELECT DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = \'pma_test\' LIMIT 1',
'columns' => array('DEFAULT_COLLATION_NAME'),
'result' => array(
array('utf8_general_ci')
)
),
array(
'query' => 'SELECT DEFAULT_COLLATION_NAME FROM data_dictionary.SCHEMAS WHERE SCHEMA_NAME = \'pma_test\' LIMIT 1',
'columns' => array('DEFAULT_COLLATION_NAME'),
'result' => array(
array('utf8_general_ci_pma_drizzle')
)
),
array(
'query' => 'SHOW VARIABLES LIKE \'collation_database\'',
'columns' => array('variable_name', 'variable_value'),
'result' => array(
array('foo', 'bar'),
)
)
);
/**
* Current database.

View File

@ -0,0 +1,61 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for Charset Conversions
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/charset_conversion.lib.php';
require_once 'libraries/iconv_wrapper.lib.php';
class PMA_Charset_Conversion_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_convertString
*
* @return void
*/
public function testCharsetConversion()
{
$this->assertEquals(
'test',
PMA_convertString('UTF-8', 'UTF-8', 'test')
);
$GLOBALS['PMA_recoding_engine'] = 6;
$this->assertEquals(
'test',
PMA_convertString('UTF-8', 'flat', 'test')
);
// TODO: remove function_exists if recode_string exists on server
if (@function_exists('recode_string')) {
$GLOBALS['PMA_recoding_engine'] = PMA_CHARSET_RECODE;
$this->assertEquals(
'Only That ecole & Can Be My Blame',
PMA_convertString('UTF-8', 'flat', 'Only That école & Can Be My Blame')
);
}
$GLOBALS['PMA_recoding_engine'] = PMA_CHARSET_ICONV;
$GLOBALS['cfg']['IconvExtraParams'] = '//TRANSLIT';
$this->assertEquals(
"This is the Euro symbol 'EUR'.",
PMA_convertString('UTF-8', 'ISO-8859-1', "This is the Euro symbol '€'.")
);
$GLOBALS['cfg']['IconvExtraParams'] = '//IGNORE';
$GLOBALS['PMA_recoding_engine'] = PMA_CHARSET_ICONV_AIX;
$this->assertEquals(
"This is the Euro symbol ''.",
PMA_convertString('UTF-8', 'ISO-8859-1', "This is the Euro symbol '€'.")
);
}
}
?>

View File

@ -0,0 +1,73 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for Charset Conversions for IBM AIX compliant codes
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/iconv_wrapper.lib.php';
class PMA_Iconv_Wrapper_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_aix_iconv_wrapper
*
* @dataProvider IconvDataProvider
*
* @param string $in_charset Non IBM-AIX-Compliant in-charset
* @param string $out_charset Non IBM-AIX-Compliant out-charset
* @param string $in_charset_mapped IBM-AIX-Compliant in-charset
* @param string $out_charset_mapped IBM-AIX-Compliant out-charset
* @param string $str String to test
*
* @return void
*/
public function testIconvWrapper($in_charset, $out_charset,
$in_charset_mapped, $out_charset_mapped, $str
) {
$this->assertEquals(
iconv($in_charset_mapped, $out_charset_mapped, $str),
PMA_aix_iconv_wrapper($in_charset, $out_charset, $str)
);
}
/**
* Data provider for testIconvWrapper
*
* @return array data for testIconvWrapper test case
*/
public function IconvDataProvider()
{
return array(
array(
'UTF-8',
'ISO-8859-1//IGNORE',
'UTF-8',
'ISO-8859-1//IGNORE',
'Euro Symbol: €'
),
array(
'UTF-8',
'ISO-8859-1//IGNORE//TRANSLIT',
'UTF-8',
'ISO-8859-1//IGNORE',
'Euro Symbol: €'
),
array('UTF-8',
'ISO-8859-9',
'UTF-8',
'ISO8859-9',
'Testing "string"'
)
);
}
}
?>

View File

@ -0,0 +1,168 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for Kanji Encoding Library
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/kanji-encoding.lib.php';
class PMA_Kanji_Encoding_Test extends PHPUnit_Framework_TestCase
{
/**
* Test fp\or PMA_Kanji_checkEncoding
*
* @param string $encoding Encoding to set
* @param strin $expected Expected encoding list
*
* @return void
*
* @dataProvider checkEncodingData
*/
public function testPMA_Kanji_checkEncoding($encoding, $expected) {
mb_internal_encoding($encoding);
$this->assertTrue(PMA_Kanji_checkEncoding());
$this->assertEquals($expected, $GLOBALS['kanji_encoding_list']);
}
/**
* Data provider for testPMA_Kanji_checkEncoding
* @return array Test data
*/
public function checkEncodingData() {
return array(
array('UTF-8', 'ASCII,SJIS,EUC-JP,JIS'),
array('EUC-JP', 'ASCII,EUC-JP,SJIS,JIS')
);
}
/**
* Test for PMA_Kanji_changeOrder
* @param string $kanji_test_list current list
* @param string $expected expected list
*
* @return void
*
* @dataProvider changeOrderData
*/
public function testPMA_Kanji_changeOrder($kanji_test_list, $expected) {
$GLOBALS['kanji_encoding_list'] = $kanji_test_list;
$this->assertTrue(PMA_Kanji_changeOrder());
$this->assertEquals($expected, $GLOBALS['kanji_encoding_list']);
}
/**
* Data Provider for testPMA_Kanji_changeOrder
*
* @return array Test data
*/
public function changeOrderData() {
return array(
array('ASCII,SJIS,EUC-JP,JIS', 'ASCII,EUC-JP,SJIS,JIS'),
array('ASCII,EUC-JP,SJIS,JIS', 'ASCII,SJIS,EUC-JP,JIS')
);
}
/**
* Test for PMA_Kanji_strConv
*
* @return void
*/
public function testPMA_Kanji_strConv() {
$this->assertEquals(
'test',
PMA_Kanji_strConv('test', '', '')
);
$GLOBALS['kanji_encoding_list'] = 'ASCII,SJIS,EUC-JP,JIS';
$this->assertEquals(
'test è',
PMA_Kanji_strConv('test è', '', '')
);
$this->assertEquals(
mb_convert_encoding('test è', 'ASCII', 'SJIS'),
PMA_Kanji_strConv('test è', 'ASCII', '')
);
$this->assertEquals(
mb_convert_kana('全角', 'KV', 'SJIS'),
PMA_Kanji_strConv('全角', '', 'kana')
);
}
/**
* Test for PMA_Kanji_fileConv
*
* @return void
*/
public function testPMA_Kanji_fileConv() {
$file_str = "教育漢字常用漢字";
$filename = 'test.kanji';
$file = fopen($filename, 'w');
fputs($file, $file_str);
fclose($file);
$GLOBALS['kanji_encoding_list'] = 'ASCII,EUC-JP,SJIS,JIS';
$result = PMA_Kanji_fileConv($filename, 'JIS', 'kana');
$string = file_get_contents($result);
PMA_Kanji_changeOrder();
$expected = PMA_Kanji_strConv($file_str, 'JIS', 'kana');
PMA_Kanji_changeOrder();
$this->assertEquals($string, $expected);
unlink($result);
}
/**
* Test for PMA_Kanji_encodingForm
*
* @return void
*/
public function testPMA_Kanji_encodingForm() {
$actual = PMA_Kanji_encodingForm();
$this->assertContains(
'<input type="radio" name="knjenc"',
$actual
);
$this->assertContains(
'type="radio" name="knjenc"',
$actual
);
$this->assertContains(
'<input type="radio" name="knjenc" value="EUC-JP" id="kj-euc" />',
$actual
);
$this->assertContains(
'<input type="radio" name="knjenc" value="SJIS" id="kj-sjis" />',
$actual
);
$this->assertContains(
'<input type="checkbox" name="xkana" value="kana" id="kj-kana" />',
$actual
);
}
}
?>

View File

@ -0,0 +1,280 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for MySQL Charsets
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/mysql_charsets.lib.php';
class PMA_MySQL_Charsets_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_generateCharsetQueryPart
*
* @dataProvider charsetQueryData
*
* @param bool $drizzle Value for PMA_DRIZZLE
* @param string $collation Collation
* @param string $expected Expected Charset Query
*
* @return void
*/
public function testPMA_generateCharsetQueryPart(
$drizzle, $collation, $expected
) {
if (defined('PMA_DRIZZLE')) {
runkit_constant_redefine('PMA_DRIZZLE', $drizzle);
} else {
define('PMA_DRIZZLE', $drizzle);
}
$this->assertEquals(
$expected,
PMA_generateCharsetQueryPart($collation)
);
}
/**
* Data Provider for testPMA_generateCharsetQueryPart
*
* @return array test data
*/
public function charsetQueryData()
{
return array(
array(false, "a_b_c_d", " CHARACTER SET a COLLATE a_b_c_d"),
array(false, "a_", " CHARACTER SET a COLLATE a_"),
array(false, "a", " CHARACTER SET a"),
array(true, "a_b_c_d", " COLLATE a_b_c_d")
);
}
/**
* Test for PMA_getDbCollation
*
* @return void
*
*/
public function testPMA_getDbCollation()
{
// test case for system schema
$this->assertEquals(
'utf8_general_ci',
PMA_getDbCollation("information_schema")
);
// test case with no pma drizzle
if (defined('PMA_DRIZZLE')) {
runkit_constant_redefine('PMA_DRIZZLE', false);
} else {
define('PMA_DRIZZLE', false);
}
$GLOBALS['cfg']['Server']['DisableIS'] = false;
$GLOBALS['cfg']['DBG']['sql'] = false;
$this->assertEquals(
'utf8_general_ci',
PMA_getDbCollation('pma_test')
);
// test case with pma drizzle as true
runkit_constant_redefine('PMA_DRIZZLE', true);
$this->assertEquals(
'utf8_general_ci_pma_drizzle',
PMA_getDbCollation('pma_test')
);
$GLOBALS['cfg']['Server']['DisableIS'] = true;
$GLOBALS['db'] = 'pma_test2';
$this->assertEquals(
'bar',
PMA_getDbCollation('pma_test')
);
$this->assertNotEquals(
'pma_test',
$GLOBALS['dummy_db']
);
}
/**
* Test case for PMA_getCollationDescr()
*
* @param string $collation Collation for which description is reqd
* @param string $desc Expected Description
*
* @return void
* @dataProvider collationDescr
*/
public function testPMA_getCollationDescr($collation, $desc) {
$this->assertEquals(
$desc,
PMA_getCollationDescr($collation)
);
}
/**
* Data Provider for testPMA_getCollationDescr()
*
* @return array Test data for testPMA_getCollationDescr()
*/
public function collationDescr() {
return array(
array('binary', 'Binary'),
array('foo_bulgarian_bar', 'Bulgarian'),
array('gb2312_chinese', 'Simplified Chinese'),
array('gbk_chinese', 'Simplified Chinese'),
array('big5_chinese', 'Traditional Chinese'),
array('foo_ci_bar', 'unknown, case-insensitive'),
array('foo_cs_bar', 'unknown, case-sensitive'),
array('foo_croatian_bar', 'Croatian'),
array('foo_czech_bar', 'Czech'),
array('foo_danish_bar', 'Danish'),
array('foo_english_bar', 'English'),
array('foo_esperanto_bar', 'Esperanto'),
array('foo_estonian_bar', 'Estonian'),
array('foo_german1_bar', 'German (dictionary)'),
array('foo_german2_bar', 'German (phone book)'),
array('foo_hungarian_bar', 'Hungarian'),
array('foo_icelandic_bar', 'Icelandic'),
array('foo_japanese_bar', 'Japanese'),
array('foo_latvian_bar', 'Latvian'),
array('foo_lithuanian_bar', 'Lithuanian'),
array('foo_korean_bar', 'Korean'),
array('foo_persian_bar', 'Persian'),
array('foo_polish_bar', 'Polish'),
array('foo_roman_bar', 'West European'),
array('foo_romanian_bar', 'Romanian'),
array('foo_slovak_bar', 'Slovak'),
array('foo_slovenian_bar', 'Slovenian'),
array('foo_spanish_bar', 'Spanish'),
array('foo_spanish2_bar', 'Traditional Spanish'),
array('foo_swedish_bar', 'Swedish'),
array('foo_thai_bar', 'Thai'),
array('foo_turkish_bar', 'Turkish'),
array('foo_ukrainian_bar', 'Ukrainian'),
array('foo_unicode_bar', 'Unicode (multilingual)'),
array('ucs2', 'Unicode (multilingual)'),
array('utf8', 'Unicode (multilingual)'),
array('ascii', 'West European (multilingual)'),
array('cp850', 'West European (multilingual)'),
array('dec8', 'West European (multilingual)'),
array('hp8', 'West European (multilingual)'),
array('latin1', 'West European (multilingual)'),
array('cp1250', 'Central European (multilingual)'),
array('cp852', 'Central European (multilingual)'),
array('latin2', 'Central European (multilingual)'),
array('macce', 'Central European (multilingual)'),
array('cp866', 'Russian'),
array('koi8r', 'Russian'),
array('gb2312', 'Simplified Chinese'),
array('gbk', 'Simplified Chinese'),
array('sjis', 'Japanese'),
array('ujis', 'Japanese'),
array('cp932', 'Japanese'),
array('eucjpms', 'Japanese'),
array('cp1257', 'Baltic (multilingual)'),
array('latin7', 'Baltic (multilingual)'),
array('armscii8', 'Armenian'),
array('armscii', 'Armenian'),
array('big5', 'Traditional Chinese'),
array('cp1251', 'Cyrillic (multilingual)'),
array('cp1256', 'Arabic'),
array('euckr', 'Korean'),
array('hebrew', 'Hebrew'),
array('geostd8', 'Georgian'),
array('greek', 'Greek'),
array('keybcs2', 'Czech-Slovak'),
array('koi8u', 'Ukrainian'),
array('latin5', 'Turkish'),
array('swe7', 'Swedish'),
array('tis620', 'Thai'),
array('foobar', 'unknown'),
array('foo_test_bar', 'unknown'),
array('foo_bin_bar', 'unknown, Binary')
);
}
/**
* Test for PMA_generateCharsetDropdownBox
*
* @return void
*/
public function testPMA_generateCharsetDropdownBox() {
$GLOBALS['mysql_charsets'] = array('latin1', 'latin2', 'latin3');
$GLOBALS['mysql_charsets_available'] = array(
'latin1' => true,
'latin2' => false,
'latin3' => true
);
$GLOBALS['mysql_charsets_descriptions'] = array(
'latin1' => 'abc',
'latin2' => 'def'
);
$GLOBALS['mysql_collations'] = array(
'latin1' => array(
'latin1_german1_ci',
'latin1_swedish1_ci'
),
'latin2' => array('latin1_general_ci'),
'latin3' => array()
);
$GLOBALS['mysql_collations_available'] = array(
'latin1_german1_ci' => true,
'latin1_swedish1_ci' => false,
'latin2_general_ci' => true
);
$result = PMA_generateCharsetDropdownBox();
$this->assertContains('name="collation"', $result);
$this->assertNotContains('id="', $result);
$this->assertNotContains('class="autosubmit"', $result);
$this->assertContains('<option value="">Collation', $result);
$this->assertContains('<option value=""></option>', $result);
$this->assertContains('<optgroup label="latin1', $result);
$this->assertNotContains('<optgroup label="latin2', $result);
$this->assertContains('title="latin3', $result);
$this->assertContains('title="abc', $result);
$this->assertNotContains('value="latin1_swedish1_ci"', $result);
$this->assertContains('value="latin1_german1_ci"', $result);
$this->assertNotContains('value="latin2_general1_ci"', $result);
$this->assertContains('title="German', $result);
$result = PMA_generateCharsetDropdownBox(2, null, "test_id", "latin1",
false, 0, true, false
);
$this->assertContains('name="character_set"', $result);
$this->assertNotContains('Charset</option>', $result);
$this->assertContains('class="autosubmit"', $result);
$this->assertContains('id="test_id"', $result);
$this->assertContains('selected="selected">latin1', $result);
}
/**
* Test for PMA_getServerCollation
*
* @return void
*/
public function testPMA_getServerCollation() {
$GLOBALS['cfg']['DBG']['sql'] = false;
$this->assertEquals('utf8_general_ci', PMA_getServerCollation());
}
}
?>