/tests/cases/g11n/catalog/adapter/CodeTest.php

https://github.com/k2052/arthur · PHP · 231 lines · 176 code · 55 blank · 0 comment · 0 complexity · d231ae6d98206cec61d59f9fab6bb27b MD5 · raw file

  1. <?php
  2. namespace arthur\tests\cases\g11n\catalog\adapter;
  3. use Exception;
  4. use arthur\core\Libraries;
  5. use arthur\g11n\catalog\adapter\Code;
  6. class CodeTest extends \arthur\test\Unit
  7. {
  8. public $adapter;
  9. protected $_path;
  10. public function setUp()
  11. {
  12. $this->_path = $path = Libraries::get(true, 'resources') . '/tmp/tests';
  13. $this->skipIf(!is_writable($this->_path), "{$this->_path} is not writable.");
  14. $this->adapter = new Code(compact('path'));
  15. $file = "{$this->_path}/a.php";
  16. $data = <<<'EOD'
  17. <?php
  18. $t('simple 1');
  19. $t('options 1', null, array('locale' => 'en'));
  20. $t('replace 1 {:a}', array('a' => 'b'));
  21. $t($test['invalid']);
  22. $t(32203);
  23. $t('invalid 1', $test['invalid']);
  24. $t('invalid 2', 32203);
  25. $t('invalid 3', 'invalid 3b');
  26. $t('escaping\n1');
  27. $t("escaping\n2");
  28. $t("escaping\r\n3");
  29. $t('escaping
  30. 4');
  31. $tn('singular simple 1', 'plural simple 1', 3);
  32. $tn('singular simple 2', 'plural simple 2');
  33. $t('mixed 1');
  34. $tn('mixed 1', 'plural mixed 1', 3);
  35. $t('mixed 2');
  36. $tn('mixed 2', 'plural mixed 2', 3);
  37. $t('mixed 2');
  38. $t('plural mixed 2');
  39. ?>
  40. EOD;
  41. file_put_contents($file, $data);
  42. $file = "{$this->_path}/a.html.php";
  43. $data = <<<'EOD'
  44. <?=$t('simple 1 short'); ?>
  45. <?=$tn('singular simple 1 short', 'plural simple 1 short', 3); ?>
  46. EOD;
  47. file_put_contents($file, $data);
  48. }
  49. public function tearDown() {
  50. $this->_cleanUp();
  51. }
  52. public function testPathMustExist() {
  53. $path = Libraries::get(true, 'resources') . '/tmp/tests';
  54. try {
  55. new Code(array('path' => $this->_path));
  56. $result = true;
  57. } catch (Exception $e) {
  58. $result = false;
  59. }
  60. $this->assert($result);
  61. try {
  62. new Code(array('path' => "{$path}/i_do_not_exist"));
  63. $result = false;
  64. } catch (Exception $e) {
  65. $result = true;
  66. }
  67. $this->assert($result);
  68. }
  69. public function testReadMessageTemplateTSimple() {
  70. $results = $this->adapter->read('messageTemplate', 'root', null);
  71. $expected = array('singular' => 'simple 1');
  72. $result = $results['simple 1']['ids'];
  73. $this->assertEqual($expected, $result);
  74. }
  75. public function testReadMessageTemplateTSimpleShort() {
  76. $results = $this->adapter->read('messageTemplate', 'root', null);
  77. $expected = array('singular' => 'simple 1 short');
  78. $result = $results['simple 1 short']['ids'];
  79. $this->assertEqual($expected, $result);
  80. }
  81. public function testReadMessageTemplateTOptions() {
  82. $results = $this->adapter->read('messageTemplate', 'root', null);
  83. $expected = array('singular' => 'options 1');
  84. $result = $results['options 1']['ids'];
  85. $this->assertEqual($expected, $result);
  86. }
  87. public function testReadMessageTemplateTReplace() {
  88. $results = $this->adapter->read('messageTemplate', 'root', null);
  89. $expected = array('singular' => 'replace 1 {:a}');
  90. $result = $results['replace 1 {:a}']['ids'];
  91. $this->assertEqual($expected, $result);
  92. }
  93. public function testReadMessageTemplateTInvalid() {
  94. $results = $this->adapter->read('messageTemplate', 'root', null);
  95. $result = isset($results['32203']);
  96. $this->assertFalse($result);
  97. $result = isset($results[32203]);
  98. $this->assertFalse($result);
  99. $expected = array('singular' => 'invalid 1');
  100. $result = $results['invalid 1']['ids'];
  101. $this->assertEqual($expected, $result);
  102. $expected = array('singular' => 'invalid 2');
  103. $result = $results['invalid 2']['ids'];
  104. $this->assertEqual($expected, $result);
  105. $expected = array('singular' => 'invalid 3');
  106. $result = $results['invalid 3']['ids'];
  107. $this->assertEqual($expected, $result);
  108. }
  109. public function testReadMessageTemplateTNoEscaping() {
  110. $results = $this->adapter->read('messageTemplate', 'root', null);
  111. $expected = 'escaping\n1';
  112. $result = $results['escaping\n1']['ids']['singular'];
  113. $this->assertEqual($expected, $result);
  114. $expected = 'escaping\n2';
  115. $result = $results['escaping\n2']['ids']['singular'];
  116. $this->assertEqual($expected, $result);
  117. $expected = 'escaping\r\n3';
  118. $result = $results['escaping\r\n3']['ids']['singular'];
  119. $this->assertEqual($expected, $result);
  120. $expected = "escaping\n\t4";
  121. $result = $results["escaping\n\t4"]['ids']['singular'];
  122. $this->assertEqual($expected, $result);
  123. }
  124. public function testReadMessageTemplateTnSimple() {
  125. $results = $this->adapter->read('messageTemplate', 'root', null);
  126. $expected = 'singular simple 1';
  127. $result = $results['singular simple 1']['ids']['singular'];
  128. $this->assertEqual($expected, $result);
  129. $expected = 'plural simple 1';
  130. $result = $results['singular simple 1']['ids']['plural'];
  131. $this->assertEqual($expected, $result);
  132. $expected = 'singular simple 2';
  133. $result = $results['singular simple 2']['ids']['singular'];
  134. $this->assertEqual($expected, $result);
  135. $expected = 'plural simple 2';
  136. $result = $results['singular simple 2']['ids']['plural'];
  137. $this->assertEqual($expected, $result);
  138. }
  139. public function testReadMessageTemplateTnSimpleShort() {
  140. $results = $this->adapter->read('messageTemplate', 'root', null);
  141. $expected = 'singular simple 1 short';
  142. $result = $results['singular simple 1 short']['ids']['singular'];
  143. $this->assertEqual($expected, $result);
  144. $expected = 'plural simple 1 short';
  145. $result = $results['singular simple 1 short']['ids']['plural'];
  146. $this->assertEqual($expected, $result);
  147. }
  148. public function testReadMessageTemplateTnT() {
  149. $results = $this->adapter->read('messageTemplate', 'root', null);
  150. $expected = 'mixed 1';
  151. $result = $results['mixed 1']['ids']['singular'];
  152. $this->assertEqual($expected, $result);
  153. $expected = 'plural mixed 1';
  154. $result = $results['mixed 1']['ids']['plural'];
  155. $this->assertEqual($expected, $result);
  156. $expected = 'mixed 2';
  157. $result = $results['mixed 2']['ids']['singular'];
  158. $this->assertEqual($expected, $result);
  159. $expected = 'plural mixed 2';
  160. $result = $results['mixed 2']['ids']['plural'];
  161. $this->assertEqual($expected, $result);
  162. }
  163. public function testReadWithScope() {
  164. $this->adapter = new Code(array('path' => $this->_path, 'scope' => 'art_bot'));
  165. $results = $this->adapter->read('messageTemplate', 'root', null);
  166. $this->assertFalse($results);
  167. $results = $this->adapter->read('messageTemplate', 'root', 'art_bot');
  168. $expected = array('singular' => 'simple 1');
  169. $result = $results['simple 1']['ids'];
  170. $this->assertEqual($expected, $result);
  171. }
  172. public function testNoReadSupportForOtherCategories() {
  173. $result = $this->adapter->read('message', 'de', null);
  174. $this->assertFalse($result);
  175. }
  176. }