summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/if.test679
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: