#!/www/server/bin/php ['blockmail' => 0, 'to' => "mueller", 'toscreen' => 1]; $GLOBALS['debug_verboseerrors'] = 1; if ($opts['args'][0]) foo($opts['args'][0]); else { foreach (range(1, 12) as $testnum) { $errlines = explode("\n", it::exec('{cmd} {testnum} |& cat', ['cmd' => $argv[0], 'testnum' => $testnum])); $expect = $expect = it::match('Expect: (.*)', $errlines[0]); $errbody = join("\n", array_slice($errlines, 1)); $trace = $trace = it::match('Trace: *(\S*)', $errbody); $stack = $stack = it::match('Stack:\n\s*(\S*)', $errbody); if ($trace) is($trace, $expect, "testcase $testnum: correct single line trace on $expect"); if ($stack) is($stack, $expect, "testcase $testnum: correct multi line trace on $expect"); } } function expect() { $frames = debug_backtrace(); echo "Expect: " . basename($frames[0]['file']) . ":" . $frames[0]['line'] . "\n"; } function foo($testno) { $a = "hi"; switch ($testno) { case 1: expect(); echo "Trace: " . it_debug::backtrace() . "\n\n"; exit; case 2: expect(); echo "Stack:\n" . it_debug::backtrace(['format' => "medium"]); exit; case 3: expect(); it::error(['title' => "bad"]); exit; case 4: expect(); it::fatal(['title' => "bad"]); exit; case 5: expect(); array_keys($testno); exit; # exception case 6: expect(); intval(); exit; # exception case 7: expect(); $b = "hi" + 2; exit; # exception case 8: expect(); $b = 1 / 0; exit; # exception case 9: expect(); $a["bbb"] = 5; exit; # exception case 10: expect(); $b = new $dummy; exit; # exception case 11: expect(); filemtime("/foobar"); exit; # error case 12: expect(); $b = $a["13th"]; exit; # error } }