From bd4392574a36a01a464ed8a12b5c955883d536ee Mon Sep 17 00:00:00 2001
From: Urban Müller
Date: Wed, 16 Aug 2023 15:38:10 +0200
Subject: recursive test script for it::error stackdumps

---
 test/it_error.t | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)
 create mode 100755 test/it_error.t

(limited to 'test')

diff --git a/test/it_error.t b/test/it_error.t
new file mode 100755
index 0000000..522d253
--- /dev/null
+++ b/test/it_error.t
@@ -0,0 +1,51 @@
+#!/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, 10) 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(); filemtime("/foobar"); exit; # error
+		case 11: expect(); $b = $a["13th"]; exit;      # error
+	}
+}
-- 
cgit v1.2.3