diff options
Diffstat (limited to 'tests/error.test')
-rw-r--r-- | tests/error.test | 53 |
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'}} |