PageRenderTime 46ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/units/classes/annotations/extractor.php

http://github.com/mageekguy/atoum
PHP | 313 lines | 299 code | 14 blank | 0 comment | 0 complexity | bf231e3fd885faf72b394a28cfd4c1a7 MD5 | raw file
  1. <?php
  2. namespace mageekguy\atoum\tests\units\annotations;
  3. use
  4. mageekguy\atoum,
  5. mageekguy\atoum\annotations
  6. ;
  7. require_once __DIR__ . '/../../runner.php';
  8. class extractor extends atoum\test
  9. {
  10. public function testSpace()
  11. {
  12. $this
  13. ->string(self::space())->matches('/ {1,10}/')
  14. ->string(self::space(5))->matches('/ {1,5}/')
  15. ->string(self::space(5, 3))->matches('/ {3,5}/')
  16. ;
  17. }
  18. public function testStar()
  19. {
  20. $this
  21. ->string(self::star())->matches('/\*{2,10}/')
  22. ->string(self::star(5))->matches('/\*{2,5}/')
  23. ->string(self::star(5, 3))->matches('/\*{3,5}/')
  24. ;
  25. }
  26. public function test__construct()
  27. {
  28. $this
  29. ->if($extractor = new annotations\extractor())
  30. ->then
  31. ->array($extractor->getHandlers())->isEmpty()
  32. ;
  33. }
  34. public function testExtract()
  35. {
  36. $this
  37. ->if($extractor = new annotations\extractor())
  38. ->and($extractor->setHandler('ignore', function($value) use (& $ignore) { $ignore = $value; }))
  39. ->and($extractor->setHandler('tags', function($value) use (& $tags) { $tags = $value; }))
  40. ->and($extractor->setHandler('dataProvider', function($value) use (& $dataProvider) { $dataProvider = $value; }))
  41. ->and($extractor->setHandler('namespace', function($value) use (& $namespace) { $namespace = $value; }))
  42. ->and($extractor->setHandler('maxChildrenNumber', function($value) use (& $maxChildrenNumber) { $maxChildrenNumber = $value; }))
  43. ->then
  44. ->object($extractor->extract(''))->isIdenticalTo($extractor)
  45. ->variable($ignore)->isNull()
  46. ->variable($tags)->isNull()
  47. ->variable($dataProvider)->isNull()
  48. ->variable($namespace)->isNull()
  49. ->variable($maxChildrenNumber)->isNull()
  50. ->object($extractor->extract(uniqid()))->isIdenticalTo($extractor)
  51. ->variable($ignore)->isNull()
  52. ->variable($tags)->isNull()
  53. ->variable($dataProvider)->isNull()
  54. ->variable($namespace)->isNull()
  55. ->variable($maxChildrenNumber)->isNull()
  56. ->object($extractor->extract('//'))->isIdenticalTo($extractor)
  57. ->variable($ignore)->isNull()
  58. ->variable($tags)->isNull()
  59. ->variable($dataProvider)->isNull()
  60. ->variable($namespace)->isNull()
  61. ->variable($maxChildrenNumber)->isNull()
  62. ->object($extractor->extract('//@ignore on'))->isIdenticalTo($extractor)
  63. ->variable($ignore)->isNull()
  64. ->variable($tags)->isNull()
  65. ->variable($dataProvider)->isNull()
  66. ->variable($namespace)->isNull()
  67. ->variable($maxChildrenNumber)->isNull()
  68. ->object($extractor->extract('// @ignore on'))->isIdenticalTo($extractor)
  69. ->variable($ignore)->isNull()
  70. ->variable($tags)->isNull()
  71. ->variable($dataProvider)->isNull()
  72. ->variable($namespace)->isNull()
  73. ->variable($maxChildrenNumber)->isNull()
  74. ->object($extractor->extract('/*/'))->isIdenticalTo($extractor)
  75. ->variable($ignore)->isNull()
  76. ->variable($tags)->isNull()
  77. ->variable($dataProvider)->isNull()
  78. ->variable($namespace)->isNull()
  79. ->variable($maxChildrenNumber)->isNull()
  80. ->object($extractor->extract('/**/'))->isIdenticalTo($extractor)
  81. ->variable($ignore)->isNull()
  82. ->variable($tags)->isNull()
  83. ->variable($dataProvider)->isNull()
  84. ->variable($namespace)->isNull()
  85. ->variable($maxChildrenNumber)->isNull()
  86. ->object($extractor->extract('/* */'))->isIdenticalTo($extractor)
  87. ->variable($ignore)->isNull()
  88. ->variable($tags)->isNull()
  89. ->variable($dataProvider)->isNull()
  90. ->variable($namespace)->isNull()
  91. ->variable($maxChildrenNumber)->isNull()
  92. ->object($extractor->extract('/* @ignore on */'))->isIdenticalTo($extractor)
  93. ->string($ignore)->isEqualTo('on')
  94. ->variable($tags)->isNull()
  95. ->variable($dataProvider)->isNull()
  96. ->variable($namespace)->isNull()
  97. ->variable($maxChildrenNumber)->isNull()
  98. ->object($extractor->extract('/*****@ignore on*****/'))->isIdenticalTo($extractor)
  99. ->string($ignore)->isEqualTo('on')
  100. ->variable($tags)->isNull()
  101. ->variable($dataProvider)->isNull()
  102. ->variable($namespace)->isNull()
  103. ->variable($maxChildrenNumber)->isNull()
  104. ->object($extractor->extract('/* @ignore on */'))->isIdenticalTo($extractor)
  105. ->string($ignore)->isEqualTo('on')
  106. ->variable($tags)->isNull()
  107. ->variable($dataProvider)->isNull()
  108. ->variable($namespace)->isNull()
  109. ->variable($maxChildrenNumber)->isNull()
  110. ->object($extractor->extract('/* @ignore on */'))->isIdenticalTo($extractor)
  111. ->string($ignore)->isEqualTo('on')
  112. ->variable($tags)->isNull()
  113. ->variable($dataProvider)->isNull()
  114. ->variable($namespace)->isNull()
  115. ->variable($maxChildrenNumber)->isNull()
  116. ->object($extractor->extract('/* @ignore ON */'))->isIdenticalTo($extractor)
  117. ->string($ignore)->isEqualTo('ON')
  118. ->variable($tags)->isNull()
  119. ->variable($dataProvider)->isNull()
  120. ->variable($namespace)->isNull()
  121. ->variable($maxChildrenNumber)->isNull()
  122. ->object($extractor->extract('/* @ignore On */'))->isIdenticalTo($extractor)
  123. ->string($ignore)->isEqualTo('On')
  124. ->variable($tags)->isNull()
  125. ->variable($dataProvider)->isNull()
  126. ->variable($namespace)->isNull()
  127. ->variable($maxChildrenNumber)->isNull()
  128. ->object($extractor->extract('/* @ignore oN */'))->isIdenticalTo($extractor)
  129. ->string($ignore)->isEqualTo('oN')
  130. ->variable($tags)->isNull()
  131. ->variable($dataProvider)->isNull()
  132. ->variable($namespace)->isNull()
  133. ->variable($maxChildrenNumber)->isNull()
  134. ->object($extractor->extract('/* @ignore oNo */'))->isIdenticalTo($extractor)
  135. ->string($ignore)->isEqualTo('oNo')
  136. ->variable($tags)->isNull()
  137. ->variable($dataProvider)->isNull()
  138. ->variable($namespace)->isNull()
  139. ->variable($maxChildrenNumber)->isNull()
  140. ->object($extractor->extract('/* @ignore Off */'))->isIdenticalTo($extractor)
  141. ->string($ignore)->isEqualTo('Off')
  142. ->variable($tags)->isNull()
  143. ->variable($dataProvider)->isNull()
  144. ->variable($namespace)->isNull()
  145. ->variable($maxChildrenNumber)->isNull()
  146. ->object($extractor->extract('/* @IGNORE off */'))->isIdenticalTo($extractor)
  147. ->string($ignore)->isEqualTo('off')
  148. ->variable($tags)->isNull()
  149. ->variable($dataProvider)->isNull()
  150. ->variable($namespace)->isNull()
  151. ->variable($maxChildrenNumber)->isNull()
  152. ->object($extractor->extract('/* @tags aTag */'))->isIdenticalTo($extractor)
  153. ->string($ignore)->isEqualTo('off')
  154. ->string($tags)->isEqualTo('aTag')
  155. ->variable($dataProvider)->isNull()
  156. ->variable($namespace)->isNull()
  157. ->variable($maxChildrenNumber)->isNull()
  158. ->object($extractor->extract('/* @tags aTag otherTag anotherTag */'))->isIdenticalTo($extractor)
  159. ->string($ignore)->isEqualTo('off')
  160. ->string($tags)->isEqualTo('aTag otherTag anotherTag')
  161. ->variable($dataProvider)->isNull()
  162. ->variable($namespace)->isNull()
  163. ->variable($maxChildrenNumber)->isNull()
  164. ->object($extractor->extract('/* @dataProvider aDataProvider */'))->isIdenticalTo($extractor)
  165. ->string($ignore)->isEqualTo('off')
  166. ->string($tags)->isEqualTo('aTag otherTag anotherTag')
  167. ->string($dataProvider)->isEqualTo('aDataProvider')
  168. ->variable($namespace)->isNull()
  169. ->variable($maxChildrenNumber)->isNull()
  170. ->object($extractor->extract('/* @DATApROVIDER aDataProvider */'))->isIdenticalTo($extractor)
  171. ->string($ignore)->isEqualTo('off')
  172. ->string($tags)->isEqualTo('aTag otherTag anotherTag')
  173. ->string($dataProvider)->isEqualTo('aDataProvider')
  174. ->variable($namespace)->isNull()
  175. ->variable($maxChildrenNumber)->isNull()
  176. ->object($extractor->extract('/* @namespace bar */'))->isIdenticalTo($extractor)
  177. ->string($ignore)->isEqualTo('off')
  178. ->string($tags)->isEqualTo('aTag otherTag anotherTag')
  179. ->string($dataProvider)->isEqualTo('aDataProvider')
  180. ->string($namespace)->isEqualTo('bar')
  181. ->variable($maxChildrenNumber)->isNull()
  182. ->object($extractor->extract('/* @foo bar */'))->isIdenticalTo($extractor)
  183. ->string($ignore)->isEqualTo('off')
  184. ->string($tags)->isEqualTo('aTag otherTag anotherTag')
  185. ->string($dataProvider)->isEqualTo('aDataProvider')
  186. ->string($namespace)->isEqualTo('bar')
  187. ->variable($maxChildrenNumber)->isNull()
  188. ->object($extractor->extract('/* @maxChildrenNumber 1 */'))->isIdenticalTo($extractor)
  189. ->string($ignore)->isEqualTo('off')
  190. ->string($tags)->isEqualTo('aTag otherTag anotherTag')
  191. ->string($dataProvider)->isEqualTo('aDataProvider')
  192. ->string($namespace)->isEqualTo('bar')
  193. ->string($maxChildrenNumber)->isEqualTo('1')
  194. ->object($extractor->extract('/* @maxChildrenNumber ' . ($number = rand(1, PHP_INT_MAX)) . ' */'))->isIdenticalTo($extractor)
  195. ->string($ignore)->isEqualTo('off')
  196. ->string($tags)->isEqualTo('aTag otherTag anotherTag')
  197. ->string($dataProvider)->isEqualTo('aDataProvider')
  198. ->string($namespace)->isEqualTo('bar')
  199. ->string($maxChildrenNumber)->isEqualTo($number)
  200. ->object($extractor->extract(
  201. '/*' . PHP_EOL .
  202. "\t" . '@ignore on' . PHP_EOL .
  203. "\t" . '@tags aTag anOtherTag' . PHP_EOL .
  204. '*/')
  205. )
  206. ->isIdenticalTo($extractor)
  207. ->string($ignore)->isEqualTo('on')
  208. ->string($tags)->isEqualTo('aTag anOtherTag')
  209. ->string($dataProvider)->isEqualTo('aDataProvider')
  210. ->string($namespace)->isEqualTo('bar')
  211. ->string($maxChildrenNumber)->isEqualTo($number)
  212. ->object($extractor->extract(
  213. '/*' . "\r\n" .
  214. "\t" . '@ignore off' . "\r\n" .
  215. '*/')
  216. )
  217. ->isIdenticalTo($extractor)
  218. ->string($ignore)->isEqualTo('off')
  219. ->object($extractor->extract(
  220. '/*' . "\n" .
  221. "\t" . '@ignore on' . "\n" .
  222. '*/')
  223. )
  224. ->isIdenticalTo($extractor)
  225. ->string($ignore)->isEqualTo('on')
  226. ->object($extractor->extract(
  227. '/**
  228. * @tags ManySetGetPredis
  229. * @dataProvider manySetGetDataProvider
  230. */')
  231. )
  232. ->isIdenticalTo($extractor)
  233. ->string($tags)->isEqualTo('ManySetGetPredis')
  234. ->string($dataProvider)->isEqualTo('manySetGetDataProvider')
  235. ;
  236. }
  237. public function testResetHandlers()
  238. {
  239. $this
  240. ->if($extractor = new annotations\extractor())
  241. ->then
  242. ->object($extractor->resetHandlers())->isIdenticalTo($extractor)
  243. ->array($extractor->getHandlers())->isEmpty()
  244. ->if($extractor->setHandler(uniqid(), function() {}))
  245. ->then
  246. ->object($extractor->resetHandlers())->isIdenticalTo($extractor)
  247. ->array($extractor->getHandlers())->isEmpty()
  248. ;
  249. }
  250. public function testUnsetHandler()
  251. {
  252. $this
  253. ->if($extractor = new annotations\extractor())
  254. ->then
  255. ->object($extractor->unsetHandler(uniqid()))->isIdenticalTo($extractor)
  256. ->array($extractor->getHandlers())->isEmpty()
  257. ->if($extractor->setHandler($annotation = uniqid(), function() {}))
  258. ->then
  259. ->object($extractor->unsetHandler(uniqid()))->isIdenticalTo($extractor)
  260. ->array($extractor->getHandlers())->isNotEmpty()
  261. ->object($extractor->unsetHandler($annotation))->isIdenticalTo($extractor)
  262. ->array($extractor->getHandlers())->isEmpty()
  263. ;
  264. }
  265. public function testToBoolean()
  266. {
  267. $this
  268. ->boolean(annotations\extractor::toBoolean(true))->isTrue()
  269. ->boolean(annotations\extractor::toBoolean(false))->isFalse()
  270. ->boolean(annotations\extractor::toBoolean('on'))->isTrue()
  271. ->boolean(annotations\extractor::toBoolean('On'))->isTrue()
  272. ->boolean(annotations\extractor::toBoolean('ON'))->isTrue()
  273. ->boolean(annotations\extractor::toBoolean('oN'))->isTrue()
  274. ->boolean(annotations\extractor::toBoolean('off'))->isFalse()
  275. ->boolean(annotations\extractor::toBoolean('Off'))->isFalse()
  276. ->boolean(annotations\extractor::toBoolean('OFF'))->isFalse()
  277. ;
  278. }
  279. public function testToArray()
  280. {
  281. $this
  282. ->array(annotations\extractor::toArray(''))->isEqualTo(array(''))
  283. ->array(annotations\extractor::toArray($value = uniqid()))->isEqualTo(array($value))
  284. ->array(annotations\extractor::toArray(($value = uniqid()) . ' ' . ($otherValue = uniqid())))->isEqualTo(array($value, $otherValue))
  285. ;
  286. }
  287. protected static function repeat($char, $max, $min = 1)
  288. {
  289. return str_repeat($char, rand($min, rand($min, $max)));
  290. }
  291. protected static function space($max = 10, $min = 1)
  292. {
  293. return self::repeat(' ', $max, $min);
  294. }
  295. protected static function star($max = 10, $min = 2)
  296. {
  297. return self::repeat('*', $max, $min);
  298. }
  299. }