PageRenderTime 39ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/Zend/Translator/Adapter/ArrayTest.php

https://github.com/yugeon/zf2
PHP | 348 lines | 253 code | 45 blank | 50 comment | 5 complexity | 478db811d248965781a2fc2fd03feb74 MD5 | raw file
  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_Translate
  17. * @subpackage UnitTests
  18. * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  19. * @license http://framework.zend.com/license/new-bsd New BSD License
  20. * @version $Id$
  21. */
  22. /**
  23. * @namespace
  24. */
  25. namespace ZendTest\Translator\Adapter;
  26. use Zend\Translator\Adapter;
  27. use Zend\Translator;
  28. use Zend\Locale;
  29. use Zend\Cache;
  30. use Zend\Cache\Frontend;
  31. if (!defined('PHPUnit_MAIN_METHOD')) {
  32. define('PHPUnit_MAIN_METHOD', 'Zend_Translate_Adapter_ArrayTest::main');
  33. }
  34. /**
  35. * Zend_Translate_Adapter_Array
  36. */
  37. /**
  38. * @category Zend
  39. * @package Zend_Translate
  40. * @subpackage UnitTests
  41. * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  42. * @license http://framework.zend.com/license/new-bsd New BSD License
  43. * @group Zend_Translate
  44. */
  45. class ArrayTest extends \PHPUnit_Framework_TestCase
  46. {
  47. /**
  48. * Error flag
  49. *
  50. * @var boolean
  51. */
  52. protected $_errorOccurred = false;
  53. public function setUp()
  54. {
  55. if (Adapter\ArrayAdapter::hasCache()) {
  56. Adapter\ArrayAdapter::clearCache();
  57. Adapter\ArrayAdapter::removeCache();
  58. }
  59. }
  60. public function tearDown()
  61. {
  62. if (Adapter\ArrayAdapter::hasCache()) {
  63. Adapter\ArrayAdapter::clearCache();
  64. Adapter\ArrayAdapter::removeCache();
  65. }
  66. }
  67. public function testCreate()
  68. {
  69. set_error_handler(array($this, 'errorHandlerIgnore'));
  70. $adapter = new Adapter\ArrayAdapter(array());
  71. restore_error_handler();
  72. $this->assertTrue($adapter instanceof Adapter\ArrayAdapter);
  73. try {
  74. $adapter = new Adapter\ArrayAdapter('hastofail', 'en');
  75. $this->fail('Exception expected');
  76. } catch (Translator\Exception $e) {
  77. $this->assertContains('Error including array or file', $e->getMessage());
  78. }
  79. try {
  80. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/failed.php', 'en');
  81. $this->fail('Exception expected');
  82. } catch (Translator\Exception $e) {
  83. $this->assertContains('Error including array or file', $e->getMessage());
  84. }
  85. }
  86. public function testToString()
  87. {
  88. $adapter = new Adapter\ArrayAdapter(array('msg1' => 'Message 1 (en)', 'msg2' => 'Message 2 (en)', 'msg3' => 'Message 3 (en)'));
  89. $this->assertEquals('ArrayAdapter', $adapter->toString());
  90. }
  91. public function testTranslate()
  92. {
  93. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/translation_en.php', 'en');
  94. $this->assertEquals('Message 1 (en)', $adapter->translate('Message 1'));
  95. $this->assertEquals('Message 1 (en)', $adapter->_('Message 1'));
  96. $this->assertEquals('Message 6', $adapter->translate('Message 6'));
  97. $this->assertEquals('Küchen Möbel (en)', $adapter->translate('Cooking furniture'));
  98. $this->assertEquals('Cooking furniture (en)', $adapter->translate('Küchen Möbel'));
  99. }
  100. public function testIsTranslated()
  101. {
  102. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/translation_en.php', 'en');
  103. $this->assertTrue($adapter->isTranslated('Message 1'));
  104. $this->assertFalse($adapter->isTranslated('Message 6'));
  105. $this->assertTrue($adapter->isTranslated('Message 1', true));
  106. $this->assertFalse($adapter->isTranslated('Message 1', true, 'en_US'));
  107. $this->assertTrue($adapter->isTranslated('Message 1', false, 'en_US'));
  108. $this->assertFalse($adapter->isTranslated('Message 1', false, 'es'));
  109. $this->assertFalse($adapter->isTranslated('Message 1', 'es'));
  110. $this->assertFalse($adapter->isTranslated('Message 1', 'xx_XX'));
  111. $this->assertTrue($adapter->isTranslated('Message 1', 'en_XX'));
  112. }
  113. public function testLoadTranslationData()
  114. {
  115. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/translation_en.php', 'en');
  116. $this->assertEquals('Message 1 (en)', $adapter->translate('Message 1'));
  117. $this->assertEquals('Message 4 (en)', $adapter->translate('Message 4'));
  118. $this->assertEquals('Message 2', $adapter->translate('Message 2', 'ru'));
  119. $this->assertEquals('Message 1', $adapter->translate('Message 1', 'xx'));
  120. $this->assertEquals('Message 1 (en)', $adapter->translate('Message 1', 'en_US'));
  121. try {
  122. $adapter->addTranslation(__DIR__ . '/_files/translation_en.php', 'xx');
  123. $this->fail("exception expected");
  124. } catch (Translator\Exception $e) {
  125. $this->assertContains('does not exist', $e->getMessage());
  126. }
  127. $adapter->addTranslation(__DIR__ . '/_files/translation_en2.php', 'de', array('clear' => true));
  128. $this->assertEquals('Nachricht 1', $adapter->translate('Message 1'));
  129. $this->assertEquals('Nachricht 8', $adapter->translate('Message 8'));
  130. }
  131. public function testOptions()
  132. {
  133. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/translation_en.php', 'en');
  134. $adapter->setOptions(array('testoption' => 'testkey'));
  135. $expected = array(
  136. 'testoption' => 'testkey',
  137. 'clear' => false,
  138. 'content' => __DIR__ . '/_files/translation_en.php',
  139. 'scan' => null,
  140. 'locale' => 'en',
  141. 'ignore' => '.',
  142. 'disableNotices' => false,
  143. 'log' => false,
  144. 'logMessage' => 'Untranslated message within \'%locale%\': %message%',
  145. 'logUntranslated' => false,
  146. 'reload' => false,
  147. );
  148. $options = $adapter->getOptions();
  149. foreach ($expected as $key => $value) {
  150. $this->assertArrayHasKey($key, $options);
  151. $this->assertEquals($value, $options[$key]);
  152. }
  153. $this->assertEquals('testkey', $adapter->getOptions('testoption'));
  154. $this->assertTrue(is_null($adapter->getOptions('nooption')));
  155. }
  156. public function testClearing()
  157. {
  158. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/translation_en.php', 'en');
  159. $this->assertEquals('Message 1 (en)', $adapter->translate('Message 1'));
  160. $this->assertEquals('Message 6', $adapter->translate('Message 6'));
  161. $adapter->addTranslation(__DIR__ . '/_files/translation_en2.php', 'de', array('clear' => true));
  162. $this->assertEquals('Nachricht 1', $adapter->translate('Message 1'));
  163. $this->assertEquals('Message 4', $adapter->translate('Message 4'));
  164. }
  165. public function testLocale()
  166. {
  167. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/translation_en.php', 'en');
  168. $this->assertEquals('en', $adapter->getLocale());
  169. $locale = new Locale\Locale('en');
  170. $adapter->setLocale($locale);
  171. $this->assertEquals('en', $adapter->getLocale());
  172. try {
  173. $adapter->setLocale('nolocale');
  174. $this->fail("exception expected");
  175. } catch (Translator\Exception $e) {
  176. $this->assertContains('does not exist', $e->getMessage());
  177. }
  178. set_error_handler(array($this, 'errorHandlerIgnore'));
  179. $adapter->setLocale('de');
  180. restore_error_handler();
  181. $this->assertEquals('de', $adapter->getLocale());
  182. }
  183. public function testList()
  184. {
  185. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/translation_en.php', 'en');
  186. $this->assertEquals(array('en' => 'en'), $adapter->getList());
  187. $adapter->addTranslation(array('msg1'), 'de');
  188. $this->assertEquals(array('en' => 'en', 'de' => 'de'), $adapter->getList());
  189. $this->assertTrue($adapter->isAvailable('de'));
  190. $locale = new Locale\Locale('en');
  191. $this->assertTrue($adapter->isAvailable($locale));
  192. $this->assertFalse($adapter->isAvailable('sr'));
  193. }
  194. public function testOptionLocaleDirectory()
  195. {
  196. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/testarray', 'de_AT', array('scan' => Translator\Translator::LOCALE_DIRECTORY));
  197. $this->assertEquals(array('de_AT' => 'de_AT', 'en_GB' => 'en_GB', 'ja' => 'ja'), $adapter->getList());
  198. $this->assertEquals('Nachricht 8', $adapter->translate('Message 8'));
  199. }
  200. public function testOptionLocaleFilename()
  201. {
  202. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/testarray', 'de_DE', array('scan' => Translator\Translator::LOCALE_FILENAME));
  203. $this->assertEquals(array('de_DE' => 'de_DE', 'en_US' => 'en_US', 'ja' => 'ja'), $adapter->getList());
  204. $this->assertEquals('Nachricht 8', $adapter->translate('Message 8'));
  205. }
  206. public function testLoadArrayFile()
  207. {
  208. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/translation_en.php');
  209. $this->assertTrue($adapter instanceof Adapter\ArrayAdapter);
  210. }
  211. public function testDisablingNotices()
  212. {
  213. set_error_handler(array($this, 'errorHandlerIgnore'));
  214. $adapter = new Adapter\ArrayAdapter(array(), 'en');
  215. $this->assertTrue($this->_errorOccurred);
  216. restore_error_handler();
  217. $this->_errorOccurred = false;
  218. $this->assertTrue($adapter instanceof Adapter\ArrayAdapter);
  219. set_error_handler(array($this, 'errorHandlerIgnore'));
  220. $adapter = new Adapter\ArrayAdapter(array(), 'en', array('disableNotices' => true));
  221. $this->assertFalse($this->_errorOccurred);
  222. restore_error_handler();
  223. $this->assertTrue($adapter instanceof Adapter\ArrayAdapter);
  224. }
  225. public function testGettingAllMessageIds()
  226. {
  227. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/translation_en.php', 'en');
  228. $this->assertEquals(6, count($adapter->getMessageIds()));
  229. $test = $adapter->getMessageIds();
  230. $this->assertEquals('Message 1', $test[0]);
  231. }
  232. public function testGettingMessages()
  233. {
  234. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/translation_en.php', 'en');
  235. $this->assertEquals(6, count($adapter->getMessages()));
  236. $test = $adapter->getMessages();
  237. $this->assertEquals('Message 1 (en)', $test['Message 1']);
  238. }
  239. public function testGettingAllMessages()
  240. {
  241. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/translation_en.php', 'en');
  242. $this->assertEquals(1, count($adapter->getMessages('all')));
  243. $test = $adapter->getMessages('all');
  244. $this->assertEquals('Message 1 (en)', $test['en']['Message 1']);
  245. }
  246. public function testCaching()
  247. {
  248. $cache = Cache\Cache::factory('Core', 'File',
  249. array('lifetime' => 120, 'automatic_serialization' => true),
  250. array('cache_dir' => __DIR__ . '/_files/'));
  251. $this->assertFalse(Adapter\ArrayAdapter::hasCache());
  252. Adapter\ArrayAdapter::setCache($cache);
  253. $this->assertTrue(Adapter\ArrayAdapter::hasCache());
  254. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/translation_en.php', 'en');
  255. $cache = Adapter\ArrayAdapter::getCache();
  256. $this->assertTrue($cache instanceof Frontend\Core);
  257. unset ($adapter);
  258. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/translation_en.php', 'en');
  259. $cache = Adapter\ArrayAdapter::getCache();
  260. $this->assertTrue($cache instanceof Frontend\Core);
  261. Adapter\ArrayAdapter::removeCache();
  262. $this->assertFalse(Adapter\ArrayAdapter::hasCache());
  263. $cache->save('testdata', 'testid');
  264. Adapter\ArrayAdapter::setCache($cache);
  265. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/translation_en.php', 'en');
  266. Adapter\ArrayAdapter::removeCache();
  267. $temp = $cache->load('testid');
  268. $this->assertEquals('testdata', $temp);
  269. }
  270. public function testLoadingFilesIntoCacheAfterwards()
  271. {
  272. $cache = Cache\Cache::factory('Core', 'File',
  273. array('lifetime' => 120, 'automatic_serialization' => true),
  274. array('cache_dir' => __DIR__ . '/_files/'));
  275. $this->assertFalse(Adapter\ArrayAdapter::hasCache());
  276. Adapter\ArrayAdapter::setCache($cache);
  277. $this->assertTrue(Adapter\ArrayAdapter::hasCache());
  278. $adapter = new Adapter\ArrayAdapter(__DIR__ . '/_files/translation_en.php', 'en');
  279. $cache = Adapter\ArrayAdapter::getCache();
  280. $this->assertTrue($cache instanceof Frontend\Core);
  281. $adapter->addTranslation(__DIR__ . '/_files/translation_en.php', 'ru', array('reload' => true));
  282. $test = $adapter->getMessages('all');
  283. $this->assertEquals(6, count($test['ru']));
  284. }
  285. /**
  286. * Ignores a raised PHP error when in effect, but throws a flag to indicate an error occurred
  287. *
  288. * @param integer $errno
  289. * @param string $errstr
  290. * @param string $errfile
  291. * @param integer $errline
  292. * @param array $errcontext
  293. * @return void
  294. */
  295. public function errorHandlerIgnore($errno, $errstr, $errfile, $errline, array $errcontext)
  296. {
  297. $this->_errorOccurred = true;
  298. }
  299. }
  300. // Call Zend_Translate_Adapter_ArrayTest::main() if this source file is executed directly.
  301. if (PHPUnit_MAIN_METHOD == "Zend_Translate_Adapter_ArrayTest::main") {
  302. \Zend_Translate_Adapter_ArrayTest::main();
  303. }