PageRenderTime 52ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/units/classes/runner.php

http://github.com/mageekguy/atoum
PHP | 703 lines | 659 code | 44 blank | 0 comment | 1 complexity | 53ae5c0a0c89b9d6da943c6adea3d135 MD5 | raw file
  1. <?php
  2. namespace mageekguy\atoum\tests\units;
  3. use
  4. mageekguy\atoum,
  5. mageekguy\atoum\test,
  6. mageekguy\atoum\mock,
  7. mageekguy\atoum\runner as testedClass
  8. ;
  9. require_once __DIR__ . '/../runner.php';
  10. class runner extends atoum\test
  11. {
  12. public function testClass()
  13. {
  14. $this
  15. ->testedClass
  16. ->hasInterface('mageekguy\atoum\observable')
  17. ->string(atoum\runner::atoumVersionConstant)->isEqualTo('mageekguy\atoum\version')
  18. ->string(atoum\runner::atoumDirectoryConstant)->isEqualTo('mageekguy\atoum\directory')
  19. ->string(atoum\runner::runStart)->isEqualTo('runnerStart')
  20. ->string(atoum\runner::runStop)->isEqualTo('runnerStop')
  21. ;
  22. }
  23. public function test__construct()
  24. {
  25. $this
  26. ->if($runner = new testedClass())
  27. ->then
  28. ->object($runner->getScore())->isInstanceOf('mageekguy\atoum\score')
  29. ->object($runner->getAdapter())->isInstanceOf('mageekguy\atoum\adapter')
  30. ->object($runner->getLocale())->isInstanceOf('mageekguy\atoum\locale')
  31. ->object($runner->getIncluder())->isInstanceOf('mageekguy\atoum\includer')
  32. ->variable($runner->getTestGenerator())->isNull()
  33. ->object($runner->getTestDirectoryIterator())->isInstanceOf('mageekguy\atoum\iterators\recursives\directory\factory')
  34. ->object($defaultGlobIteratorFactory = $runner->getGlobIteratorFactory())->isInstanceOf('closure')
  35. ->object($defaultGlobIteratorFactory($pattern = uniqid()))->isEqualTo(new \globIterator($pattern))
  36. ->object($defaultReflectionClassFactory = $runner->getReflectionClassFactory())->isInstanceOf('closure')
  37. ->object($defaultReflectionClassFactory($this))->isEqualTo(new \reflectionClass($this))
  38. ->object($defaultTestFactory = $runner->getTestFactory())->isInstanceOf('closure')
  39. ->object($defaultTestFactory(__CLASS__))->isInstanceOf($this)
  40. ->variable($runner->getRunningDuration())->isNull()
  41. ->boolean($runner->codeCoverageIsEnabled())->isTrue()
  42. ->variable($runner->getDefaultReportTitle())->isNull()
  43. ->array($runner->getObservers())->isEmpty()
  44. ->array($runner->getTestPaths())->isEmpty()
  45. ->variable($runner->getXdebugConfig())->isNull()
  46. ;
  47. }
  48. public function testSetTestPaths()
  49. {
  50. $this
  51. ->if($runner = new testedClass())
  52. ->then
  53. ->object($runner->setTestPaths($paths = array(uniqid(), uniqid(), uniqid())))->isIdenticalTo($runner)
  54. ->array($runner->getTestPaths())->isEqualTo($paths)
  55. ;
  56. }
  57. public function testResetTestPaths()
  58. {
  59. $this
  60. ->if($runner = new testedClass())
  61. ->and($runner->setTestPaths(array(uniqid(), uniqid(), uniqid())))
  62. ->then
  63. ->object($runner->resetTestPaths())->isIdenticalTo($runner)
  64. ->array($runner->getTestPaths())->isEmpty()
  65. ;
  66. }
  67. public function testSetPhp()
  68. {
  69. $this
  70. ->if($runner = new testedClass())
  71. ->then
  72. ->object($runner->setPhp($php = new atoum\php()))->isIdenticalTo($runner)
  73. ->object($runner->getPhp())->isIdenticalTo($php)
  74. ->object($runner->setPhp())->isIdenticalTo($runner)
  75. ->object($runner->getPhp())
  76. ->isEqualTo(new atoum\php())
  77. ->isNotIdenticalTo($php)
  78. ;
  79. }
  80. public function testSetAdapter()
  81. {
  82. $this
  83. ->if($runner = new testedClass())
  84. ->then
  85. ->object($runner->setAdapter($adapter = new atoum\test\adapter()))->isIdenticalTo($runner)
  86. ->object($runner->getAdapter())->isIdenticalTo($adapter)
  87. ;
  88. }
  89. public function testSetScore()
  90. {
  91. $this
  92. ->if($runner = new testedClass())
  93. ->then
  94. ->object($runner->setScore($score = new atoum\runner\score()))->isIdenticalTo($runner)
  95. ->object($runner->getScore())->isIdenticalTo($score);
  96. ;
  97. }
  98. public function testSetDefaultReportTtitle()
  99. {
  100. $this
  101. ->if($runner = new testedClass())
  102. ->then
  103. ->object($runner->setDefaultReportTitle($title = uniqid()))->isIdenticalTo($runner)
  104. ->string($runner->getDefaultReportTitle())->isEqualTo($title)
  105. ;
  106. }
  107. public function testGetPhpPath()
  108. {
  109. $this
  110. ->if($runner = new testedClass())
  111. ->then
  112. ->string($runner->getPhpPath())->isEqualTo($runner->getPhp()->getBinaryPath())
  113. ;
  114. }
  115. public function testSetPhpPath()
  116. {
  117. $this
  118. ->if($runner = new testedClass())
  119. ->then
  120. ->object($runner->setPhpPath($phpPath = uniqid()))->isIdenticalTo($runner)
  121. ->string($runner->getPhpPath())->isIdenticalTo($phpPath)
  122. ;
  123. }
  124. public function testSetTestGenerator()
  125. {
  126. $this
  127. ->if($runner = new testedClass())
  128. ->then
  129. ->object($runner->setTestGenerator($generator = new test\generator()))->isIdenticalTo($runner)
  130. ->object($runner->getTestGenerator())->isIdenticalTo($generator)
  131. ->object($runner->setTestGenerator())->isIdenticalTo($runner)
  132. ->object($runner->getTestGenerator())
  133. ->isInstanceOf('mageekguy\atoum\test\generator')
  134. ->isNotIdenticalTo($generator)
  135. ;
  136. }
  137. public function testEnableDebugMode()
  138. {
  139. $this
  140. ->if($runner = new testedClass())
  141. ->then
  142. ->object($runner->enableDebugMode())->isIdenticalTo($runner)
  143. ->boolean($runner->debugModeIsEnabled())->isTrue()
  144. ->object($runner->enableDebugMode())->isIdenticalTo($runner)
  145. ->boolean($runner->debugModeIsEnabled())->isTrue()
  146. ;
  147. }
  148. public function testDisableDebugMode()
  149. {
  150. $this
  151. ->if($runner = new testedClass())
  152. ->then
  153. ->object($runner->disableDebugMode())->isIdenticalTo($runner)
  154. ->boolean($runner->debugModeIsEnabled())->isFalse()
  155. ->object($runner->disableDebugMode())->isIdenticalTo($runner)
  156. ->boolean($runner->debugModeIsEnabled())->isFalse()
  157. ->if($runner->enableDebugMode())
  158. ->then
  159. ->object($runner->disableDebugMode())->isIdenticalTo($runner)
  160. ->boolean($runner->debugModeIsEnabled())->isFalse()
  161. ;
  162. }
  163. public function testDisallowUsageOfUndefinedMethodInMock()
  164. {
  165. $this
  166. ->if($runner = new testedClass())
  167. ->then
  168. ->object($runner->disallowUsageOfUndefinedMethodInMock())->isIdenticalTo($runner)
  169. ->boolean($runner->usageOfUndefinedMethodInMockAreAllowed())->isFalse()
  170. ->object($runner->disallowUsageOfUndefinedMethodInMock())->isIdenticalTo($runner)
  171. ->boolean($runner->debugModeIsEnabled())->isFalse()
  172. ;
  173. }
  174. public function testAllowUsageOfUndefinedMethodInMock()
  175. {
  176. $this
  177. ->if($runner = new testedClass())
  178. ->then
  179. ->object($runner->allowUsageOfUndefinedMethodInMock())->isIdenticalTo($runner)
  180. ->boolean($runner->usageOfUndefinedMethodInMockAreAllowed())->isTrue()
  181. ->object($runner->allowUsageOfUndefinedMethodInMock())->isIdenticalTo($runner)
  182. ->boolean($runner->usageOfUndefinedMethodInMockAreAllowed())->isTrue()
  183. ->if($runner->disallowUsageOfUndefinedMethodInMock())
  184. ->then
  185. ->object($runner->allowUsageOfUndefinedMethodInMock())->isIdenticalTo($runner)
  186. ->boolean($runner->usageOfUndefinedMethodInMockAreAllowed())->isTrue()
  187. ;
  188. }
  189. public function testSetXdebugConfig()
  190. {
  191. $this
  192. ->if($runner = new testedClass())
  193. ->then
  194. ->object($runner->setXdebugConfig($value = uniqid()))->isIdenticalTo($runner)
  195. ->string($runner->getXdebugConfig())->isEqualTo($value)
  196. ;
  197. }
  198. public function testAddObserver()
  199. {
  200. $this
  201. ->if($runner = new testedClass())
  202. ->then
  203. ->array($runner->getObservers())->isEmpty()
  204. ->object($runner->addObserver($observer = new \mock\mageekguy\atoum\observers\runner()))->isIdenticalTo($runner)
  205. ->array($runner->getObservers())->isEqualTo(array($observer))
  206. ;
  207. }
  208. public function testRemoveObserver()
  209. {
  210. $this
  211. ->if($runner = new testedClass())
  212. ->then
  213. ->array($runner->getObservers())->isEmpty()
  214. ->object($runner->removeObserver(new \mock\mageekguy\atoum\observers\runner()))->isIdenticalTo($runner)
  215. ->array($runner->getObservers())->isEmpty()
  216. ->if($runner->addObserver($observer1 = new \mock\mageekguy\atoum\observers\runner()))
  217. ->and($runner->addObserver($observer2 = new \mock\mageekguy\atoum\observers\runner()))
  218. ->then
  219. ->array($runner->getObservers())->isEqualTo(array($observer1, $observer2))
  220. ->object($runner->removeObserver(new \mock\mageekguy\atoum\observers\runner()))->isIdenticalTo($runner)
  221. ->array($runner->getObservers())->isEqualTo(array($observer1, $observer2))
  222. ->object($runner->removeObserver($observer1))->isIdenticalTo($runner)
  223. ->array($runner->getObservers())->isEqualTo(array($observer2))
  224. ->object($runner->removeObserver($observer2))->isIdenticalTo($runner)
  225. ->array($runner->getObservers())->isEmpty()
  226. ;
  227. }
  228. public function testCallObservers()
  229. {
  230. $this
  231. ->if($runner = new testedClass())
  232. ->then
  233. ->object($runner->callObservers(atoum\runner::runStart))->isIdenticalTo($runner)
  234. ->if($runner->addObserver($observer = new \mock\mageekguy\atoum\observers\runner()))
  235. ->then
  236. ->object($runner->callObservers(atoum\runner::runStart))->isIdenticalTo($runner)
  237. ->mock($observer)->call('handleEvent')->withArguments(atoum\runner::runStart, $runner)->once()
  238. ;
  239. }
  240. public function testGetRunningDuration()
  241. {
  242. $this
  243. ->if($adapter = new atoum\test\adapter())
  244. ->and($adapter->microtime = function() { static $call = 0; return (++$call * 100); })
  245. ->and($adapter->get_declared_classes = array())
  246. ->and($runner = new testedClass())
  247. ->and($runner->setAdapter($adapter))
  248. ->then
  249. ->variable($runner->getRunningDuration())->isNull()
  250. ->if($runner->run())
  251. ->then
  252. ->integer($runner->getRunningDuration())->isEqualTo(100)
  253. ->if(eval('namespace ' . __NAMESPACE__ . ' { class forTestGetRunningDuration extends \mageekguy\atoum\test { public function testSomething() {} public function run(array $runTestMethods = array(), array $tags = array()) { return $this; } } }'))
  254. ->and($adapter->get_declared_classes = array(__NAMESPACE__ . '\forTestGetRunningDuration'))
  255. ->and($runner->run())
  256. ->then
  257. ->integer($runner->getRunningDuration())->isEqualTo(100)
  258. ;
  259. }
  260. public function testGetTestNumber()
  261. {
  262. $this
  263. ->if($adapter = new atoum\test\adapter())
  264. ->and($adapter->get_declared_classes = array())
  265. ->and($runner = new testedClass())
  266. ->and($runner->setAdapter($adapter))
  267. ->then
  268. ->integer($runner->getTestNumber())->isZero()
  269. ->if($runner->run())
  270. ->then
  271. ->integer($runner->getTestNumber())->isZero();
  272. ;
  273. }
  274. public function testGetTestMethodNumber()
  275. {
  276. $this
  277. ->if($adapter = new atoum\test\adapter())
  278. ->and($adapter->get_declared_classes = array())
  279. ->and($runner = new testedClass())
  280. ->and($runner->setAdapter($adapter))
  281. ->then
  282. ->integer($runner->getTestMethodNumber())->isZero()
  283. ->if($runner->run())
  284. ->then
  285. ->integer($runner->getTestMethodNumber())->isZero()
  286. ;
  287. }
  288. public function testGetBootstrapFile()
  289. {
  290. $this
  291. ->if($runner = new testedClass())
  292. ->and($includer = new \mock\mageekguy\atoum\includer())
  293. ->and($includer->getMockController()->includePath = function() {})
  294. ->and($runner->setIncluder($includer))
  295. ->then
  296. ->object($runner->setBootstrapFile($path = uniqid()))->isIdenticalTo($runner)
  297. ->string($runner->getBootstrapFile())->isEqualTo($path)
  298. ->mock($includer)->call('includePath')->withArguments($path)->once()
  299. ;
  300. }
  301. public function testHasReports()
  302. {
  303. $this
  304. ->if($runner = new testedClass())
  305. ->then
  306. ->boolean($runner->hasReports())->isFalse()
  307. ->if($runner->addReport(new atoum\reports\realtime\cli()))
  308. ->then
  309. ->boolean($runner->hasReports())->isTrue()
  310. ;
  311. }
  312. public function testSetReport()
  313. {
  314. $this
  315. ->if($runner = new testedClass())
  316. ->then
  317. ->object($runner->setReport($report = new atoum\reports\realtime\cli()))->isIdenticalTo($runner)
  318. ->array($runner->getReports())->isEqualTo(array($report))
  319. ->array($runner->getObservers())->contains($report)
  320. ->object($runner->addReport($otherReport = new atoum\reports\realtime\cli()))->isIdenticalTo($runner)
  321. ->array($runner->getReports())->isEqualTo(array($report))
  322. ->array($runner->getObservers())->contains($report)
  323. ->object($runner->setReport($otherReport))->isIdenticalTo($runner)
  324. ->array($runner->getReports())->isEqualTo(array($otherReport))
  325. ->array($runner->getObservers())->contains($otherReport)
  326. ->object($runner->addReport($report))->isIdenticalTo($runner)
  327. ->array($runner->getReports())->isEqualTo(array($otherReport))
  328. ->array($runner->getObservers())->contains($otherReport)
  329. ;
  330. }
  331. public function testAddReport()
  332. {
  333. $this
  334. ->if($runner = new testedClass())
  335. ->then
  336. ->object($runner->addReport($report = new atoum\reports\realtime\cli()))->isIdenticalTo($runner)
  337. ->array($runner->getReports())->isEqualTo(array($report))
  338. ->array($runner->getObservers())->contains($report)
  339. ->if($runner->setReport($otherReport = new atoum\reports\realtime\cli()))
  340. ->then
  341. ->object($runner->addReport($report = new atoum\reports\realtime\cli()))->isIdenticalTo($runner)
  342. ->array($runner->getReports())->isEqualTo(array($otherReport))
  343. ->array($runner->getObservers())->contains($otherReport)
  344. ;
  345. }
  346. public function testRemoveReport()
  347. {
  348. $this
  349. ->if($runner = new testedClass())
  350. ->then
  351. ->array($runner->getReports())->isEmpty()
  352. ->array($runner->getObservers())->isEmpty()
  353. ->object($runner->removeReport(new atoum\reports\realtime\cli()))->isIdenticalTo($runner)
  354. ->array($runner->getReports())->isEmpty()
  355. ->array($runner->getObservers())->isEmpty()
  356. ->if($report1 = new \mock\mageekguy\atoum\report())
  357. ->and($report2 = new \mock\mageekguy\atoum\report())
  358. ->and($runner->addReport($report1)->addReport($report2))
  359. ->then
  360. ->array($runner->getReports())->isEqualTo(array($report1, $report2))
  361. ->array($runner->getObservers())->isEqualTo(array($report1, $report2))
  362. ->object($runner->removeReport(new atoum\reports\realtime\cli()))->isIdenticalTo($runner)
  363. ->array($runner->getReports())->isEqualTo(array($report1, $report2))
  364. ->array($runner->getObservers())->isEqualTo(array($report1, $report2))
  365. ->object($runner->removeReport($report1))->isIdenticalTo($runner)
  366. ->array($runner->getReports())->isEqualTo(array($report2))
  367. ->array($runner->getObservers())->isEqualTo(array($report2))
  368. ->object($runner->removeReport($report2))->isIdenticalTo($runner)
  369. ->array($runner->getReports())->isEmpty()
  370. ->array($runner->getObservers())->isEmpty()
  371. ->if($runner->setReport($otherReport = new atoum\reports\realtime\cli()))
  372. ->then
  373. ->array($runner->getReports())->isEqualTo(array($otherReport))
  374. ->array($runner->getObservers())->isEqualTo(array($otherReport))
  375. ->object($runner->removeReport($otherReport))->isIdenticalTo($runner)
  376. ->array($runner->getReports())->isEmpty()
  377. ->array($runner->getObservers())->isEmpty()
  378. ->if($runner->addReport($report1)->addReport($report2))
  379. ->then
  380. ->array($runner->getReports())->isEqualTo(array($report1, $report2))
  381. ->array($runner->getObservers())->isEqualTo(array($report1, $report2))
  382. ;
  383. }
  384. public function testRemoveReports()
  385. {
  386. $this
  387. ->if($runner = new testedClass())
  388. ->then
  389. ->array($runner->getReports())->isEmpty()
  390. ->array($runner->getObservers())->isEmpty()
  391. ->object($runner->removeReports())->isIdenticalTo($runner)
  392. ->array($runner->getReports())->isEmpty()
  393. ->array($runner->getObservers())->isEmpty()
  394. ->if($report1 = new \mock\mageekguy\atoum\report())
  395. ->and($report2 = new \mock\mageekguy\atoum\report())
  396. ->and($runner->addReport($report1)->addReport($report2))
  397. ->then
  398. ->array($runner->getReports())->isEqualTo(array($report1, $report2))
  399. ->array($runner->getObservers())->isEqualTo(array($report1, $report2))
  400. ->object($runner->removeReports())->isIdenticalTo($runner)
  401. ->array($runner->getReports())->isEmpty()
  402. ->array($runner->getObservers())->isEmpty()
  403. ->if($runner->setReport($otherReport = new atoum\reports\realtime\cli()))
  404. ->then
  405. ->array($runner->getReports())->isEqualTo(array($otherReport))
  406. ->array($runner->getObservers())->isEqualTo(array($otherReport))
  407. ->object($runner->removeReports())->isIdenticalTo($runner)
  408. ->array($runner->getReports())->isEmpty()
  409. ->array($runner->getObservers())->isEmpty()
  410. ->if($runner->addReport($report1)->addReport($report2))
  411. ->then
  412. ->array($runner->getReports())->isEqualTo(array($report1, $report2))
  413. ->array($runner->getObservers())->isEqualTo(array($report1, $report2))
  414. ;
  415. }
  416. public function testAddExtension()
  417. {
  418. $this
  419. ->if($runner = new testedClass())
  420. ->then
  421. ->object($runner->addExtension($extension = new \mock\mageekguy\atoum\extension()))->isIdenticalTo($runner)
  422. ->array($runner->getExtensions())->isEqualTo(array($extension))
  423. ->array($runner->getObservers())->contains($extension)
  424. ->mock($extension)
  425. ->call('setRunner')->withArguments($runner)->once()
  426. ->if($this->resetMock($extension))
  427. ->then
  428. ->object($runner->addExtension($extension))->isIdenticalTo($runner)
  429. ->array($runner->getExtensions())->isEqualTo(array($extension))
  430. ->array($runner->getObservers())->contains($extension)
  431. ->mock($extension)
  432. ->call('setRunner')->never();
  433. ;
  434. }
  435. public function testRemoveExtension()
  436. {
  437. $this
  438. ->if($runner = new testedClass())
  439. ->then
  440. ->array($runner->getExtensions())->isEmpty()
  441. ->array($runner->getObservers())->isEmpty()
  442. ->object($runner->removeExtension(new \mock\mageekguy\atoum\extension()))->isIdenticalTo($runner)
  443. ->array($runner->getExtensions())->isEmpty()
  444. ->array($runner->getObservers())->isEmpty()
  445. ->if($extension = new \mock\mageekguy\atoum\extension())
  446. ->and($otherExtension = new \mock\mageekguy\atoum\extension())
  447. ->and($runner->addExtension($extension)->addExtension($otherExtension))
  448. ->then
  449. ->array($runner->getExtensions())->isEqualTo(array($extension, $otherExtension))
  450. ->array($runner->getObservers())->isEqualTo(array($extension, $otherExtension))
  451. ->object($runner->removeExtension(new \mock\mageekguy\atoum\extension()))->isIdenticalTo($runner)
  452. ->array($runner->getExtensions())->isEqualTo(array($extension, $otherExtension))
  453. ->array($runner->getObservers())->isEqualTo(array($extension, $otherExtension))
  454. ->object($runner->removeExtension($extension))->isIdenticalTo($runner)
  455. ->array($runner->getExtensions())->isEqualTo(array($otherExtension))
  456. ->array($runner->getObservers())->isEqualTo(array($otherExtension))
  457. ->object($runner->removeExtension($otherExtension))->isIdenticalTo($runner)
  458. ->array($runner->getExtensions())->isEmpty()
  459. ->array($runner->getObservers())->isEmpty()
  460. ;
  461. }
  462. public function testRemoveExtensions()
  463. {
  464. $this
  465. ->if($runner = new testedClass())
  466. ->then
  467. ->array($runner->getExtensions())->isEmpty()
  468. ->array($runner->getObservers())->isEmpty()
  469. ->object($runner->removeExtensions())->isIdenticalTo($runner)
  470. ->array($runner->getExtensions())->isEmpty()
  471. ->array($runner->getObservers())->isEmpty()
  472. ->if($extension = new \mock\mageekguy\atoum\extension())
  473. ->and($otherExtension = new \mock\mageekguy\atoum\extension())
  474. ->and($runner->addExtension($extension)->addExtension($otherExtension))
  475. ->then
  476. ->array($runner->getExtensions())->isEqualTo(array($extension, $otherExtension))
  477. ->array($runner->getObservers())->isEqualTo(array($extension, $otherExtension))
  478. ->object($runner->removeExtensions())->isIdenticalTo($runner)
  479. ->array($runner->getExtensions())->isEmpty()
  480. ->array($runner->getObservers())->isEmpty()
  481. ;
  482. }
  483. public function testEnableCodeCoverage()
  484. {
  485. $this
  486. ->if($runner = new testedClass())
  487. ->and($runner->disableCodeCoverage())
  488. ->then
  489. ->boolean($runner->codeCoverageIsEnabled())->isFalse()
  490. ->object($runner->enableCodeCoverage())->isIdenticalTo($runner)
  491. ->boolean($runner->codeCoverageIsEnabled())->isTrue()
  492. ;
  493. }
  494. public function testDisableCodeCoverage()
  495. {
  496. $this
  497. ->if($runner = new testedClass())
  498. ->and($runner->enableCodeCoverage())
  499. ->then
  500. ->boolean($runner->codeCoverageIsEnabled())->isTrue()
  501. ->object($runner->disableCodeCoverage())->isIdenticalTo($runner)
  502. ->boolean($runner->codeCoverageIsEnabled())->isFalse()
  503. ;
  504. }
  505. public function testSetTestFactory()
  506. {
  507. $this
  508. ->if($runner = new testedClass())
  509. ->then
  510. ->variable($runner->getTestFactory())->isCallable
  511. ->object($runner->setTestFactory())->isIdenticalTo($runner)
  512. ->object($runner->getTestFactory())->isCallable
  513. ->if($factory = function() {})
  514. ->then
  515. ->object($runner->setTestFactory($factory))->isIdenticalTo($runner)
  516. ->object($runner->getTestFactory())->isCallable
  517. ->given($test = new \mock\mageekguy\atoum\test())
  518. ->and($generator = new \mock\mageekguy\atoum\test\mock\generator($test))
  519. ->and($test->setMockGenerator($generator))
  520. ->if($runner->disallowUsageOfUndefinedMethodInMock())
  521. ->and($runner->setTestFactory(function() use ($test) { return $test; }))
  522. ->and($factory = $runner->getTestFactory())
  523. ->then
  524. ->object($factory('mock\mageekguy\atoum\test'))->isIdenticalTo($test)
  525. ->mock($generator)
  526. ->call('disallowUndefinedMethodUsage')->once
  527. ->if($this->resetMock($generator))
  528. ->if($runner->allowUsageOfUndefinedMethodInMock())
  529. ->then
  530. ->object($factory('mock\mageekguy\atoum\test'))->isIdenticalTo($test)
  531. ->mock($generator)
  532. ->call('disallowUndefinedMethodUsage')->never
  533. ;
  534. }
  535. public function testSetPathAndVersionInScore()
  536. {
  537. $this
  538. ->if($php = new \mock\mageekguy\atoum\php())
  539. ->and($this->calling($php)->getBinaryPath = $phpPath = uniqid())
  540. ->and($this->calling($php)->run = $php)
  541. ->and($this->calling($php)->isRunning = false)
  542. ->and($this->calling($php)->getExitCode = 0)
  543. ->and($this->calling($php)->getStdout = $phpVersion = uniqid())
  544. ->and($adapter = new atoum\test\adapter())
  545. ->and($adapter->defined = true)
  546. ->and($adapter->constant = function($constantName) use (& $atoumVersion, & $atoumDirectory) {
  547. switch ($constantName)
  548. {
  549. case atoum\runner::atoumVersionConstant:
  550. return $atoumVersion = uniqid();
  551. case atoum\runner::atoumDirectoryConstant:
  552. return $atoumDirectory = uniqid();
  553. }
  554. }
  555. )
  556. ->and($runner = new testedClass())
  557. ->and($runner->setPhp($php))
  558. ->and($runner->setAdapter($adapter))
  559. ->and($runner->setScore($score = new \mock\mageekguy\atoum\runner\score()))
  560. ->then
  561. ->object($runner->setPathAndVersionInScore())->isIdenticalTo($runner)
  562. ->mock($score)
  563. ->call('setAtoumVersion')->withArguments($atoumVersion)->once()
  564. ->call('setAtoumPath')->withArguments($atoumDirectory)->once()
  565. ->call('setPhpPath')->withArguments($phpPath)->once()
  566. ->call('setPhpVersion')->withArguments($phpVersion)->once()
  567. ->if($adapter->defined = false)
  568. ->and($runner->setScore($score = new \mock\mageekguy\atoum\runner\score()))
  569. ->then
  570. ->object($runner->setPathAndVersionInScore())->isIdenticalTo($runner)
  571. ->mock($score)
  572. ->call('setAtoumVersion')->withArguments(null)->once()
  573. ->call('setAtoumPath')->withArguments(null)->once()
  574. ->call('setPhpPath')->withArguments($phpPath)->once()
  575. ->call('setPhpVersion')->withArguments($phpVersion)->once()
  576. ->if($this->calling($php)->getExitCode = rand(1, PHP_INT_MAX))
  577. ->and($runner->setScore($score = new \mock\mageekguy\atoum\runner\score()))
  578. ->then
  579. ->exception(function() use ($runner) {
  580. $runner->setPathAndVersionInScore();
  581. }
  582. )
  583. ->isInstanceOf('mageekguy\atoum\exceptions\runtime')
  584. ->hasMessage('Unable to get PHP version from \'' . $php . '\'')
  585. ;
  586. }
  587. public function testGetCoverage()
  588. {
  589. $this
  590. ->if($runner = new testedClass())
  591. ->then
  592. ->object($runner->getCoverage())->isIdenticalTo($runner->getScore()->getCoverage())
  593. ;
  594. }
  595. public function testAddTest()
  596. {
  597. $this
  598. ->if($runner = new testedClass())
  599. ->then
  600. ->object($runner->addTest($testPath1 = uniqid()))->isIdenticalTo($runner)
  601. ->array($runner->getTestPaths())->isEqualTo(array($testPath1))
  602. ->object($runner->addTest($testPath2 = uniqid()))->isIdenticalTo($runner)
  603. ->array($runner->getTestPaths())->isEqualTo(array($testPath1, $testPath2))
  604. ->object($runner->addTest($testPath1))->isIdenticalTo($runner)
  605. ->array($runner->getTestPaths())->isEqualTo(array($testPath1, $testPath2))
  606. ->object($runner->addTest($testPath3 = new \splFileInfo(__FILE__)))->isIdenticalTo($runner)
  607. ->array($runner->getTestPaths())->isEqualTo(array($testPath1, $testPath2, (string) $testPath3))
  608. ->if($runner->canNotAddTest())
  609. ->then
  610. ->object($runner->addTest($testPath4 = uniqid()))->isIdenticalTo($runner)
  611. ->array($runner->getTestPaths())->isEqualTo(array($testPath1, $testPath2, (string) $testPath3))
  612. ->if($runner->canAddTest())
  613. ->then
  614. ->object($runner->addTest($testPath4 = uniqid()))->isIdenticalTo($runner)
  615. ->array($runner->getTestPaths())->isEqualTo(array($testPath1, $testPath2, (string) $testPath3, $testPath4))
  616. ;
  617. }
  618. public function testCanAddTest()
  619. {
  620. $this
  621. ->if($runner = new testedClass())
  622. ->then
  623. ->object($runner->canAddTest())->isIdenticalTo($runner)
  624. ->if($runner->canNotAddTest())
  625. ->then
  626. ->object($runner->canAddTest())->isIdenticalTo($runner)
  627. ->if($runner->addTest(uniqid()))
  628. ->then
  629. ->array($runner->getTestPaths())->isNotEmpty()
  630. ;
  631. }
  632. public function testCanNotAddTest()
  633. {
  634. $this
  635. ->if($runner = new testedClass())
  636. ->then
  637. ->object($runner->canNotAddTest())->isIdenticalTo($runner)
  638. ->if($runner->addTest(uniqid()))
  639. ->then
  640. ->array($runner->getTestPaths())->isEmpty()
  641. ->if($runner->canAddTest())
  642. ->then
  643. ->object($runner->canNotAddTest())->isIdenticalTo($runner)
  644. ->if($runner->addTest(uniqid()))
  645. ->then
  646. ->array($runner->getTestPaths())->isEmpty()
  647. ;
  648. }
  649. public function testAcceptTestFileExtensions()
  650. {
  651. $this
  652. ->if($runner = new testedClass())
  653. ->and($runner->setTestDirectoryIterator($directoryIterator = new \mock\mageekguy\atoum\iterators\recursives\directory\factory()))
  654. ->then
  655. ->object($runner->acceptTestFileExtensions($testFileExtensions = array(uniqid(), uniqid())))->isIdenticalTo($runner)
  656. ->mock($directoryIterator)->call('acceptExtensions')->withArguments($testFileExtensions)->once()
  657. ;
  658. }
  659. }