aboutsummaryrefslogtreecommitdiff
path: root/tests/error.test
diff options
context:
space:
mode:
Diffstat (limited to 'tests/error.test')
-rw-r--r--tests/error.test53
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/error.test b/tests/error.test
new file mode 100644
index 0000000..0bcd0da
--- /dev/null
+++ b/tests/error.test
@@ -0,0 +1,53 @@
+package require testing
+
+proc a {} {
+ error "error thrown from a"
+}
+
+proc b {} {
+ set rc [catch {a} msg]
+ if {$rc} {
+ error $msg [info stacktrace]
+ }
+}
+
+test error-1.1 "Rethrow caught error" {
+ set rc [catch {b} msg]
+ #puts stderr "error-1.1\n[errorInfo $msg]\n"
+
+ list $rc $msg [info stacktrace]
+} {1 {error thrown from a} {{} error.test 4 a error.test 8 b error.test 15}}
+
+proc c {} {
+ a
+}
+
+proc d {} {
+ c
+}
+
+proc e {} {
+ d
+}
+
+test error-1.2 "Modify stacktrace" {
+ set rc [catch {e} msg]
+ set st [info stacktrace]
+ # Now elide one entry from the stacktrace
+ #puts [errorInfo $msg]
+ set newst {}
+ foreach {p f l} $st {
+ if {$p ne "d"} {
+ lappend newst $p $f $l
+ }
+ }
+ # Now rethrow with the new stack
+ set rc [catch {error $msg $newst} msg]
+ #puts [errorInfo $msg]
+ info stacktrace
+} {{} error.test 4 a error.test 22 c error.test 26 e error.test 34}
+
+# Package should be able to invoke exit, which should exit if not caught
+test error-2.1 "Exit from package" {
+ list [catch {package require exitpackage} msg] $msg
+} {7 {Can't find package 'exitpackage'}}