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

/tests/units/classes/report/fields/runner/result/cli.php

http://github.com/mageekguy/atoum
PHP | 362 lines | 328 code | 34 blank | 0 comment | 2 complexity | ea59bdb4955fc805476cfc3d183ba5ee MD5 | raw file
  1. <?php
  2. namespace mageekguy\atoum\tests\units\report\fields\runner\result;
  3. use
  4. mageekguy\atoum,
  5. mageekguy\atoum\locale,
  6. mageekguy\atoum\cli\prompt,
  7. mageekguy\atoum\cli\colorizer,
  8. mageekguy\atoum\report\fields\runner\result\cli as testedClass
  9. ;
  10. require_once __DIR__ . '/../../../../../runner.php';
  11. class cli extends atoum\test
  12. {
  13. public function testClass()
  14. {
  15. $this->testedClass->extends('mageekguy\atoum\report\field');
  16. }
  17. public function test__construct()
  18. {
  19. $this
  20. ->if($field = new testedClass())
  21. ->then
  22. ->object($field->getPrompt())->isEqualTo(new prompt())
  23. ->object($field->getSuccessColorizer())->isEqualTo(new colorizer())
  24. ->object($field->getFailureColorizer())->isEqualTo(new colorizer())
  25. ->object($field->getLocale())->isEqualTo(new locale())
  26. ->variable($field->getTestNumber())->isNull()
  27. ->variable($field->getTestMethodNumber())->isNull()
  28. ->variable($field->getFailNumber())->isNull()
  29. ->variable($field->getErrorNumber())->isNull()
  30. ->variable($field->getExceptionNumber())->isNull()
  31. ->array($field->getEvents())->isEqualTo(array(atoum\runner::runStop))
  32. ;
  33. }
  34. public function testSetPrompt()
  35. {
  36. $this
  37. ->if($field = new testedClass())
  38. ->then
  39. ->object($field->setPrompt($prompt = new prompt()))->isIdenticalTo($field)
  40. ->object($field->getPrompt())->isEqualTo($prompt)
  41. ->object($field->setPrompt())->isIdenticalTo($field)
  42. ->object($field->getPrompt())
  43. ->isNotIdenticalTo($prompt)
  44. ->isEqualTo(new prompt())
  45. ;
  46. }
  47. public function testSetSuccessColorizer()
  48. {
  49. $this
  50. ->if($field = new testedClass())
  51. ->then
  52. ->object($field->setSuccessColorizer($colorizer = new colorizer()))->isIdenticalTo($field)
  53. ->object($field->getSuccessColorizer())->isIdenticalTo($colorizer)
  54. ->object($field->setSuccessColorizer())->isIdenticalTo($field)
  55. ->object($field->getSuccessColorizer())
  56. ->isNotIdenticalTo($colorizer)
  57. ->isEqualTo(new colorizer())
  58. ;
  59. }
  60. public function testSetFailureColorizer()
  61. {
  62. $this
  63. ->if($field = new testedClass())
  64. ->then
  65. ->object($field->setFailureColorizer($colorizer = new colorizer()))->isIdenticalTo($field)
  66. ->object($field->getFailureColorizer())->isIdenticalTo($colorizer)
  67. ->object($field->setFailureColorizer())->isIdenticalTo($field)
  68. ->object($field->getFailureColorizer())
  69. ->isNotIdenticalTo($colorizer)
  70. ->isEqualTo(new colorizer())
  71. ;
  72. }
  73. public function testHandleEvent()
  74. {
  75. $this
  76. ->if($score = new \mock\mageekguy\atoum\runner\score())
  77. ->and($score->getMockController()->getAssertionNumber = $assertionNumber = rand(1, PHP_INT_MAX))
  78. ->and($score->getMockController()->getFailNumber = $failNumber = rand(1, PHP_INT_MAX))
  79. ->and($score->getMockController()->getErrorNumber = $errorNumber = rand(1, PHP_INT_MAX))
  80. ->and($score->getMockController()->getExceptionNumber = $exceptionNumber = rand(1, PHP_INT_MAX))
  81. ->and($runner = new \mock\mageekguy\atoum\runner())
  82. ->and($runner->setScore($score))
  83. ->and($runner->getMockController()->getTestNumber = $testNumber = rand(1, PHP_INT_MAX))
  84. ->and($runner->getMockController()->getTestMethodNumber = $testMethodNumber = rand(1, PHP_INT_MAX))
  85. ->and($field = new testedClass())
  86. ->then
  87. ->boolean($field->handleEvent(atoum\runner::runStart, $runner))->isFalse()
  88. ->variable($field->getTestNumber())->isNull()
  89. ->variable($field->getTestMethodNumber())->isNull()
  90. ->variable($field->getAssertionNumber())->isNull()
  91. ->variable($field->getFailNumber())->isNull()
  92. ->variable($field->getErrorNumber())->isNull()
  93. ->variable($field->getExceptionNumber())->isNull()
  94. ->boolean($field->handleEvent(atoum\runner::runStop, $runner))->isTrue()
  95. ->integer($field->getTestNumber())->isEqualTo($testNumber)
  96. ->integer($field->getTestMethodNumber())->isEqualTo($testMethodNumber)
  97. ->integer($field->getAssertionNumber())->isEqualTo($assertionNumber)
  98. ->integer($field->getFailNumber())->isEqualTo($failNumber)
  99. ->integer($field->getErrorNumber())->isEqualTo($errorNumber)
  100. ->integer($field->getExceptionNumber())->isEqualTo($exceptionNumber)
  101. ;
  102. }
  103. public function test__toString()
  104. {
  105. $score = new \mock\mageekguy\atoum\score();
  106. $scoreController = $score->getMockController();
  107. $scoreController->getAssertionNumber = 1;
  108. $scoreController->getFailNumber = 0;
  109. $scoreController->getErrorNumber = 0;
  110. $scoreController->getExceptionNumber = 0;
  111. $runner = new \mock\mageekguy\atoum\runner();
  112. $runnerController = $runner->getMockController();
  113. $runnerController->getScore = $score;
  114. $runnerController->getTestNumber = 1;
  115. $runnerController->getTestMethodNumber = 1;
  116. $locale = new \mock\mageekguy\atoum\locale();
  117. $localeController = $locale->getMockController();
  118. $localeController->_ = function ($string) use (& $noTestRunningString, & $successString, & $failureString) {
  119. switch ($string)
  120. {
  121. case 'No test running.':
  122. return $noTestRunningString = uniqid();
  123. case 'Success (%s, %s, %s, %s, %s)!':
  124. return $successString = uniqid();
  125. case 'Failure (%s, %s, %s, %s, %s, %s, %s, %s)!':
  126. return $failureString = uniqid();
  127. default:
  128. return uniqid();
  129. }
  130. };
  131. $localeController->__ = function($singularString, $pluralString, $number) use (& $testString, & $testMethodString, & $assertionString, & $errorString, & $exceptionString) {
  132. switch ($singularString)
  133. {
  134. case '%s test':
  135. return $testString = uniqid();
  136. case '%s method':
  137. return $testMethodString = uniqid();
  138. case '%s assertion':
  139. return $assertionString = uniqid();
  140. case '%s error':
  141. return $errorString = uniqid();
  142. case '%s exception':
  143. return $exceptionString = uniqid();
  144. default:
  145. return uniqid();
  146. }
  147. };
  148. $prompt = new \mock\mageekguy\atoum\cli\prompt();
  149. $promptController = $prompt->getMockController();
  150. $promptController->__toString = $promptString = uniqid();
  151. $successColorizer = new \mock\mageekguy\atoum\cli\colorizer();
  152. $successColorizerController = $successColorizer->getMockController();
  153. $successColorizerController->colorize = $colorizedSuccessString = uniqid();
  154. $failureColorizer = new \mock\mageekguy\atoum\cli\colorizer();
  155. $failureColorizerController = $failureColorizer->getMockController();
  156. $failureColorizerController->colorize = $colorizedFailureString = uniqid();
  157. $this->startCase('Success with one test, one method and one assertion, no fail, no error, no exception');
  158. $this
  159. ->if($field = new testedClass())
  160. ->and($field->setPrompt($prompt))
  161. ->and($field->setSuccessColorizer($successColorizer))
  162. ->and($field->setFailureColorizer($failureColorizer))
  163. ->and($field->setLocale($locale))
  164. ->then
  165. ->castToString($field)->isEqualTo($promptString . $noTestRunningString . PHP_EOL)
  166. ->mock($locale)->call('_')->withArguments('No test running.')->once()
  167. ->mock($successColorizer)->call('colorize')->withArguments($noTestRunningString)->never()
  168. ->mock($failureColorizer)->call('colorize')->never()
  169. ->mock($prompt)->call('__toString')->once()
  170. ->if($locale->getMockController()->resetCalls())
  171. ->and($prompt->getMockController()->resetCalls())
  172. ->and($field->handleEvent(atoum\runner::runStart, $runner))
  173. ->then
  174. ->castToString($field)->isEqualTo($promptString . $noTestRunningString . PHP_EOL)
  175. ->mock($locale)->call('_')->withArguments('No test running.')->once()
  176. ->mock($successColorizer)->call('colorize')->withArguments($noTestRunningString)->never()
  177. ->mock($failureColorizer)->call('colorize')->never()
  178. ->mock($prompt)->call('__toString')->once()
  179. ->if($locale->getMockController()->resetCalls())
  180. ->and($prompt->getMockController()->resetCalls())
  181. ->and($field->handleEvent(atoum\runner::runStop, $runner))
  182. ->then
  183. ->castToString($field)->isEqualTo($promptString . $colorizedSuccessString . PHP_EOL)
  184. ->mock($locale)
  185. ->call('__')->withArguments('%s test', '%s tests', 1)->once()
  186. ->call('__')->withArguments('%s/%s method', '%s/%s methods', 1)->once()
  187. ->call('__')->withArguments('%s skipped method', '%s skipped methods', 0)->once()
  188. ->call('__')->withArguments('%s assertion', '%s assertions', 1)->once()
  189. ->call('_')->withArguments('Success (%s, %s, %s, %s, %s)!')->once()
  190. ->mock($successColorizer)
  191. ->call('colorize')->withArguments($noTestRunningString)->never()
  192. ->call('colorize')->withArguments($successString)->once()
  193. ->mock($failureColorizer)->call('colorize')->never()
  194. ->mock($prompt)->call('__toString')->once()
  195. ;
  196. $this->startCase('Success with several tests, several methods and several assertions, no fail, no error, no exception');
  197. $runnerController->getTestNumber = $testNumber = rand(2, PHP_INT_MAX);
  198. $runnerController->getTestMethodNumber = $testMethodNumber = rand(2, PHP_INT_MAX);
  199. $scoreController->getAssertionNumber = $assertionNumber = rand(2, PHP_INT_MAX);
  200. $this
  201. ->if($field = new testedClass())
  202. ->and($field->setPrompt($prompt))
  203. ->and($field->setSuccessColorizer($successColorizer))
  204. ->and($field->setFailureColorizer($failureColorizer))
  205. ->and($field->setLocale($locale))
  206. ->then
  207. ->castToString($field)->isEqualTo($promptString . $noTestRunningString . PHP_EOL)
  208. ->mock($locale)->call('_')->withArguments('No test running.')->once()
  209. ->mock($successColorizer)->call('colorize')->withArguments($noTestRunningString)->never()
  210. ->mock($failureColorizer)->call('colorize')->never()
  211. ->mock($prompt)->call('__toString')->once()
  212. ->if($locale->getMockController()->resetCalls())
  213. ->and($prompt->getMockController()->resetCalls())
  214. ->and($field->handleEvent(atoum\runner::runStart, $runner))
  215. ->then
  216. ->castToString($field)->isEqualTo($promptString . $noTestRunningString . PHP_EOL)
  217. ->mock($locale)->call('_')->withArguments('No test running.')->once()
  218. ->mock($successColorizer)->call('colorize')->withArguments($noTestRunningString)->never()
  219. ->mock($failureColorizer)->call('colorize')->never()
  220. ->mock($prompt)->call('__toString')->once()
  221. ->if($locale->getMockController()->resetCalls())
  222. ->and($prompt->getMockController()->resetCalls())
  223. ->and($field->handleEvent(atoum\runner::runStop, $runner))
  224. ->castToString($field)->isEqualTo($promptString . $colorizedSuccessString . PHP_EOL)
  225. ->mock($locale)
  226. ->call('__')->withArguments('%s test', '%s tests', $testNumber)->once()
  227. ->call('__')->withArguments('%s/%s method', '%s/%s methods', $testMethodNumber)->once()
  228. ->call('__')->withArguments('%s skipped method', '%s skipped methods', 0)->once()
  229. ->call('__')->withArguments('%s assertion', '%s assertions', $assertionNumber)->once()
  230. ->call('_')->withArguments('Success (%s, %s, %s, %s, %s)!')->once()
  231. ->mock($successColorizer)
  232. ->call('colorize')->withArguments($noTestRunningString)->never()
  233. ->call('colorize')->withArguments($successString)->once()
  234. ->mock($failureColorizer)->call('colorize')->never()
  235. ->mock($prompt)->call('__toString')->once()
  236. ;
  237. $this->startCase('Failure with several tests, several methods and several assertions, one fail, one error, one exception');
  238. $scoreController->getFailNumber = 1;
  239. $scoreController->getErrorNumber = 1;
  240. $scoreController->getExceptionNumber = 1;
  241. $scoreController->getUncompletedMethodNumber = 1;
  242. $this
  243. ->if($field = new testedClass())
  244. ->and($field->setPrompt($prompt))
  245. ->and($field->setSuccessColorizer($successColorizer))
  246. ->and($field->setFailureColorizer($failureColorizer))
  247. ->and($field->setLocale($locale))
  248. ->then
  249. ->castToString($field)->isEqualTo($promptString . $noTestRunningString . PHP_EOL)
  250. ->mock($locale)->call('_')->withArguments('No test running.')->once()
  251. ->mock($successColorizer)->call('colorize')->withArguments($noTestRunningString)->never()
  252. ->mock($failureColorizer)->call('colorize')->never()
  253. ->mock($prompt)->call('__toString')->once()
  254. ->if($locale->getMockController()->resetCalls())
  255. ->and($prompt->getMockController()->resetCalls())
  256. ->and($field->handleEvent(atoum\runner::runStart, $runner))
  257. ->then
  258. ->castToString($field)->isEqualTo($promptString . $noTestRunningString . PHP_EOL)
  259. ->mock($locale)->call('_')->withArguments('No test running.')->once()
  260. ->mock($successColorizer)->call('colorize')->withArguments($noTestRunningString)->never()
  261. ->mock($failureColorizer)->call('colorize')->never()
  262. ->mock($prompt)->call('__toString')->once()
  263. ->if($locale->getMockController()->resetCalls())
  264. ->and($prompt->getMockController()->resetCalls())
  265. ->and($field->handleEvent(atoum\runner::runStop, $runner))
  266. ->then
  267. ->castToString($field)->isEqualTo($promptString . $colorizedFailureString . PHP_EOL)
  268. ->mock($locale)
  269. ->call('__')->withArguments('%s test', '%s tests', $testNumber)->once()
  270. ->call('__')->withArguments('%s/%s method', '%s/%s methods', $testMethodNumber)->once()
  271. ->call('__')->withArguments('%s skipped method', '%s skipped methods', 0)->once()
  272. ->call('__')->withArguments('%s uncompleted method', '%s uncompleted methods', 1)->once()
  273. ->call('__')->withArguments('%s failure', '%s failures', 1)->once()
  274. ->call('__')->withArguments('%s error', '%s errors', 1)->once()
  275. ->call('__')->withArguments('%s exception', '%s exceptions', 1)->once()
  276. ->call('_')->withArguments('Failure (%s, %s, %s, %s, %s, %s, %s, %s)!')->once()
  277. ->mock($failureColorizer)
  278. ->call('colorize')->withArguments($noTestRunningString)->never()
  279. ->call('colorize')->withArguments($failureString)->once()
  280. ->mock($successColorizer)->call('colorize')->never()
  281. ->mock($prompt)->call('__toString')->once()
  282. ;
  283. $this->startCase('Failure with several tests, several methods and several assertions, several fails, several errors, several exceptions');
  284. $scoreController->getFailNumber = $failNumber = rand(2, PHP_INT_MAX);
  285. $scoreController->getErrorNumber = $errorNumber = rand(2, PHP_INT_MAX);
  286. $scoreController->getExceptionNumber = $exceptionNumber = rand(2, PHP_INT_MAX);
  287. $scoreController->getUncompletedMethodNumber = $uncompletedTestNumber = rand(2, PHP_INT_MAX);
  288. $this
  289. ->if($field = new testedClass())
  290. ->and($field->setPrompt($prompt))
  291. ->and($field->setSuccessColorizer($successColorizer))
  292. ->and($field->setFailureColorizer($failureColorizer))
  293. ->and($field->setLocale($locale))
  294. ->then
  295. ->castToString($field)->isEqualTo($promptString . $noTestRunningString . PHP_EOL)
  296. ->mock($locale)->call('_')->withArguments('No test running.')->once()
  297. ->mock($successColorizer)->call('colorize')->withArguments($noTestRunningString)->never()
  298. ->mock($failureColorizer)->call('colorize')->never()
  299. ->mock($prompt)->call('__toString')->once()
  300. ->if($locale->getMockController()->resetCalls())
  301. ->and($prompt->getMockController()->resetCalls())
  302. ->and($field->handleEvent(atoum\runner::runStart, $runner))
  303. ->then
  304. ->castToString($field)->isEqualTo($promptString . $noTestRunningString . PHP_EOL)
  305. ->mock($locale)->call('_')->withArguments('No test running.')->once()
  306. ->mock($successColorizer)->call('colorize')->withArguments($noTestRunningString)->never()
  307. ->mock($failureColorizer)->call('colorize')->never()
  308. ->mock($prompt)->call('__toString')->once()
  309. ->if($locale->getMockController()->resetCalls())
  310. ->and($prompt->getMockController()->resetCalls())
  311. ->and($field->handleEvent(atoum\runner::runStop, $runner))
  312. ->then
  313. ->castToString($field)->isEqualTo($promptString . $colorizedFailureString . PHP_EOL)
  314. ->mock($locale)
  315. ->call('__')->withArguments('%s test', '%s tests', $testNumber)->once()
  316. ->call('__')->withArguments('%s/%s method', '%s/%s methods', $testMethodNumber)->once()
  317. ->call('__')->withArguments('%s failure', '%s failures', $failNumber)->once()
  318. ->call('__')->withArguments('%s error', '%s errors', $errorNumber)->once()
  319. ->call('__')->withArguments('%s exception', '%s exceptions', $exceptionNumber)->once()
  320. ->call('_')->withArguments('Failure (%s, %s, %s, %s, %s, %s, %s, %s)!')->once()
  321. ->mock($failureColorizer)
  322. ->call('colorize')->withArguments($noTestRunningString)->never()
  323. ->call('colorize')->withArguments($failureString)->once()
  324. ->mock($successColorizer)->call('colorize')->never()
  325. ->mock($prompt)->call('__toString')->once()
  326. ;
  327. }
  328. }