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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
# Commands covered: error, catch
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# Copyright (c) 1994-1996 Sun Microsystems, Inc.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# SCCS: @(#) error.test 1.22 97/08/12 17:02:43
if {[string compare test [info procs test]] == 1} then {source defs}
proc foo {} {
global errorInfo
set a [catch {format [error glorp2]} b]
error {Human-generated}
}
proc foo2 {} {
global errorInfo
set a [catch {format [error glorp2]} b]
error {Human-generated} $errorInfo
}
# Catch errors occurring in commands and errors from "error" command
test error-1.1 {simple errors from commands} {
catch {format [string compare]} b
} 1
test error-1.2 {simple errors from commands} {
catch {format [string compare]} b
set b
} {wrong # args: should be "string compare string1 string2"}
test error-1.3 {simple errors from commands} {
catch {format [string compare]} b
set errorInfo
} {wrong # args: should be "string compare string1 string2"
while executing
"string compare"}
test error-1.4 {simple errors from commands} {
catch {error glorp} b
} 1
test error-1.5 {simple errors from commands} {
catch {error glorp} b
set b
} glorp
test error-1.6 {simple errors from commands} {
catch {catch a b c} b
} 1
test error-1.7 {simple errors from commands} {
catch {catch a b c} b
set b
} {wrong # args: should be "catch command ?varName?"}
test error-1.8 {simple errors from commands} {nonPortable} {
# This test is non-portable: it generates a memory fault on
# machines like DEC Alphas (infinite recursion overflows
# stack?)
proc p {} {
uplevel 1 catch p error
}
p
} 0
# Check errors nested in procedures. Also check the optional argument
# to "error" to generate a new error trace.
test error-2.1 {errors in nested procedures} {
catch foo b
} 1
test error-2.2 {errors in nested procedures} {
catch foo b
set b
} {Human-generated}
test error-2.3 {errors in nested procedures} {
catch foo b
set errorInfo
} {Human-generated
while executing
"error {Human-generated}"
(procedure "foo" line 4)
invoked from within
"foo"}
test error-2.4 {errors in nested procedures} {
catch foo2 b
} 1
test error-2.5 {errors in nested procedures} {
catch foo2 b
set b
} {Human-generated}
test error-2.6 {errors in nested procedures} {
catch foo2 b
set errorInfo
} {glorp2
while executing
"error glorp2"
(procedure "foo2" line 3)
invoked from within
"foo2"}
# Error conditions related to "catch".
test error-3.1 {errors in catch command} {
list [catch {catch} msg] $msg
} {1 {wrong # args: should be "catch command ?varName?"}}
test error-3.2 {errors in catch command} {
list [catch {catch a b c} msg] $msg
} {1 {wrong # args: should be "catch command ?varName?"}}
test error-3.3 {errors in catch command} {
catch {unset a}
set a(0) 22
list [catch {catch {format 44} a} msg] $msg
} {1 {couldn't save command result in variable}}
catch {unset a}
# More tests related to errorInfo and errorCode
test error-4.1 {errorInfo and errorCode variables} {
list [catch {error msg1 msg2 msg3} msg] $msg $errorInfo $errorCode
} {1 msg1 msg2 msg3}
test error-4.2 {errorInfo and errorCode variables} {
list [catch {error msg1 {} msg3} msg] $msg $errorInfo $errorCode
} {1 msg1 {msg1
while executing
"error msg1 {} msg3"} msg3}
test error-4.3 {errorInfo and errorCode variables} {
list [catch {error msg1 {}} msg] $msg $errorInfo $errorCode
} {1 msg1 {msg1
while executing
"error msg1 {}"} NONE}
test error-4.4 {errorInfo and errorCode variables} {
set errorCode bogus
list [catch {error msg1} msg] $msg $errorInfo $errorCode
} {1 msg1 {msg1
while executing
"error msg1"} NONE}
test error-4.5 {errorInfo and errorCode variables} {
set errorCode bogus
list [catch {error msg1 msg2 {}} msg] $msg $errorInfo $errorCode
} {1 msg1 msg2 {}}
# Errors in error command itself
test error-5.1 {errors in error command} {
list [catch {error} msg] $msg
} {1 {wrong # args: should be "error message ?errorInfo? ?errorCode?"}}
test error-5.2 {errors in error command} {
list [catch {error a b c d} msg] $msg
} {1 {wrong # args: should be "error message ?errorInfo? ?errorCode?"}}
# Make sure that catch resets error information
test error-6.1 {catch must reset error state} {
catch {error outer [catch {error inner inner.errorInfo inner.errorCode}]}
list $errorCode $errorInfo
} {NONE 1}
catch {rename p ""}
return ""
|