UnitTest.php 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609
  1. <?php
  2. /**
  3. * Lithium: the most rad php framework
  4. *
  5. * @copyright Copyright 2013, Union of RAD (http://union-of-rad.org)
  6. * @license http://opensource.org/licenses/bsd-license.php The BSD License
  7. */
  8. namespace lithium\tests\cases\test;
  9. use Exception;
  10. use lithium\core\Libraries;
  11. use lithium\tests\mocks\test\MockUnitTest;
  12. use lithium\tests\mocks\test\cases\MockSkipThrowsException;
  13. use lithium\tests\mocks\test\cases\MockTestErrorHandling;
  14. use lithium\tests\mocks\test\cases\MockSetUpThrowsException;
  15. use lithium\tests\mocks\test\cases\MockTearDownThrowsException;
  16. class UnitTest extends \lithium\test\Unit {
  17. public $test;
  18. public function setUp() {
  19. $this->test = new MockUnitTest();
  20. }
  21. public function testBaseAssertions() {
  22. $this->test->assert(true);
  23. $this->test->assert(false);
  24. $results = $this->test->results();
  25. $result = array_pop($results);
  26. $this->assertEqual('fail', $result['result']);
  27. $this->assertTrue(true);
  28. $this->assertFalse(false);
  29. }
  30. public function testCompareIsEqual() {
  31. $result = $this->test->compare('equal', 'string', 'string');
  32. $this->assertTrue($result);
  33. }
  34. public function testCompareIsIdentical() {
  35. $result = $this->test->compare('identical', 'string', 'string');
  36. $this->assertTrue($result);
  37. }
  38. public function testCompareTypes() {
  39. $expected = array(
  40. 'trace' => null,
  41. 'expected' => "(array) Array\n(\n)",
  42. 'result' => "(string) string"
  43. );
  44. $result = $this->test->compare('equal', array(), 'string');
  45. $this->assertEqual($expected, $result);
  46. }
  47. public function testAssertEqualNumeric() {
  48. $expected = array(1, 2, 3);
  49. $result = array(1, 2, 3);
  50. $this->test->assertEqual($expected, $result);
  51. $expected = 'pass';
  52. $results = $this->test->results();
  53. $this->assertEqual($expected, $results[0]['result']);
  54. }
  55. public function testAssertEqualNumericFail() {
  56. $expected = array(1, 2, 3);
  57. $result = array(1, 2);
  58. $this->test->assertEqual($expected, $result);
  59. $results = $this->test->results();
  60. $expected = 'fail';
  61. $this->assertEqual($expected, $results[0]['result']);
  62. $expected = "trace: [2]\nexpected: 3\nresult: NULL\n";
  63. $this->assertEqual($expected, $results[0]['message']);
  64. $expected = array(
  65. 'trace' => '[2]',
  66. 'expected' => 3,
  67. 'result' => null
  68. );
  69. $this->assertEqual($expected, $results[0]['data']);
  70. }
  71. public function testAssertBacktraces() {
  72. $this->test->testSomething();
  73. $results = $this->test->results();
  74. $expected = 'assert';
  75. $this->assertEqual($expected, $results[0]['assertion']);
  76. $expected = 'lithium\\tests\\mocks\\test\\MockUnitTest';
  77. $this->assertEqual($expected, $results[0]['class']);
  78. $expected = 'testSomething';
  79. $this->assertEqual($expected, $results[0]['method']);
  80. $expected = 25;
  81. $this->assertEqual($expected, $results[0]['line']);
  82. }
  83. public function testAssertEqualAssociativeArray() {
  84. $expected = array(
  85. 'expected' => 'array',
  86. 'result' => 'string'
  87. );
  88. $result = array(
  89. 'expected' => 'array',
  90. 'result' => 'string'
  91. );
  92. $this->test->assertEqual($expected, $result);
  93. $expected = 'pass';
  94. $results = $this->test->results();
  95. $this->assertEqual($expected, $results[0]['result']);
  96. }
  97. public function testAssertEqualThreeDFail() {
  98. $expected = array(
  99. array(array(1, 2), array(1, 2)),
  100. array(array(1, 2), array(1, 2))
  101. );
  102. $result = array(
  103. array(array(1, 2), array(1)),
  104. array(array(1, 2), array(1))
  105. );
  106. $this->test->assertEqual($expected, $result);
  107. $results = $this->test->results();
  108. $expected = 'fail';
  109. $this->assertEqual($expected, $results[0]['result']);
  110. $expected = "trace: [0][1][1]\nexpected: 2\nresult: NULL\n";
  111. $expected .= "trace: [1][1][1]\nexpected: 2\nresult: NULL\n";
  112. $this->assertEqual($expected, $results[0]['message']);
  113. $expected = array(
  114. array(
  115. array(
  116. 'trace' => '[0][1][1]',
  117. 'expected' => 2,
  118. 'result' => null
  119. )
  120. ),
  121. array(
  122. array(
  123. 'trace' => '[1][1][1]',
  124. 'expected' => 2,
  125. 'result' => null
  126. )
  127. )
  128. );
  129. $this->assertEqual($expected, $results[0]['data']);
  130. }
  131. public function testAssertWithCustomMessage() {
  132. $expected = false;
  133. $result = true;
  134. $this->test->assertEqual($expected, $result, 'Custom Message Test');
  135. $expected = 'Custom Message Test';
  136. $results = $this->test->results();
  137. $this->assertEqual($expected, $results[0]['message']);
  138. }
  139. public function testSubject() {
  140. $expected = 'lithium\\tests\\mocks\\test\\MockUnit';
  141. $result = $this->test->subject();
  142. $this->assertEqual($expected, $result);
  143. }
  144. public function testRun() {
  145. $file = realpath(LITHIUM_LIBRARY_PATH) . '/lithium/tests/mocks/test/MockUnitTest.php';
  146. $expected = array(
  147. 'result' => 'pass',
  148. 'class' => 'lithium\\tests\\mocks\\test\\MockUnitTest',
  149. 'method' => 'testNothing',
  150. 'message' => "expected: true\nresult: true\n",
  151. 'data' => array('expected' => true, 'result' => true),
  152. 'file' => realpath($file),
  153. 'line' => 14,
  154. 'assertion' => 'assertTrue'
  155. );
  156. $result = $this->test->run();
  157. $this->assertEqual($expected, $result[0]);
  158. }
  159. public function testFail() {
  160. $this->test->fail('Test failed.');
  161. $results = $this->test->results();
  162. $expected = 'fail';
  163. $this->assertEqual($expected, $results[0]['result']);
  164. $expected = 'Test failed.';
  165. $this->assertEqual($expected, $results[0]['message']);
  166. }
  167. public function testAssertNotEqual() {
  168. $expected = true;
  169. $result = true;
  170. $this->test->assertNotEqual($expected, $result);
  171. $results = $this->test->results();
  172. $expected = 'fail';
  173. $this->assertEqual($expected, $results[0]['result']);
  174. }
  175. public function testAssertIdentical() {
  176. $expected = true;
  177. $result = 1;
  178. $this->test->assertIdentical($expected, $result);
  179. $results = $this->test->results();
  180. $expected = 'fail';
  181. $this->assertEqual($expected, $results[0]['result']);
  182. }
  183. public function testAssertIdenticalArray() {
  184. $expected = array('1', '2', '3');
  185. $result = array('1', '3', '4');
  186. $this->test->assertIdentical($expected, $result);
  187. $results = $this->test->results();
  188. $expected = 'fail';
  189. $this->assertEqual($expected, $results[0]['result']);
  190. $expected = "trace: [1]\nexpected: '2'\nresult: '3'\n";
  191. $this->assertEqual($expected, $results[0]['message']);
  192. }
  193. public function testAssertNull() {
  194. $expected = null;
  195. $result = null;
  196. $this->test->assertNull($expected, $result);
  197. $results = $this->test->results();
  198. $expected = 'pass';
  199. $this->assertEqual($expected, $results[0]['result']);
  200. }
  201. public function testAssertNoPattern() {
  202. $expected = '/\s/';
  203. $result = null;
  204. $this->test->assertNoPattern($expected, $result);
  205. $results = $this->test->results();
  206. $expected = 'pass';
  207. $this->assertEqual($expected, $results[0]['result']);
  208. }
  209. public function testAssertPattern() {
  210. $expected = '/\s/';
  211. $result = ' ';
  212. $this->test->assertPattern($expected, $result);
  213. $results = $this->test->results();
  214. $expected = 'pass';
  215. $this->assertEqual($expected, $results[0]['result']);
  216. }
  217. public function testAssertTags() {
  218. $result = '<input id="test">';
  219. $this->test->assertTags($result, array(
  220. 'input' => array('id' => 'test')
  221. ));
  222. $results = $this->test->results();
  223. $expected = 'pass';
  224. $this->assertEqual($expected, $results[0]['result']);
  225. }
  226. public function testAssertTagsNoClosingTag() {
  227. $result = '<span id="test">';
  228. $this->test->assertTags($result, array(
  229. 'span' => array('id' => 'test'), '/span'
  230. ));
  231. $results = $this->test->results();
  232. $expected = 'fail';
  233. $this->assertEqual($expected, $results[0]['result']);
  234. $expected = '- Item #2 / regex #3 failed: Close span tag';
  235. $this->assertEqual($expected, $results[0]['message']);
  236. }
  237. public function testAssertTagsMissingAttribute() {
  238. $result = '<span></span>';
  239. $this->test->assertTags($result, array(
  240. 'span' => array('id' => 'test'), '/span'
  241. ));
  242. $results = $this->test->results();
  243. $expected = 'fail';
  244. $this->assertEqual($expected, $results[0]['result']);
  245. $expected = '- Item #1 / regex #1 failed: Attribute "id" == "test"';
  246. $this->assertEqual($expected, $results[0]['message']);
  247. }
  248. public function testAssertTagsString() {
  249. $result = '<span>ok</span>';
  250. $this->test->assertTags($result, array('<span'));
  251. $results = $this->test->results();
  252. $expected = 'pass';
  253. $this->assertEqual($expected, $results[0]['result']);
  254. }
  255. public function testAssertTagsFailTextEqual() {
  256. $result = '<span>ok</span>';
  257. $this->test->assertTags($result, array('span'));
  258. $results = $this->test->results();
  259. $expected = 'fail';
  260. $this->assertEqual($expected, $results[0]['result']);
  261. $expected = '- Item #1 / regex #0 failed: Text equals "span"';
  262. $this->assertEqual($expected, $results[0]['message']);
  263. }
  264. public function testAssertException() {
  265. $closure = function() {
  266. throw new Exception('Test exception message.');
  267. };
  268. $expected = 'Test exception message.';
  269. $this->test->assertException($expected, $closure);
  270. $results = $this->test->results();
  271. $expected = 'pass';
  272. $this->assertEqual($expected, $results[0]['result']);
  273. $expected = 'Exception';
  274. $this->test->assertException($expected, $closure);
  275. $results = $this->test->results();
  276. $expected = 'pass';
  277. $this->assertEqual($expected, $results[1]['result']);
  278. $expected = '/Test/';
  279. $this->test->assertException($expected, $closure);
  280. $results = $this->test->results();
  281. $expected = 'pass';
  282. $this->assertEqual($expected, $results[2]['result']);
  283. }
  284. public function testAssertExceptionNotThrown() {
  285. $closure = function() {};
  286. $expected = 'Exception';
  287. $this->test->assertException($expected, $closure);
  288. $results = $this->test->results();
  289. $expected = 'fail';
  290. $this->assertEqual($expected, $results[0]['result']);
  291. $expected = 'An exception "Exception" was expected but not thrown.';
  292. $this->assertEqual($expected, $results[0]['message']);
  293. }
  294. public function testAssertExceptionWrongException() {
  295. $closure = function() {
  296. throw new Exception('incorrect');
  297. };
  298. $expected = 'correct';
  299. $this->test->assertException($expected, $closure);
  300. $results = $this->test->results();
  301. $expected = 'fail';
  302. $this->assertEqual($expected, $results[0]['result']);
  303. $expected = 'Exception "correct" was expected. Exception "Exception" ';
  304. $expected .= 'with message "incorrect" was thrown instead.';
  305. $this->assertEqual($expected, $results[0]['message']);
  306. }
  307. public function testIdenticalArrayFail() {
  308. $expected = array('1', '2', '3');
  309. $result = array(1, '2', '3');;
  310. $this->test->assertIdentical($expected, $result);
  311. $results = $this->test->results();
  312. $expected = 'fail';
  313. $this->assertEqual($expected, $results[0]['result']);
  314. $expected = "trace: [0]\nexpected: '(string) 1'\nresult: '(integer) 1'\n";
  315. $this->assertEqual($expected, $results[0]['message']);
  316. }
  317. public function testCleanUp() {
  318. $base = Libraries::get(true, 'resources') . '/tmp/tests';
  319. $this->skipIf(!is_writable($base), "Path `{$base}` is not writable.");
  320. $this->assertTrue(mkdir("{$base}/cleanup_test"));
  321. $this->assertTrue(touch("{$base}/cleanup_test/file"));
  322. $this->assertTrue(touch("{$base}/cleanup_test/.hideme"));
  323. $this->_cleanUp();
  324. $this->assertFalse(file_exists("{$base}/cleanup_test"));
  325. }
  326. public function testCleanUpWithFullPath() {
  327. $base = Libraries::get(true, 'resources') . '/tmp/tests';
  328. $this->skipIf(!is_writable($base), "Path `{$base}` is not writable.");
  329. $this->assertTrue(mkdir("{$base}/cleanup_test"));
  330. $this->assertTrue(touch("{$base}/cleanup_test/file"));
  331. $this->assertTrue(touch("{$base}/cleanup_test/.hideme"));
  332. $this->_cleanUp("{$base}/cleanup_test");
  333. $this->assertTrue(file_exists("{$base}/cleanup_test"));
  334. $this->assertFalse(file_exists("{$base}/cleanup_test/file"));
  335. $this->assertFalse(file_exists("{$base}/cleanup_test/.hideme"));
  336. $this->_cleanUp();
  337. }
  338. public function testCleanUpWithRelativePath() {
  339. $base = Libraries::get(true, 'resources') . '/tmp/tests';
  340. $this->skipIf(!is_writable($base), "Path `{$base}` is not writable.");
  341. $this->assertTrue(mkdir("{$base}/cleanup_test"));
  342. $this->assertTrue(touch("{$base}/cleanup_test/file"));
  343. $this->assertTrue(touch("{$base}/cleanup_test/.hideme"));
  344. $this->_cleanUp("tests/cleanup_test");
  345. $this->assertTrue(file_exists("{$base}/cleanup_test"));
  346. $this->assertFalse(file_exists("{$base}/cleanup_test/file"));
  347. $this->assertFalse(file_exists("{$base}/cleanup_test/.hideme"));
  348. $this->_cleanUp();
  349. }
  350. public function testSkipIf() {
  351. try {
  352. $this->test->skipIf(true, 'skip me');
  353. } catch (Exception $e) {
  354. $result = $e->getMessage();
  355. }
  356. $expected = 'skip me';
  357. $this->assertEqual($expected, $result);
  358. }
  359. public function testExpectException() {
  360. $this->test->expectException('test expected exception');
  361. $results = $this->test->results();
  362. $expected = 'test expected exception';
  363. $result = $this->test->expected();
  364. $this->assertEqual($expected, $result[0]);
  365. }
  366. public function testHandleException() {
  367. $this->test->handleException(new Exception('test handle exception'));
  368. $results = $this->test->results();
  369. $expected = 'test handle exception';
  370. $this->assertEqual($expected, $results[0]['message']);
  371. }
  372. public function testExpectExceptionRegex() {
  373. $this->test->expectException('/test handle exception/');
  374. $this->test->handleException(new Exception('test handle exception'));
  375. $this->assertFalse($this->test->expected());
  376. }
  377. public function testExpectExceptionPostNotThrown() {
  378. $this->test->run(array(
  379. 'methods' => array(
  380. 'prepareTestExpectExceptionNotThrown'
  381. )
  382. ));
  383. $results = $this->test->results();
  384. $message = 'expectException in a method with no exception should result in a failed test.';
  385. $expected = 'fail';
  386. $this->assertEqual($expected, $results[0]['result'], $message);
  387. $expected = 'Expected exception matching `test` uncaught.';
  388. $this->assertEqual($expected, $results[0]['message']);
  389. }
  390. public function testGetTest() {
  391. $expected = __CLASS__;
  392. $result = static::get('lithium\test\Unit');
  393. $this->assertEqual($expected, $result);
  394. }
  395. /**
  396. * With a fresh PHP environment this might throw an exception:
  397. * `strtotime(): It is not safe to rely on the system's timezone settings. You are
  398. * *required* to use the date.timezone setting or the date_default_timezone_set() function.`
  399. * See also http://www.php.net/manual/en/function.date-default-timezone-get.php
  400. */
  401. public function testAssertCookie() {
  402. $expected = array(
  403. 'key' => 'key2.nested', 'value' => 'value1', 'expires' => 'May 04 2010 14:02:36 EST'
  404. );
  405. $this->test->assertCookie($expected);
  406. $results = $this->test->results();
  407. $expected = 'fail';
  408. $this->assertEqual($expected, $results[0]['result']);
  409. $expected = '/not found in headers./';
  410. $this->assertPattern($expected, $results[0]['message']);
  411. }
  412. public function testAssertCookieWithHeaders() {
  413. $headers = array(
  414. 'Set-Cookie: name[key]=value; expires=Tue, 04-May-2010 19:02:36 GMT; path=/',
  415. 'Set-Cookie: name[key1]=value1; expires=Tue, 04-May-2010 19:02:36 GMT; path=/',
  416. 'Set-Cookie: name[key2][nested]=value1; expires=Tue, 04-May-2010 19:02:36 GMT; path=/'
  417. );
  418. $this->test->assertCookie(array('key' => 'key', 'value' => 'value'), $headers);
  419. $this->test->assertCookie(array('key' => 'key1', 'value' => 'value1'), $headers);
  420. $this->test->assertCookie(array('key' => 'key2.nested', 'value' => 'value1'), $headers);
  421. $expected = array(
  422. 'key' => 'key2.nested', 'value' => 'value1', 'expires' => 'May 04 2010 14:02:36 EST'
  423. );
  424. $this->test->assertCookie($expected, $headers);
  425. $results = $this->test->results();
  426. $expected = 'pass';
  427. $this->assertEqual($expected, $results[0]['result']);
  428. $this->assertEqual($expected, $results[1]['result']);
  429. $this->assertEqual($expected, $results[2]['result']);
  430. $this->assertEqual($expected, $results[3]['result']);
  431. }
  432. public function testCompareWithEmptyResult() {
  433. $result = $this->test->compare('equal', array('key' => array('val1', 'val2')), array());
  434. $expected = array(
  435. 'trace' => '[key]',
  436. 'expected' => array('val1', 'val2'),
  437. 'result' => array()
  438. );
  439. $this->assertEqual($expected, $result);
  440. }
  441. public function testExceptionCatching() {
  442. $test = new MockSkipThrowsException();
  443. $test->run();
  444. $expected = 'skip throws exception';
  445. $results = $test->results();
  446. $this->assertEqual($expected, $results[0]['message']);
  447. $test = new MockSetUpThrowsException();
  448. $test->run();
  449. $expected = 'setUp throws exception';
  450. $results = $test->results();
  451. $this->assertEqual($expected, $results[0]['message']);
  452. $test = new MockTearDownThrowsException();
  453. $test->run();
  454. $expected = 'tearDown throws exception';
  455. $results = $test->results();
  456. $this->assertEqual($expected, $results[1]['message']);
  457. }
  458. public function testErrorHandling() {
  459. $test = new MockTestErrorHandling();
  460. $test->run();
  461. $expected = '/Missing argument 1/';
  462. $results = $test->results();
  463. $this->assertPattern($expected, $results[0]['message']);
  464. $expected = '/Unit::_arrayPermute()/';
  465. $this->assertPattern($expected, $results[0]['message']);
  466. }
  467. public function testAssertObjects() {
  468. $expected = (object) array('one' => 'two');
  469. $result = (object) array('one' => 'not-two');
  470. $this->test->assertEqual($expected, $result);
  471. $results = $this->test->results();
  472. $expected = 'fail';
  473. $this->assertEqual($expected, $results[0]['result']);
  474. $expected = 'one';
  475. $this->assertEqual($expected, $results[0]['data']['trace']);
  476. }
  477. public function testAssertArrayIdentical() {
  478. $expected = array('one' => array('one'));
  479. $result = array('one' => array());
  480. $this->test->assertIdentical($expected, $result);
  481. $results = $this->test->results();
  482. $expected = 'fail';
  483. $this->assertEqual($expected, $results[0]['result']);
  484. $expected = '[one]';
  485. $this->assertEqual($expected, $results[0]['data']['trace']);
  486. }
  487. public function testCompareIdenticalArray() {
  488. $expected = array(
  489. 'trace' => null,
  490. 'expected' => array(),
  491. 'result' => array('two', 'values')
  492. );
  493. $result = $this->test->compare('identical', array(), array('two', 'values'));
  494. $this->assertEqual($expected, $result);
  495. }
  496. public function testCompareIdenticalMixedArray() {
  497. $array1 = array(
  498. 'command' => 'test',
  499. 'action' => 'action',
  500. 'args' => array(),
  501. 'long' => 'something',
  502. 'i' => 1
  503. );
  504. $array2 = array(
  505. 'command' => 'test',
  506. 'action' => 'action',
  507. 'long' => 'something',
  508. 'args' => array(),
  509. 'i' => 1
  510. );
  511. $result = $this->test->compare('identical', $array1, $array2);
  512. $expected = array('trace' => null, 'expected' => $array1, 'result' => $array2);
  513. $this->assertEqual($expected, $result);
  514. }
  515. public function testCompareEqualNullArray() {
  516. $expected = array('trace' => null, 'expected' => array(), 'result' => array(null));
  517. $result = $this->test->compare('equal', array(), array(null));
  518. $this->assertEqual($expected, $result);
  519. }
  520. public function testCompareIdenticalNullArray() {
  521. $expected = array('trace' => null, 'expected' => array(), 'result' => array(null));
  522. $result = $this->test->compare('identical', array(), array(null));
  523. $this->assertEqual($expected, $result);
  524. }
  525. public function testResults() {
  526. $this->test->assertTrue(false);
  527. $this->test->assertTrue(false);
  528. $this->test->assertTrue(true);
  529. $this->test->assertTrue(true);
  530. $expected = 4;
  531. $result = count($this->test->results());
  532. $this->assertEqual($expected, $result);
  533. }
  534. public function testTestMethods() {
  535. $expected = array(
  536. 'testNothing', 'testSomething'
  537. );
  538. $result = $this->test->methods();
  539. $this->assertIdentical($expected, $result);
  540. }
  541. public function testAssertCountTrue() {
  542. $this->assertTrue($this->test->assertCount(1, array('foo')));
  543. $results = $this->test->results();
  544. $result = array_pop($results);
  545. $this->assertEqual('pass', $result['result']);
  546. }
  547. public function testAssertCountFalse() {
  548. $this->assertFalse($this->test->assertCount(2, array('foo', 'bar', 'bar')));
  549. $results = $this->test->results();
  550. $result = array_pop($results);
  551. $this->assertEqual('fail', $result['result']);
  552. $this->assertIdentical(array(
  553. 'expected' => 2,
  554. 'result' => 3
  555. ), $result['data']);
  556. }
  557. public function testAssertNotCountTrue() {
  558. $this->assertTrue($this->test->assertNotCount(2, array('foo', 'bar', 'bar')));
  559. $results = $this->test->results();
  560. $result = array_pop($results);
  561. $this->assertEqual('pass', $result['result']);
  562. }
  563. public function testAssertNotCountFalse() {
  564. $this->assertFalse($this->test->assertNotCount(1, array('foo')));
  565. $results = $this->test->results();
  566. $result = array_pop($results);
  567. $this->assertEqual('fail', $result['result']);
  568. $this->assertIdentical(array(
  569. 'expected' => 1,
  570. 'result' => 1
  571. ), $result['data']);
  572. }
  573. public function testArrayHasKeyTrue() {
  574. $this->assertTrue($this->test->assertArrayHasKey('bar', array('bar' => 'baz')));
  575. $results = $this->test->results();
  576. $result = array_pop($results);
  577. $this->assertEqual('pass', $result['result']);
  578. }
  579. public function testArrayHasKeyFalse() {
  580. $this->assertFalse($this->test->assertArrayHasKey('foo', array('bar' => 'baz')));
  581. $results = $this->test->results();
  582. $result = array_pop($results);
  583. $this->assertEqual('fail', $result['result']);
  584. $this->assertIdentical(array(
  585. 'expected' => 'foo',
  586. 'result' => array('bar' => 'baz')
  587. ), $result['data']);
  588. }
  589. public function testArrayNotHasKeyTrue() {
  590. $this->assertTrue($this->test->assertArrayNotHasKey('foo', array('bar' => 'baz')));
  591. $results = $this->test->results();
  592. $result = array_pop($results);
  593. $this->assertEqual('pass', $result['result']);
  594. }
  595. public function testArrayNotHasKeyFalse() {
  596. $this->assertFalse($this->test->assertArrayNotHasKey('bar', array('bar' => 'baz')));
  597. $results = $this->test->results();
  598. $result = array_pop($results);
  599. $this->assertEqual('fail', $result['result']);
  600. $this->assertIdentical(array(
  601. 'expected' => 'bar',
  602. 'result' => array('bar' => 'baz')
  603. ), $result['data']);
  604. }
  605. public function testClassHasAttributeTrue() {
  606. $this->assertTrue($this->test->assertClassHasAttribute('name', '\ReflectionClass'));
  607. $results = $this->test->results();
  608. $result = array_pop($results);
  609. $this->assertEqual('pass', $result['result']);
  610. }
  611. public function testClassHasAttributeFalse() {
  612. $this->assertFalse($this->test->assertClassHasAttribute('foo', '\ReflectionClass'));
  613. $results = $this->test->results();
  614. $result = array_pop($results);
  615. $this->assertEqual('fail', $result['result']);
  616. $this->assertEqual(array(
  617. 'expected' => 'foo',
  618. 'result' => array(
  619. new \ReflectionProperty('ReflectionClass', 'name')
  620. )
  621. ), $result['data']);
  622. }
  623. public function testClassHasAttributeWrongClassType() {
  624. $self =& $this;
  625. $this->assertException('InvalidArgumentException', function() use($self) {
  626. $self->test->assertClassHasAttribute('foo', new \stdClass);
  627. });
  628. }
  629. public function testClassHasAttributeClassNotFound() {
  630. $self =& $this;
  631. $this->assertException('ReflectionException', function() use($self) {
  632. $self->test->assertClassHasAttribute('foo', '\foo\bar\baz');
  633. });
  634. }
  635. public function testClassNotHasAttributeTrue() {
  636. $this->assertTrue($this->test->assertClassNotHasAttribute('foo', '\ReflectionClass'));
  637. $results = $this->test->results();
  638. $result = array_pop($results);
  639. $this->assertEqual('pass', $result['result']);
  640. }
  641. public function testClassNotHasAttributeFalse() {
  642. $this->assertFalse($this->test->assertClassNotHasAttribute('name', '\ReflectionClass'));
  643. $results = $this->test->results();
  644. $result = array_pop($results);
  645. $this->assertEqual('fail', $result['result']);
  646. $this->assertEqual(array(
  647. 'expected' => 'name',
  648. 'result' => array(
  649. new \ReflectionProperty('ReflectionClass', 'name')
  650. )
  651. ), $result['data']);
  652. }
  653. public function testClassNotHasAttributeClassNotFound() {
  654. $self =& $this;
  655. $this->assertException('ReflectionException', function() use($self) {
  656. $self->test->assertClassNotHasAttribute('foo', '\foo\bar\baz');
  657. });
  658. }
  659. public function testClassNotHasAttributeWrongClassType() {
  660. $self =& $this;
  661. $this->assertException('InvalidArgumentException', function() use($self) {
  662. $self->test->assertClassNotHasAttribute('foo', new \stdClass);
  663. });
  664. }
  665. public function testClassHasStaticAttributeTrue() {
  666. $class = '\lithium\core\StaticObject';
  667. $this->assertTrue($this->test->assertClassHasStaticAttribute('_methodFilters', $class));
  668. $results = $this->test->results();
  669. $result = array_pop($results);
  670. $this->assertEqual('pass', $result['result']);
  671. }
  672. public function testClassHasStaticAttributeFalse() {
  673. $class = '\lithium\core\StaticObject';
  674. $this->assertFalse($this->test->assertClassHasStaticAttribute('foobar', $class));
  675. $results = $this->test->results();
  676. $result = array_pop($results);
  677. $this->assertEqual('fail', $result['result']);
  678. $this->assertEqual(array(
  679. 'expected' => 'foobar',
  680. 'result' => array(
  681. new \ReflectionProperty('lithium\\core\\StaticObject', '_methodFilters'),
  682. new \ReflectionProperty('lithium\\core\\StaticObject', '_parents')
  683. )
  684. ), $result['data']);
  685. }
  686. public function testClassHasStaticAttributeClassNotFound() {
  687. $self =& $this;
  688. $this->assertException('ReflectionException', function() use($self) {
  689. $self->test->assertClassHasStaticAttribute('foo', '\foo\bar\baz');
  690. });
  691. }
  692. public function testClassNotHasStaticAttributeTrue() {
  693. $class = '\lithium\core\StaticObject';
  694. $this->assertTrue($this->test->assertClassNotHasStaticAttribute('foobar', $class));
  695. $results = $this->test->results();
  696. $result = array_pop($results);
  697. $this->assertEqual('pass', $result['result']);
  698. }
  699. public function testClassNotHasStaticAttributeFalse() {
  700. $class = '\lithium\core\StaticObject';
  701. $this->assertFalse($this->test->assertClassNotHasStaticAttribute('_methodFilters', $class));
  702. $results = $this->test->results();
  703. $result = array_pop($results);
  704. $this->assertEqual('fail', $result['result']);
  705. $this->assertEqual(array(
  706. 'expected' => '_methodFilters',
  707. 'result' => array(
  708. new \ReflectionProperty('lithium\\core\\StaticObject', '_methodFilters'),
  709. new \ReflectionProperty('lithium\\core\\StaticObject', '_parents')
  710. )
  711. ), $result['data']);
  712. }
  713. public function testClassNotHasStaticAttributeClassNotFound() {
  714. $self =& $this;
  715. $this->assertException('ReflectionException', function() use($self) {
  716. $self->test->assertClassNotHasStaticAttribute('foo', '\foo\bar\baz');
  717. });
  718. }
  719. public function testAssertContainsStringInStrTrue() {
  720. $this->assertTrue($this->test->assertContains('foo', 'foobar'));
  721. $results = $this->test->results();
  722. $result = array_pop($results);
  723. $this->assertEqual('pass', $result['result']);
  724. }
  725. public function testAssertContainsStringInStrFalse() {
  726. $this->assertFalse($this->test->assertContains('baz', 'foobar'));
  727. $results = $this->test->results();
  728. $result = array_pop($results);
  729. $this->assertEqual('fail', $result['result']);
  730. $this->assertEqual(array(
  731. 'expected' => 'baz',
  732. 'result' => 'foobar'
  733. ), $result['data']);
  734. }
  735. public function testAssertContainsTrue() {
  736. $this->assertTrue($this->test->assertContains('bar', array('foo', 'bar', 'baz')));
  737. $results = $this->test->results();
  738. $result = array_pop($results);
  739. $this->assertEqual('pass', $result['result']);
  740. }
  741. public function testAssertContainsFalse() {
  742. $this->assertFalse($this->test->assertContains('foobar', array('foo', 'bar', 'baz')));
  743. $results = $this->test->results();
  744. $result = array_pop($results);
  745. $this->assertEqual('fail', $result['result']);
  746. $this->assertEqual(array(
  747. 'expected' => 'foobar',
  748. 'result' => array(
  749. 'foo', 'bar', 'baz'
  750. )
  751. ), $result['data']);
  752. }
  753. public function testAssertNotContainsStringInStrTrue() {
  754. $this->assertTrue($this->test->assertNotContains('baz', 'foobar'));
  755. $results = $this->test->results();
  756. $result = array_pop($results);
  757. $this->assertEqual('pass', $result['result']);
  758. }
  759. public function testAssertNotContainsStringInStrFalse() {
  760. $this->assertFalse($this->test->assertNotContains('foo', 'foobar'));
  761. $results = $this->test->results();
  762. $result = array_pop($results);
  763. $this->assertEqual('fail', $result['result']);
  764. $this->assertEqual(array(
  765. 'expected' => 'foo',
  766. 'result' => 'foobar'
  767. ), $result['data']);
  768. }
  769. public function testAssertNotContainsTrue() {
  770. $this->assertTrue($this->test->assertNotContains('foobar', array('foo', 'bar', 'baz')));
  771. $results = $this->test->results();
  772. $result = array_pop($results);
  773. $this->assertEqual('pass', $result['result']);
  774. }
  775. public function testAssertNotContainsFalse() {
  776. $this->assertFalse($this->test->assertNotContains('bar', array('foo', 'bar', 'baz')));
  777. $results = $this->test->results();
  778. $result = array_pop($results);
  779. $this->assertEqual('fail', $result['result']);
  780. $this->assertEqual(array(
  781. 'expected' => 'bar',
  782. 'result' => array(
  783. 'foo', 'bar', 'baz'
  784. )
  785. ), $result['data']);
  786. }
  787. public function testAssertContainsOnlyTrue() {
  788. $this->assertTrue($this->test->assertContainsOnly('int', array(1,2,3)));
  789. $results = $this->test->results();
  790. $result = array_pop($results);
  791. $this->assertEqual('pass', $result['result']);
  792. }
  793. public function testAssertContainsOnlyFalse() {
  794. $this->assertFalse($this->test->assertContainsOnly('string', array(1,2,3)));
  795. $results = $this->test->results();
  796. $result = array_pop($results);
  797. $this->assertEqual('fail', $result['result']);
  798. $this->assertEqual(array(
  799. 'expected' => 'string',
  800. 'result' => array(
  801. 1,2,3
  802. )
  803. ), $result['data']);
  804. }
  805. public function testAssertNotContainsOnlyTrue() {
  806. $this->assertTrue($this->test->assertNotContainsOnly('string', array(1,2,3)));
  807. $results = $this->test->results();
  808. $result = array_pop($results);
  809. $this->assertEqual('pass', $result['result']);
  810. }
  811. public function testAssertNotContainsOnlyFalse() {
  812. $this->assertFalse($this->test->assertNotContainsOnly('int', array(1,2,3)));
  813. $results = $this->test->results();
  814. $result = array_pop($results);
  815. $this->assertEqual('fail', $result['result']);
  816. $this->assertEqual(array(
  817. 'expected' => 'int',
  818. 'result' => array(
  819. 1,2,3
  820. )
  821. ), $result['data']);
  822. }
  823. public function testAssertContainsOnlyInstanceOfTrue() {
  824. $obj = new \stdClass;
  825. $this->assertTrue($this->test->assertContainsOnlyInstancesOf('stdClass', array($obj)));
  826. $results = $this->test->results();
  827. $result = array_pop($results);
  828. $this->assertEqual('pass', $result['result']);
  829. }
  830. public function testAssertContainsOnlyInstanceOfFalse() {
  831. $obj = new \lithium\test\Unit;
  832. $this->assertFalse($this->test->assertContainsOnlyInstancesOf('stdClass', array($obj)));
  833. $results = $this->test->results();
  834. $result = array_pop($results);
  835. $this->assertEqual('fail', $result['result']);
  836. $this->assertEqual(array(
  837. 'expected' => 'stdClass',
  838. 'result' => array(
  839. 0 => new \lithium\test\Unit
  840. )
  841. ), $result['data']);
  842. }
  843. public function testAssertEmptyTrue() {
  844. $this->assertTrue($this->test->assertEmpty(array()));
  845. $results = $this->test->results();
  846. $result = array_pop($results);
  847. $this->assertEqual('pass', $result['result']);
  848. }
  849. public function testAssertEmptyFalse() {
  850. $this->assertFalse($this->test->assertEmpty(array(1)));
  851. $results = $this->test->results();
  852. $result = array_pop($results);
  853. $this->assertEqual('fail', $result['result']);
  854. $this->assertEqual(array(
  855. 'expected' => array(1),
  856. 'result' => false
  857. ), $result['data']);
  858. }
  859. public function testAssertNotEmptyTrue() {
  860. $this->assertTrue($this->test->assertNotEmpty(array(1)));
  861. $results = $this->test->results();
  862. $result = array_pop($results);
  863. $this->assertEqual('pass', $result['result']);
  864. }
  865. public function testAssertNotEmptyFalse() {
  866. $this->assertFalse($this->test->assertNotEmpty(array()));
  867. $results = $this->test->results();
  868. $result = array_pop($results);
  869. $this->assertEqual('fail', $result['result']);
  870. $this->assertEqual(array(
  871. 'expected' => array(),
  872. 'result' => false
  873. ), $result['data']);
  874. }
  875. public function testAssertFileEqualsTrue() {
  876. $file1 = __DIR__ . '/UnitTest.php';
  877. $file2 = __DIR__ . '/UnitTest.php';
  878. $this->assertTrue($this->test->assertFileEquals($file1, $file2));
  879. }
  880. public function testAssertFileEqualsFalse() {
  881. $file1 = __DIR__ . '/UnitTest.php';
  882. $file2 = __DIR__ . '/ReportTest.php';
  883. $this->assertFalse($this->test->assertFileEquals($file1, $file2));
  884. $results = $this->test->results();
  885. $result = array_pop($results);
  886. $this->assertEqual('fail', $result['result']);
  887. $this->assertEqual(array(
  888. 'expected' => md5_file($file1),
  889. 'result' => md5_file($file2)
  890. ), $result['data']);
  891. }
  892. public function testAssertFileNotEqualsTrue() {
  893. $file1 = __DIR__ . '/UnitTest.php';
  894. $file2 = __DIR__ . '/ReportTest.php';
  895. $this->assertTrue($this->test->assertFileNotEquals($file1, $file2));
  896. $results = $this->test->results();
  897. $result = array_pop($results);
  898. $this->assertEqual('pass', $result['result']);
  899. }
  900. public function testAssertFileNotEqualsFalse() {
  901. $file1 = __DIR__ . '/UnitTest.php';
  902. $file2 = __DIR__ . '/UnitTest.php';
  903. $this->assertFalse($this->test->assertFileNotEquals($file1, $file2));
  904. $results = $this->test->results();
  905. $result = array_pop($results);
  906. $this->assertEqual('fail', $result['result']);
  907. $this->assertEqual(array(
  908. 'expected' => md5_file($file1),
  909. 'result' => md5_file($file2)
  910. ), $result['data']);
  911. }
  912. public function testAssertFileExistsTrue() {
  913. $file1 = __FILE__;
  914. $this->assertTrue($this->test->assertFileExists($file1));
  915. $results = $this->test->results();
  916. $result = array_pop($results);
  917. $this->assertEqual('pass', $result['result']);
  918. }
  919. public function testAssertFileExistsFalse() {
  920. $file1 = __DIR__ . '/does/not/exist.txt';
  921. $this->assertFalse($this->test->assertFileExists($file1));
  922. $results = $this->test->results();
  923. $result = array_pop($results);
  924. $this->assertEqual('fail', $result['result']);
  925. $this->assertEqual(array(
  926. 'expected' => __DIR__ . '/does/not/exist.txt',
  927. 'result' => false
  928. ), $result['data']);
  929. }
  930. public function testAssertFileNotExistsTrue() {
  931. $file1 = __DIR__ . '/does/not/exist.txt';
  932. $this->assertTrue($this->test->assertFileNotExists($file1));
  933. $results = $this->test->results();
  934. $result = array_pop($results);
  935. $this->assertEqual('pass', $result['result']);
  936. }
  937. public function testAssertFileNotExistsFalse() {
  938. $file1 = __FILE__;
  939. $this->assertFalse($this->test->assertFileNotExists($file1));
  940. $results = $this->test->results();
  941. $result = array_pop($results);
  942. $this->assertEqual('fail', $result['result']);
  943. $this->assertEqual(array(
  944. 'expected' => __FILE__,
  945. 'result' => false
  946. ), $result['data']);
  947. }
  948. public function testAssertGreaterThanTrue() {
  949. $this->assertTrue($this->test->assertGreaterThan(5, 3));
  950. $results = $this->test->results();
  951. $result = array_pop($results);
  952. $this->assertEqual('pass', $result['result']);
  953. }
  954. public function testAssertGreaterThanFalse() {
  955. $this->assertFalse($this->test->assertGreaterThan(3, 5));
  956. $results = $this->test->results();
  957. $result = array_pop($results);
  958. $this->assertEqual('fail', $result['result']);
  959. $this->assertEqual(array(
  960. 'expected' => 3,
  961. 'result' => 5
  962. ), $result['data']);
  963. }
  964. public function testAssertGreaterThanOrEqualTrue() {
  965. $this->assertTrue($this->test->assertGreaterThanOrEqual(5, 5));
  966. $results = $this->test->results();
  967. $result = array_pop($results);
  968. $this->assertEqual('pass', $result['result']);
  969. }
  970. public function testAssertGreaterThanOrEqualFalse() {
  971. $this->assertFalse($this->test->assertGreaterThanOrEqual(3, 5));
  972. $results = $this->test->results();
  973. $result = array_pop($results);
  974. $this->assertEqual('fail', $result['result']);
  975. $this->assertEqual(array(
  976. 'expected' => 3,
  977. 'result' => 5
  978. ), $result['data']);
  979. }
  980. public function testAssertLessThanTrue() {
  981. $this->assertTrue($this->test->assertLessThan(3, 5));
  982. $results = $this->test->results();
  983. $result = array_pop($results);
  984. $this->assertEqual('pass', $result['result']);
  985. }
  986. public function testAssertLessThanFalse() {
  987. $this->assertFalse($this->test->assertLessThan(5, 3));
  988. $results = $this->test->results();
  989. $result = array_pop($results);
  990. $this->assertEqual('fail', $result['result']);
  991. $this->assertEqual(array(
  992. 'expected' => 5,
  993. 'result' => 3
  994. ), $result['data']);
  995. }
  996. public function testAssertLessThanOrEqualTrue() {
  997. $this->assertTrue($this->test->assertLessThanOrEqual(5, 5));
  998. $results = $this->test->results();
  999. $result = array_pop($results);
  1000. $this->assertEqual('pass', $result['result']);
  1001. }
  1002. public function testAssertLessThanOrEqualFalse() {
  1003. $this->assertFalse($this->test->assertLessThanOrEqual(5, 3));
  1004. $results = $this->test->results();
  1005. $result = array_pop($results);
  1006. $this->assertEqual('fail', $result['result']);
  1007. $this->assertEqual(array(
  1008. 'expected' => 5,
  1009. 'result' => 3
  1010. ), $result['data']);
  1011. }
  1012. public function testAssertInstanceOfTrue() {
  1013. $this->assertTrue($this->test->assertInstanceOf('\stdClass', new \stdClass));
  1014. $results = $this->test->results();
  1015. $result = array_pop($results);
  1016. $this->assertEqual('pass', $result['result']);
  1017. }
  1018. public function testAssertInstanceOfFalse() {
  1019. $this->assertFalse($this->test->assertInstanceOf('\ReflectionClass', new \stdClass));
  1020. $results = $this->test->results();
  1021. $result = array_pop($results);
  1022. $this->assertEqual('fail', $result['result']);
  1023. $this->assertEqual(array(
  1024. 'expected' => '\ReflectionClass',
  1025. 'result' => 'stdClass'
  1026. ), $result['data']);
  1027. }
  1028. public function testAssertNotInstanceOfTrue() {
  1029. $this->assertTrue($this->test->assertNotInstanceOf('\ReflectionClass', new \stdClass));
  1030. $results = $this->test->results();
  1031. $result = array_pop($results);
  1032. $this->assertEqual('pass', $result['result']);
  1033. }
  1034. public function testAssertNotInstanceOfFalse() {
  1035. $this->assertFalse($this->test->assertNotInstanceOf('\stdClass', new \stdClass));
  1036. $results = $this->test->results();
  1037. $result = array_pop($results);
  1038. $this->assertEqual('fail', $result['result']);
  1039. $this->assertEqual(array(
  1040. 'expected' => '\stdClass',
  1041. 'result' => 'stdClass'
  1042. ), $result['data']);
  1043. }
  1044. public function testAssertInternalTypeTrue() {
  1045. $this->assertTrue($this->test->assertInternalType('string', 'foobar'));
  1046. $results = $this->test->results();
  1047. $result = array_pop($results);
  1048. $this->assertEqual('pass', $result['result']);
  1049. }
  1050. public function testAssertInternalTypeFalse() {
  1051. $this->assertFalse($this->test->assertInternalType('int', 'foobar'));
  1052. $results = $this->test->results();
  1053. $result = array_pop($results);
  1054. $this->assertEqual('fail', $result['result']);
  1055. $this->assertEqual(array(
  1056. 'expected' => 'int',
  1057. 'result' => 'string'
  1058. ), $result['data']);
  1059. }
  1060. public function testAssertNotInternalTypeTrue() {
  1061. $this->assertTrue($this->test->assertNotInternalType('int', 'foobar'));
  1062. $results = $this->test->results();
  1063. $result = array_pop($results);
  1064. $this->assertEqual('pass', $result['result']);
  1065. }
  1066. public function testAssertNotInternalTypeFalse() {
  1067. $this->assertFalse($this->test->assertNotInternalType('string', 'foobar'));
  1068. $results = $this->test->results();
  1069. $result = array_pop($results);
  1070. $this->assertEqual('fail', $result['result']);
  1071. $this->assertEqual(array(
  1072. 'expected' => 'string',
  1073. 'result' => 'string'
  1074. ), $result['data']);
  1075. }
  1076. public function testAssertNotNullTrue() {
  1077. $this->assertTrue($this->test->assertNotNull(1));
  1078. $results = $this->test->results();
  1079. $result = array_pop($results);
  1080. $this->assertEqual('pass', $result['result']);
  1081. }
  1082. public function testAssertNotNullFalse() {
  1083. $this->assertFalse($this->test->assertNotNull(null));
  1084. $results = $this->test->results();
  1085. $result = array_pop($results);
  1086. $this->assertEqual('fail', $result['result']);
  1087. $this->assertEqual(array(
  1088. 'expected' => NULL,
  1089. 'actual' => 'NULL',
  1090. ), $result['data']);
  1091. }
  1092. public function testObjectHasAttributeTrue() {
  1093. $obj = new \ReflectionClass(new \stdClass);
  1094. $this->assertTrue($this->test->assertObjectHasAttribute('name', $obj));
  1095. $results = $this->test->results();
  1096. $result = array_pop($results);
  1097. $this->assertEqual('pass', $result['result']);
  1098. }
  1099. public function testObjectHasAttributeFalse() {
  1100. $obj = new \ReflectionClass(new \stdClass);
  1101. $this->assertFalse($this->test->assertObjectHasAttribute('foo', $obj));
  1102. $results = $this->test->results();
  1103. $result = array_pop($results);
  1104. $this->assertEqual('fail', $result['result']);
  1105. $this->assertEqual(array(
  1106. 'expected' => 'foo',
  1107. 'result' => array(
  1108. new \ReflectionProperty('ReflectionClass', 'name')
  1109. )
  1110. ), $result['data']);
  1111. }
  1112. public function testObjectHasAttributeWrongClassType() {
  1113. $self =& $this;
  1114. $this->assertException('InvalidArgumentException', function() use($self) {
  1115. $self->test->assertObjectHasAttribute('foo', '\stdClass');
  1116. });
  1117. }
  1118. public function testObjectNotHasAttributeTrue() {
  1119. $obj = new \ReflectionClass(new \stdClass);
  1120. $this->assertTrue($this->test->assertObjectNotHasAttribute('foo', $obj));
  1121. $results = $this->test->results();
  1122. $result = array_pop($results);
  1123. $this->assertEqual('pass', $result['result']);
  1124. }
  1125. public function testObjectNotHasAttributeFalse() {
  1126. $obj = new \ReflectionClass(new \stdClass);
  1127. $this->assertFalse($this->test->assertObjectNotHasAttribute('name', $obj));
  1128. $results = $this->test->results();
  1129. $result = array_pop($results);
  1130. $this->assertEqual('fail', $result['result']);
  1131. $this->assertEqual(array(
  1132. 'expected' => 'name',
  1133. 'result' => array(
  1134. new \ReflectionProperty('ReflectionClass', 'name')
  1135. )
  1136. ), $result['data']);
  1137. }
  1138. public function testObjectNotHasAttributeWrongClassType() {
  1139. $self =& $this;
  1140. $this->assertException('InvalidArgumentException', function() use($self) {
  1141. $self->test->assertObjectNotHasAttribute('foo', 'new \stdClass');
  1142. });
  1143. }
  1144. public function testAssertRegExpTrue() {
  1145. $this->assertTrue($this->test->assertRegExp('/^foo/', 'foobar'));
  1146. $results = $this->test->results();
  1147. $result = array_pop($results);
  1148. $this->assertEqual('pass', $result['result']);
  1149. }
  1150. public function testAssertRegExpFalse() {
  1151. $this->assertFalse($this->test->assertRegExp('/^bar/', 'foobar'));
  1152. $results = $this->test->results();
  1153. $result = array_pop($results);
  1154. $this->assertEqual('fail', $result['result']);
  1155. $this->assertEqual(array(
  1156. 'expected' => '/^bar/',
  1157. 'result' => array()
  1158. ), $result['data']);
  1159. }
  1160. public function testAssertNotRegExpTrue() {
  1161. $this->assertTrue($this->test->assertNotRegExp('/^bar/', 'foobar'));
  1162. $results = $this->test->results();
  1163. $result = array_pop($results);
  1164. $this->assertEqual('pass', $result['result']);
  1165. }
  1166. public function testAssertNotRegExpFalse() {
  1167. $this->assertFalse($this->test->assertNotRegExp('/^foo/', 'foobar'));
  1168. $results = $this->test->results();
  1169. $result = array_pop($results);
  1170. $this->assertEqual('fail', $result['result']);
  1171. $this->assertEqual(array(
  1172. 'expected' => '/^foo/',
  1173. 'result' => array('foo')
  1174. ), $result['data']);
  1175. }
  1176. public function testAssertStringMatchesFormatTrue() {
  1177. $this->assertTrue($this->test->assertStringMatchesFormat('%d', '10'));
  1178. $results = $this->test->results();
  1179. $result = array_pop($results);
  1180. $this->assertEqual('pass', $result['result']);
  1181. }
  1182. public function testAssertStringMatchesFormatFalse() {
  1183. $this->assertFalse($this->test->assertStringMatchesFormat('%d', '10.555'));
  1184. $results = $this->test->results();
  1185. $result = array_pop($results);
  1186. $this->assertEqual('fail', $result['result']);
  1187. $this->assertEqual(array(
  1188. 'expected' => '%d',
  1189. 'result' => array('10')
  1190. ), $result['data']);
  1191. }
  1192. public function testAssertStringNotMatchesFormatTrue() {
  1193. $this->assertTrue($this->test->assertStringNotMatchesFormat('%d', '10.555'));
  1194. $results = $this->test->results();
  1195. $result = array_pop($results);
  1196. $this->assertEqual('pass', $result['result']);
  1197. }
  1198. public function testAssertStringNotMatchesFormatFalse() {
  1199. $this->assertFalse($this->test->assertStringNotMatchesFormat('%d', '10'));
  1200. $results = $this->test->results();
  1201. $result = array_pop($results);
  1202. $this->assertEqual('fail', $result['result']);
  1203. $this->assertEqual(array(
  1204. 'expected' => '%d',
  1205. 'result' => array('10')
  1206. ), $result['data']);
  1207. }
  1208. public function testAssertStringEndsWithTrue() {
  1209. $this->assertTrue($this->test->assertStringEndsWith('bar', 'foobar'));
  1210. $results = $this->test->results();
  1211. $result = array_pop($results);
  1212. $this->assertEqual('pass', $result['result']);
  1213. }
  1214. public function testAssertStringEndsWithFalse() {
  1215. $this->assertFalse($this->test->assertStringEndsWith('foo', 'foobar'));
  1216. $results = $this->test->results();
  1217. $result = array_pop($results);
  1218. $this->assertEqual('fail', $result['result']);
  1219. $this->assertEqual(array(
  1220. 'expected' => 'foo',
  1221. 'result' => 'foobar'
  1222. ), $result['data']);
  1223. }
  1224. public function testAssertStringStartsWithTrue() {
  1225. $this->assertTrue($this->test->assertStringStartsWith('foo', 'foobar'));
  1226. $results = $this->test->results();
  1227. $result = array_pop($results);
  1228. $this->assertEqual('pass', $result['result']);
  1229. }
  1230. public function testAssertStringStartsWithFalse() {
  1231. $this->assertFalse($this->test->assertStringStartsWith('bar', 'foobar'));
  1232. $results = $this->test->results();
  1233. $result = array_pop($results);
  1234. $this->assertEqual('fail', $result['result']);
  1235. $this->assertEqual(array(
  1236. 'expected' => 'bar',
  1237. 'result' => 'foobar'
  1238. ), $result['data']);
  1239. }
  1240. }
  1241. ?>