diff --git a/libraries/dbi/DBIDummy.class.php b/libraries/dbi/DBIDummy.class.php
index 0a7d4a5a45..218e593c59 100644
--- a/libraries/dbi/DBIDummy.class.php
+++ b/libraries/dbi/DBIDummy.class.php
@@ -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.
diff --git a/test/libraries/PMA_charset_conversion_test.php b/test/libraries/PMA_charset_conversion_test.php
new file mode 100644
index 0000000000..495a9889ac
--- /dev/null
+++ b/test/libraries/PMA_charset_conversion_test.php
@@ -0,0 +1,61 @@
+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 '€'.")
+ );
+
+ }
+}
+?>
diff --git a/test/libraries/PMA_iconv_wrapper_test.php b/test/libraries/PMA_iconv_wrapper_test.php
new file mode 100644
index 0000000000..ed0e7fc23f
--- /dev/null
+++ b/test/libraries/PMA_iconv_wrapper_test.php
@@ -0,0 +1,73 @@
+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"'
+ )
+ );
+ }
+}
+?>
diff --git a/test/libraries/PMA_kanji-encoding_test.php b/test/libraries/PMA_kanji-encoding_test.php
new file mode 100644
index 0000000000..ee562f1422
--- /dev/null
+++ b/test/libraries/PMA_kanji-encoding_test.php
@@ -0,0 +1,168 @@
+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(
+ 'assertContains(
+ 'type="radio" name="knjenc"',
+ $actual
+ );
+ $this->assertContains(
+ '',
+ $actual
+ );
+ $this->assertContains(
+ '',
+ $actual
+ );
+ $this->assertContains(
+ '',
+ $actual
+ );
+
+ }
+
+
+}
+?>
diff --git a/test/libraries/PMA_mysql_charsets_test.php b/test/libraries/PMA_mysql_charsets_test.php
new file mode 100644
index 0000000000..0af9831257
--- /dev/null
+++ b/test/libraries/PMA_mysql_charsets_test.php
@@ -0,0 +1,280 @@
+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('', $result);
+ $this->assertContains('