annotate vendor/pear/archive_tar/tests/phpt_test.php.inc @ 19:fa3358dc1485 tip

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