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

通讯编程

开发平台:

Visual C++

  1. # Commands covered:  append lappend
  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) 1991-1993 The Regents of the University of California.
  8. # Copyright (c) 1994-1996 Sun Microsystems, Inc.
  9. # Copyright (c) 1998-1999 by Scriptics Corporation.
  10. #
  11. # See the file "license.terms" for information on usage and redistribution
  12. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  13. #
  14. # RCS: @(#) $Id: append.test,v 1.7.12.1 2006/10/05 11:44:04 msofer Exp $
  15. if {[lsearch [namespace children] ::tcltest] == -1} {
  16.     package require tcltest
  17.     namespace import -force ::tcltest::*
  18. }
  19. catch {unset x}
  20. test append-1.1 {append command} {
  21.     catch {unset x}
  22.     list [append x 1 2 abc "long string"] $x
  23. } {{12abclong string} {12abclong string}}
  24. test append-1.2 {append command} {
  25.     set x ""
  26.     list [append x first] [append x second] [append x third] $x
  27. } {first firstsecond firstsecondthird firstsecondthird}
  28. test append-1.3 {append command} {
  29.     set x "abcd"
  30.     append x
  31. } abcd
  32. test append-2.1 {long appends} {
  33.     set x ""
  34.     for {set i 0} {$i < 1000} {set i [expr $i+1]} {
  35. append x "foobar "
  36.     }
  37.     set y "foobar"
  38.     set y "$y $y $y $y $y $y $y $y $y $y"
  39.     set y "$y $y $y $y $y $y $y $y $y $y"
  40.     set y "$y $y $y $y $y $y $y $y $y $y "
  41.     expr {$x == $y}
  42. } 1
  43. test append-3.1 {append errors} {
  44.     list [catch {append} msg] $msg
  45. } {1 {wrong # args: should be "append varName ?value value ...?"}}
  46. test append-3.2 {append errors} {
  47.     set x ""
  48.     list [catch {append x(0) 44} msg] $msg
  49. } {1 {can't set "x(0)": variable isn't array}}
  50. test append-3.3 {append errors} {
  51.     catch {unset x}
  52.     list [catch {append x} msg] $msg
  53. } {1 {can't read "x": no such variable}}
  54. test append-4.1 {lappend command} {
  55.     catch {unset x}
  56.     list [lappend x 1 2 abc "long string"] $x
  57. } {{1 2 abc {long string}} {1 2 abc {long string}}}
  58. test append-4.2 {lappend command} {
  59.     set x ""
  60.     list [lappend x first] [lappend x second] [lappend x third] $x
  61. } {first {first second} {first second third} {first second third}}
  62. test append-4.3 {lappend command} {
  63.     proc foo {} {
  64. global x
  65. set x old
  66. unset x
  67. lappend x new
  68.     }
  69.     set result [foo]
  70.     rename foo {}
  71.     set result
  72. } {new}
  73. test append-4.4 {lappend command} {
  74.     set x {}
  75.     lappend x {  abc
  76. } {{  abc}
  77. test append-4.5 {lappend command} {
  78.     set x {}
  79.     lappend x { abc
  80. } {{ abc}
  81. test append-4.6 {lappend command} {
  82.     set x {1 2 3}
  83.     lappend x
  84. } {1 2 3}
  85. test append-4.7 {lappend command} {
  86.     set x "a{"
  87.     lappend x abc
  88. } "a\{ abc"
  89. test append-4.8 {lappend command} {
  90.     set x "\{"
  91.     lappend x abc
  92. } "\{ abc"
  93. test append-4.9 {lappend command} {
  94.     set x " {"
  95.     list [catch {lappend x abc} msg] $msg
  96. } {1 {unmatched open brace in list}}
  97. test append-4.10 {lappend command} {
  98.     set x " {"
  99.     list [catch {lappend x abc} msg] $msg
  100. } {1 {unmatched open brace in list}}
  101. test append-4.11 {lappend command} {
  102.     set x "{{{"
  103.     list [catch {lappend x abc} msg] $msg
  104. } {1 {unmatched open brace in list}}
  105. test append-4.12 {lappend command} {
  106.     set x "x {{{"
  107.     list [catch {lappend x abc} msg] $msg
  108. } {1 {unmatched open brace in list}}
  109. test append-4.13 {lappend command} {
  110.     set x "x{{{"
  111.     lappend x abc
  112. } "x\{\{\{ abc"
  113. test append-4.14 {lappend command} {
  114.     set x " "
  115.     lappend x abc
  116. } "abc"
  117. test append-4.15 {lappend command} {
  118.     set x "\ "
  119.     lappend x abc
  120. } "{ } abc"
  121. test append-4.16 {lappend command} {
  122.     set x "x "
  123.     lappend x abc
  124. } "x abc"
  125. test append-4.17 {lappend command} {
  126.     catch {unset x}
  127.     lappend x
  128. } {}
  129. test append-4.18 {lappend command} {
  130.     catch {unset x}
  131.     lappend x {}
  132. } {{}}
  133. test append-4.19 {lappend command} {
  134.     catch {unset x}
  135.     lappend x(0)
  136. } {}
  137. test append-4.20 {lappend command} {
  138.     catch {unset x}
  139.     lappend x(0) abc
  140. } {abc}
  141. unset x
  142. test append-4.21 {lappend command} {
  143.     set x "
  144.     list [catch {lappend x} msg] $msg
  145. } {1 {unmatched open quote in list}}
  146. test append-4.22 {lappend command} {
  147.     set x "
  148.     list [catch {lappend x abc} msg] $msg
  149. } {1 {unmatched open quote in list}}
  150. proc check {var size} {
  151.     set l [llength $var]
  152.     if {$l != $size} {
  153. return "length mismatch: should have been $size, was $l"
  154.     }
  155.     for {set i 0} {$i < $size} {set i [expr $i+1]} {
  156. set j [lindex $var $i]
  157. if {$j != "item $i"} {
  158.     return "element $i should have been "item $i", was "$j""
  159. }
  160.     }
  161.     return ok
  162. }
  163. test append-5.1 {long lappends} {
  164.     catch {unset x}
  165.     set x ""
  166.     for {set i 0} {$i < 300} {set i [expr $i+1]} {
  167. lappend x "item $i"
  168.     }
  169.     check $x 300
  170. } ok
  171. test append-6.1 {lappend errors} {
  172.     list [catch {lappend} msg] $msg
  173. } {1 {wrong # args: should be "lappend varName ?value value ...?"}}
  174. test append-6.2 {lappend errors} {
  175.     set x ""
  176.     list [catch {lappend x(0) 44} msg] $msg
  177. } {1 {can't set "x(0)": variable isn't array}}
  178. test append-7.1 {lappend-created var and error in trace on that var} {
  179.     catch {rename foo ""}
  180.     catch {unset x}
  181.     trace variable x w foo
  182.     proc foo {} {global x; unset x}
  183.     catch {lappend x 1}
  184.     proc foo {args} {global x; unset x}
  185.     info exists x
  186.     set x
  187.     lappend x 1
  188.     list [info exists x] [catch {set x} msg] $msg
  189. } {0 1 {can't read "x": no such variable}}
  190. test append-7.2 {lappend var triggers read trace} {
  191.     catch {unset myvar}
  192.     catch {unset ::result}
  193.     trace variable myvar r foo
  194.     proc foo {args} {append ::result $args}
  195.     lappend myvar a
  196.     list [catch {set ::result} msg] $msg
  197. } {0 {myvar {} r}}
  198. test append-7.3 {lappend var triggers read trace, array var} {
  199.     # The behavior of read triggers on lappend changed in 8.0 to
  200.     # not trigger them, and was changed back in 8.4.
  201.     catch {unset myvar}
  202.     catch {unset ::result}
  203.     trace variable myvar r foo
  204.     proc foo {args} {append ::result $args}
  205.     lappend myvar(b) a
  206.     list [catch {set ::result} msg] $msg
  207. } {0 {myvar b r}}
  208. test append-7.4 {lappend var triggers read trace, array var exists} {
  209.     catch {unset myvar}
  210.     catch {unset ::result}
  211.     set myvar(0) 1
  212.     trace variable myvar r foo
  213.     proc foo {args} {append ::result $args}
  214.     lappend myvar(b) a
  215.     list [catch {set ::result} msg] $msg
  216. } {0 {myvar b r}}
  217. test append-7.5 {append var does not trigger read trace} {
  218.     catch {unset myvar}
  219.     catch {unset ::result}
  220.     trace variable myvar r foo
  221.     proc foo {args} {append ::result $args}
  222.     append myvar a
  223.     info exists ::result
  224. } {0}
  225. catch {unset i x result y}
  226. catch {rename foo ""}
  227. catch {rename check ""}
  228. # cleanup
  229. ::tcltest::cleanupTests
  230. return