if.test
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:27k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # Commands covered:  if
  2. #
  3. # This file contains a collection of tests for one or more of the Tcl
  4. # built-in commands.  Sourcing this file into Tcl runs the tests and
  5. # generates output for errors.  No output means no errors were found.
  6. #
  7. # Copyright (c) 1996 Sun Microsystems, Inc.
  8. # Copyright (c) 1998-1999 by Scriptics Corporation.
  9. #
  10. # See the file "license.terms" for information on usage and redistribution
  11. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  12. #
  13. # RCS: @(#) $Id: if.test,v 1.7 2001/12/04 15:36:29 dkf Exp $
  14. if {[lsearch [namespace children] ::tcltest] == -1} {
  15.     package require tcltest
  16.     namespace import -force ::tcltest::*
  17. }
  18. # Basic "if" operation.
  19. catch {unset a}
  20. test if-1.1 {TclCompileIfCmd: missing if/elseif test} {
  21.     list [catch {if} msg] $msg
  22. } {1 {wrong # args: no expression after "if" argument}}
  23. test if-1.2 {TclCompileIfCmd: error in if/elseif test} {
  24.     list [catch {if {[error "error in condition"]} foo} msg] $msg
  25. } {1 {error in condition}}
  26. test if-1.3 {TclCompileIfCmd: error in if/elseif test} {
  27.     list [catch {if {1+}} msg] $msg $errorInfo
  28. } {1 {syntax error in expression "1+": premature end of expression} {syntax error in expression "1+": premature end of expression
  29.     ("if" test expression)
  30.     while compiling
  31. "if {1+}"}}
  32. test if-1.4 {TclCompileIfCmd: if/elseif test in braces} {
  33.     set a {}
  34.     if {1<2} {set a 1}
  35.     set a
  36. } {1}
  37. test if-1.5 {TclCompileIfCmd: if/elseif test not in braces} {
  38.     set a {}
  39.     if 1<2 {set a 1}
  40.     set a
  41. } {1}
  42. test if-1.6 {TclCompileIfCmd: multiline test expr} {
  43.     set a {}
  44.     if {($tcl_platform(platform) != "foobar1") && 
  45. ($tcl_platform(platform) != "foobar2")} {set a 3} else {set a 4}
  46.     set a
  47. } 3
  48. test if-1.7 {TclCompileIfCmd: "then" after if/elseif test} {
  49.     set a {}
  50.     if 4>3 then {set a 1}
  51.     set a
  52. } {1}
  53. test if-1.8 {TclCompileIfCmd: keyword other than "then" after if/elseif test} {
  54.     set a {}
  55.     catch {if 1<2 therefore {set a 1}} msg 
  56.     set msg
  57. } {invalid command name "therefore"}
  58. test if-1.9 {TclCompileIfCmd: missing "then" body} {
  59.     set a {}
  60.     catch {if 1<2 then} msg 
  61.     set msg
  62. } {wrong # args: no script following "then" argument}
  63. test if-1.10 {TclCompileIfCmd: error in "then" body} {
  64.     set a {}
  65.     list [catch {if {$a!="xxx"} then {set}} msg] $msg $errorInfo
  66. } {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?"
  67.     while compiling
  68. "set"
  69.     ("if" then script line 1)
  70.     while compiling
  71. "if {$a!="xxx"} then {set}"}}
  72. test if-1.11 {TclCompileIfCmd: error in "then" body} {
  73.     list [catch {if 2 then {[error "error in then clause"]}} msg] $msg
  74. } {1 {error in then clause}}
  75. test if-1.12 {TclCompileIfCmd: "then" body in quotes} {
  76.     set a {}
  77.     if 27>17 "append a x"
  78.     set a
  79. } {x}
  80. test if-1.13 {TclCompileIfCmd: computed "then" body} {
  81.     catch {unset x1}
  82.     catch {unset x2}
  83.     set a {}
  84.     set x1 {append a x1}
  85.     set x2 {; append a x2}
  86.     set a {}
  87.     if 1 $x1$x2
  88.     set a
  89. } {x1x2}
  90. test if-1.14 {TclCompileIfCmd: taking proper branch} {
  91.     set a {}
  92.     if 1<2 {set a 1}
  93.     set a
  94. } 1
  95. test if-1.15 {TclCompileIfCmd: taking proper branch} {
  96.     set a {}
  97.     if 1>2 {set a 1}
  98.     set a
  99. } {}
  100. test if-1.16 {TclCompileIfCmd: test jumpFalse instruction replacement after long "then" body} {
  101.     catch {unset i}
  102.     set a {}
  103.     if 1<2 {
  104. set a 1
  105. while {$a != "xxx"} {
  106.     break;
  107.     while {$i >= 0} {
  108. if {[string compare $a "bar"] < 0} {
  109.     set i $i
  110.     set i [lindex $s $i]
  111. }
  112. if {[string compare $a "bar"] < 0} {
  113.     set i $i
  114.     set i [lindex $s $i]
  115. }
  116. if {[string compare $a "bar"] < 0} {
  117.     set i $i
  118.     set i [lindex $s $i]
  119. }
  120. if {[string compare $a "bar"] < 0} {
  121.     set i $i
  122.     set i [lindex $s $i]
  123. }
  124. set i [expr $i-1]
  125.     }
  126. }
  127. set a 2
  128. while {$a != "xxx"} {
  129.     break;
  130.     while {$i >= 0} {
  131. if {[string compare $a "bar"] < 0} {
  132.     set i $i
  133.     set i [lindex $s $i]
  134. }
  135. if {[string compare $a "bar"] < 0} {
  136.     set i $i
  137.     set i [lindex $s $i]
  138. }
  139. if {[string compare $a "bar"] < 0} {
  140.     set i $i
  141.     set i [lindex $s $i]
  142. }
  143. if {[string compare $a "bar"] < 0} {
  144.     set i $i
  145.     set i [lindex $s $i]
  146. }
  147. set i [expr $i-1]
  148.     }
  149. }
  150. set a 3
  151.     }
  152.     set a
  153. } 3
  154. test if-1.17 {TclCompileIfCmd: if/elseif test in quotes} {
  155.     set a {}
  156.     list [catch {if {"0 < 3"} {set a 1}} msg] $msg
  157. } {1 {expected boolean value but got "0 < 3"}}
  158. test if-2.1 {TclCompileIfCmd: "elseif" after if/elseif test} {
  159.     set a {}
  160.     if 3>4 {set a 1} elseif 1 {set a 2}
  161.     set a
  162. } {2}
  163. # Since "else" is optional, the "elwood" below is treated as a command.
  164. # But then there shouldn't be any additional argument words for the "if".
  165. test if-2.2 {TclCompileIfCmd: keyword other than "elseif"} {
  166.     set a {}
  167.     catch {if 1<2 {set a 1} elwood {set a 2}} msg 
  168.     set msg
  169. } {wrong # args: extra words after "else" clause in "if" command}
  170. test if-2.3 {TclCompileIfCmd: missing expression after "elseif"} {
  171.     set a {}
  172.     catch {if 1<2 {set a 1} elseif} msg 
  173.     set msg
  174. } {wrong # args: no expression after "elseif" argument}
  175. test if-2.4 {TclCompileIfCmd: error in expression after "elseif"} {
  176.     set a {}
  177.     list [catch {if 3>4 {set a 1} elseif {1>}} msg] $msg $errorInfo
  178. } {1 {syntax error in expression "1>": premature end of expression} {syntax error in expression "1>": premature end of expression
  179.     ("if" test expression)
  180.     while compiling
  181. "if 3>4 {set a 1} elseif {1>}"}}
  182. test if-2.5 {TclCompileIfCmd: test jumpFalse instruction replacement after long "elseif" body} {
  183.     catch {unset i}
  184.     set a {}
  185.     if 1>2 {
  186. set a 1
  187. while {$a != "xxx"} {
  188.     break;
  189.     while {$i >= 0} {
  190. if {[string compare $a "bar"] < 0} {
  191.     set i $i
  192.     set i [lindex $s $i]
  193. }
  194. if {[string compare $a "bar"] < 0} {
  195.     set i $i
  196.     set i [lindex $s $i]
  197. }
  198. if {[string compare $a "bar"] < 0} {
  199.     set i $i
  200.     set i [lindex $s $i]
  201. }
  202. if {[string compare $a "bar"] < 0} {
  203.     set i $i
  204.     set i [lindex $s $i]
  205. }
  206. set i [expr $i-1]
  207.     }
  208. }
  209. set a 2
  210. while {$a != "xxx"} {
  211.     break;
  212.     while {$i >= 0} {
  213. if {[string compare $a "bar"] < 0} {
  214.     set i $i
  215.     set i [lindex $s $i]
  216. }
  217. if {[string compare $a "bar"] < 0} {
  218.     set i $i
  219.     set i [lindex $s $i]
  220. }
  221. if {[string compare $a "bar"] < 0} {
  222.     set i $i
  223.     set i [lindex $s $i]
  224. }
  225. if {[string compare $a "bar"] < 0} {
  226.     set i $i
  227.     set i [lindex $s $i]
  228. }
  229. set i [expr $i-1]
  230.     }
  231. }
  232. set a 3
  233.     } elseif 1<2 then { #; this if arm should be taken
  234. set a 4
  235. while {$a != "xxx"} {
  236.     break;
  237.     while {$i >= 0} {
  238. if {[string compare $a "bar"] < 0} {
  239.     set i $i
  240.     set i [lindex $s $i]
  241. }
  242. if {[string compare $a "bar"] < 0} {
  243.     set i $i
  244.     set i [lindex $s $i]
  245. }
  246. if {[string compare $a "bar"] < 0} {
  247.     set i $i
  248.     set i [lindex $s $i]
  249. }
  250. if {[string compare $a "bar"] < 0} {
  251.     set i $i
  252.     set i [lindex $s $i]
  253. }
  254. set i [expr $i-1]
  255.     }
  256. }
  257. set a 5
  258. while {$a != "xxx"} {
  259.     break;
  260.     while {$i >= 0} {
  261. if {[string compare $a "bar"] < 0} {
  262.     set i $i
  263.     set i [lindex $s $i]
  264. }
  265. if {[string compare $a "bar"] < 0} {
  266.     set i $i
  267.     set i [lindex $s $i]
  268. }
  269. if {[string compare $a "bar"] < 0} {
  270.     set i $i
  271.     set i [lindex $s $i]
  272. }
  273. if {[string compare $a "bar"] < 0} {
  274.     set i $i
  275.     set i [lindex $s $i]
  276. }
  277. set i [expr $i-1]
  278.     }
  279. }
  280. set a 6
  281.     }
  282.     set a
  283. } 6
  284. test if-3.1 {TclCompileIfCmd: "else" clause} {
  285.     set a {}
  286.     if 3>4 {set a 1} elseif {$a == "foo"} {set a 2} else {set a 3}
  287.     set a
  288. } 3
  289. # Since "else" is optional, the "elsex" below is treated as a command.
  290. # But then there shouldn't be any additional argument words for the "if".
  291. test if-3.2 {TclCompileIfCmd: keyword other than "else"} {
  292.     set a {}
  293.     catch {if 1<2 then {set a 1} elsex {set a 2}} msg 
  294.     set msg
  295. } {wrong # args: extra words after "else" clause in "if" command}
  296. test if-3.3 {TclCompileIfCmd: missing body after "else"} {
  297.     set a {}
  298.     catch {if 2<1 {set a 1} else} msg 
  299.     set msg
  300. } {wrong # args: no script following "else" argument}
  301. test if-3.4 {TclCompileIfCmd: error compiling body after "else"} {
  302.     set a {}
  303.     catch {if 2<1 {set a 1} else {set}} msg 
  304.     set errorInfo
  305. } {wrong # args: should be "set varName ?newValue?"
  306.     while compiling
  307. "set"
  308.     ("if" else script line 1)
  309.     while compiling
  310. "if 2<1 {set a 1} else {set}"}
  311. test if-3.5 {TclCompileIfCmd: extra arguments after "else" argument} {
  312.     set a {}
  313.     catch {if 2<1 {set a 1} else {set a 2} or something} msg 
  314.     set msg
  315. } {wrong # args: extra words after "else" clause in "if" command}
  316. # The following test also checks whether contained loops and other
  317. # commands are properly relocated because a short jump must be replaced
  318. # by a "long distance" one.
  319. test if-3.6 {TclCompileIfCmd: test jumpFalse instruction replacement after long "else" clause} {
  320.     catch {unset i}
  321.     set a {}
  322.     if 1>2 {
  323. set a 1
  324. while {$a != "xxx"} {
  325.     break;
  326.     while {$i >= 0} {
  327. if {[string compare $a "bar"] < 0} {
  328.     set i $i
  329.     set i [lindex $s $i]
  330. }
  331. if {[string compare $a "bar"] < 0} {
  332.     set i $i
  333.     set i [lindex $s $i]
  334. }
  335. if {[string compare $a "bar"] < 0} {
  336.     set i $i
  337.     set i [lindex $s $i]
  338. }
  339. if {[string compare $a "bar"] < 0} {
  340.     set i $i
  341.     set i [lindex $s $i]
  342. }
  343. set i [expr $i-1]
  344.     }
  345. }
  346. set a 2
  347. while {$a != "xxx"} {
  348.     break;
  349.     while {$i >= 0} {
  350. if {[string compare $a "bar"] < 0} {
  351.     set i $i
  352.     set i [lindex $s $i]
  353. }
  354. if {[string compare $a "bar"] < 0} {
  355.     set i $i
  356.     set i [lindex $s $i]
  357. }
  358. if {[string compare $a "bar"] < 0} {
  359.     set i $i
  360.     set i [lindex $s $i]
  361. }
  362. if {[string compare $a "bar"] < 0} {
  363.     set i $i
  364.     set i [lindex $s $i]
  365. }
  366. set i [expr $i-1]
  367.     }
  368. }
  369. set a 3
  370.     } elseif 1==2 then { #; this if arm should be taken
  371. set a 4
  372. while {$a != "xxx"} {
  373.     break;
  374.     while {$i >= 0} {
  375. if {[string compare $a "bar"] < 0} {
  376.     set i $i
  377.     set i [lindex $s $i]
  378. }
  379. if {[string compare $a "bar"] < 0} {
  380.     set i $i
  381.     set i [lindex $s $i]
  382. }
  383. if {[string compare $a "bar"] < 0} {
  384.     set i $i
  385.     set i [lindex $s $i]
  386. }
  387. if {[string compare $a "bar"] < 0} {
  388.     set i $i
  389.     set i [lindex $s $i]
  390. }
  391. set i [expr $i-1]
  392.     }
  393. }
  394. set a 5
  395. while {$a != "xxx"} {
  396.     break;
  397.     while {$i >= 0} {
  398. if {[string compare $a "bar"] < 0} {
  399.     set i $i
  400.     set i [lindex $s $i]
  401. }
  402. if {[string compare $a "bar"] < 0} {
  403.     set i $i
  404.     set i [lindex $s $i]
  405. }
  406. if {[string compare $a "bar"] < 0} {
  407.     set i $i
  408.     set i [lindex $s $i]
  409. }
  410. if {[string compare $a "bar"] < 0} {
  411.     set i $i
  412.     set i [lindex $s $i]
  413. }
  414. set i [expr $i-1]
  415.     }
  416. }
  417. set a 6
  418.     } else {
  419. set a 7
  420. while {$a != "xxx"} {
  421.     break;
  422.     while {$i >= 0} {
  423. if {[string compare $a "bar"] < 0} {
  424.     set i $i
  425.     set i [lindex $s $i]
  426. }
  427. if {[string compare $a "bar"] < 0} {
  428.     set i $i
  429.     set i [lindex $s $i]
  430. }
  431. if {[string compare $a "bar"] < 0} {
  432.     set i $i
  433.     set i [lindex $s $i]
  434. }
  435. if {[string compare $a "bar"] < 0} {
  436.     set i $i
  437.     set i [lindex $s $i]
  438. }
  439. set i [expr $i-1]
  440.     }
  441. }
  442. set a 8
  443. while {$a != "xxx"} {
  444.     break;
  445.     while {$i >= 0} {
  446. if {[string compare $a "bar"] < 0} {
  447.     set i $i
  448.     set i [lindex $s $i]
  449. }
  450. if {[string compare $a "bar"] < 0} {
  451.     set i $i
  452.     set i [lindex $s $i]
  453. }
  454. if {[string compare $a "bar"] < 0} {
  455.     set i $i
  456.     set i [lindex $s $i]
  457. }
  458. if {[string compare $a "bar"] < 0} {
  459.     set i $i
  460.     set i [lindex $s $i]
  461. }
  462. set i [expr $i-1]
  463.     }
  464. }
  465. set a 9
  466.     }
  467.     set a
  468. } 9
  469. test if-4.1 {TclCompileIfCmd: "if" command result} {
  470.     set a {}
  471.     set a [if 3<4 {set i 27}]
  472.     set a
  473. } 27
  474. test if-4.2 {TclCompileIfCmd: "if" command result} {
  475.     set a {}
  476.     set a [if 3>4 {set i 27}]
  477.     set a
  478. } {}
  479. test if-4.3 {TclCompileIfCmd: "if" command result} {
  480.     set a {}
  481.     set a [if 0 {set i 1} elseif 1 {set i 2}]
  482.     set a
  483. } 2
  484. test if-4.4 {TclCompileIfCmd: "if" command result} {
  485.     set a {}
  486.     set a [if 0 {set i 1} elseif 0 {set i 2} elseif 2>5 {set i 3} else {set i 4}]
  487.     set a
  488. } 4
  489. test if-4.5 {TclCompileIfCmd: return value} {
  490.     if 0 then {set a 22; concat abc} elseif 1 {concat def} {concat ghi}
  491. } def
  492. # Check "if" and computed command names.
  493. catch {unset a}
  494. test if-5.1 {if cmd with computed command names: missing if/elseif test} {
  495.     set z if
  496.     list [catch {$z} msg] $msg
  497. } {1 {wrong # args: no expression after "if" argument}}
  498. test if-5.2 {if cmd with computed command names: error in if/elseif test} {
  499.     set z if
  500.     list [catch {$z {[error "error in condition"]} foo} msg] $msg
  501. } {1 {error in condition}}
  502. test if-5.3 {if cmd with computed command names: error in if/elseif test} {
  503.     set z if
  504.     list [catch {$z {1+}} msg] $msg $errorInfo
  505. } {1 {syntax error in expression "1+": premature end of expression} {syntax error in expression "1+": premature end of expression
  506.     while executing
  507. "$z {1+}"}}
  508. test if-5.4 {if cmd with computed command names: if/elseif test in braces} {
  509.     set z if
  510.     set a {}
  511.     $z {1<2} {set a 1}
  512.     set a
  513. } {1}
  514. test if-5.5 {if cmd with computed command names: if/elseif test not in braces} {
  515.     set z if
  516.     set a {}
  517.     $z 1<2 {set a 1}
  518.     set a
  519. } {1}
  520. test if-5.6 {if cmd with computed command names: multiline test expr} {
  521.     set z if
  522.     set a {}
  523.     $z {($tcl_platform(platform) != "foobar1") && 
  524. ($tcl_platform(platform) != "foobar2")} {set a 3} else {set a 4}
  525.     set a
  526. } 3
  527. test if-5.7 {if cmd with computed command names: "then" after if/elseif test} {
  528.     set z if
  529.     set a {}
  530.     $z 4>3 then {set a 1}
  531.     set a
  532. } {1}
  533. test if-5.8 {if cmd with computed command names: keyword other than "then" after if/elseif test} {
  534.     set z if
  535.     set a {}
  536.     catch {$z 1<2 therefore {set a 1}} msg 
  537.     set msg
  538. } {invalid command name "therefore"}
  539. test if-5.9 {if cmd with computed command names: missing "then" body} {
  540.     set z if
  541.     set a {}
  542.     catch {$z 1<2 then} msg 
  543.     set msg
  544. } {wrong # args: no script following "then" argument}
  545. test if-5.10 {if cmd with computed command names: error in "then" body} {
  546.     set z if
  547.     set a {}
  548.     list [catch {$z {$a!="xxx"} then {set}} msg] $msg $errorInfo
  549. } {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?"
  550.     while compiling
  551. "set"
  552.     invoked from within
  553. "$z {$a!="xxx"} then {set}"}}
  554. test if-5.11 {if cmd with computed command names: error in "then" body} {
  555.     set z if
  556.     list [catch {$z 2 then {[error "error in then clause"]}} msg] $msg
  557. } {1 {error in then clause}}
  558. test if-5.12 {if cmd with computed command names: "then" body in quotes} {
  559.     set z if
  560.     set a {}
  561.     $z 27>17 "append a x"
  562.     set a
  563. } {x}
  564. test if-5.13 {if cmd with computed command names: computed "then" body} {
  565.     set z if
  566.     catch {unset x1}
  567.     catch {unset x2}
  568.     set a {}
  569.     set x1 {append a x1}
  570.     set x2 {; append a x2}
  571.     set a {}
  572.     $z 1 $x1$x2
  573.     set a
  574. } {x1x2}
  575. test if-5.14 {if cmd with computed command names: taking proper branch} {
  576.     set z if
  577.     set a {}
  578.     $z 1<2 {set a 1}
  579.     set a
  580. } 1
  581. test if-5.15 {if cmd with computed command names: taking proper branch} {
  582.     set z if
  583.     set a {}
  584.     $z 1>2 {set a 1}
  585.     set a
  586. } {}
  587. test if-5.16 {if cmd with computed command names: test jumpFalse instruction replacement after long "then" body} {
  588.     set z if
  589.     catch {unset i}
  590.     set a {}
  591.     $z 1<2 {
  592. set a 1
  593. while {$a != "xxx"} {
  594.     break;
  595.     while {$i >= 0} {
  596. $z {[string compare $a "bar"] < 0} {
  597.     set i $i
  598.     set i [lindex $s $i]
  599. }
  600. $z {[string compare $a "bar"] < 0} {
  601.     set i $i
  602.     set i [lindex $s $i]
  603. }
  604. $z {[string compare $a "bar"] < 0} {
  605.     set i $i
  606.     set i [lindex $s $i]
  607. }
  608. $z {[string compare $a "bar"] < 0} {
  609.     set i $i
  610.     set i [lindex $s $i]
  611. }
  612. set i [expr $i-1]
  613.     }
  614. }
  615. set a 2
  616. while {$a != "xxx"} {
  617.     break;
  618.     while {$i >= 0} {
  619. $z {[string compare $a "bar"] < 0} {
  620.     set i $i
  621.     set i [lindex $s $i]
  622. }
  623. $z {[string compare $a "bar"] < 0} {
  624.     set i $i
  625.     set i [lindex $s $i]
  626. }
  627. $z {[string compare $a "bar"] < 0} {
  628.     set i $i
  629.     set i [lindex $s $i]
  630. }
  631. $z {[string compare $a "bar"] < 0} {
  632.     set i $i
  633.     set i [lindex $s $i]
  634. }
  635. set i [expr $i-1]
  636.     }
  637. }
  638. set a 3
  639.     }
  640.     set a
  641. } 3
  642. test if-5.17 {if cmd with computed command names: if/elseif test in quotes} {
  643.     set z if
  644.     set a {}
  645.     list [catch {$z {"0 < 3"} {set a 1}} msg] $msg
  646. } {1 {expected boolean value but got "0 < 3"}}
  647. test if-6.1 {if cmd with computed command names: "elseif" after if/elseif test} {
  648.     set z if
  649.     set a {}
  650.     $z 3>4 {set a 1} elseif 1 {set a 2}
  651.     set a
  652. } {2}
  653. # Since "else" is optional, the "elwood" below is treated as a command.
  654. # But then there shouldn't be any additional argument words for the "if".
  655. test if-6.2 {if cmd with computed command names: keyword other than "elseif"} {
  656.     set z if
  657.     set a {}
  658.     catch {$z 1<2 {set a 1} elwood {set a 2}} msg 
  659.     set msg
  660. } {wrong # args: extra words after "else" clause in "if" command}
  661. test if-6.3 {if cmd with computed command names: missing expression after "elseif"} {
  662.     set z if
  663.     set a {}
  664.     catch {$z 1<2 {set a 1} elseif} msg 
  665.     set msg
  666. } {wrong # args: no expression after "elseif" argument}
  667. test if-6.4 {if cmd with computed command names: error in expression after "elseif"} {
  668.     set z if
  669.     set a {}
  670.     list [catch {$z 3>4 {set a 1} elseif {1>}} msg] $msg $errorInfo
  671. } {1 {syntax error in expression "1>": premature end of expression} {syntax error in expression "1>": premature end of expression
  672.     while executing
  673. "$z 3>4 {set a 1} elseif {1>}"}}
  674. test if-6.5 {if cmd with computed command names: test jumpFalse instruction replacement after long "elseif" body} {
  675.     set z if
  676.     catch {unset i}
  677.     set a {}
  678.     $z 1>2 {
  679. set a 1
  680. while {$a != "xxx"} {
  681.     break;
  682.     while {$i >= 0} {
  683. $z {[string compare $a "bar"] < 0} {
  684.     set i $i
  685.     set i [lindex $s $i]
  686. }
  687. $z {[string compare $a "bar"] < 0} {
  688.     set i $i
  689.     set i [lindex $s $i]
  690. }
  691. $z {[string compare $a "bar"] < 0} {
  692.     set i $i
  693.     set i [lindex $s $i]
  694. }
  695. $z {[string compare $a "bar"] < 0} {
  696.     set i $i
  697.     set i [lindex $s $i]
  698. }
  699. set i [expr $i-1]
  700.     }
  701. }
  702. set a 2
  703. while {$a != "xxx"} {
  704.     break;
  705.     while {$i >= 0} {
  706. $z {[string compare $a "bar"] < 0} {
  707.     set i $i
  708.     set i [lindex $s $i]
  709. }
  710. $z {[string compare $a "bar"] < 0} {
  711.     set i $i
  712.     set i [lindex $s $i]
  713. }
  714. $z {[string compare $a "bar"] < 0} {
  715.     set i $i
  716.     set i [lindex $s $i]
  717. }
  718. $z {[string compare $a "bar"] < 0} {
  719.     set i $i
  720.     set i [lindex $s $i]
  721. }
  722. set i [expr $i-1]
  723.     }
  724. }
  725. set a 3
  726.     } elseif 1<2 then { #; this if arm should be taken
  727. set a 4
  728. while {$a != "xxx"} {
  729.     break;
  730.     while {$i >= 0} {
  731. $z {[string compare $a "bar"] < 0} {
  732.     set i $i
  733.     set i [lindex $s $i]
  734. }
  735. $z {[string compare $a "bar"] < 0} {
  736.     set i $i
  737.     set i [lindex $s $i]
  738. }
  739. $z {[string compare $a "bar"] < 0} {
  740.     set i $i
  741.     set i [lindex $s $i]
  742. }
  743. $z {[string compare $a "bar"] < 0} {
  744.     set i $i
  745.     set i [lindex $s $i]
  746. }
  747. set i [expr $i-1]
  748.     }
  749. }
  750. set a 5
  751. while {$a != "xxx"} {
  752.     break;
  753.     while {$i >= 0} {
  754. $z {[string compare $a "bar"] < 0} {
  755.     set i $i
  756.     set i [lindex $s $i]
  757. }
  758. $z {[string compare $a "bar"] < 0} {
  759.     set i $i
  760.     set i [lindex $s $i]
  761. }
  762. $z {[string compare $a "bar"] < 0} {
  763.     set i $i
  764.     set i [lindex $s $i]
  765. }
  766. $z {[string compare $a "bar"] < 0} {
  767.     set i $i
  768.     set i [lindex $s $i]
  769. }
  770. set i [expr $i-1]
  771.     }
  772. }
  773. set a 6
  774.     }
  775.     set a
  776. } 6
  777. test if-7.1 {if cmd with computed command names: "else" clause} {
  778.     set z if
  779.     set a {}
  780.     $z 3>4 {set a 1} elseif {$a == "foo"} {set a 2} else {set a 3}
  781.     set a
  782. } 3
  783. # Since "else" is optional, the "elsex" below is treated as a command.
  784. # But then there shouldn't be any additional argument words for the "if".
  785. test if-7.2 {if cmd with computed command names: keyword other than "else"} {
  786.     set z if
  787.     set a {}
  788.     catch {$z 1<2 then {set a 1} elsex {set a 2}} msg 
  789.     set msg
  790. } {wrong # args: extra words after "else" clause in "if" command}
  791. test if-7.3 {if cmd with computed command names: missing body after "else"} {
  792.     set z if
  793.     set a {}
  794.     catch {$z 2<1 {set a 1} else} msg 
  795.     set msg
  796. } {wrong # args: no script following "else" argument}
  797. test if-7.4 {if cmd with computed command names: error compiling body after "else"} {
  798.     set z if
  799.     set a {}
  800.     catch {$z 2<1 {set a 1} else {set}} msg 
  801.     set errorInfo
  802. } {wrong # args: should be "set varName ?newValue?"
  803.     while compiling
  804. "set"
  805.     invoked from within
  806. "$z 2<1 {set a 1} else {set}"}
  807. test if-7.5 {if cmd with computed command names: extra arguments after "else" argument} {
  808.     set z if
  809.     set a {}
  810.     catch {$z 2<1 {set a 1} else {set a 2} or something} msg 
  811.     set msg
  812. } {wrong # args: extra words after "else" clause in "if" command}
  813. # The following test also checks whether contained loops and other
  814. # commands are properly relocated because a short jump must be replaced
  815. # by a "long distance" one.
  816. test if-7.6 {if cmd with computed command names: test jumpFalse instruction replacement after long "else" clause} {
  817.     set z if
  818.     catch {unset i}
  819.     set a {}
  820.     $z 1>2 {
  821. set a 1
  822. while {$a != "xxx"} {
  823.     break;
  824.     while {$i >= 0} {
  825. $z {[string compare $a "bar"] < 0} {
  826.     set i $i
  827.     set i [lindex $s $i]
  828. }
  829. $z {[string compare $a "bar"] < 0} {
  830.     set i $i
  831.     set i [lindex $s $i]
  832. }
  833. $z {[string compare $a "bar"] < 0} {
  834.     set i $i
  835.     set i [lindex $s $i]
  836. }
  837. $z {[string compare $a "bar"] < 0} {
  838.     set i $i
  839.     set i [lindex $s $i]
  840. }
  841. set i [expr $i-1]
  842.     }
  843. }
  844. set a 2
  845. while {$a != "xxx"} {
  846.     break;
  847.     while {$i >= 0} {
  848. $z {[string compare $a "bar"] < 0} {
  849.     set i $i
  850.     set i [lindex $s $i]
  851. }
  852. $z {[string compare $a "bar"] < 0} {
  853.     set i $i
  854.     set i [lindex $s $i]
  855. }
  856. $z {[string compare $a "bar"] < 0} {
  857.     set i $i
  858.     set i [lindex $s $i]
  859. }
  860. $z {[string compare $a "bar"] < 0} {
  861.     set i $i
  862.     set i [lindex $s $i]
  863. }
  864. set i [expr $i-1]
  865.     }
  866. }
  867. set a 3
  868.     } elseif 1==2 then { #; this if arm should be taken
  869. set a 4
  870. while {$a != "xxx"} {
  871.     break;
  872.     while {$i >= 0} {
  873. $z {[string compare $a "bar"] < 0} {
  874.     set i $i
  875.     set i [lindex $s $i]
  876. }
  877. $z {[string compare $a "bar"] < 0} {
  878.     set i $i
  879.     set i [lindex $s $i]
  880. }
  881. $z {[string compare $a "bar"] < 0} {
  882.     set i $i
  883.     set i [lindex $s $i]
  884. }
  885. $z {[string compare $a "bar"] < 0} {
  886.     set i $i
  887.     set i [lindex $s $i]
  888. }
  889. set i [expr $i-1]
  890.     }
  891. }
  892. set a 5
  893. while {$a != "xxx"} {
  894.     break;
  895.     while {$i >= 0} {
  896. $z {[string compare $a "bar"] < 0} {
  897.     set i $i
  898.     set i [lindex $s $i]
  899. }
  900. $z {[string compare $a "bar"] < 0} {
  901.     set i $i
  902.     set i [lindex $s $i]
  903. }
  904. $z {[string compare $a "bar"] < 0} {
  905.     set i $i
  906.     set i [lindex $s $i]
  907. }
  908. $z {[string compare $a "bar"] < 0} {
  909.     set i $i
  910.     set i [lindex $s $i]
  911. }
  912. set i [expr $i-1]
  913.     }
  914. }
  915. set a 6
  916.     } else {
  917. set a 7
  918. while {$a != "xxx"} {
  919.     break;
  920.     while {$i >= 0} {
  921. $z {[string compare $a "bar"] < 0} {
  922.     set i $i
  923.     set i [lindex $s $i]
  924. }
  925. $z {[string compare $a "bar"] < 0} {
  926.     set i $i
  927.     set i [lindex $s $i]
  928. }
  929. $z {[string compare $a "bar"] < 0} {
  930.     set i $i
  931.     set i [lindex $s $i]
  932. }
  933. $z {[string compare $a "bar"] < 0} {
  934.     set i $i
  935.     set i [lindex $s $i]
  936. }
  937. set i [expr $i-1]
  938.     }
  939. }
  940. set a 8
  941. while {$a != "xxx"} {
  942.     break;
  943.     while {$i >= 0} {
  944. $z {[string compare $a "bar"] < 0} {
  945.     set i $i
  946.     set i [lindex $s $i]
  947. }
  948. $z {[string compare $a "bar"] < 0} {
  949.     set i $i
  950.     set i [lindex $s $i]
  951. }
  952. $z {[string compare $a "bar"] < 0} {
  953.     set i $i
  954.     set i [lindex $s $i]
  955. }
  956. $z {[string compare $a "bar"] < 0} {
  957.     set i $i
  958.     set i [lindex $s $i]
  959. }
  960. set i [expr $i-1]
  961.     }
  962. }
  963. set a 9
  964.     }
  965.     set a
  966. } 9
  967. test if-8.1 {if cmd with computed command names: "if" command result} {
  968.     set z if
  969.     set a {}
  970.     set a [$z 3<4 {set i 27}]
  971.     set a
  972. } 27
  973. test if-8.2 {if cmd with computed command names: "if" command result} {
  974.     set z if
  975.     set a {}
  976.     set a [$z 3>4 {set i 27}]
  977.     set a
  978. } {}
  979. test if-8.3 {if cmd with computed command names: "if" command result} {
  980.     set z if
  981.     set a {}
  982.     set a [$z 0 {set i 1} elseif 1 {set i 2}]
  983.     set a
  984. } 2
  985. test if-8.4 {if cmd with computed command names: "if" command result} {
  986.     set z if
  987.     set a {}
  988.     set a [$z 0 {set i 1} elseif 0 {set i 2} elseif 2>5 {set i 3} else {set i 4}]
  989.     set a
  990. } 4
  991. test if-8.5 {if cmd with computed command names: return value} {
  992.     set z if
  993.     $z 0 then {set a 22; concat abc} elseif 1 {concat def} {concat ghi}
  994. } def
  995. test if-9.1 {if cmd with namespace qualifiers} {
  996.     ::if {1} {set x 4}
  997. } 4
  998. # Test for incorrect "double evaluation semantics"
  999. test if-10.1 {delayed substitution of then body} {
  1000.     set j 0
  1001.     set if if
  1002.     # this is not compiled
  1003.     $if {[incr j] == 1} "
  1004.        set result $j
  1005.     "
  1006.     # this will be compiled
  1007.     proc p {} {
  1008. set j 0
  1009. if {[incr j]} "
  1010.     set result $j
  1011. "
  1012. set result
  1013.     }
  1014.     append result [p]
  1015. } {00}
  1016. test if-10.2 {delayed substitution of elseif expression} {
  1017.     set j 0
  1018.     set if if
  1019.     # this is not compiled
  1020.     $if {[incr j] == 0} {
  1021.        set result badthen
  1022.     } elseif "$j == 1" {
  1023.        set result badelseif
  1024.     } else {
  1025.        set result 0
  1026.     }
  1027.     # this will be compiled
  1028.     proc p {} {
  1029. set j 0
  1030. if {[incr j] == 0} {
  1031.     set result badthen
  1032. } elseif "$j == 1" {
  1033.     set result badelseif
  1034. } else {
  1035.     set result 0
  1036. }
  1037. set result
  1038.     }
  1039.     append result [p]
  1040. } {00}
  1041. test if-10.3 {delayed substitution of elseif body} {
  1042.     set j 0
  1043.     set if if
  1044.     # this is not compiled
  1045.     $if {[incr j] == 0} {
  1046.        set result badthen
  1047.     } elseif {1} "
  1048.        set result $j
  1049.     "
  1050.     # this will be compiled
  1051.     proc p {} {
  1052. set j 0
  1053. if {[incr j] == 0} {
  1054.     set result badthen
  1055. } elseif {1} "
  1056.     set result $j
  1057. "
  1058.     }
  1059.     append result [p]
  1060. } {00}
  1061. test if-10.4 {delayed substitution of else body} {
  1062.     set j 0
  1063.     if {[incr j] == 0} {
  1064.        set result badthen
  1065.     } else "
  1066.        set result $j
  1067.     "
  1068.     set result
  1069. } {0}
  1070. test if-10.5 {substituted control words} {
  1071.     set then then; proc then {} {return badthen}
  1072.     set else else; proc else {} {return badelse}
  1073.     set elseif elseif; proc elseif {} {return badelseif}
  1074.     list [catch {if 1 $then {if 0 {} $elseif 1 {if 0 {} $else {list ok}}}} a] $a
  1075. } {0 ok}
  1076. test if-10.6 {double invocation of variable traces} {
  1077.     set iftracecounter 0
  1078.     proc iftraceproc {args} {
  1079.        upvar #0 iftracecounter counter
  1080.        set argc [llength $args]
  1081.        set extraargs [lrange $args 0 [expr {$argc - 4}]]
  1082.        set name [lindex $args [expr {$argc - 3}]]
  1083.        upvar 1 $name var
  1084.        if {[incr counter] % 2 == 1} {
  1085.            set var "$counter oops [concat $extraargs]"
  1086.        } else {
  1087.            set var "$counter + [concat $extraargs]"
  1088.        }
  1089.     }
  1090.     trace variable iftracevar r [list iftraceproc 10]
  1091.     list [catch {if "$iftracevar + 20" {}} a] $a 
  1092.         [catch {if "$iftracevar + 20" {}} b] $b 
  1093.         [unset iftracevar iftracecounter]
  1094. } {1 {syntax error in expression "1 oops 10 + 20": extra tokens at end of expression} 0 {} {}}
  1095. # cleanup
  1096. ::tcltest::cleanupTests
  1097. return