PageRenderTime 28ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/test/unit/ListTest.php

http://github.com/tanakahisateru/pinoco
PHP | 272 lines | 242 code | 30 blank | 0 comment | 0 complexity | 408f3a8c26a549c2b87b2e6cc2c3b81c MD5 | raw file
  1. <?php
  2. require_once dirname(__FILE__) . '/../../src/Pinoco/_bootstrap.php';
  3. class ListTest extends PHPUnit_Framework_TestCase
  4. {
  5. public function testBasicIO()
  6. {
  7. $l = new Pinoco_List();
  8. $l->push(1);
  9. $this->assertEquals(1, $l->get(0));
  10. $this->assertNull($l->get(1));
  11. }
  12. public function testCount()
  13. {
  14. $l = new Pinoco_List();
  15. $l->push(1);
  16. $l->push(2);
  17. $l->push(3);
  18. $this->assertEquals(3, $l->count());
  19. $this->assertEquals(3, count($l));
  20. }
  21. public function testArrayAccess()
  22. {
  23. $l = new Pinoco_List();
  24. $l[0] = 0;
  25. $l[1] = 1;
  26. $this->assertEquals(0, $l[0]);
  27. $this->assertEquals(1, $l[1]);
  28. $this->assertEquals(2, $l->count());
  29. }
  30. public function testPadding()
  31. {
  32. $l = new Pinoco_List();
  33. $l[1] = 1;
  34. $this->assertNull($l[0]);
  35. $this->assertEquals(1, $l[1]);
  36. $this->assertEquals(2, $l->count());
  37. }
  38. public function testCreateFromArray()
  39. {
  40. $src = array(1, 2, 3);
  41. $l = Pinoco_List::fromArray($src);
  42. $src[0] = 10;
  43. $this->assertEquals(1, $l[0]);
  44. $l[1] = 20;
  45. $this->assertEquals(2, $src[1]);
  46. $src[] = 4;
  47. $this->assertEquals(3, $l->count());
  48. }
  49. public function testWrapArray()
  50. {
  51. $src = array(1, 2, 3);
  52. $l = Pinoco_List::wrap($src);
  53. $src[0] = 10;
  54. $this->assertEquals(10, $l[0]);
  55. $l[1] = 20;
  56. $this->assertEquals(20, $src[1]);
  57. $src[] = 4;
  58. $this->assertEquals(4, $l->count());
  59. }
  60. public function testDefault()
  61. {
  62. $l = new Pinoco_List();
  63. $l->push(1);
  64. $this->assertNull($l->get(1));
  65. $l->setDefault(-1);
  66. $this->assertSame(-1, $l->get(1));
  67. $this->assertSame(-2, $l->get(1, -2));
  68. }
  69. public function testPushPop()
  70. {
  71. $l = Pinoco_List::fromArray(array(1, 2));
  72. $this->assertEquals(2, $l->pop());
  73. $this->assertEquals(1, $l->count());
  74. $this->assertEquals(array(1), $l->toArray());
  75. $l->push(3);
  76. $this->assertEquals(2, $l->count());
  77. $this->assertEquals(array(1, 3), $l->toArray());
  78. $l->push(4, 5, 6);
  79. $this->assertEquals(array(1, 3, 4, 5, 6), $l->toArray());
  80. }
  81. public function testShiftUnshift()
  82. {
  83. $l = Pinoco_List::fromArray(array(1, 2));
  84. $this->assertEquals(1, $l->shift());
  85. $this->assertEquals(1, $l->count());
  86. $this->assertEquals(array(2), $l->toArray());
  87. $l->unshift(3);
  88. $this->assertEquals(2, $l->count());
  89. $this->assertEquals(array(3, 2), $l->toArray());
  90. $l->unshift(4, 5, 6);
  91. $this->assertEquals(array(6, 5, 4, 3, 2), $l->toArray());
  92. }
  93. public function testConcat()
  94. {
  95. $l = Pinoco_List::fromArray(array(1, 2));
  96. $l->concat(array(3, 4));
  97. $this->assertEquals(array(1, 2, 3, 4), $l->toArray());
  98. $l->concat(Pinoco_List::fromArray(array(5, 6)));
  99. $this->assertEquals(array(1, 2, 3, 4, 5, 6), $l->toArray());
  100. $l = Pinoco_List::fromArray(array(1, 2));
  101. $l->concat(array(3, 4), array(5, 6));
  102. $this->assertEquals(array(1, 2, 3, 4, 5, 6), $l->toArray());
  103. }
  104. public function testSort()
  105. {
  106. $l = Pinoco_List::fromArray(array(2, 1, 3));
  107. $this->assertEquals(array(1, 2, 3), $l->sorted()->toArray());
  108. $this->assertEquals(array(2, 1, 3), $l->toArray());
  109. $l->sort();
  110. $this->assertEquals(array(1, 2, 3), $l->toArray());
  111. $sorter = create_function('$a,$b', 'return ($a > $b ? -1 : ($a < $b ? 1 : 0));'); // inv sort
  112. $l = Pinoco_List::fromArray(array(2, 1, 3));
  113. $this->assertEquals(array(3, 2, 1), $l->sorted($sorter)->toArray());
  114. $this->assertEquals(array(2, 1, 3), $l->toArray());
  115. $l->sort($sorter);
  116. $this->assertEquals(array(3, 2, 1), $l->toArray());
  117. }
  118. public function testJoin()
  119. {
  120. $l = Pinoco_List::fromArray(array(1, 2, 3));
  121. $this->assertEquals('1,2,3', $l->join());
  122. }
  123. public function testReverse()
  124. {
  125. $l = Pinoco_List::fromArray(array(1, 2, 3));
  126. $this->assertEquals(array(3, 2, 1), $l->reverse()->toArray());
  127. $this->assertEquals(array(1, 2, 3), $l->toArray());
  128. }
  129. public function testSlice()
  130. {
  131. $l = Pinoco_List::fromArray(array(1, 2, 3, 4, 5));
  132. $this->assertEquals(array(2, 3, 4, 5), $l->slice(1)->toArray());
  133. $this->assertEquals(array(2, 3, 4), $l->slice(1, 3)->toArray());
  134. $this->assertEquals(array(1, 2, 3, 4, 5), $l->toArray());
  135. }
  136. public function testSplice()
  137. {
  138. $l = Pinoco_List::fromArray(array(1, 2, 3, 4, 5));
  139. $this->assertEquals(array(2), $l->splice(1, 1)->toArray());
  140. $this->assertEquals(array(1, 3, 4, 5), $l->toArray());
  141. $l = Pinoco_List::fromArray(array(1, 2, 3, 4, 5));
  142. $this->assertEquals(array(2, 3), $l->splice(1, 2, array(-1, -2, -3))->toArray());
  143. $this->assertEquals(array(1, -1, -2, -3, 4, 5), $l->toArray());
  144. }
  145. public function testInsert()
  146. {
  147. $l = Pinoco_List::fromArray(array(1, 2, 3));
  148. $l->insert(1, -1);
  149. $this->assertEquals(array(1, -1, 2, 3), $l->toArray());
  150. }
  151. public function testRemove()
  152. {
  153. $l = Pinoco_List::fromArray(array(1, 2, 3));
  154. $l->remove(1);
  155. $this->assertEquals(array(1, 3), $l->toArray());
  156. $l = Pinoco_List::fromArray(array(1, 2, 3, 4));
  157. $l->remove(1, 2);
  158. $this->assertEquals(array(1, 4), $l->toArray());
  159. }
  160. public function testIndex()
  161. {
  162. $l = Pinoco_List::fromArray(array(0, 1, 2, 3));
  163. $this->assertEquals(2, $l->index(2));
  164. }
  165. public function testToArray()
  166. {
  167. $name_mod = create_function('$orig', 'return sprintf("m_%03d", $orig);');
  168. $l = Pinoco_List::fromArray(array(1, 2, 3));
  169. $this->assertEquals(array('m_0'=>1, 'm_1'=>2, 'm_2'=>3), $l->toArray('m_'));
  170. $this->assertEquals(array('m_0'=>1, 'm_1'=>2, 'm_2'=>3), $l->toArray('m_%d'));
  171. $this->assertEquals(array('m_000'=>1, 'm_001'=>2, 'm_002'=>3), $l->toArray($name_mod));
  172. }
  173. public function testReduce()
  174. {
  175. $reducer = create_function('$a,$b', 'return $a + $b;');
  176. $l = Pinoco_List::fromArray(array(1, 2, 3));
  177. $this->assertEquals(6, $l->reduce($reducer));
  178. $this->assertEquals(10, $l->reduce($reducer, 4));
  179. }
  180. public function testMap()
  181. {
  182. $mapper = create_function('$a', 'return $a + 1;');
  183. $l = Pinoco_List::fromArray(array(1, 2, 3));
  184. $this->assertEquals(array(2, 3, 4), $l->map($mapper)->toArray());
  185. }
  186. public function testFilter()
  187. {
  188. $filter = create_function('$a', 'return $a >= 2;');
  189. $l = Pinoco_List::fromArray(array(1, 2, 3));
  190. $this->assertEquals(array(2, 3), $l->filter($filter)->toArray());
  191. }
  192. public function testEach()
  193. {
  194. ob_start();
  195. $l = Pinoco_List::fromArray(array(1, 2, 3));
  196. $l->each('printf');
  197. $ob = ob_get_clean();
  198. $this->assertEquals('123', $ob);
  199. }
  200. public function testIteration()
  201. {
  202. $l = Pinoco_List::fromArray(array(1, 2, 3));
  203. $tmp = array();
  204. foreach ($l as $e) {
  205. $tmp[] = $e;
  206. }
  207. $this->assertEquals(array(1, 2, 3), $tmp);
  208. }
  209. public function testToArrayRecurse()
  210. {
  211. $l = new Pinoco_List();
  212. $l->push(Pinoco_List::fromArray(array(1, 2)));
  213. $l->push(Pinoco_List::fromArray(array(3, 4)));
  214. $this->assertEquals(array(
  215. array(1, 2),
  216. array(3, 4),
  217. ), $l->toArrayRecurse());
  218. $tmp = $l->toArrayRecurse(0);
  219. $this->assertSame($l, $tmp);
  220. $tmp = $l->toArrayRecurse(1);
  221. $this->assertSame($l[0], $tmp[0]);
  222. $this->assertSame($l[1], $tmp[1]);
  223. }
  224. public function testExpressionAccess()
  225. {
  226. $obj = new stdClass;
  227. $obj->c = '1';
  228. $v = Pinoco_List::fromArray(array(
  229. 0,
  230. array(
  231. 'a'=>Pinoco_Vars::fromArray(array(
  232. 'b'=>$obj,
  233. )),
  234. ),
  235. 2
  236. ));
  237. $this->assertEquals(0, $v->rget('0'));
  238. $this->assertEquals(1, $v->rget('1/a/b/c'));
  239. $this->assertEquals('none', $v->rget('1/a/b/d', 'none'));
  240. $this->assertEquals('none', $v->rget('2/a/b/c', 'none'));
  241. }
  242. }