multiple_iterator_001.phpt 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. --TEST--
  2. SPL: MultipleIterator
  3. --FILE--
  4. <?php
  5. $iter1 = new ArrayIterator(array(1,2,3));
  6. $iter2 = new ArrayIterator(array(1,2));
  7. $iter3 = new ArrayIterator(array(new stdClass(),"string",3));
  8. $m = new MultipleIterator();
  9. echo "-- Default flags, no iterators --\n";
  10. foreach($m as $value) {
  11. var_dump($value);
  12. }
  13. var_dump($m->current());
  14. $m->attachIterator($iter1);
  15. $m->attachIterator($iter2);
  16. $m->attachIterator($iter3);
  17. echo "-- Default flags, MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_NUMERIC --\n";
  18. var_dump($m->getFlags() === (MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_NUMERIC));
  19. foreach($m as $key => $value) {
  20. var_dump($key, $value);
  21. }
  22. try {
  23. $m->current();
  24. } catch(RuntimeException $e) {
  25. echo "RuntimeException thrown: " . $e->getMessage() . "\n";
  26. }
  27. try {
  28. $m->key();
  29. } catch(RuntimeException $e) {
  30. echo "RuntimeException thrown: " . $e->getMessage() . "\n";
  31. }
  32. echo "-- Flags = MultipleIterator::MIT_NEED_ANY | MultipleIterator::MIT_KEYS_NUMERIC --\n";
  33. $m->setFlags(MultipleIterator::MIT_NEED_ANY | MultipleIterator::MIT_KEYS_NUMERIC);
  34. var_dump($m->getFlags() === (MultipleIterator::MIT_NEED_ANY | MultipleIterator::MIT_KEYS_NUMERIC));
  35. foreach($m as $key => $value) {
  36. var_dump($key, $value);
  37. }
  38. echo "-- Default flags, added element --\n";
  39. $m->setFlags(MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_NUMERIC);
  40. $iter2[] = 3;
  41. foreach($m as $key => $value) {
  42. var_dump($key, $value);
  43. }
  44. echo "-- Flags |= MultipleIterator::MIT_KEYS_ASSOC, with iterator associated with NULL --\n";
  45. $m->setFlags(MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_ASSOC);
  46. $m->rewind();
  47. try {
  48. $m->current();
  49. } catch(InvalidArgumentException $e) {
  50. echo "InvalidArgumentException thrown: " . $e->getMessage() . "\n";
  51. }
  52. echo "-- Flags |= MultipleIterator::MIT_KEYS_ASSOC --\n";
  53. $m->attachIterator($iter1, "iter1");
  54. $m->attachIterator($iter2, b"iter2");
  55. $m->attachIterator($iter3, 3);
  56. foreach($m as $key => $value) {
  57. var_dump($key, $value);
  58. }
  59. echo "-- Associate with invalid value --\n";
  60. try {
  61. $m->attachIterator($iter3, new stdClass());
  62. } catch(InvalidArgumentException $e) {
  63. echo "InvalidArgumentException thrown: " . $e->getMessage() . "\n";
  64. }
  65. echo "-- Associate with duplicate value --\n";
  66. try {
  67. $m->attachIterator($iter3, "iter1");
  68. } catch(InvalidArgumentException $e) {
  69. echo "InvalidArgumentException thrown: " . $e->getMessage() . "\n";
  70. }
  71. echo "-- Count, contains, detach, count, contains, iterate --\n";
  72. var_dump($m->countIterators());
  73. var_dump($m->containsIterator($iter2));
  74. var_dump($m->detachIterator($iter2));
  75. var_dump($m->countIterators());
  76. var_dump($m->containsIterator($iter2));
  77. foreach($m as $key => $value) {
  78. var_dump($key, $value);
  79. }
  80. ?>
  81. --EXPECTF--
  82. -- Default flags, no iterators --
  83. bool(false)
  84. -- Default flags, MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_NUMERIC --
  85. bool(true)
  86. array(3) {
  87. [0]=>
  88. int(0)
  89. [1]=>
  90. int(0)
  91. [2]=>
  92. int(0)
  93. }
  94. array(3) {
  95. [0]=>
  96. int(1)
  97. [1]=>
  98. int(1)
  99. [2]=>
  100. object(stdClass)#%d (0) {
  101. }
  102. }
  103. array(3) {
  104. [0]=>
  105. int(1)
  106. [1]=>
  107. int(1)
  108. [2]=>
  109. int(1)
  110. }
  111. array(3) {
  112. [0]=>
  113. int(2)
  114. [1]=>
  115. int(2)
  116. [2]=>
  117. string(6) "string"
  118. }
  119. RuntimeException thrown: Called current() with non valid sub iterator
  120. RuntimeException thrown: Called key() with non valid sub iterator
  121. -- Flags = MultipleIterator::MIT_NEED_ANY | MultipleIterator::MIT_KEYS_NUMERIC --
  122. bool(true)
  123. array(3) {
  124. [0]=>
  125. int(0)
  126. [1]=>
  127. int(0)
  128. [2]=>
  129. int(0)
  130. }
  131. array(3) {
  132. [0]=>
  133. int(1)
  134. [1]=>
  135. int(1)
  136. [2]=>
  137. object(stdClass)#%d (0) {
  138. }
  139. }
  140. array(3) {
  141. [0]=>
  142. int(1)
  143. [1]=>
  144. int(1)
  145. [2]=>
  146. int(1)
  147. }
  148. array(3) {
  149. [0]=>
  150. int(2)
  151. [1]=>
  152. int(2)
  153. [2]=>
  154. string(6) "string"
  155. }
  156. array(3) {
  157. [0]=>
  158. int(2)
  159. [1]=>
  160. NULL
  161. [2]=>
  162. int(2)
  163. }
  164. array(3) {
  165. [0]=>
  166. int(3)
  167. [1]=>
  168. NULL
  169. [2]=>
  170. int(3)
  171. }
  172. -- Default flags, added element --
  173. array(3) {
  174. [0]=>
  175. int(0)
  176. [1]=>
  177. int(0)
  178. [2]=>
  179. int(0)
  180. }
  181. array(3) {
  182. [0]=>
  183. int(1)
  184. [1]=>
  185. int(1)
  186. [2]=>
  187. object(stdClass)#%d (0) {
  188. }
  189. }
  190. array(3) {
  191. [0]=>
  192. int(1)
  193. [1]=>
  194. int(1)
  195. [2]=>
  196. int(1)
  197. }
  198. array(3) {
  199. [0]=>
  200. int(2)
  201. [1]=>
  202. int(2)
  203. [2]=>
  204. string(6) "string"
  205. }
  206. array(3) {
  207. [0]=>
  208. int(2)
  209. [1]=>
  210. int(2)
  211. [2]=>
  212. int(2)
  213. }
  214. array(3) {
  215. [0]=>
  216. int(3)
  217. [1]=>
  218. int(3)
  219. [2]=>
  220. int(3)
  221. }
  222. -- Flags |= MultipleIterator::MIT_KEYS_ASSOC, with iterator associated with NULL --
  223. InvalidArgumentException thrown: Sub-Iterator is associated with NULL
  224. -- Flags |= MultipleIterator::MIT_KEYS_ASSOC --
  225. array(3) {
  226. ["iter1"]=>
  227. int(0)
  228. ["iter2"]=>
  229. int(0)
  230. [3]=>
  231. int(0)
  232. }
  233. array(3) {
  234. ["iter1"]=>
  235. int(1)
  236. ["iter2"]=>
  237. int(1)
  238. [3]=>
  239. object(stdClass)#%d (0) {
  240. }
  241. }
  242. array(3) {
  243. ["iter1"]=>
  244. int(1)
  245. ["iter2"]=>
  246. int(1)
  247. [3]=>
  248. int(1)
  249. }
  250. array(3) {
  251. ["iter1"]=>
  252. int(2)
  253. ["iter2"]=>
  254. int(2)
  255. [3]=>
  256. string(6) "string"
  257. }
  258. array(3) {
  259. ["iter1"]=>
  260. int(2)
  261. ["iter2"]=>
  262. int(2)
  263. [3]=>
  264. int(2)
  265. }
  266. array(3) {
  267. ["iter1"]=>
  268. int(3)
  269. ["iter2"]=>
  270. int(3)
  271. [3]=>
  272. int(3)
  273. }
  274. -- Associate with invalid value --
  275. InvalidArgumentException thrown: Info must be NULL, integer or string
  276. -- Associate with duplicate value --
  277. InvalidArgumentException thrown: Key duplication error
  278. -- Count, contains, detach, count, contains, iterate --
  279. int(3)
  280. bool(true)
  281. NULL
  282. int(2)
  283. bool(false)
  284. array(2) {
  285. ["iter1"]=>
  286. int(0)
  287. [3]=>
  288. int(0)
  289. }
  290. array(2) {
  291. ["iter1"]=>
  292. int(1)
  293. [3]=>
  294. object(stdClass)#%d (0) {
  295. }
  296. }
  297. array(2) {
  298. ["iter1"]=>
  299. int(1)
  300. [3]=>
  301. int(1)
  302. }
  303. array(2) {
  304. ["iter1"]=>
  305. int(2)
  306. [3]=>
  307. string(6) "string"
  308. }
  309. array(2) {
  310. ["iter1"]=>
  311. int(2)
  312. [3]=>
  313. int(2)
  314. }
  315. array(2) {
  316. ["iter1"]=>
  317. int(3)
  318. [3]=>
  319. int(3)
  320. }