PageRenderTime 47ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/units/classes/php/tokenizer/iterator.php

http://github.com/mageekguy/atoum
PHP | 850 lines | 827 code | 23 blank | 0 comment | 0 complexity | be16b5c0c569ebb7e8e388630248686e MD5 | raw file
  1. <?php
  2. namespace mageekguy\atoum\tests\units\php\tokenizer;
  3. use
  4. mageekguy\atoum,
  5. mageekguy\atoum\php\tokenizer
  6. ;
  7. require_once __DIR__ . '/../../../runner.php';
  8. class iterator extends atoum\test
  9. {
  10. public function testClass()
  11. {
  12. $this
  13. ->testedClass
  14. ->implements('Iterator')
  15. ->implements('Countable')
  16. ;
  17. }
  18. public function test__construct()
  19. {
  20. $this
  21. ->if($this->newTestedInstance)
  22. ->then
  23. ->array($this->testedInstance->getSkipedValues())->isEmpty()
  24. ->sizeOf($this->testedInstance)->isZero()
  25. ->boolean($this->testedInstance->valid())->isFalse()
  26. ->variable($this->testedInstance->current())->isNull()
  27. ->variable($this->testedInstance->key())->isNull()
  28. ;
  29. }
  30. public function test__toString()
  31. {
  32. $this
  33. ->if($this->newTestedInstance)
  34. ->then
  35. ->castToString($this->testedInstance)->isEmpty()
  36. ->if($this->testedInstance->append($token1 = new tokenizer\token(uniqid())))
  37. ->then
  38. ->integer($this->testedInstance->key())->isZero()
  39. ->castToString($this->testedInstance)->isEqualTo($token1)
  40. ->integer($this->testedInstance->key())->isZero()
  41. ->if($this->testedInstance->append($token2 = new tokenizer\token(uniqid(), rand(1, PHP_INT_MAX)))->end())
  42. ->then
  43. ->integer($this->testedInstance->key())->isEqualTo(1)
  44. ->castToString($this->testedInstance)->isEqualTo($token1 . $token2)
  45. ->integer($this->testedInstance->key())->isEqualTo(1)
  46. ->if(
  47. $innerInnerIterator = new tokenizer\iterator(),
  48. $innerInnerIterator->append($token3 = new tokenizer\token(uniqid())),
  49. $innerIterator = new tokenizer\iterator(),
  50. $innerIterator
  51. ->append($token2 = new tokenizer\token(uniqid()))
  52. ->append($innerInnerIterator),
  53. $this->newTestedInstance,
  54. $this->testedInstance
  55. ->append($token1 = new tokenizer\token(uniqid()))
  56. ->append($innerIterator)
  57. )
  58. ->then
  59. ->castToString($this->testedInstance)->isEqualTo($token1 . $token2 . $token3)
  60. ;
  61. }
  62. public function testValid()
  63. {
  64. $this
  65. ->if($this->newTestedInstance)
  66. ->then
  67. ->boolean($this->testedInstance->valid())->isFalse()
  68. ->if($this->testedInstance->append(new tokenizer\token(uniqid())))
  69. ->then
  70. ->boolean($this->testedInstance->valid())->isTrue()
  71. ->if($this->testedInstance->next())
  72. ->then
  73. ->boolean($this->testedInstance->valid())->isFalse()
  74. ;
  75. }
  76. public function testKey()
  77. {
  78. $this
  79. ->if($this->newTestedInstance)
  80. ->then
  81. ->variable($this->testedInstance->key())->isNull()
  82. ->if($this->testedInstance->append(new tokenizer\token(uniqid())))
  83. ->then
  84. ->integer($this->testedInstance->key())->isZero()
  85. ->if($this->testedInstance->next())
  86. ->then
  87. ->variable($this->testedInstance->key())->isNull()
  88. ->if($this->testedInstance->append(new tokenizer\token(uniqid())))
  89. ->then
  90. ->integer($this->testedInstance->key())->isEqualTo(1)
  91. ->if($this->testedInstance->next())
  92. ->then
  93. ->variable($this->testedInstance->key())->isNull()
  94. ->if(
  95. $innerIterator = new tokenizer\iterator(),
  96. $innerIterator
  97. ->append(new tokenizer\token(uniqid()))
  98. ->append(new tokenizer\token(uniqid()))
  99. ->append(new tokenizer\token(uniqid())),
  100. $this->testedInstance
  101. ->append($innerIterator)
  102. ->append(new tokenizer\token(uniqid())),
  103. $this->testedInstance->rewind()
  104. )
  105. ->then
  106. ->integer($this->testedInstance->key())->isEqualTo(0)
  107. ->integer($this->testedInstance->next()->key())->isEqualTo(1)
  108. ->integer($this->testedInstance->next()->key())->isEqualTo(2)
  109. ->integer($this->testedInstance->next()->key())->isEqualTo(3)
  110. ->integer($this->testedInstance->next()->key())->isEqualTo(4)
  111. ->integer($this->testedInstance->next()->key())->isEqualTo(5)
  112. ->variable($this->testedInstance->next()->key())->isNull()
  113. ;
  114. }
  115. public function testCurrent()
  116. {
  117. $this
  118. ->if($this->newTestedInstance)
  119. ->then
  120. ->variable($this->testedInstance->current())->isNull()
  121. ->if($this->testedInstance->append($token1 = new tokenizer\token(uniqid())))
  122. ->then
  123. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  124. ->variable($this->testedInstance->next()->current())->isNull()
  125. ->if($this->testedInstance->append($token2 = new tokenizer\token(uniqid())))
  126. ->then
  127. ->object($this->testedInstance->current())->isIdenticalTo($token2)
  128. ->variable($this->testedInstance->next()->current())->isNull()
  129. ->if(
  130. $innerIterator = new tokenizer\iterator(),
  131. $innerIterator
  132. ->append($token3 = new tokenizer\token(uniqid()))
  133. ->append($token4 = new tokenizer\token(uniqid()))
  134. ->append($token5 = new tokenizer\token(uniqid())),
  135. $this->testedInstance
  136. ->append($innerIterator)
  137. ->append($token6 = new tokenizer\token(uniqid())),
  138. $this->testedInstance->rewind()
  139. )
  140. ->then
  141. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  142. ->object($this->testedInstance->next()->current())->isIdenticalTo($token2)
  143. ->object($this->testedInstance->next()->current())->isIdenticalTo($token3)
  144. ->object($this->testedInstance->next()->current())->isIdenticalTo($token4)
  145. ->object($this->testedInstance->next()->current())->isIdenticalTo($token5)
  146. ->object($this->testedInstance->next()->current())->isIdenticalTo($token6)
  147. ->variable($this->testedInstance->next()->current())->isNull()
  148. ;
  149. }
  150. public function testPrev()
  151. {
  152. $this
  153. ->if($this->newTestedInstance)
  154. ->then
  155. ->boolean($this->testedInstance->valid())->isFalse()
  156. ->variable($this->testedInstance->key())->isNull()
  157. ->variable($this->testedInstance->current())->isNull()
  158. ->object($this->testedInstance->prev())->isTestedInstance
  159. ->boolean($this->testedInstance->valid())->isFalse()
  160. ->variable($this->testedInstance->key())->isNull()
  161. ->variable($this->testedInstance->current())->isNull()
  162. ->if($this->testedInstance->append($token1 = new tokenizer\token(uniqid())))
  163. ->then
  164. ->boolean($this->testedInstance->valid())->isTrue()
  165. ->integer($this->testedInstance->key())->isZero()
  166. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  167. ->object($this->testedInstance->prev())->isTestedInstance
  168. ->boolean($this->testedInstance->valid())->isFalse()
  169. ->variable($this->testedInstance->key())->isNull()
  170. ->variable($this->testedInstance->current())->isNull()
  171. ->if($this->testedInstance->append($token2 = new tokenizer\token(uniqid()))->end())
  172. ->then
  173. ->boolean($this->testedInstance->valid())->isTrue()
  174. ->integer($this->testedInstance->key())->isEqualTo(1)
  175. ->object($this->testedInstance->current())->isIdenticalTo($token2)
  176. ->object($this->testedInstance->prev())->isTestedInstance
  177. ->boolean($this->testedInstance->valid())->isTrue()
  178. ->integer($this->testedInstance->key())->isZero()
  179. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  180. ->object($this->testedInstance->prev())->isTestedInstance
  181. ->boolean($this->testedInstance->valid())->isFalse()
  182. ->variable($this->testedInstance->key())->isNull()
  183. ->variable($this->testedInstance->current())->isNull()
  184. ->if(
  185. $innerIterator = new tokenizer\iterator(),
  186. $this->testedInstance->append($innerIterator)->end()
  187. )
  188. ->then
  189. ->boolean($this->testedInstance->valid())->isTrue()
  190. ->integer($this->testedInstance->key())->isEqualTo(1)
  191. ->object($this->testedInstance->current())->isIdenticalTo($token2)
  192. ->object($this->testedInstance->prev())->isTestedInstance
  193. ->boolean($this->testedInstance->valid())->isTrue()
  194. ->integer($this->testedInstance->key())->isZero()
  195. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  196. ->object($this->testedInstance->prev())->isTestedInstance
  197. ->boolean($this->testedInstance->valid())->isFalse()
  198. ->variable($this->testedInstance->key())->isNull()
  199. ->variable($this->testedInstance->current())->isNull()
  200. ->if(
  201. $this->newTestedInstance,
  202. $this->testedInstance
  203. ->append($token1 = new tokenizer\token(uniqid()))
  204. ->append($token2 = new tokenizer\token(uniqid()))
  205. ->append($token3 = new tokenizer\token(uniqid()))
  206. ->end()
  207. ->skipValue($token2)
  208. )
  209. ->then
  210. ->boolean($this->testedInstance->valid())->isTrue()
  211. ->integer($this->testedInstance->key())->isEqualTo(2)
  212. ->object($this->testedInstance->current())->isIdenticalTo($token3)
  213. ->object($this->testedInstance->prev())->isTestedInstance
  214. ->boolean($this->testedInstance->valid())->isTrue()
  215. ->integer($this->testedInstance->key())->isEqualTo(0)
  216. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  217. ->object($this->testedInstance->prev())->isTestedInstance
  218. ->boolean($this->testedInstance->valid())->isFalse()
  219. ->variable($this->testedInstance->key())->isNull()
  220. ->variable($this->testedInstance->current())->isNull()
  221. ->if(
  222. $this->newTestedInstance,
  223. $this->testedInstance
  224. ->append($token1 = new tokenizer\token(uniqid()))
  225. ->append($token2 = new tokenizer\token(uniqid()))
  226. ->append($token3 = new tokenizer\token(uniqid()))
  227. ->end()
  228. )
  229. ->then
  230. ->boolean($this->testedInstance->valid())->isTrue()
  231. ->integer($this->testedInstance->key())->isEqualTo(2)
  232. ->object($this->testedInstance->current())->isIdenticalTo($token3)
  233. ->object($this->testedInstance->prev(1))->isTestedInstance
  234. ->boolean($this->testedInstance->valid())->isTrue()
  235. ->integer($this->testedInstance->key())->isEqualTo(1)
  236. ->object($this->testedInstance->current())->isIdenticalTo($token2)
  237. ->object($this->testedInstance->end()->prev(2))->isTestedInstance
  238. ->boolean($this->testedInstance->valid())->isTrue()
  239. ->integer($this->testedInstance->key())->isZero()
  240. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  241. ->object($this->testedInstance->end()->prev(3))->isTestedInstance
  242. ->boolean($this->testedInstance->valid())->isFalse()
  243. ->variable($this->testedInstance->key())->isNull()
  244. ->variable($this->testedInstance->current())->isNull()
  245. ->if(
  246. $this->newTestedInstance,
  247. $this->testedInstance
  248. ->append($token1 = new tokenizer\token(uniqid()))
  249. ->append($token2 = new tokenizer\token(uniqid()))
  250. ->append($token3 = new tokenizer\token(uniqid()))
  251. ->append($token4 = new tokenizer\token(uniqid()))
  252. ->end()
  253. ->skipValue($token2)
  254. )
  255. ->then
  256. ->boolean($this->testedInstance->valid())->isTrue()
  257. ->integer($this->testedInstance->key())->isEqualTo(3)
  258. ->object($this->testedInstance->current())->isIdenticalTo($token4)
  259. ->object($this->testedInstance->prev(1))->isTestedInstance
  260. ->boolean($this->testedInstance->valid())->isTrue()
  261. ->integer($this->testedInstance->key())->isEqualTo(2)
  262. ->object($this->testedInstance->current())->isIdenticalTo($token3)
  263. ->object($this->testedInstance->end()->prev(2))->isTestedInstance
  264. ->boolean($this->testedInstance->valid())->isTrue()
  265. ->integer($this->testedInstance->key())->isZero()
  266. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  267. ->object($this->testedInstance->end()->prev(rand(3, PHP_INT_MAX)))->isTestedInstance
  268. ->boolean($this->testedInstance->valid())->isFalse()
  269. ->variable($this->testedInstance->key())->isNull()
  270. ->variable($this->testedInstance->current())->isNull()
  271. ;
  272. }
  273. public function testNext()
  274. {
  275. $this
  276. ->if($this->newTestedInstance)
  277. ->then
  278. ->boolean($this->testedInstance->valid())->isFalse()
  279. ->variable($this->testedInstance->key())->isNull()
  280. ->variable($this->testedInstance->current())->isNull()
  281. ->object($this->testedInstance->next())->isTestedInstance
  282. ->boolean($this->testedInstance->valid())->isFalse()
  283. ->variable($this->testedInstance->key())->isNull()
  284. ->variable($this->testedInstance->current())->isNull()
  285. ->object($this->testedInstance->next(rand(2, PHP_INT_MAX)))->isTestedInstance
  286. ->boolean($this->testedInstance->valid())->isFalse()
  287. ->variable($this->testedInstance->key())->isNull()
  288. ->variable($this->testedInstance->current())->isNull()
  289. ->if($this->testedInstance->append($token1 = new tokenizer\token(uniqid())))
  290. ->then
  291. ->boolean($this->testedInstance->valid())->isTrue()
  292. ->integer($this->testedInstance->key())->isEqualTo(0)
  293. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  294. ->object($this->testedInstance->next())->isTestedInstance
  295. ->boolean($this->testedInstance->valid())->isFalse()
  296. ->variable($this->testedInstance->key())->isNull()
  297. ->variable($this->testedInstance->current())->isNull()
  298. ->if(
  299. $this->testedInstance
  300. ->append(new tokenizer\iterator())
  301. ->append($token2 = new tokenizer\token(uniqid()))
  302. ->rewind()
  303. )
  304. ->then
  305. ->boolean($this->testedInstance->valid())->isTrue()
  306. ->integer($this->testedInstance->key())->isEqualTo(0)
  307. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  308. ->object($this->testedInstance->next())->isTestedInstance
  309. ->boolean($this->testedInstance->valid())->isTrue()
  310. ->integer($this->testedInstance->key())->isEqualTo(1)
  311. ->object($this->testedInstance->current())->isIdenticalTo($token2)
  312. ->object($this->testedInstance->next())->isTestedInstance
  313. ->boolean($this->testedInstance->valid())->isFalse()
  314. ->variable($this->testedInstance->key())->isNull()
  315. ->variable($this->testedInstance->current())->isNull()
  316. ->if(
  317. $this->newTestedInstance,
  318. $this->testedInstance
  319. ->append($token1 = new tokenizer\token(uniqid()))
  320. ->append($token2 = new tokenizer\token(uniqid()))
  321. ->append($token3 = new tokenizer\token(uniqid()))
  322. ->skipValue($token2)
  323. )
  324. ->then
  325. ->integer($this->testedInstance->key())->isZero()
  326. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  327. ->object($this->testedInstance->next())->isTestedInstance
  328. ->integer($this->testedInstance->key())->isEqualTo(2)
  329. ->object($this->testedInstance->current())->isIdenticalTo($token3)
  330. ->object($this->testedInstance->next())->isTestedInstance
  331. ->variable($this->testedInstance->key())->isNull()
  332. ->variable($this->testedInstance->current())->isNull()
  333. ->if(
  334. $this->newTestedInstance,
  335. $this->testedInstance
  336. ->append($token1 = new tokenizer\token(uniqid()))
  337. ->append($token2 = new tokenizer\token(uniqid()))
  338. ->append($token3 = new tokenizer\token(uniqid()))
  339. )
  340. ->then
  341. ->boolean($this->testedInstance->valid())->isTrue()
  342. ->integer($this->testedInstance->key())->isZero()
  343. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  344. ->object($this->testedInstance->next(1))->isTestedInstance
  345. ->boolean($this->testedInstance->valid())->isTrue()
  346. ->integer($this->testedInstance->key())->isEqualTo(1)
  347. ->object($this->testedInstance->current())->isIdenticalTo($token2)
  348. ->object($this->testedInstance->rewind()->next(2))->isTestedInstance
  349. ->boolean($this->testedInstance->valid())->isTrue()
  350. ->integer($this->testedInstance->key())->isEqualTo(2)
  351. ->object($this->testedInstance->current())->isIdenticalTo($token3)
  352. ->object($this->testedInstance->rewind()->next(rand(3, PHP_INT_MAX)))->isTestedInstance
  353. ->boolean($this->testedInstance->valid())->isFalse()
  354. ->variable($this->testedInstance->key())->isNull()
  355. ->variable($this->testedInstance->current())->isNull()
  356. ->if(
  357. $this->newTestedInstance,
  358. $this->testedInstance
  359. ->append($token1 = new tokenizer\token(uniqid()))
  360. ->append($token2 = new tokenizer\token(uniqid()))
  361. ->append($token3 = new tokenizer\token(uniqid()))
  362. ->append($token4 = new tokenizer\token(uniqid()))
  363. ->skipValue($token2)
  364. )
  365. ->then
  366. ->boolean($this->testedInstance->valid())->isTrue()
  367. ->integer($this->testedInstance->key())->isZero()
  368. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  369. ->object($this->testedInstance->next(1))->isTestedInstance
  370. ->boolean($this->testedInstance->valid())->isTrue()
  371. ->integer($this->testedInstance->key())->isEqualTo(2)
  372. ->object($this->testedInstance->current())->isIdenticalTo($token3)
  373. ->object($this->testedInstance->rewind()->next(2))->isTestedInstance
  374. ->boolean($this->testedInstance->valid())->isTrue()
  375. ->integer($this->testedInstance->key())->isEqualTo(3)
  376. ->object($this->testedInstance->current())->isIdenticalTo($token4)
  377. ->object($this->testedInstance->rewind()->next(rand(3, PHP_INT_MAX)))->isTestedInstance
  378. ->boolean($this->testedInstance->valid())->isFalse()
  379. ->variable($this->testedInstance->key())->isNull()
  380. ->variable($this->testedInstance->current())->isNull()
  381. ;
  382. }
  383. public function testCount()
  384. {
  385. $this
  386. ->if($this->newTestedInstance)
  387. ->then
  388. ->sizeOf($this->testedInstance)->isEqualTo(0)
  389. ->if($this->testedInstance->append(new tokenizer\token(uniqid())))
  390. ->then
  391. ->sizeOf($this->testedInstance)->isEqualTo(1)
  392. ->if(
  393. $innerIterator = new tokenizer\iterator(),
  394. $this->testedInstance->append($innerIterator)
  395. )
  396. ->then
  397. ->sizeOf($this->testedInstance)->isEqualTo(1)
  398. ->if($innerIterator->append(new tokenizer\token(uniqid())))
  399. ->then
  400. ->sizeOf($this->testedInstance)->isEqualTo(2)
  401. ->if(
  402. $innerInnerIterator = new tokenizer\iterator(),
  403. $innerInnerIterator->append(new tokenizer\token(uniqid())),
  404. $innerIterator = new tokenizer\iterator(),
  405. $innerIterator
  406. ->append(new tokenizer\token(uniqid()))
  407. ->append($innerInnerIterator),
  408. $this->newTestedInstance,
  409. $this->testedInstance
  410. ->append(new tokenizer\token(uniqid()))
  411. ->append($innerIterator),
  412. $innerIterator->append(new tokenizer\token(uniqid()))
  413. )
  414. ->then
  415. ->sizeOf($this->testedInstance)->isEqualTo(4)
  416. ->if($innerInnerIterator->append(new tokenizer\token(uniqid())))
  417. ->then
  418. ->sizeOf($this->testedInstance)->isEqualTo(5)
  419. ;
  420. }
  421. public function testRewind()
  422. {
  423. $this
  424. ->if($this->newTestedInstance)
  425. ->then
  426. ->variable($this->testedInstance->key())->isNull()
  427. ->object($this->testedInstance->rewind())->isTestedInstance
  428. ->variable($this->testedInstance->key())->isNull()
  429. ->if($this->testedInstance->append(new tokenizer\token(uniqid())))
  430. ->then
  431. ->integer($this->testedInstance->key())->isZero()
  432. ->object($this->testedInstance->rewind())->isTestedInstance
  433. ->integer($this->testedInstance->key())->isZero()
  434. ->if($this->testedInstance->append(new tokenizer\token(uniqid()))->next())
  435. ->then
  436. ->integer($this->testedInstance->key())->isEqualTo(1)
  437. ->object($this->testedInstance->rewind())->isTestedInstance
  438. ->integer($this->testedInstance->key())->isZero()
  439. ->if(
  440. $innerIterator = new tokenizer\iterator(),
  441. $innerIterator
  442. ->append(new tokenizer\token('1'))
  443. ->append(new tokenizer\token('2'))
  444. ->next(),
  445. $this->testedInstance->append($innerIterator)->end()
  446. )
  447. ->then
  448. ->integer($this->testedInstance->key())->isEqualTo(3)
  449. ->integer($innerIterator->key())->isEqualTo(1)
  450. ->object($this->testedInstance->rewind())->isTestedInstance
  451. ->integer($this->testedInstance->key())->isZero()
  452. ->integer($innerIterator->key())->isEqualTo(1)
  453. ->if(
  454. $this->newTestedInstance,
  455. $this->testedInstance
  456. ->append($token1 = new tokenizer\token(uniqid()))
  457. ->append($token2 = new tokenizer\token(uniqid()))
  458. ->append($token3 = new tokenizer\token(uniqid()))
  459. ->skipValue($token1)
  460. ->end()
  461. )
  462. ->then
  463. ->integer($this->testedInstance->key())->isEqualTo(2)
  464. ->object($this->testedInstance->current())->isIdenticalTo($token3)
  465. ->object($this->testedInstance->rewind())->isTestedInstance
  466. ->integer($this->testedInstance->key())->isEqualTo(1)
  467. ->object($this->testedInstance->current())->isIdenticalTo($token2)
  468. ;
  469. }
  470. public function testEnd()
  471. {
  472. $this
  473. ->if($this->newTestedInstance)
  474. ->then
  475. ->variable($this->testedInstance->key())->isNull()
  476. ->variable($this->testedInstance->current())->isNull()
  477. ->object($this->testedInstance->end())->isTestedInstance
  478. ->variable($this->testedInstance->key())->isNull()
  479. ->variable($this->testedInstance->current())->isNull()
  480. ->if($this->testedInstance->append($token1 = new tokenizer\token(uniqid())))
  481. ->then
  482. ->integer($this->testedInstance->key())->isZero()
  483. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  484. ->object($this->testedInstance->end())->isTestedInstance
  485. ->integer($this->testedInstance->key())->isZero()
  486. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  487. ->if($this->testedInstance->append($token2 = new tokenizer\token(uniqid())))
  488. ->then
  489. ->integer($this->testedInstance->key())->isZero()
  490. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  491. ->object($this->testedInstance->end())->isTestedInstance
  492. ->integer($this->testedInstance->key())->isEqualTo(1)
  493. ->object($this->testedInstance->current())->isIdenticalTo($token2)
  494. ->if(
  495. $innerIterator = new tokenizer\iterator(),
  496. $innerIterator
  497. ->append($token3 = new tokenizer\token(uniqid()))
  498. ->append($token4 = new tokenizer\token(uniqid())),
  499. $this->testedInstance->append($innerIterator)
  500. )
  501. ->then
  502. ->integer($this->testedInstance->key())->isEqualTo(1)
  503. ->object($this->testedInstance->current())->isIdenticalTo($token2)
  504. ->object($this->testedInstance->end())->isTestedInstance
  505. ->integer($this->testedInstance->key())->isEqualTo(3)
  506. ->object($this->testedInstance->current())->isIdenticalTo($token4)
  507. ->if(
  508. $this->newTestedInstance,
  509. $this->testedInstance
  510. ->append($token1 = new tokenizer\token(uniqid()))
  511. ->append($token2 = new tokenizer\token(uniqid()))
  512. ->append($token3 = new tokenizer\token(uniqid()))
  513. ->skipValue($token3)
  514. )
  515. ->then
  516. ->integer($this->testedInstance->key())->isZero()
  517. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  518. ->object($this->testedInstance->end())->isTestedInstance
  519. ->integer($this->testedInstance->key())->isEqualTo(1)
  520. ->object($this->testedInstance->current())->isIdenticalTo($token2)
  521. ;
  522. }
  523. public function testAppend()
  524. {
  525. $this
  526. ->if($this->newTestedInstance)
  527. ->then
  528. ->variable($this->testedInstance->key())->isNull()
  529. ->variable($this->testedInstance->current())->isNull()
  530. ->object($this->testedInstance->append($token1 = new tokenizer\token(uniqid())))->isTestedInstance
  531. ->integer($this->testedInstance->key())->isZero()
  532. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  533. ->if(
  534. $iterator = $this->newTestedInstance,
  535. $innerIterator = new tokenizer\iterator(),
  536. $innerIterator
  537. ->append($token1 = new tokenizer\token(uniqid()))
  538. ->append($token2 = new tokenizer\token(uniqid()))
  539. )
  540. ->then
  541. ->variable($this->testedInstance->key())->isNull()
  542. ->variable($this->testedInstance->current())->isNull()
  543. ->object($this->testedInstance->append($innerIterator))->isTestedInstance
  544. ->integer($this->testedInstance->key())->isZero()
  545. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  546. ->if(
  547. $this->testedInstance->end()->next(),
  548. $otherInnerIterator = new tokenizer\iterator(),
  549. $otherInnerIterator
  550. ->append($token3 = new tokenizer\token(uniqid()))
  551. ->append($token4 = new tokenizer\token(uniqid()))
  552. ->end()
  553. )
  554. ->then
  555. ->variable($this->testedInstance->key())->isNull()
  556. ->variable($this->testedInstance->current())->isNull()
  557. ->integer($otherInnerIterator->key())->isEqualTo(1)
  558. ->object($otherInnerIterator->current())->isIdenticalTo($token4)
  559. ->object($this->testedInstance->append($otherInnerIterator))->isTestedInstance
  560. ->integer($this->testedInstance->key())->isEqualTo(2)
  561. ->object($this->testedInstance->current())->isIdenticalTo($token3)
  562. ->integer($otherInnerIterator->key())->isZero()
  563. ->object($otherInnerIterator->current())->isIdenticalTo($token3)
  564. ->exception(function() use ($iterator, $innerIterator) {
  565. $iterator->append($innerIterator);
  566. }
  567. )
  568. ->isInstanceOf('mageekguy\atoum\exceptions\runtime')
  569. ->hasMessage('Unable to append value because it has already a parent')
  570. ->if(
  571. $this->newTestedInstance,
  572. $this->testedInstance->skipValue($skipedValue = uniqid()),
  573. $innerIterator = new tokenizer\iterator()
  574. )
  575. ->then
  576. ->object($this->testedInstance->append($innerIterator))->isTestedInstance
  577. ->sizeOf($this->testedInstance)->isZero()
  578. ->array($innerIterator->getSkipedValues())->isEmpty()
  579. ->if(
  580. $this->newTestedInstance,
  581. $this->testedInstance->skipValue($skipedValue = uniqid()),
  582. $innerIterator = new tokenizer\iterator(),
  583. $innerIterator->skipValue($skipedValue)
  584. )
  585. ->then
  586. ->object($this->testedInstance->append($innerIterator))->isTestedInstance
  587. ->sizeOf($this->testedInstance)->isZero()
  588. ->array($innerIterator->getSkipedValues())->isEqualTo(array($skipedValue))
  589. ->if(
  590. $this->newTestedInstance,
  591. $this->testedInstance->skipValue($skipedValue1 = uniqid()),
  592. $this->newTestedInstance,
  593. $this->newTestedInstance
  594. ->append($token1 = new tokenizer\token(uniqid()))
  595. ->append($token2 = new tokenizer\token(uniqid()))
  596. ->append($token3 = new tokenizer\token(uniqid()))
  597. )
  598. ->then
  599. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  600. ;
  601. }
  602. public function testSkipValue()
  603. {
  604. $this
  605. ->if($this->newTestedInstance)
  606. ->then
  607. ->object($this->testedInstance->skipValue($skipedValue = uniqid()))->isTestedInstance
  608. ->array($this->testedInstance->getSkipedValues())->isEqualTo(array($skipedValue))
  609. ->object($this->testedInstance->skipValue($skipedValue))->isTestedInstance
  610. ->array($this->testedInstance->getSkipedValues())->isEqualTo(array($skipedValue))
  611. ;
  612. }
  613. public function testReset()
  614. {
  615. $this
  616. ->if($this->newTestedInstance)
  617. ->then
  618. ->boolean($this->testedInstance->valid())->isFalse()
  619. ->variable($this->testedInstance->key())->isNull()
  620. ->variable($this->testedInstance->current())->isNull()
  621. ->sizeOf($this->testedInstance)->isZero()
  622. ->object($this->testedInstance->reset())->isTestedInstance
  623. ->boolean($this->testedInstance->valid())->isFalse()
  624. ->variable($this->testedInstance->key())->isNull()
  625. ->variable($this->testedInstance->current())->isNull()
  626. ->sizeOf($this->testedInstance)->isZero()
  627. ->if($this->testedInstance->append($token = new tokenizer\token(uniqid())))
  628. ->then
  629. ->boolean($this->testedInstance->valid())->isTrue()
  630. ->integer($this->testedInstance->key())->isZero()
  631. ->variable($this->testedInstance->current())->isIdenticalTo($token)
  632. ->sizeOf($this->testedInstance)->isEqualTo(1)
  633. ->object($this->testedInstance->reset())->isTestedInstance
  634. ->boolean($this->testedInstance->valid())->isFalse()
  635. ->variable($this->testedInstance->key())->isNull()
  636. ->variable($this->testedInstance->current())->isNull()
  637. ->sizeOf($this->testedInstance)->isZero()
  638. ;
  639. }
  640. public function testGetValue()
  641. {
  642. $this
  643. ->if($this->newTestedInstance)
  644. ->then
  645. ->variable($this->testedInstance->getValue())->isNull()
  646. ->if(
  647. $innerIterator = new tokenizer\iterator(),
  648. $innerIterator->append(new tokenizer\token(uniqid())),
  649. $this->testedInstance
  650. ->append($token1 = new tokenizer\token(uniqid()))
  651. ->append($innerIterator)
  652. ->append($token2 = new tokenizer\token(uniqid()))
  653. )
  654. ->then
  655. ->object($this->testedInstance->getValue())->isIdenticalTo($token1)
  656. ->object($this->testedInstance->next()->getValue())->isIdenticalTo($innerIterator)
  657. ->object($this->testedInstance->next()->getValue())->isIdenticalTo($token2)
  658. ->variable($this->testedInstance->next()->getValue())->isNull()
  659. ;
  660. }
  661. public function testGetParent()
  662. {
  663. $this
  664. ->if($this->newTestedInstance)
  665. ->then
  666. ->variable($this->testedInstance->getParent())->isNull()
  667. ->if(
  668. $parentIterator = new tokenizer\iterator(),
  669. $parentIterator->append($this->testedInstance)
  670. )
  671. ->then
  672. ->object($this->testedInstance->getParent())->isIdenticalTo($parentIterator)
  673. ;
  674. }
  675. public function testGetRoot()
  676. {
  677. $this
  678. ->if($this->newTestedInstance)
  679. ->then
  680. ->variable($this->testedInstance->getRoot())->isNull()
  681. ->if(
  682. $parentIterator = new tokenizer\iterator(),
  683. $parentIterator->append($this->testedInstance)
  684. )
  685. ->then
  686. ->object($this->testedInstance->getRoot())->isIdenticalTo($parentIterator)
  687. ->if(
  688. $grandFatherIterator = new tokenizer\iterator(),
  689. $grandFatherIterator->append($parentIterator)
  690. )
  691. ->then
  692. ->object($this->testedInstance->getRoot())->isIdenticalTo($grandFatherIterator)
  693. ->object($parentIterator->getRoot())->isIdenticalTo($grandFatherIterator)
  694. ;
  695. }
  696. public function testSeek()
  697. {
  698. $this
  699. ->if($this->newTestedInstance)
  700. ->then
  701. ->boolean($this->testedInstance->valid())->isFalse()
  702. ->variable($this->testedInstance->key())->isNull()
  703. ->variable($this->testedInstance->current())->isNull()
  704. ->object($this->testedInstance->seek(rand(0, PHP_INT_MAX)))->isTestedInstance
  705. ->boolean($this->testedInstance->valid())->isFalse()
  706. ->variable($this->testedInstance->key())->isNull()
  707. ->if($this->testedInstance->append($token1 = new tokenizer\token(uniqid())))
  708. ->then
  709. ->boolean($this->testedInstance->valid())->isTrue()
  710. ->integer($this->testedInstance->key())->isZero()
  711. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  712. ->object($this->testedInstance->seek(0))->isTestedInstance
  713. ->integer($this->testedInstance->key())->isZero()
  714. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  715. ->object($this->testedInstance->seek(rand(1, PHP_INT_MAX)))->isTestedInstance
  716. ->boolean($this->testedInstance->valid())->isFalse()
  717. ->variable($this->testedInstance->key())->isNull()
  718. ->variable($this->testedInstance->current())->isNull()
  719. ->if($this->testedInstance->rewind()->append($token2 = new tokenizer\token(uniqid())))
  720. ->then
  721. ->boolean($this->testedInstance->valid())->isTrue()
  722. ->integer($this->testedInstance->key())->isZero()
  723. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  724. ->object($this->testedInstance->seek(0))->isTestedInstance
  725. ->integer($this->testedInstance->key())->isZero()
  726. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  727. ->object($this->testedInstance->seek(1))->isTestedInstance
  728. ->integer($this->testedInstance->key())->isEqualTo(1)
  729. ->object($this->testedInstance->current())->isIdenticalTo($token2)
  730. ->object($this->testedInstance->seek(rand(2, PHP_INT_MAX)))->isTestedInstance
  731. ->boolean($this->testedInstance->valid())->isFalse()
  732. ->variable($this->testedInstance->key())->isNull()
  733. ->variable($this->testedInstance->current())->isNull()
  734. ->if($this->testedInstance->rewind()->append($token3 = new tokenizer\token(uniqid())))
  735. ->then
  736. ->boolean($this->testedInstance->valid())->isTrue()
  737. ->integer($this->testedInstance->key())->isZero()
  738. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  739. ->object($this->testedInstance->seek(2))->isTestedInstance
  740. ->boolean($this->testedInstance->valid())->isTrue()
  741. ->integer($this->testedInstance->key())->isEqualTo(2)
  742. ->object($this->testedInstance->current())->isIdenticalTo($token3)
  743. ->object($this->testedInstance->seek(3))->isTestedInstance
  744. ->boolean($this->testedInstance->valid())->isFalse()
  745. ->variable($this->testedInstance->key())->isNull()
  746. ->variable($this->testedInstance->current())->isNull()
  747. ->object($this->testedInstance->seek(1))->isTestedInstance
  748. ->boolean($this->testedInstance->valid())->isTrue()
  749. ->integer($this->testedInstance->key())->isEqualTo(1)
  750. ->object($this->testedInstance->current())->isIdenticalTo($token2)
  751. ->object($this->testedInstance->rewind()->prev()->seek(1))->isTestedInstance
  752. ->boolean($this->testedInstance->valid())->isTrue()
  753. ->integer($this->testedInstance->key())->isEqualTo(1)
  754. ->object($this->testedInstance->current())->isIdenticalTo($token2)
  755. ->object($this->testedInstance->rewind()->seek(2))->isTestedInstance
  756. ->boolean($this->testedInstance->valid())->isTrue()
  757. ->integer($this->testedInstance->key())->isEqualTo(2)
  758. ->object($this->testedInstance->current())->isIdenticalTo($token3)
  759. ->object($this->testedInstance->seek(0))->isTestedInstance
  760. ->boolean($this->testedInstance->valid())->isTrue()
  761. ->integer($this->testedInstance->key())->isZero()
  762. ->object($this->testedInstance->current())->isIdenticalTo($token1)
  763. ;
  764. }
  765. public function testFindTag()
  766. {
  767. $this
  768. ->if($this->newTestedInstance)
  769. ->then
  770. ->variable($this->testedInstance->key())->isNull()
  771. ->variable($this->testedInstance->findTag(uniqid()))->isNull()
  772. ->variable($this->testedInstance->key())->isNull()
  773. ->if($this->testedInstance->append(new tokenizer\token($token = uniqid())))
  774. ->then
  775. ->integer($this->testedInstance->key())->isZero()
  776. ->variable($this->testedInstance->findTag(uniqid()))->isNull()
  777. ->variable($this->testedInstance->key())->isNull()
  778. ->integer($this->testedInstance->findTag($token))->isZero()
  779. ->integer($this->testedInstance->key())->isZero()
  780. ;
  781. }
  782. public function testGoToNextTagWhichIsNot()
  783. {
  784. $this
  785. ->if($this->newTestedInstance)
  786. ->then
  787. ->object($this->testedInstance->goToNextTagWhichIsNot(array()))->isTestedInstance
  788. ->if($this->testedInstance->append(new tokenizer\token(T_FUNCTION)))
  789. ->then
  790. ->integer($this->testedInstance->key())->isZero()
  791. ->object($this->testedInstance->goToNextTagWhichIsNot(array(T_WHITESPACE)))->isTestedInstance
  792. ->variable($this->testedInstance->key())->isNull()
  793. ->if($this->testedInstance->append(new tokenizer\token(T_WHITESPACE)))
  794. ->then
  795. ->object($this->testedInstance->rewind()->goToNextTagWhichIsNot(array(T_STRING)))->isTestedInstance
  796. ->integer($this->testedInstance->key())->isEqualTo(1)
  797. ->object($this->testedInstance->rewind()->goToNextTagWhichIsNot(array(T_WHITESPACE)))->isTestedInstance
  798. ->variable($this->testedInstance->key())->isNull()
  799. ->if($this->testedInstance->append(new tokenizer\token(T_COMMENT)))
  800. ->then
  801. ->object($this->testedInstance->rewind()->goToNextTagWhichIsNot(array(T_STRING)))->isTestedInstance
  802. ->integer($this->testedInstance->key())->isEqualTo(1)
  803. ->object($this->testedInstance->rewind()->goToNextTagWhichIsNot(array(T_WHITESPACE)))->isTestedInstance
  804. ->integer($this->testedInstance->key())->isEqualTo(2)
  805. ->object($this->testedInstance->rewind()->goToNextTagWhichIsNot(array(T_COMMENT)))->isTestedInstance
  806. ->integer($this->testedInstance->key())->isEqualTo(1)
  807. ->object($this->testedInstance->rewind()->goToNextTagWhichIsNot(array(T_WHITESPACE, T_COMMENT)))->isTestedInstance
  808. ->variable($this->testedInstance->key())->isNull()
  809. ->object($this->testedInstance->rewind()->goToNextTagWhichIsNot(array(T_COMMENT, T_WHITESPACE)))->isTestedInstance
  810. ->variable($this->testedInstance->key())->isNull()
  811. ->if($this->testedInstance->append(new tokenizer\token(T_STRING)))
  812. ->then
  813. ->object($this->testedInstance->rewind()->goToNextTagWhichIsNot(array(T_STRING)))->isTestedInstance
  814. ->integer($this->testedInstance->key())->isEqualTo(1)
  815. ->object($this->testedInstance->rewind()->goToNextTagWhichIsNot(array(T_WHITESPACE)))->isTestedInstance
  816. ->integer($this->testedInstance->key())->isEqualTo(2)
  817. ->object($this->testedInstance->rewind()->goToNextTagWhichIsNot(array(T_COMMENT)))->isTestedInstance
  818. ->integer($this->testedInstance->key())->isEqualTo(1)
  819. ->object($this->testedInstance->rewind()->goToNextTagWhichIsNot(array(T_WHITESPACE, T_COMMENT)))->isTestedInstance
  820. ->integer($this->testedInstance->key())->isEqualTo(3)
  821. ->object($this->testedInstance->rewind()->goToNextTagWhichIsNot(array(T_COMMENT, T_WHITESPACE)))->isTestedInstance
  822. ->integer($this->testedInstance->key())->isEqualTo(3)
  823. ->object($this->testedInstance->rewind()->goToNextTagWhichIsNot(array(T_COMMENT, T_WHITESPACE, T_STRING)))->isTestedInstance
  824. ->variable($this->testedInstance->key())->isNull()
  825. ;
  826. }
  827. }