summaryrefslogtreecommitdiffstats
path: root/tests/trace.test
diff options
context:
space:
mode:
Diffstat (limited to 'tests/trace.test')
-rw-r--r--tests/trace.test984
1 files changed, 0 insertions, 984 deletions
diff --git a/tests/trace.test b/tests/trace.test
deleted file mode 100644
index a2dd45e..0000000
--- a/tests/trace.test
+++ /dev/null
@@ -1,984 +0,0 @@
-# Commands covered: trace
-#
-# 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 Sun Microsystems, Inc.
-# Copyright (c) 1998-1999 by Scriptics Corporation.
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-#
-# RCS: @(#) $Id: trace.test,v 1.3 1999/04/16 00:47:35 stanton Exp $
-
-if {[lsearch [namespace children] ::tcltest] == -1} {
- source [file join [pwd] [file dirname [info script]] defs.tcl]
-}
-
-proc traceScalar {name1 name2 op} {
- global info
- set info [list $name1 $name2 $op [catch {uplevel set $name1} msg] $msg]
-}
-proc traceScalarAppend {name1 name2 op} {
- global info
- lappend info $name1 $name2 $op [catch {uplevel set $name1} msg] $msg
-}
-proc traceArray {name1 name2 op} {
- global info
- set info [list $name1 $name2 $op [catch {uplevel set [set name1]($name2)} msg] $msg]
-}
-proc traceArray2 {name1 name2 op} {
- global info
- set info [list $name1 $name2 $op]
-}
-proc traceProc {name1 name2 op} {
- global info
- set info [concat $info [list $name1 $name2 $op]]
-}
-proc traceTag {tag args} {
- global info
- set info [concat $info $tag]
-}
-proc traceError {args} {
- error "trace returned error"
-}
-proc traceCheck {cmd args} {
- global info
- set info [list [catch $cmd msg] $msg]
-}
-proc traceCrtElement {value name1 name2 op} {
- uplevel set ${name1}($name2) $value
-}
-
-# Read-tracing on variables
-
-test trace-1.1 {trace variable reads} {
- catch {unset x}
- set info {}
- trace var x r traceScalar
- list [catch {set x} msg] $msg $info
-} {1 {can't read "x": no such variable} {x {} r 1 {can't read "x": no such variable}}}
-test trace-1.2 {trace variable reads} {
- catch {unset x}
- set x 123
- set info {}
- trace var x r traceScalar
- list [catch {set x} msg] $msg $info
-} {0 123 {x {} r 0 123}}
-test trace-1.3 {trace variable reads} {
- catch {unset x}
- set info {}
- trace var x r traceScalar
- set x 123
- set info
-} {}
-test trace-1.4 {trace array element reads} {
- catch {unset x}
- set info {}
- trace var x(2) r traceArray
- list [catch {set x(2)} msg] $msg $info
-} {1 {can't read "x(2)": no such element in array} {x 2 r 1 {can't read "x(2)": no such element in array}}}
-test trace-1.5 {trace array element reads} {
- catch {unset x}
- set x(2) zzz
- set info {}
- trace var x(2) r traceArray
- list [catch {set x(2)} msg] $msg $info
-} {0 zzz {x 2 r 0 zzz}}
-test trace-1.6 {trace array element reads} {
- catch {unset x}
- set info {}
- trace variable x r traceArray2
- proc p {} {
- global x
- set x(2) willi
- return $x(2)
- }
- list [catch {p} msg] $msg $info
-} {0 willi {x 2 r}}
-test trace-1.7 {trace array element reads, create element undefined if nonexistant} {
- catch {unset x}
- set info {}
- trace variable x r q
- proc q {name1 name2 op} {
- global info
- set info [list $name1 $name2 $op]
- global $name1
- set ${name1}($name2) wolf
- }
- proc p {} {
- global x
- set x(X) willi
- return $x(Y)
- }
- list [catch {p} msg] $msg $info
-} {0 wolf {x Y r}}
-test trace-1.8 {trace reads on whole arrays} {
- catch {unset x}
- set info {}
- trace var x r traceArray
- list [catch {set x(2)} msg] $msg $info
-} {1 {can't read "x(2)": no such variable} {}}
-test trace-1.9 {trace reads on whole arrays} {
- catch {unset x}
- set x(2) zzz
- set info {}
- trace var x r traceArray
- list [catch {set x(2)} msg] $msg $info
-} {0 zzz {x 2 r 0 zzz}}
-test trace-1.10 {trace variable reads} {
- catch {unset x}
- set x 444
- set info {}
- trace var x r traceScalar
- unset x
- set info
-} {}
-
-# Basic write-tracing on variables
-
-test trace-2.1 {trace variable writes} {
- catch {unset x}
- set info {}
- trace var x w traceScalar
- set x 123
- set info
-} {x {} w 0 123}
-test trace-2.2 {trace writes to array elements} {
- catch {unset x}
- set info {}
- trace var x(33) w traceArray
- set x(33) 444
- set info
-} {x 33 w 0 444}
-test trace-2.3 {trace writes on whole arrays} {
- catch {unset x}
- set info {}
- trace var x w traceArray
- set x(abc) qq
- set info
-} {x abc w 0 qq}
-test trace-2.4 {trace variable writes} {
- catch {unset x}
- set x 1234
- set info {}
- trace var x w traceScalar
- set x
- set info
-} {}
-test trace-2.5 {trace variable writes} {
- catch {unset x}
- set x 1234
- set info {}
- trace var x w traceScalar
- unset x
- set info
-} {}
-
-# append no longer triggers read traces when fetching the old values of
-# variables before doing the append operation. However, lappend _does_
-# still trigger these read traces. Also lappend triggers only one write
-# trace: after appending all arguments to the list.
-
-test trace-3.1 {trace variable read-modify-writes} {
- catch {unset x}
- set info {}
- trace var x r traceScalarAppend
- append x 123
- append x 456
- lappend x 789
- set info
-} {x {} r 0 123456}
-test trace-3.2 {trace variable read-modify-writes} {
- catch {unset x}
- set info {}
- trace var x rw traceScalarAppend
- append x 123
- lappend x 456
- set info
-} {x {} w 0 123 x {} r 0 123 x {} w 0 {123 456}}
-
-# Basic unset-tracing on variables
-
-test trace-4.1 {trace variable unsets} {
- catch {unset x}
- set info {}
- trace var x u traceScalar
- catch {unset x}
- set info
-} {x {} u 1 {can't read "x": no such variable}}
-test trace-4.2 {variable mustn't exist during unset trace} {
- catch {unset x}
- set x 1234
- set info {}
- trace var x u traceScalar
- unset x
- set info
-} {x {} u 1 {can't read "x": no such variable}}
-test trace-4.3 {unset traces mustn't be called during reads and writes} {
- catch {unset x}
- set info {}
- trace var x u traceScalar
- set x 44
- set x
- set info
-} {}
-test trace-4.4 {trace unsets on array elements} {
- catch {unset x}
- set x(0) 18
- set info {}
- trace var x(1) u traceArray
- catch {unset x(1)}
- set info
-} {x 1 u 1 {can't read "x(1)": no such element in array}}
-test trace-4.5 {trace unsets on array elements} {
- catch {unset x}
- set x(1) 18
- set info {}
- trace var x(1) u traceArray
- unset x(1)
- set info
-} {x 1 u 1 {can't read "x(1)": no such element in array}}
-test trace-4.6 {trace unsets on array elements} {
- catch {unset x}
- set x(1) 18
- set info {}
- trace var x(1) u traceArray
- unset x
- set info
-} {x 1 u 1 {can't read "x(1)": no such variable}}
-test trace-4.7 {trace unsets on whole arrays} {
- catch {unset x}
- set x(1) 18
- set info {}
- trace var x u traceProc
- catch {unset x(0)}
- set info
-} {}
-test trace-4.8 {trace unsets on whole arrays} {
- catch {unset x}
- set x(1) 18
- set x(2) 144
- set x(3) 14
- set info {}
- trace var x u traceProc
- unset x(1)
- set info
-} {x 1 u}
-test trace-4.9 {trace unsets on whole arrays} {
- catch {unset x}
- set x(1) 18
- set x(2) 144
- set x(3) 14
- set info {}
- trace var x u traceProc
- unset x
- set info
-} {x {} u}
-
-# Trace multiple trace types at once.
-
-test trace-5.1 {multiple ops traced at once} {
- catch {unset x}
- set info {}
- trace var x rwu traceProc
- catch {set x}
- set x 22
- set x
- set x 33
- unset x
- set info
-} {x {} r x {} w x {} r x {} w x {} u}
-test trace-5.2 {multiple ops traced on array element} {
- catch {unset x}
- set info {}
- trace var x(0) rwu traceProc
- catch {set x(0)}
- set x(0) 22
- set x(0)
- set x(0) 33
- unset x(0)
- unset x
- set info
-} {x 0 r x 0 w x 0 r x 0 w x 0 u}
-test trace-5.3 {multiple ops traced on whole array} {
- catch {unset x}
- set info {}
- trace var x rwu traceProc
- catch {set x(0)}
- set x(0) 22
- set x(0)
- set x(0) 33
- unset x(0)
- unset x
- set info
-} {x 0 w x 0 r x 0 w x 0 u x {} u}
-
-# Check order of invocation of traces
-
-test trace-6.1 {order of invocation of traces} {
- catch {unset x}
- set info {}
- trace var x r "traceTag 1"
- trace var x r "traceTag 2"
- trace var x r "traceTag 3"
- catch {set x}
- set x 22
- set x
- set info
-} {3 2 1 3 2 1}
-test trace-6.2 {order of invocation of traces} {
- catch {unset x}
- set x(0) 44
- set info {}
- trace var x(0) r "traceTag 1"
- trace var x(0) r "traceTag 2"
- trace var x(0) r "traceTag 3"
- set x(0)
- set info
-} {3 2 1}
-test trace-6.3 {order of invocation of traces} {
- catch {unset x}
- set x(0) 44
- set info {}
- trace var x(0) r "traceTag 1"
- trace var x r "traceTag A1"
- trace var x(0) r "traceTag 2"
- trace var x r "traceTag A2"
- trace var x(0) r "traceTag 3"
- trace var x r "traceTag A3"
- set x(0)
- set info
-} {A3 A2 A1 3 2 1}
-
-# Check effects of errors in trace procedures
-
-test trace-7.1 {error returns from traces} {
- catch {unset x}
- set x 123
- set info {}
- trace var x r "traceTag 1"
- trace var x r traceError
- list [catch {set x} msg] $msg $info
-} {1 {can't read "x": trace returned error} {}}
-test trace-7.2 {error returns from traces} {
- catch {unset x}
- set x 123
- set info {}
- trace var x w "traceTag 1"
- trace var x w traceError
- list [catch {set x 44} msg] $msg $info
-} {1 {can't set "x": trace returned error} {}}
-test trace-7.3 {error returns from traces} {
- catch {unset x}
- set x 123
- set info {}
- trace var x w traceError
- list [catch {append x 44} msg] $msg $info
-} {1 {can't set "x": trace returned error} {}}
-test trace-7.4 {error returns from traces} {
- catch {unset x}
- set x 123
- set info {}
- trace var x u "traceTag 1"
- trace var x u traceError
- list [catch {unset x} msg] $msg $info
-} {0 {} 1}
-test trace-7.5 {error returns from traces} {
- catch {unset x}
- set x(0) 123
- set info {}
- trace var x(0) r "traceTag 1"
- trace var x r "traceTag 2"
- trace var x r traceError
- trace var x r "traceTag 3"
- list [catch {set x(0)} msg] $msg $info
-} {1 {can't read "x(0)": trace returned error} 3}
-test trace-7.6 {error returns from traces} {
- catch {unset x}
- set x 123
- trace var x u traceError
- list [catch {unset x} msg] $msg
-} {0 {}}
-test trace-7.7 {error returns from traces} {
- # This test just makes sure that the memory for the error message
- # gets deallocated correctly when the trace is invoked again or
- # when the trace is deleted.
- catch {unset x}
- set x 123
- trace var x r traceError
- catch {set x}
- catch {set x}
- trace vdelete x r traceError
-} {}
-
-# Check to see that variables are expunged before trace
-# procedures are invoked, so trace procedure can even manipulate
-# a new copy of the variables.
-
-test trace-8.1 {be sure variable is unset before trace is called} {
- catch {unset x}
- set x 33
- set info {}
- trace var x u {traceCheck {uplevel set x}}
- unset x
- set info
-} {1 {can't read "x": no such variable}}
-test trace-8.2 {be sure variable is unset before trace is called} {
- catch {unset x}
- set x 33
- set info {}
- trace var x u {traceCheck {uplevel set x 22}}
- unset x
- concat $info [list [catch {set x} msg] $msg]
-} {0 22 0 22}
-test trace-8.3 {be sure traces are cleared before unset trace called} {
- catch {unset x}
- set x 33
- set info {}
- trace var x u {traceCheck {uplevel trace vinfo x}}
- unset x
- set info
-} {0 {}}
-test trace-8.4 {set new trace during unset trace} {
- catch {unset x}
- set x 33
- set info {}
- trace var x u {traceCheck {global x; trace var x u traceProc}}
- unset x
- concat $info [trace vinfo x]
-} {0 {} {u traceProc}}
-
-test trace-9.1 {make sure array elements are unset before traces are called} {
- catch {unset x}
- set x(0) 33
- set info {}
- trace var x(0) u {traceCheck {uplevel set x(0)}}
- unset x(0)
- set info
-} {1 {can't read "x(0)": no such element in array}}
-test trace-9.2 {make sure array elements are unset before traces are called} {
- catch {unset x}
- set x(0) 33
- set info {}
- trace var x(0) u {traceCheck {uplevel set x(0) zzz}}
- unset x(0)
- concat $info [list [catch {set x(0)} msg] $msg]
-} {0 zzz 0 zzz}
-test trace-9.3 {array elements are unset before traces are called} {
- catch {unset x}
- set x(0) 33
- set info {}
- trace var x(0) u {traceCheck {global x; trace vinfo x(0)}}
- unset x(0)
- set info
-} {0 {}}
-test trace-9.4 {set new array element trace during unset trace} {
- catch {unset x}
- set x(0) 33
- set info {}
- trace var x(0) u {traceCheck {uplevel {trace variable x(0) r {}}}}
- catch {unset x(0)}
- concat $info [trace vinfo x(0)]
-} {0 {} {r {}}}
-
-test trace-10.1 {make sure arrays are unset before traces are called} {
- catch {unset x}
- set x(0) 33
- set info {}
- trace var x u {traceCheck {uplevel set x(0)}}
- unset x
- set info
-} {1 {can't read "x(0)": no such variable}}
-test trace-10.2 {make sure arrays are unset before traces are called} {
- catch {unset x}
- set x(y) 33
- set info {}
- trace var x u {traceCheck {uplevel set x(y) 22}}
- unset x
- concat $info [list [catch {set x(y)} msg] $msg]
-} {0 22 0 22}
-test trace-10.3 {make sure arrays are unset before traces are called} {
- catch {unset x}
- set x(y) 33
- set info {}
- trace var x u {traceCheck {uplevel array exists x}}
- unset x
- set info
-} {0 0}
-test trace-10.4 {make sure arrays are unset before traces are called} {
- catch {unset x}
- set x(y) 33
- set info {}
- set cmd {traceCheck {uplevel {trace vinfo x}}}
- trace var x u $cmd
- unset x
- set info
-} {0 {}}
-test trace-10.5 {set new array trace during unset trace} {
- catch {unset x}
- set x(y) 33
- set info {}
- trace var x u {traceCheck {global x; trace var x r {}}}
- unset x
- concat $info [trace vinfo x]
-} {0 {} {r {}}}
-test trace-10.6 {create scalar during array unset trace} {
- catch {unset x}
- set x(y) 33
- set info {}
- trace var x u {traceCheck {global x; set x 44}}
- unset x
- concat $info [list [catch {set x} msg] $msg]
-} {0 44 0 44}
-
-# Check special conditions (e.g. errors) in Tcl_TraceVar2.
-
-test trace-11.1 {creating array when setting variable traces} {
- catch {unset x}
- set info {}
- trace var x(0) w traceProc
- list [catch {set x 22} msg] $msg
-} {1 {can't set "x": variable is array}}
-test trace-11.2 {creating array when setting variable traces} {
- catch {unset x}
- set info {}
- trace var x(0) w traceProc
- list [catch {set x(0)} msg] $msg
-} {1 {can't read "x(0)": no such element in array}}
-test trace-11.3 {creating array when setting variable traces} {
- catch {unset x}
- set info {}
- trace var x(0) w traceProc
- set x(0) 22
- set info
-} {x 0 w}
-test trace-11.4 {creating variable when setting variable traces} {
- catch {unset x}
- set info {}
- trace var x w traceProc
- list [catch {set x} msg] $msg
-} {1 {can't read "x": no such variable}}
-test trace-11.5 {creating variable when setting variable traces} {
- catch {unset x}
- set info {}
- trace var x w traceProc
- set x 22
- set info
-} {x {} w}
-test trace-11.6 {creating variable when setting variable traces} {
- catch {unset x}
- set info {}
- trace var x w traceProc
- set x(0) 22
- set info
-} {x 0 w}
-test trace-11.7 {create array element during read trace} {
- catch {unset x}
- set x(2) zzz
- trace var x r {traceCrtElement xyzzy}
- list [catch {set x(3)} msg] $msg
-} {0 xyzzy}
-test trace-11.8 {errors when setting variable traces} {
- catch {unset x}
- set x 44
- list [catch {trace var x(0) w traceProc} msg] $msg
-} {1 {can't trace "x(0)": variable isn't array}}
-
-# Check deleting one trace from another.
-
-test trace-12.1 {delete one trace from another} {
- proc delTraces {args} {
- global x
- trace vdel x r {traceTag 2}
- trace vdel x r {traceTag 3}
- trace vdel x r {traceTag 4}
- }
- catch {unset x}
- set x 44
- set info {}
- trace var x r {traceTag 1}
- trace var x r {traceTag 2}
- trace var x r {traceTag 3}
- trace var x r {traceTag 4}
- trace var x r delTraces
- trace var x r {traceTag 5}
- set x
- set info
-} {5 1}
-
-# Check operation and syntax of "trace" command.
-
-test trace-13.1 {trace command (overall)} {
- list [catch {trace} msg] $msg
-} {1 {wrong # args: should be "trace option [arg arg ...]"}}
-test trace-13.2 {trace command (overall)} {
- list [catch {trace gorp} msg] $msg
-} {1 {bad option "gorp": must be variable, vdelete, or vinfo}}
-test trace-13.3 {trace command ("variable" option)} {
- list [catch {trace variable x y} msg] $msg
-} {1 {wrong # args: should be "trace variable name ops command"}}
-test trace-13.4 {trace command ("variable" option)} {
- list [catch {trace var x y z z2} msg] $msg
-} {1 {wrong # args: should be "trace variable name ops command"}}
-test trace-13.5 {trace command ("variable" option)} {
- list [catch {trace var x y z} msg] $msg
-} {1 {bad operations "y": should be one or more of rwu}}
-test trace-13.6 {trace command ("vdelete" option)} {
- list [catch {trace vdelete x y} msg] $msg
-} {1 {wrong # args: should be "trace vdelete name ops command"}}
-test trace-13.7 {trace command ("vdelete" option)} {
- list [catch {trace vdelete x y z foo} msg] $msg
-} {1 {wrong # args: should be "trace vdelete name ops command"}}
-test trace-13.8 {trace command ("vdelete" option)} {
- list [catch {trace vdelete x y z} msg] $msg
-} {1 {bad operations "y": should be one or more of rwu}}
-test trace-13.9 {trace command ("vdelete" option)} {
- catch {unset x}
- set info {}
- trace var x w traceProc
- trace vdelete x w traceProc
-} {}
-test trace-13.10 {trace command ("vdelete" option)} {
- catch {unset x}
- set info {}
- trace var x w traceProc
- trace vdelete x w traceProc
- set x 12345
- set info
-} {}
-test trace-13.11 {trace command ("vdelete" option)} {
- catch {unset x}
- set info {}
- trace var x w {traceTag 1}
- trace var x w traceProc
- trace var x w {traceTag 2}
- set x yy
- trace vdelete x w traceProc
- set x 12345
- trace vdelete x w {traceTag 1}
- set x foo
- trace vdelete x w {traceTag 2}
- set x gorp
- set info
-} {2 x {} w 1 2 1 2}
-test trace-13.12 {trace command ("vdelete" option)} {
- catch {unset x}
- set info {}
- trace var x w {traceTag 1}
- trace vdelete x w non_existent
- set x 12345
- set info
-} {1}
-test trace-13.13 {trace command ("vinfo" option)} {
- list [catch {trace vinfo} msg] $msg]
-} {1 {wrong # args: should be "trace vinfo name"]}}
-test trace-13.14 {trace command ("vinfo" option)} {
- list [catch {trace vinfo x y} msg] $msg]
-} {1 {wrong # args: should be "trace vinfo name"]}}
-test trace-13.15 {trace command ("vinfo" option)} {
- catch {unset x}
- trace var x w {traceTag 1}
- trace var x w traceProc
- trace var x w {traceTag 2}
- trace vinfo x
-} {{w {traceTag 2}} {w traceProc} {w {traceTag 1}}}
-test trace-13.16 {trace command ("vinfo" option)} {
- catch {unset x}
- trace vinfo x
-} {}
-test trace-13.17 {trace command ("vinfo" option)} {
- catch {unset x}
- trace vinfo x(0)
-} {}
-test trace-13.18 {trace command ("vinfo" option)} {
- catch {unset x}
- set x 44
- trace vinfo x(0)
-} {}
-test trace-13.19 {trace command ("vinfo" option)} {
- catch {unset x}
- set x 44
- trace var x w {traceTag 1}
- proc check {} {global x; trace vinfo x}
- check
-} {{w {traceTag 1}}}
-
-# Check fancy trace commands (long ones, weird arguments, etc.)
-
-test trace-14.1 {long trace command} {
- catch {unset x}
- set info {}
- trace var x w {traceTag {This is a very very long argument. It's \
- designed to test out the facilities of TraceVarProc for dealing \
- with such long arguments by malloc-ing space. One possibility \
- is that space doesn't get freed properly. If this happens, then \
- invoking this test over and over again will eventually leak memory.}}
- set x 44
- set info
-} {This is a very very long argument. It's \
- designed to test out the facilities of TraceVarProc for dealing \
- with such long arguments by malloc-ing space. One possibility \
- is that space doesn't get freed properly. If this happens, then \
- invoking this test over and over again will eventually leak memory.}
-test trace-14.2 {long trace command result to ignore} {
- proc longResult {args} {return "quite a bit of text, designed to
- generate a core leak if this command file is invoked over and over again
- and memory isn't being recycled correctly"}
- catch {unset x}
- trace var x w longResult
- set x 44
- set x 5
- set x abcde
-} abcde
-test trace-14.3 {special list-handling in trace commands} {
- catch {unset "x y z"}
- set "x y z(a\n\{)" 44
- set info {}
- trace var "x y z(a\n\{)" w traceProc
- set "x y z(a\n\{)" 33
- set info
-} "{x y z} a\\n\\{ w"
-
-# Check for proper handling of unsets during traces.
-
-proc traceUnset {unsetName args} {
- global info
- upvar $unsetName x
- lappend info [catch {unset x} msg] $msg [catch {set x} msg] $msg
-}
-proc traceReset {unsetName resetName args} {
- global info
- upvar $unsetName x $resetName y
- lappend info [catch {unset x} msg] $msg [catch {set y xyzzy} msg] $msg
-}
-proc traceReset2 {unsetName resetName args} {
- global info
- lappend info [catch {uplevel unset $unsetName} msg] $msg \
- [catch {uplevel set $resetName xyzzy} msg] $msg
-}
-proc traceAppend {string name1 name2 op} {
- global info
- lappend info $string
-}
-
-test trace-15.1 {unsets during read traces} {
- catch {unset y}
- set y 1234
- set info {}
- trace var y r {traceUnset y}
- trace var y u {traceAppend unset}
- lappend info [catch {set y} msg] $msg
-} {unset 0 {} 1 {can't read "x": no such variable} 1 {can't read "y": no such variable}}
-test trace-15.2 {unsets during read traces} {
- catch {unset y}
- set y(0) 1234
- set info {}
- trace var y(0) r {traceUnset y(0)}
- lappend info [catch {set y(0)} msg] $msg
-} {0 {} 1 {can't read "x": no such variable} 1 {can't read "y(0)": no such element in array}}
-test trace-15.3 {unsets during read traces} {
- catch {unset y}
- set y(0) 1234
- set info {}
- trace var y(0) r {traceUnset y}
- lappend info [catch {set y(0)} msg] $msg
-} {0 {} 1 {can't read "x": no such variable} 1 {can't read "y(0)": no such variable}}
-test trace-15.4 {unsets during read traces} {
- catch {unset y}
- set y 1234
- set info {}
- trace var y r {traceReset y y}
- lappend info [catch {set y} msg] $msg
-} {0 {} 0 xyzzy 0 xyzzy}
-test trace-15.5 {unsets during read traces} {
- catch {unset y}
- set y(0) 1234
- set info {}
- trace var y(0) r {traceReset y(0) y(0)}
- lappend info [catch {set y(0)} msg] $msg
-} {0 {} 0 xyzzy 0 xyzzy}
-test trace-15.6 {unsets during read traces} {
- catch {unset y}
- set y(0) 1234
- set info {}
- trace var y(0) r {traceReset y y(0)}
- lappend info [catch {set y(0)} msg] $msg [catch {set y(0)} msg] $msg
-} {0 {} 1 {can't set "y": upvar refers to element in deleted array} 1 {can't read "y(0)": no such variable} 1 {can't read "y(0)": no such variable}}
-test trace-15.7 {unsets during read traces} {
- catch {unset y}
- set y(0) 1234
- set info {}
- trace var y(0) r {traceReset2 y y(0)}
- lappend info [catch {set y(0)} msg] $msg [catch {set y(0)} msg] $msg
-} {0 {} 0 xyzzy 1 {can't read "y(0)": no such element in array} 0 xyzzy}
-test trace-15.8 {unsets during write traces} {
- catch {unset y}
- set y 1234
- set info {}
- trace var y w {traceUnset y}
- trace var y u {traceAppend unset}
- lappend info [catch {set y xxx} msg] $msg
-} {unset 0 {} 1 {can't read "x": no such variable} 0 {}}
-test trace-15.9 {unsets during write traces} {
- catch {unset y}
- set y(0) 1234
- set info {}
- trace var y(0) w {traceUnset y(0)}
- lappend info [catch {set y(0) xxx} msg] $msg
-} {0 {} 1 {can't read "x": no such variable} 0 {}}
-test trace-15.10 {unsets during write traces} {
- catch {unset y}
- set y(0) 1234
- set info {}
- trace var y(0) w {traceUnset y}
- lappend info [catch {set y(0) xxx} msg] $msg
-} {0 {} 1 {can't read "x": no such variable} 0 {}}
-test trace-15.11 {unsets during write traces} {
- catch {unset y}
- set y 1234
- set info {}
- trace var y w {traceReset y y}
- lappend info [catch {set y xxx} msg] $msg
-} {0 {} 0 xyzzy 0 xyzzy}
-test trace-15.12 {unsets during write traces} {
- catch {unset y}
- set y(0) 1234
- set info {}
- trace var y(0) w {traceReset y(0) y(0)}
- lappend info [catch {set y(0) xxx} msg] $msg
-} {0 {} 0 xyzzy 0 xyzzy}
-test trace-15.13 {unsets during write traces} {
- catch {unset y}
- set y(0) 1234
- set info {}
- trace var y(0) w {traceReset y y(0)}
- lappend info [catch {set y(0) xxx} msg] $msg [catch {set y(0)} msg] $msg
-} {0 {} 1 {can't set "y": upvar refers to element in deleted array} 0 {} 1 {can't read "y(0)": no such variable}}
-test trace-15.14 {unsets during write traces} {
- catch {unset y}
- set y(0) 1234
- set info {}
- trace var y(0) w {traceReset2 y y(0)}
- lappend info [catch {set y(0) xxx} msg] $msg [catch {set y(0)} msg] $msg
-} {0 {} 0 xyzzy 0 {} 0 xyzzy}
-test trace-15.15 {unsets during unset traces} {
- catch {unset y}
- set y 1234
- set info {}
- trace var y u {traceUnset y}
- lappend info [catch {unset y} msg] $msg [catch {set y} msg] $msg
-} {1 {can't unset "x": no such variable} 1 {can't read "x": no such variable} 0 {} 1 {can't read "y": no such variable}}
-test trace-15.16 {unsets during unset traces} {
- catch {unset y}
- set y(0) 1234
- set info {}
- trace var y(0) u {traceUnset y(0)}
- lappend info [catch {unset y(0)} msg] $msg [catch {set y(0)} msg] $msg
-} {1 {can't unset "x": no such variable} 1 {can't read "x": no such variable} 0 {} 1 {can't read "y(0)": no such element in array}}
-test trace-15.17 {unsets during unset traces} {
- catch {unset y}
- set y(0) 1234
- set info {}
- trace var y(0) u {traceUnset y}
- lappend info [catch {unset y(0)} msg] $msg [catch {set y(0)} msg] $msg
-} {0 {} 1 {can't read "x": no such variable} 0 {} 1 {can't read "y(0)": no such variable}}
-test trace-15.18 {unsets during unset traces} {
- catch {unset y}
- set y 1234
- set info {}
- trace var y u {traceReset2 y y}
- lappend info [catch {unset y} msg] $msg [catch {set y} msg] $msg
-} {1 {can't unset "y": no such variable} 0 xyzzy 0 {} 0 xyzzy}
-test trace-15.19 {unsets during unset traces} {
- catch {unset y}
- set y(0) 1234
- set info {}
- trace var y(0) u {traceReset2 y(0) y(0)}
- lappend info [catch {unset y(0)} msg] $msg [catch {set y(0)} msg] $msg
-} {1 {can't unset "y(0)": no such element in array} 0 xyzzy 0 {} 0 xyzzy}
-test trace-15.20 {unsets during unset traces} {
- catch {unset y}
- set y(0) 1234
- set info {}
- trace var y(0) u {traceReset2 y y(0)}
- lappend info [catch {unset y(0)} msg] $msg [catch {set y(0)} msg] $msg
-} {0 {} 0 xyzzy 0 {} 0 xyzzy}
-test trace-15.21 {unsets cancelling traces} {
- catch {unset y}
- set y 1234
- set info {}
- trace var y r {traceAppend first}
- trace var y r {traceUnset y}
- trace var y r {traceAppend third}
- trace var y u {traceAppend unset}
- lappend info [catch {set y} msg] $msg
-} {third unset 0 {} 1 {can't read "x": no such variable} 1 {can't read "y": no such variable}}
-test trace-15.22 {unsets cancelling traces} {
- catch {unset y}
- set y(0) 1234
- set info {}
- trace var y(0) r {traceAppend first}
- trace var y(0) r {traceUnset y}
- trace var y(0) r {traceAppend third}
- trace var y(0) u {traceAppend unset}
- lappend info [catch {set y(0)} msg] $msg
-} {third unset 0 {} 1 {can't read "x": no such variable} 1 {can't read "y(0)": no such variable}}
-
-# Check various non-interference between traces and other things.
-
-test trace-16.1 {trace doesn't prevent unset errors} {
- catch {unset x}
- set info {}
- trace var x u {traceProc}
- list [catch {unset x} msg] $msg $info
-} {1 {can't unset "x": no such variable} {x {} u}}
-test trace-16.2 {traced variables must survive procedure exits} {
- catch {unset x}
- proc p1 {} {global x; trace var x w traceProc}
- p1
- trace vinfo x
-} {{w traceProc}}
-test trace-16.3 {traced variables must survive procedure exits} {
- catch {unset x}
- set info {}
- proc p1 {} {global x; trace var x w traceProc}
- p1
- set x 44
- set info
-} {x {} w}
-
-# Be sure that procedure frames are released before unset traces
-# are invoked.
-
-test trace-17.1 {unset traces on procedure returns} {
- proc p1 {x y} {set a 44; p2 14}
- proc p2 {z} {trace var z u {traceCheck {lsort [uplevel {info vars}]}}}
- set info {}
- p1 foo bar
- set info
-} {0 {a x y}}
-
-# Delete arrays when done, so they can be re-used as scalars
-# elsewhere.
-
-catch {unset x}
-catch {unset y}
-
-# cleanup
-::tcltest::cleanupTests
-return
-
-
-
-
-
-
-
-
-
-
-
-