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

/php-pear-PEAR-Command-Packaging-0.3.0/PEAR_Command_Packaging-0.3.0/tests/phpt_test.php.inc

#
PHP | 414 lines | 409 code | 5 blank | 0 comment | 7 complexity | 9787284ae6c2483f6e9a242d0e0396d1 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception
  1. <?php
  2. @include_once 'Text/Diff.php';
  3. @include_once 'Text/Diff/Renderer.php';
  4. @include_once 'Text/Diff/Renderer/unified.php';
  5. require_once 'PEAR/ErrorStack.php';
  6. require_once 'PEAR.php';
  7. class PEAR_PHPTest
  8. {
  9. var $_diffonly;
  10. var $_errors;
  11. function PEAR_PHPTest($diffonly = false, $noStackCatch = false)
  12. {
  13. $this->_diffonly = $diffonly;
  14. $this->_errors = array();
  15. PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($this, 'pearerrorCallback'));
  16. if (!$noStackCatch) {
  17. PEAR_ErrorStack::setDefaultCallback(array($this, 'pearerrorstackCallback'));
  18. }
  19. }
  20. function pearerrorCallback($err)
  21. {
  22. PEAR_ErrorStack::staticPush('PEAR_Error', -1, 'error', array('obj' => $err),
  23. $err->getMessage());
  24. }
  25. function pearerrorstackCallback($err)
  26. {
  27. $this->_errors[] = $err;
  28. }
  29. function assertPEARError($err, $message)
  30. {
  31. if (is_a($err, 'PEAR_Error')) {
  32. return true;
  33. }
  34. $this->_failTest(debug_backtrace(), $message);
  35. echo "Not a PEAR_Error\n";
  36. return false;
  37. }
  38. function assertNoErrors($message, $trace = null)
  39. {
  40. if (count($this->_errors) == 0) {
  41. return true;
  42. }
  43. if ($trace === null) {
  44. $trace = debug_backtrace();
  45. }
  46. $this->_failTest($trace, $message);
  47. foreach ($this->_errors as $err) {
  48. if ($err['package'] == 'PEAR_Error') {
  49. echo "Unexpected PEAR_Error:\n";
  50. echo 'message "' . $err['message'] . "\"\n";
  51. } else {
  52. echo "Unexpected PEAR_ErrorStack error:\n";
  53. echo 'package "' . $err['package'] . "\"\n";
  54. echo 'message "' . $err['message'] . "\"\n";
  55. }
  56. }
  57. $this->_errors = array();
  58. return false;
  59. }
  60. function assertErrors($errors, $message, $trace = null)
  61. {
  62. if (!count($this->_errors)) {
  63. if ($trace === null) {
  64. $trace = debug_backtrace();
  65. }
  66. $this->_failTest($trace, $message);
  67. echo "No errors caught, but errors were expected\n";
  68. return false;
  69. }
  70. if (!isset($errors[0])) {
  71. $errors = array($errors);
  72. }
  73. $failed = false;
  74. foreach ($errors as $err) {
  75. $found = false;
  76. foreach ($this->_errors as $i => $caughterror) {
  77. if ($caughterror['package'] == $err['package']) {
  78. if ($caughterror['message'] == $err['message']) {
  79. $found = true;
  80. break;
  81. }
  82. }
  83. }
  84. if ($found) {
  85. unset($this->_errors[$i]);
  86. continue;
  87. }
  88. if (!$failed) {
  89. if ($trace === null) {
  90. $trace = debug_backtrace();
  91. }
  92. $failed = true;
  93. $this->_failTest($trace, $message);
  94. }
  95. echo "Unthrown error:\n";
  96. if ($err['package'] == 'PEAR_Error') {
  97. echo "PEAR_Error:\n";
  98. } else {
  99. echo "error package: \"$err[package]\"\n";
  100. }
  101. echo "message: \"$err[message]\"\n";
  102. }
  103. if (count($this->_errors)) {
  104. if (!$failed) {
  105. if ($trace === null) {
  106. $trace = debug_backtrace();
  107. }
  108. $failed = true;
  109. $this->_failTest($trace, $message);
  110. }
  111. foreach ($this->_errors as $err) {
  112. echo "Unexpected error:\n";
  113. if ($err['package'] == 'PEAR_Error') {
  114. echo "PEAR_Error:\n";
  115. } else {
  116. echo "error package: \"$err[package]\"\n";
  117. }
  118. echo "message: \"$err[message]\"\n";
  119. }
  120. }
  121. $this->_errors = array();
  122. return !$failed;
  123. }
  124. function assertTrue($test, $message)
  125. {
  126. $this->assertNoErrors($message, debug_backtrace());
  127. if ($test === true) {
  128. return true;
  129. }
  130. $this->_failTest(debug_backtrace(), $message);
  131. echo "Unexpected non-true value: \n";
  132. var_export($test);
  133. echo "\n'$message'\n";
  134. return false;
  135. }
  136. function assertIsa($control, $test, $message)
  137. {
  138. $this->assertNoErrors($message, debug_backtrace());
  139. if (is_a($test, $control)) {
  140. return true;
  141. }
  142. $this->_failTest(debug_backtrace(), $message);
  143. echo "Unexpected non-$control object: \n";
  144. var_export($test);
  145. echo "\n'$message'\n";
  146. return false;
  147. }
  148. function assertNull($test, $message)
  149. {
  150. $this->assertNoErrors($message, debug_backtrace());
  151. if ($test === null) {
  152. return true;
  153. }
  154. $this->_failTest(debug_backtrace(), $message);
  155. echo "Unexpected non-null value: \n";
  156. var_export($test);
  157. echo "\n'$message'\n";
  158. return false;
  159. }
  160. function assertNotNull($test, $message)
  161. {
  162. $this->assertNoErrors($message, debug_backtrace());
  163. if ($test !== null) {
  164. return true;
  165. }
  166. $this->_failTest(debug_backtrace(), $message);
  167. echo "Unexpected null: \n";
  168. var_export($test);
  169. echo "\n'$message'\n";
  170. return false;
  171. }
  172. function assertSame($test, $test1, $message)
  173. {
  174. $this->assertNoErrors($message, debug_backtrace());
  175. if ($test === $test1) {
  176. return true;
  177. }
  178. $this->_failTest(debug_backtrace(), $message);
  179. echo "Unexpectedly two vars are not the same thing: \n";
  180. echo "\n'$message'\n";
  181. return false;
  182. }
  183. function assertNotSame($test, $test1, $message)
  184. {
  185. $this->assertNoErrors($message, debug_backtrace());
  186. if ($test !== $test1) {
  187. return true;
  188. }
  189. $this->_failTest(debug_backtrace(), $message);
  190. echo "Unexpectedly two vars are the same thing: \n";
  191. echo "\n'$message'\n";
  192. return false;
  193. }
  194. function assertFalse($test, $message)
  195. {
  196. $this->assertNoErrors($message, debug_backtrace());
  197. if ($test === false) {
  198. return true;
  199. }
  200. $this->_failTest(debug_backtrace(), $message);
  201. echo "Unexpected non-false value: \n";
  202. var_export($test);
  203. echo "\n'$message'\n";
  204. return false;
  205. }
  206. function assertNotTrue($test, $message)
  207. {
  208. $this->assertNoErrors($message, debug_backtrace());
  209. if (!$test) {
  210. return true;
  211. }
  212. $this->_failTest(debug_backtrace(), $message);
  213. echo "Unexpected loose true value: \n";
  214. var_export($test);
  215. echo "\n'$message'\n";
  216. return false;
  217. }
  218. function assertNotFalse($test, $message)
  219. {
  220. $this->assertNoErrors($message, debug_backtrace());
  221. if ($test) {
  222. return true;
  223. }
  224. $this->_failTest(debug_backtrace(), $message);
  225. echo "Unexpected loose false value: \n";
  226. var_export($test);
  227. echo "\n'$message'\n";
  228. return false;
  229. }
  230. function assertEquals($control, $test, $message)
  231. {
  232. $this->assertNoErrors($message, debug_backtrace());
  233. if (str_replace(array("\r", "\n"), array('', ''),
  234. var_export($control, true)) != str_replace(array("\r", "\n"), array('', ''),
  235. var_export($test, true))) {
  236. $this->_failTest(debug_backtrace(), $message);
  237. if (class_exists('Text_Diff')) {
  238. echo "Diff of expecting/received:\n";
  239. $diff = new Text_Diff(
  240. explode("\n", var_export($control, true)),
  241. explode("\n", var_export($test, true)));
  242. // Output the diff in unified format.
  243. $renderer = new Text_Diff_Renderer_unified();
  244. echo $renderer->render($diff);
  245. if ($this->_diffonly) {
  246. return false;
  247. }
  248. }
  249. echo "Expecting:\n";
  250. var_export($control);
  251. echo "\nReceived:\n";
  252. var_export($test);
  253. echo "\n";
  254. return false;
  255. }
  256. return true;
  257. }
  258. function assertFileExists($fname, $message)
  259. {
  260. $this->assertNoErrors($message, debug_backtrace());
  261. if (!@file_exists($fname)) {
  262. $this->_failTest(debug_backtrace(), $message);
  263. echo "File '$fname' does not exist, and should\n";
  264. return false;
  265. }
  266. return true;
  267. }
  268. function assertFileNotExists($fname, $message)
  269. {
  270. $this->assertNoErrors($message, debug_backtrace());
  271. if (@file_exists($fname)) {
  272. $this->_failTest(debug_backtrace(), $message);
  273. echo "File '$fname' exists, and should not\n";
  274. return false;
  275. }
  276. return true;
  277. }
  278. function assertRegEquals($dump, $reg, $message)
  279. {
  280. $actualdump = var_export(trim($this->dumpReg($reg)), true);
  281. $testdump = var_export(trim($dump), true);
  282. return $this->assertEquals($testdump, $actualdump, $message);
  283. }
  284. function assertPackageInfoEquals($control, $test, $message)
  285. {
  286. $this->assertNoErrors($message, debug_backtrace());
  287. if (isset($control[0])) {
  288. if (!isset($test[0]) || (count($control) != count($test))) {
  289. echo "Invalid packageInfo\n";
  290. $ret = $this->assertEquals($control, $test, $message);
  291. }
  292. $ret = true;
  293. foreach ($control as $i => $packageinfo) {
  294. $ret = $ret &&
  295. $this->assertPackageInfoEquals($packageinfo, $test[$i], $message . $i);
  296. }
  297. return $ret;
  298. }
  299. if (isset($control['_lastmodified'])) {
  300. if (!isset($test['_lastmodified'])) {
  301. echo "_lastmodified is not set in packageInfo() output\n";
  302. $this->_failTest(debug_backtrace(), $message);
  303. return false;
  304. }
  305. }
  306. $savecontrol = $control;
  307. $savetest = $test;
  308. unset($control['_lastmodified']);
  309. unset($test['_lastmodified']);
  310. if (var_export($control, true) != var_export($test, true)) {
  311. $this->_failTest(debug_backtrace(), $message);
  312. if (class_exists('Text_Diff')) {
  313. echo "Diff of expecting/received:\n";
  314. $diff = new Text_Diff(
  315. explode("\n", var_export($control, true)),
  316. explode("\n", var_export($test, true)));
  317. // Output the diff in unified format.
  318. $renderer = new Text_Diff_Renderer_unified();
  319. echo $renderer->render($diff);
  320. if ($this->_diffonly) {
  321. return false;
  322. }
  323. }
  324. echo "Expecting:\n";
  325. var_export($savecontrol);
  326. echo "\nReceived:\n";
  327. var_export($savetest);
  328. return false;
  329. }
  330. return true;
  331. }
  332. function _sortRegEntries($a, $b)
  333. {
  334. return strnatcasecmp($a['name'], $b['name']);
  335. }
  336. function dumpReg($reg)
  337. {
  338. ob_start();
  339. print "dumping registry...\n";
  340. $infos = $reg->packageInfo(null, null, null);
  341. ksort($infos);
  342. foreach ($infos as $channel => $info) {
  343. echo "channel $channel:\n";
  344. usort($info, array($this, '_sortRegEntries'));
  345. foreach ($info as $pkg) {
  346. print $pkg["name"] . ":";
  347. unset($pkg["name"]);
  348. foreach ($pkg as $k => $v) {
  349. if ($k == '_lastmodified') {
  350. print " _lastmodified is set";
  351. continue;
  352. }
  353. if (is_array($v) && $k == 'filelist') {
  354. print " $k=array(";
  355. $i = 0;
  356. foreach ($v as $k2 => $v2) {
  357. if ($i++ > 0) print ",";
  358. print "{$k2}[";
  359. $j = 0;
  360. foreach ($v2 as $k3 => $v3) {
  361. if ($j++ > 0) print ",";
  362. print "$k3=$v3";
  363. }
  364. print "]";
  365. }
  366. print ")";
  367. } else {
  368. print " $k=\"$v\"";
  369. }
  370. }
  371. print "\n";
  372. }
  373. }
  374. print "dump done\n";
  375. $ret = ob_get_contents();
  376. ob_end_clean();
  377. return $ret;
  378. }
  379. function _failTest($trace, $message)
  380. {
  381. echo 'Test Failure: "' . $message . "\"\n in " . $trace[0]['file'] . ' line ' .
  382. $trace[0]['line'] . "\n";
  383. }
  384. function showAll()
  385. {
  386. $this->_diffonly = false;
  387. }
  388. }
  389. ?>