summaryrefslogtreecommitdiff
path: root/test/it_error.t
blob: 46f04d3fac3accc5ef2cc244973feda45b7f5e77 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/www/server/bin/php
<?php
# TESTFLAGS SLOW

it::$error_context = fn() => ['blockmail' => 0, 'to' => "mueller", 'toscreen' => 1];
$GLOBALS['debug_verboseerrors'] = 1;

if ($argv[1])
	foo($argv[1]);
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
	}
}