2 /* vim: set expandtab sw=4 ts=4 sts=4: */
4 * tests for Advisor class
6 * @package PhpMyAdmin-test
13 use PMA\libraries\LanguageManager
;
16 * Tests behaviour of PMA_Advisor class
18 * @package PhpMyAdmin-test
20 class LanguageTest
extends PMATestCase
25 * Setup for Language tests.
29 public function setup()
31 $loc = LOCALE_PATH
. '/cs/LC_MESSAGES/phpmyadmin.mo';
32 if (! is_readable($loc)) {
33 $this->markTestSkipped('Missing compiled locales.');
35 $this->manager
= new LanguageManager();
39 * Test language filtering
43 public function testAvailable()
45 $GLOBALS['cfg']['FilterLanguages'] = 'cs';
47 $langs = $this->manager
->availableLocales();
49 $this->assertEquals(1, count($langs));
50 $this->assertContains('cs', $langs);
51 $GLOBALS['cfg']['FilterLanguages'] = '';
55 * Test no language filtering
59 public function testAllAvailable()
61 $GLOBALS['cfg']['FilterLanguages'] = '';
63 $langs = $this->manager
->availableLocales();
65 $this->assertContains('cs', $langs);
66 $this->assertContains('en', $langs);
70 * Test whether listing locales works
74 public function testList()
76 $langs = $this->manager
->listLocaleDir();
77 $this->assertContains('cs', $langs);
78 $this->assertContains('en', $langs);
82 * Test for getting available languages
86 public function testLanguages()
88 $langs = $this->manager
->availableLanguages();
89 $this->assertGreaterThan(1, count($langs));
91 /* Ensure we have name for every language */
92 foreach($langs as $lang) {
93 $this->assertNotEquals($lang->getCode(), strtolower($lang->getEnglishName()));
98 * Test for MySQL locales
102 public function testMySQLLocale()
104 $czech = $this->manager
->getLanguage('cs');
105 $this->assertEquals('cs_CZ', $czech->getMySQLLocale());
107 $korani = $this->manager
->getLanguage('ckb');
108 $this->assertEquals('', $korani->getMySQLLocale());
112 * Test for getting available sorted languages
116 public function testSortedLanguages()
118 $langs = $this->manager
->sortedLanguages();
119 $this->assertGreaterThan(1, count($langs));
123 * Test getting language by code
127 public function testGet()
129 $lang = $this->manager
->getLanguage('cs');
130 $this->assertNotEquals(false, $lang);
131 $this->assertEquals('Czech', $lang->getEnglishName());
132 $this->assertEquals('Čeština', $lang->getNativeName());
136 * Test language selection
138 * @param string $lang Value for forced language
139 * @param string $post Value for language in POST
140 * @param string $get Value for language in GET
141 * @param string $cookie Value for language in COOKIE
142 * @param string $accept Value for HTTP Accept-Language header
143 * @param string $agent Value for HTTP User-Agent header
144 * @param string $default Value for default language
145 * @param string $expect Expected language name
149 * @dataProvider selectDataProvider
151 public function testSelect($lang, $post, $get, $cookie, $accept, $agent, $default, $expect)
153 $GLOBALS['cfg']['Lang'] = $lang;
154 $_POST['lang'] = $post;
155 $_GET['lang'] = $get;
156 $_COOKIE['pma_lang'] = $cookie;
157 $_SERVER['HTTP_ACCEPT_LANGUAGE'] = $accept;
158 $_SERVER['HTTP_USER_AGENT'] = $agent;
159 $GLOBALS['cfg']['DefaultLang'] = $default;
161 $lang = $this->manager
->selectLanguage();
163 $this->assertEquals($expect, $lang->getEnglishName());
165 $GLOBALS['cfg']['Lang'] = '';
168 $_COOKIE['pma_lang'] = '';
169 $_SERVER['HTTP_ACCEPT_LANGUAGE'] = '';
170 $_SERVER['HTTP_USER_AGENT'] = '';
171 $GLOBALS['cfg']['DefaultLang'] = 'en';
175 * Data provider for language selection test.
177 * @return array Test parameters.
179 public function selectDataProvider()
182 array('cs', 'en', '', '' ,'' ,'', '', 'Czech'),
183 array('', 'cs', '', '' ,'' ,'', '', 'Czech'),
184 array('', 'cs', 'en', '' ,'' ,'', '', 'Czech'),
185 array('', '', 'cs', '' ,'' ,'', '', 'Czech'),
186 array('', '', '', '' ,'cs,en-US;q=0.7,en;q=0.3' ,'', '', 'Czech'),
189 'Mozilla/5.0 (Linux; U; Android 2.2.2; tr-tr; GM FOX)',
192 array('', '', '', '' ,'' ,'', 'cs', 'Czech'),
193 array('', '', '', '' ,'' ,'', '', 'English'),
198 * Test for setting and parsing locales
200 * @param string $locale locale name
205 * @dataProvider listLocales
207 public function testGettext($locale)
209 /* We should be able to set the language */
210 $this->manager
->getLanguage($locale)->activate();
212 /* Grab some texts */
213 $this->assertContains('%s', _ngettext('%s table', '%s tables', 10));
214 $this->assertContains('%s', _ngettext('%s table', '%s tables', 1));
218 $this->manager
->getCurrentLanguage()->getCode()
223 * Data provider to generate list of available locales.
225 * @return array with arrays of available locales
227 public function listLocales()
230 foreach (LanguageManager
::getInstance()->availableLanguages() as $language) {
231 $ret[] = array($language->getCode());