diff options
author | dkf <donal.k.fellows@manchester.ac.uk> | 2009-10-29 15:51:50 (GMT) |
---|---|---|
committer | dkf <donal.k.fellows@manchester.ac.uk> | 2009-10-29 15:51:50 (GMT) |
commit | e06f616f4b1db4e440fd0883a4987547208d8dd9 (patch) | |
tree | 1551353b9407fadd9e3a672196152c9ca0fe62b7 | |
parent | cbb055ea7121a4a61a3c9b7bbc57298cc564d3d7 (diff) | |
download | tcl-e06f616f4b1db4e440fd0883a4987547208d8dd9.zip tcl-e06f616f4b1db4e440fd0883a4987547208d8dd9.tar.gz tcl-e06f616f4b1db4e440fd0883a4987547208d8dd9.tar.bz2 |
More variable cleansing
-rw-r--r-- | tests/if.test | 679 |
1 files changed, 432 insertions, 247 deletions
diff --git a/tests/if.test b/tests/if.test index 4f46354..59fb24a 100644 --- a/tests/if.test +++ b/tests/if.test @@ -10,7 +10,7 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: if.test,v 1.12 2006/10/09 19:15:44 msofer Exp $ +# RCS: @(#) $Id: if.test,v 1.13 2009/10/29 15:51:50 dkf Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest 2 @@ -20,83 +20,109 @@ if {[lsearch [namespace children] ::tcltest] == -1} { # Basic "if" operation. catch {unset a} -test if-1.1 {TclCompileIfCmd: missing if/elseif test} { - list [catch {if} msg] $msg -} {1 {wrong # args: no expression after "if" argument}} -test if-1.2 {TclCompileIfCmd: error in if/elseif test} { - list [catch {if {[error "error in condition"]} foo} msg] $msg -} {1 {error in condition}} +test if-1.1 {TclCompileIfCmd: missing if/elseif test} -body { + if +} -returnCodes error -result {wrong # args: no expression after "if" argument} +test if-1.2 {TclCompileIfCmd: error in if/elseif test} -body { + if {[error "error in condition"]} foo +} -returnCodes error -result {error in condition} test if-1.3 {TclCompileIfCmd: error in if/elseif test} -body { list [catch {if {1+}} msg] $msg $::errorInfo -} -match glob -result {1 * {*"if {1+}"}} -test if-1.4 {TclCompileIfCmd: if/elseif test in braces} { +} -match glob -cleanup { + unset msg +} -result {1 * {*"if {1+}"}} +test if-1.4 {TclCompileIfCmd: if/elseif test in braces} -body { set a {} if {1<2} {set a 1} - set a -} {1} -test if-1.5 {TclCompileIfCmd: if/elseif test not in braces} { + return $a +} -cleanup { + unset a +} -result {1} +test if-1.5 {TclCompileIfCmd: if/elseif test not in braces} -body { set a {} if 1<2 {set a 1} - set a -} {1} -test if-1.6 {TclCompileIfCmd: multiline test expr} { + return $a +} -cleanup { + unset a +} -result {1} +test if-1.6 {TclCompileIfCmd: multiline test expr} -setup { set a {} +} -body { if {($tcl_platform(platform) != "foobar1") && \ ($tcl_platform(platform) != "foobar2")} {set a 3} else {set a 4} - set a -} 3 -test if-1.7 {TclCompileIfCmd: "then" after if/elseif test} { + return $a +} -cleanup { + unset a +} -result 3 +test if-1.7 {TclCompileIfCmd: "then" after if/elseif test} -body { set a {} if 4>3 then {set a 1} - set a -} {1} -test if-1.8 {TclCompileIfCmd: keyword other than "then" after if/elseif test} { + return $a +} -cleanup { + unset a +} -result {1} +test if-1.8 {TclCompileIfCmd: keyword other than "then" after if/elseif test} -setup { set a {} - catch {if 1<2 therefore {set a 1}} msg - set msg -} {invalid command name "therefore"} -test if-1.9 {TclCompileIfCmd: missing "then" body} { +} -body { + if 1<2 therefore {set a 1} +} -cleanup { + unset a +} -returnCodes error -result {invalid command name "therefore"} +test if-1.9 {TclCompileIfCmd: missing "then" body} -setup { set a {} - catch {if 1<2 then} msg - set msg -} {wrong # args: no script following "then" argument} +} -body { + if 1<2 then +} -cleanup { + unset a +} -returnCodes error -result {wrong # args: no script following "then" argument} test if-1.10 {TclCompileIfCmd: error in "then" body} -body { set a {} list [catch {if {$a!="xxx"} then {set}} msg] $msg $::errorInfo -} -match glob -result {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" +} -match glob -cleanup { + unset a msg +} -result {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" while *ing "set"*}} -test if-1.11 {TclCompileIfCmd: error in "then" body} { - list [catch {if 2 then {[error "error in then clause"]}} msg] $msg -} {1 {error in then clause}} -test if-1.12 {TclCompileIfCmd: "then" body in quotes} { +test if-1.11 {TclCompileIfCmd: error in "then" body} -body { + if 2 then {[error "error in then clause"]} +} -returnCodes error -result {error in then clause} +test if-1.12 {TclCompileIfCmd: "then" body in quotes} -body { set a {} if 27>17 "append a x" - set a -} {x} -test if-1.13 {TclCompileIfCmd: computed "then" body} { + return $a +} -cleanup { + unset a +} -result {x} +test if-1.13 {TclCompileIfCmd: computed "then" body} -setup { catch {unset x1} catch {unset x2} - set a {} +} -body { set x1 {append a x1} set x2 {; append a x2} set a {} if 1 $x1$x2 - set a -} {x1x2} -test if-1.14 {TclCompileIfCmd: taking proper branch} { + return $a +} -cleanup { + unset a x1 x2 +} -result {x1x2} +test if-1.14 {TclCompileIfCmd: taking proper branch} -body { set a {} if 1<2 {set a 1} - set a -} 1 -test if-1.15 {TclCompileIfCmd: taking proper branch} { + return $a +} -cleanup { + unset a +} -result 1 +test if-1.15 {TclCompileIfCmd: taking proper branch} -body { set a {} if 1>2 {set a 1} - set a -} {} -test if-1.16 {TclCompileIfCmd: test jumpFalse instruction replacement after long "then" body} { + return $a +} -cleanup { + unset a +} -result {} +test if-1.16 {TclCompileIfCmd: test jumpFalse instruction replacement after long "then" body} -setup { catch {unset i} set a {} +} -body { if 1<2 { set a 1 while {$a != "xxx"} { @@ -146,38 +172,54 @@ test if-1.16 {TclCompileIfCmd: test jumpFalse instruction replacement after long } set a 3 } - set a -} 3 -test if-1.17 {TclCompileIfCmd: if/elseif test in quotes} { + return $a +} -cleanup { + unset a + unset -nocomplain i +} -result 3 +test if-1.17 {TclCompileIfCmd: if/elseif test in quotes} -setup { set a {} - list [catch {if {"0 < 3"} {set a 1}} msg] $msg -} {1 {expected boolean value but got "0 < 3"}} - +} -body { + if {"0 < 3"} {set a 1} +} -returnCodes error -cleanup { + unset a +} -result {expected boolean value but got "0 < 3"} -test if-2.1 {TclCompileIfCmd: "elseif" after if/elseif test} { +test if-2.1 {TclCompileIfCmd: "elseif" after if/elseif test} -setup { set a {} +} -body { if 3>4 {set a 1} elseif 1 {set a 2} - set a -} {2} + return $a +} -cleanup { + unset a +} -result {2} # Since "else" is optional, the "elwood" below is treated as a command. # But then there shouldn't be any additional argument words for the "if". -test if-2.2 {TclCompileIfCmd: keyword other than "elseif"} { +test if-2.2 {TclCompileIfCmd: keyword other than "elseif"} -setup { set a {} - catch {if 1<2 {set a 1} elwood {set a 2}} msg - set msg -} {wrong # args: extra words after "else" clause in "if" command} -test if-2.3 {TclCompileIfCmd: missing expression after "elseif"} { +} -body { + if 1<2 {set a 1} elwood {set a 2} +} -returnCodes error -cleanup { + unset a +} -result {wrong # args: extra words after "else" clause in "if" command} +test if-2.3 {TclCompileIfCmd: missing expression after "elseif"} -setup { set a {} - catch {if 1<2 {set a 1} elseif} msg - set msg -} {wrong # args: no expression after "elseif" argument} -test if-2.4 {TclCompileIfCmd: error in expression after "elseif"} -body { +} -body { + if 1<2 {set a 1} elseif +} -returnCodes error -cleanup { + unset a +} -result {wrong # args: no expression after "elseif" argument} +test if-2.4 {TclCompileIfCmd: error in expression after "elseif"} -setup { set a {} +} -body { list [catch {if 3>4 {set a 1} elseif {1>}} msg] $msg $::errorInfo -} -match glob -result {1 * {*"if 3>4 {set a 1} elseif {1>}"}} -test if-2.5 {TclCompileIfCmd: test jumpFalse instruction replacement after long "elseif" body} { +} -match glob -cleanup { + unset a msg +} -result {1 * {*"if 3>4 {set a 1} elseif {1>}"}} +test if-2.5 {TclCompileIfCmd: test jumpFalse instruction replacement after long "elseif" body} -setup { catch {unset i} set a {} +} -body { if 1>2 { set a 1 while {$a != "xxx"} { @@ -275,44 +317,59 @@ test if-2.5 {TclCompileIfCmd: test jumpFalse instruction replacement after long } set a 6 } - set a -} 6 + return $a +} -cleanup { + unset a + unset -nocomplain i +} -result 6 -test if-3.1 {TclCompileIfCmd: "else" clause} { +test if-3.1 {TclCompileIfCmd: "else" clause} -body { set a {} if 3>4 {set a 1} elseif {$a == "foo"} {set a 2} else {set a 3} - set a -} 3 + return $a +} -cleanup { + unset a +} -result 3 # Since "else" is optional, the "elsex" below is treated as a command. # But then there shouldn't be any additional argument words for the "if". -test if-3.2 {TclCompileIfCmd: keyword other than "else"} { +test if-3.2 {TclCompileIfCmd: keyword other than "else"} -setup { set a {} - catch {if 1<2 then {set a 1} elsex {set a 2}} msg - set msg -} {wrong # args: extra words after "else" clause in "if" command} -test if-3.3 {TclCompileIfCmd: missing body after "else"} { +} -body { + if 1<2 then {set a 1} elsex {set a 2} +} -returnCodes error -cleanup { + unset a +} -result {wrong # args: extra words after "else" clause in "if" command} +test if-3.3 {TclCompileIfCmd: missing body after "else"} -setup { set a {} - catch {if 2<1 {set a 1} else} msg - set msg -} {wrong # args: no script following "else" argument} -test if-3.4 {TclCompileIfCmd: error compiling body after "else"} -body { +} -body { + if 2<1 {set a 1} else +} -returnCodes error -cleanup { + unset a +} -result {wrong # args: no script following "else" argument} +test if-3.4 {TclCompileIfCmd: error compiling body after "else"} -setup { set a {} - catch {if 2<1 {set a 1} else {set}} msg +} -body { + catch {if 2<1 {set a 1} else {set}} set ::errorInfo -} -match glob -result {wrong # args: should be "set varName ?newValue?" +} -match glob -cleanup { + unset a +} -result {wrong # args: should be "set varName ?newValue?" while *ing "set"*} -test if-3.5 {TclCompileIfCmd: extra arguments after "else" argument} { +test if-3.5 {TclCompileIfCmd: extra arguments after "else" argument} -setup { set a {} - catch {if 2<1 {set a 1} else {set a 2} or something} msg - set msg -} {wrong # args: extra words after "else" clause in "if" command} +} -body { + if 2<1 {set a 1} else {set a 2} or something +} -returnCodes error -cleanup { + unset a +} -result {wrong # args: extra words after "else" clause in "if" command} # The following test also checks whether contained loops and other # commands are properly relocated because a short jump must be replaced # by a "long distance" one. -test if-3.6 {TclCompileIfCmd: test jumpFalse instruction replacement after long "else" clause} { +test if-3.6 {TclCompileIfCmd: test jumpFalse instruction replacement after long "else" clause} -setup { catch {unset i} set a {} +} -body { if 1>2 { set a 1 while {$a != "xxx"} { @@ -458,132 +515,185 @@ test if-3.6 {TclCompileIfCmd: test jumpFalse instruction replacement after long } set a 9 } - set a -} 9 + return $a +} -cleanup { + unset a + unset -nocomplain i +} -result 9 -test if-4.1 {TclCompileIfCmd: "if" command result} { +test if-4.1 {TclCompileIfCmd: "if" command result} -setup { set a {} +} -body { set a [if 3<4 {set i 27}] - set a -} 27 -test if-4.2 {TclCompileIfCmd: "if" command result} { + return $a +} -cleanup { + unset a + unset -nocomplain i +} -result 27 +test if-4.2 {TclCompileIfCmd: "if" command result} -setup { set a {} +} -body { set a [if 3>4 {set i 27}] - set a -} {} -test if-4.3 {TclCompileIfCmd: "if" command result} { + return $a +} -cleanup { + unset a + unset -nocomplain i +} -result {} +test if-4.3 {TclCompileIfCmd: "if" command result} -setup { set a {} +} -body { set a [if 0 {set i 1} elseif 1 {set i 2}] - set a -} 2 -test if-4.4 {TclCompileIfCmd: "if" command result} { + return $a +} -cleanup { + unset a + unset -nocomplain i +} -result 2 +test if-4.4 {TclCompileIfCmd: "if" command result} -setup { set a {} +} -body { set a [if 0 {set i 1} elseif 0 {set i 2} elseif 2>5 {set i 3} else {set i 4}] - set a -} 4 -test if-4.5 {TclCompileIfCmd: return value} { + return $a +} -cleanup { + unset a i +} -result 4 +test if-4.5 {TclCompileIfCmd: return value} -body { if 0 then {set a 22; concat abc} elseif 1 {concat def} {concat ghi} -} def +} -cleanup { + unset -nocomplain a +} -result def # Check "if" and computed command names. -catch {unset a} -test if-5.1 {if cmd with computed command names: missing if/elseif test} { +test if-5.1 {if cmd with computed command names: missing if/elseif test} -body { set z if - list [catch {$z} msg] $msg -} {1 {wrong # args: no expression after "if" argument}} - -test if-5.2 {if cmd with computed command names: error in if/elseif test} { + $z +} -returnCodes error -cleanup { + unset z +} -result {wrong # args: no expression after "if" argument} +test if-5.2 {if cmd with computed command names: error in if/elseif test} -body { set z if - list [catch {$z {[error "error in condition"]} foo} msg] $msg -} {1 {error in condition}} + $z {[error "error in condition"]} foo +} -returnCodes error -cleanup { + unset z +} -result {error in condition} test if-5.3 {if cmd with computed command names: error in if/elseif test} -body { set z if - list [catch {$z {1+}} msg] $msg $::errorInfo -} -match glob -result {1 * {*"$z {1+}"}} -test if-5.4 {if cmd with computed command names: if/elseif test in braces} { - set z if + list [catch {$z {1+}}] $::errorInfo +} -match glob -cleanup { + unset z +} -result {1 {*"$z {1+}"}} +test if-5.4 {if cmd with computed command names: if/elseif test in braces} -setup { set a {} - $z {1<2} {set a 1} - set a -} {1} -test if-5.5 {if cmd with computed command names: if/elseif test not in braces} { +} -body { set z if + $z {1<2} {set a 1} + return $a +} -cleanup { + unset a z +} -result {1} +test if-5.5 {if cmd with computed command names: if/elseif test not in braces} -setup { set a {} +} -body { + set z if $z 1<2 {set a 1} - set a -} {1} -test if-5.6 {if cmd with computed command names: multiline test expr} { + return $a +} -cleanup { + unset a z +} -result {1} +test if-5.6 {if cmd with computed command names: multiline test expr} -body { set z if - set a {} $z {($tcl_platform(platform) != "foobar1") && \ ($tcl_platform(platform) != "foobar2")} {set a 3} else {set a 4} - set a -} 3 -test if-5.7 {if cmd with computed command names: "then" after if/elseif test} { - set z if + return $a +} -cleanup { + unset a z +} -result 3 +test if-5.7 {if cmd with computed command names: "then" after if/elseif test} -setup { set a {} - $z 4>3 then {set a 1} - set a -} {1} -test if-5.8 {if cmd with computed command names: keyword other than "then" after if/elseif test} { +} -body { set z if + $z 4>3 then {set a 1} + return $a +} -cleanup { + unset a z +} -result {1} +test if-5.8 {if cmd with computed command names: keyword other than "then" after if/elseif test} -setup { set a {} - catch {$z 1<2 therefore {set a 1}} msg - set msg -} {invalid command name "therefore"} -test if-5.9 {if cmd with computed command names: missing "then" body} { +} -body { set z if + $z 1<2 therefore {set a 1} +} -returnCodes error -cleanup { + unset a z +} -result {invalid command name "therefore"} +test if-5.9 {if cmd with computed command names: missing "then" body} -setup { set a {} - catch {$z 1<2 then} msg - set msg -} {wrong # args: no script following "then" argument} +} -body { + set z if + $z 1<2 then +} -returnCodes error -cleanup { + unset a z +} -result {wrong # args: no script following "then" argument} test if-5.10 {if cmd with computed command names: error in "then" body} -body { set z if set a {} list [catch {$z {$a!="xxx"} then {set}} msg] $msg $::errorInfo -} -match glob -result {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" +} -match glob -cleanup { + unset a z msg +} -result {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" while *ing "set" invoked from within "$z {$a!="xxx"} then {set}"}} -test if-5.11 {if cmd with computed command names: error in "then" body} { - set z if - list [catch {$z 2 then {[error "error in then clause"]}} msg] $msg -} {1 {error in then clause}} -test if-5.12 {if cmd with computed command names: "then" body in quotes} { +test if-5.11 {if cmd with computed command names: error in "then" body} -body { set z if + $z 2 then {[error "error in then clause"]} +} -returnCodes error -cleanup { + unset z +} -result {error in then clause} +test if-5.12 {if cmd with computed command names: "then" body in quotes} -setup { set a {} - $z 27>17 "append a x" - set a -} {x} -test if-5.13 {if cmd with computed command names: computed "then" body} { +} -body { set z if + $z 27>17 "append a x" + return $a +} -cleanup { + unset a z +} -result {x} +test if-5.13 {if cmd with computed command names: computed "then" body} -setup { catch {unset x1} catch {unset x2} - set a {} +} -body { + set z if set x1 {append a x1} set x2 {; append a x2} set a {} $z 1 $x1$x2 - set a -} {x1x2} -test if-5.14 {if cmd with computed command names: taking proper branch} { - set z if + return $a +} -cleanup { + unset a z x1 x2 +} -result {x1x2} +test if-5.14 {if cmd with computed command names: taking proper branch} -setup { set a {} - $z 1<2 {set a 1} - set a -} 1 -test if-5.15 {if cmd with computed command names: taking proper branch} { +} -body { set z if + $z 1<2 {set a 1} + return $a +} -cleanup { + unset a z +} -result 1 +test if-5.15 {if cmd with computed command names: taking proper branch} -body { set a {} - $z 1>2 {set a 1} - set a -} {} -test if-5.16 {if cmd with computed command names: test jumpFalse instruction replacement after long "then" body} { set z if + $z 1>2 {set a 1} + return $a +} -cleanup { + unset a z +} -result {} +test if-5.16 {if cmd with computed command names: test jumpFalse instruction replacement after long "then" body} -setup { catch {unset i} set a {} +} -body { + set z if $z 1<2 { set a 1 while {$a != "xxx"} { @@ -633,44 +743,60 @@ test if-5.16 {if cmd with computed command names: test jumpFalse instruction rep } set a 3 } - set a -} 3 -test if-5.17 {if cmd with computed command names: if/elseif test in quotes} { - set z if + return $a +} -cleanup { + unset a z + unset -nocomplain i +} -result 3 +test if-5.17 {if cmd with computed command names: if/elseif test in quotes} -setup { set a {} - list [catch {$z {"0 < 3"} {set a 1}} msg] $msg -} {1 {expected boolean value but got "0 < 3"}} - - -test if-6.1 {if cmd with computed command names: "elseif" after if/elseif test} { +} -body { set z if + $z {"0 < 3"} {set a 1} +} -returnCodes error -cleanup { + unset a z +} -result {expected boolean value but got "0 < 3"} + +test if-6.1 {if cmd with computed command names: "elseif" after if/elseif test} -setup { set a {} +} -body { + set z if $z 3>4 {set a 1} elseif 1 {set a 2} - set a -} {2} + return $a +} -cleanup { + unset a z +} -result {2} # Since "else" is optional, the "elwood" below is treated as a command. # But then there shouldn't be any additional argument words for the "if". -test if-6.2 {if cmd with computed command names: keyword other than "elseif"} { - set z if +test if-6.2 {if cmd with computed command names: keyword other than "elseif"} -setup { set a {} - catch {$z 1<2 {set a 1} elwood {set a 2}} msg - set msg -} {wrong # args: extra words after "else" clause in "if" command} -test if-6.3 {if cmd with computed command names: missing expression after "elseif"} { +} -body { set z if + $z 1<2 {set a 1} elwood {set a 2} +} -returnCodes error -cleanup { + unset a z +} -result {wrong # args: extra words after "else" clause in "if" command} +test if-6.3 {if cmd with computed command names: missing expression after "elseif"} -setup { set a {} - catch {$z 1<2 {set a 1} elseif} msg - set msg -} {wrong # args: no expression after "elseif" argument} -test if-6.4 {if cmd with computed command names: error in expression after "elseif"} -body { +} -body { set z if + $z 1<2 {set a 1} elseif +} -returnCodes error -cleanup { + unset a z +} -result {wrong # args: no expression after "elseif" argument} +test if-6.4 {if cmd with computed command names: error in expression after "elseif"} -setup { set a {} - list [catch {$z 3>4 {set a 1} elseif {1>}} msg] $msg $::errorInfo -} -match glob -result {1 * {*"$z 3>4 {set a 1} elseif {1>}"}} -test if-6.5 {if cmd with computed command names: test jumpFalse instruction replacement after long "elseif" body} { +} -body { set z if + list [catch {$z 3>4 {set a 1} elseif {1>}}] $::errorInfo +} -match glob -cleanup { + unset a z +} -result {1 {*"$z 3>4 {set a 1} elseif {1>}"}} +test if-6.5 {if cmd with computed command names: test jumpFalse instruction replacement after long "elseif" body} -setup { catch {unset i} set a {} +} -body { + set z if $z 1>2 { set a 1 while {$a != "xxx"} { @@ -768,52 +894,68 @@ test if-6.5 {if cmd with computed command names: test jumpFalse instruction repl } set a 6 } - set a -} 6 + return $a +} -cleanup { + unset a z + unset -nocomplain i +} -result 6 -test if-7.1 {if cmd with computed command names: "else" clause} { - set z if +test if-7.1 {if cmd with computed command names: "else" clause} -setup { set a {} +} -body { + set z if $z 3>4 {set a 1} elseif {$a == "foo"} {set a 2} else {set a 3} - set a -} 3 + return $a +} -cleanup { + unset a z +} -result 3 # Since "else" is optional, the "elsex" below is treated as a command. # But then there shouldn't be any additional argument words for the "if". -test if-7.2 {if cmd with computed command names: keyword other than "else"} { - set z if +test if-7.2 {if cmd with computed command names: keyword other than "else"} -setup { set a {} - catch {$z 1<2 then {set a 1} elsex {set a 2}} msg - set msg -} {wrong # args: extra words after "else" clause in "if" command} -test if-7.3 {if cmd with computed command names: missing body after "else"} { +} -body { set z if + $z 1<2 then {set a 1} elsex {set a 2} +} -returnCodes error -cleanup { + unset a z +} -result {wrong # args: extra words after "else" clause in "if" command} +test if-7.3 {if cmd with computed command names: missing body after "else"} -setup { set a {} - catch {$z 2<1 {set a 1} else} msg - set msg -} {wrong # args: no script following "else" argument} -test if-7.4 {if cmd with computed command names: error compiling body after "else"} -body { +} -body { set z if + $z 2<1 {set a 1} else +} -returnCodes error -cleanup { + unset a z +} -result {wrong # args: no script following "else" argument} +test if-7.4 {if cmd with computed command names: error compiling body after "else"} -setup { set a {} - catch {$z 2<1 {set a 1} else {set}} msg - set ::errorInfo -} -match glob -result {wrong # args: should be "set varName ?newValue?" +} -body { + set z if + catch {$z 2<1 {set a 1} else {set}} + return $::errorInfo +} -match glob -cleanup { + unset a z +} -result {wrong # args: should be "set varName ?newValue?" while *ing "set" invoked from within "$z 2<1 {set a 1} else {set}"} -test if-7.5 {if cmd with computed command names: extra arguments after "else" argument} { - set z if +test if-7.5 {if cmd with computed command names: extra arguments after "else" argument} -setup { set a {} - catch {$z 2<1 {set a 1} else {set a 2} or something} msg - set msg -} {wrong # args: extra words after "else" clause in "if" command} +} -body { + set z if + $z 2<1 {set a 1} else {set a 2} or something +} -returnCodes error -cleanup { + unset a z +} -result {wrong # args: extra words after "else" clause in "if" command} # The following test also checks whether contained loops and other # commands are properly relocated because a short jump must be replaced # by a "long distance" one. -test if-7.6 {if cmd with computed command names: test jumpFalse instruction replacement after long "else" clause} { - set z if +test if-7.6 {if cmd with computed command names: test jumpFalse instruction replacement after long "else" clause} -setup { catch {unset i} set a {} +} -body { + set z if $z 1>2 { set a 1 while {$a != "xxx"} { @@ -959,45 +1101,69 @@ test if-7.6 {if cmd with computed command names: test jumpFalse instruction repl } set a 9 } - set a -} 9 + return $a +} -cleanup { + unset a z + unset -nocomplain i +} -result 9 -test if-8.1 {if cmd with computed command names: "if" command result} { - set z if +test if-8.1 {if cmd with computed command names: "if" command result} -setup { set a {} - set a [$z 3<4 {set i 27}] - set a -} 27 -test if-8.2 {if cmd with computed command names: "if" command result} { +} -body { set z if + set a [$z 3<4 {set i 27}] + return $a +} -cleanup { + unset a z + unset -nocomplain i +} -result 27 +test if-8.2 {if cmd with computed command names: "if" command result} -setup { set a {} - set a [$z 3>4 {set i 27}] - set a -} {} -test if-8.3 {if cmd with computed command names: "if" command result} { +} -body { set z if + set a [$z 3>4 {set i 27}] + return $a +} -cleanup { + unset a z + unset -nocomplain i +} -result {} +test if-8.3 {if cmd with computed command names: "if" command result} -setup { set a {} - set a [$z 0 {set i 1} elseif 1 {set i 2}] - set a -} 2 -test if-8.4 {if cmd with computed command names: "if" command result} { +} -body { set z if + set a [$z 0 {set i 1} elseif 1 {set i 2}] + return $a +} -cleanup { + unset a z + unset -nocomplain i +} -result 2 +test if-8.4 {if cmd with computed command names: "if" command result} -setup { set a {} +} -body { + set z if set a [$z 0 {set i 1} elseif 0 {set i 2} elseif 2>5 {set i 3} else {set i 4}] - set a -} 4 -test if-8.5 {if cmd with computed command names: return value} { + return $a +} -cleanup { + unset a z + unset -nocomplain i +} -result 4 +test if-8.5 {if cmd with computed command names: return value} -body { set z if $z 0 then {set a 22; concat abc} elseif 1 {concat def} {concat ghi} -} def +} -cleanup { + unset z + unset -nocomplain a +} -result def -test if-9.1 {if cmd with namespace qualifiers} { +test if-9.1 {if cmd with namespace qualifiers} -body { ::if {1} {set x 4} -} 4 +} -cleanup { + unset x +} -result 4 # Test for incorrect "double evaluation semantics" -test if-10.1 {delayed substitution of then body} { +test if-10.1 {delayed substitution of then body} -body { set j 0 set if if # this is not compiled @@ -1013,8 +1179,11 @@ test if-10.1 {delayed substitution of then body} { set result } append result [p] -} {00} -test if-10.2 {delayed substitution of elseif expression} { +} -cleanup { + unset j if result + rename p {} +} -result {00} +test if-10.2 {delayed substitution of elseif expression} -body { set j 0 set if if # this is not compiled @@ -1038,8 +1207,11 @@ test if-10.2 {delayed substitution of elseif expression} { set result } append result [p] -} {00} -test if-10.3 {delayed substitution of elseif body} { +} -cleanup { + unset j if result + rename p {} +} -result {00} +test if-10.3 {delayed substitution of elseif body} -body { set j 0 set if if # this is not compiled @@ -1058,22 +1230,29 @@ test if-10.3 {delayed substitution of elseif body} { " } append result [p] -} {00} -test if-10.4 {delayed substitution of else body} { +} -cleanup { + unset j if result + rename p {} +} -result {00} +test if-10.4 {delayed substitution of else body} -body { set j 0 if {[incr j] == 0} { set result badthen } else " set result $j " - set result -} {0} -test if-10.5 {substituted control words} { + return $result +} -cleanup { + unset j result +} -result {0} +test if-10.5 {substituted control words} -body { set then then; proc then {} {return badthen} set else else; proc else {} {return badelse} set elseif elseif; proc elseif {} {return badelseif} list [catch {if 1 $then {if 0 {} $elseif 1 {if 0 {} $else {list ok}}}} a] $a -} {0 ok} +} -cleanup { + unset then else elseif a +} -result {0 ok} test if-10.6 {double invocation of variable traces} -body { set iftracecounter 0 proc iftraceproc {args} { @@ -1090,10 +1269,16 @@ test if-10.6 {double invocation of variable traces} -body { } trace variable iftracevar r [list iftraceproc 10] list [catch {if "$iftracevar + 20" {}} a] $a \ - [catch {if "$iftracevar + 20" {}} b] $b \ - [unset iftracevar iftracecounter] -} -match glob -result {1 {*} 0 {} {}} + [catch {if "$iftracevar + 20" {}} b] $b +} -cleanup { + unset iftracevar iftracecounter a b +} -match glob -result {1 {*} 0 {}} # cleanup ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# fill-column: 78 +# End: |