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

通讯编程

开发平台:

Visual C++

  1. # Commands covered:  uplevel
  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 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: uplevel.test,v 1.7 2002/08/08 18:19:37 msofer Exp $
  15. if {[lsearch [namespace children] ::tcltest] == -1} {
  16.     package require tcltest
  17.     namespace import -force ::tcltest::*
  18. }
  19. proc a {x y} {
  20.     newset z [expr $x+$y]
  21.     return $z
  22. }
  23. proc newset {name value} {
  24.     uplevel set $name $value
  25.     uplevel 1 {uplevel 1 {set xyz 22}}
  26. }
  27. test uplevel-1.1 {simple operation} {
  28.     set xyz 0
  29.     a 22 33
  30. } 55
  31. test uplevel-1.2 {command is another uplevel command} {
  32.     set xyz 0
  33.     a 22 33
  34.     set xyz
  35. } 22
  36. proc a1 {} {
  37.     b1
  38.     global a a1
  39.     set a $x
  40.     set a1 $y
  41. }
  42. proc b1 {} {
  43.     c1
  44.     global b b1
  45.     set b $x
  46.     set b1 $y
  47. }
  48. proc c1 {} {
  49.     uplevel 1 set x 111
  50.     uplevel #2 set y 222
  51.     uplevel 2 set x 333
  52.     uplevel #1 set y 444
  53.     uplevel 3 set x 555
  54.     uplevel #0 set y 666
  55. }
  56. a1
  57. test uplevel-2.1 {relative and absolute uplevel} {set a} 333
  58. test uplevel-2.2 {relative and absolute uplevel} {set a1} 444
  59. test uplevel-2.3 {relative and absolute uplevel} {set b} 111
  60. test uplevel-2.4 {relative and absolute uplevel} {set b1} 222
  61. test uplevel-2.5 {relative and absolute uplevel} {set x} 555
  62. test uplevel-2.6 {relative and absolute uplevel} {set y} 666
  63. test uplevel-3.1 {uplevel to same level} {
  64.     set x 33
  65.     uplevel #0 set x 44
  66.     set x
  67. } 44
  68. test uplevel-3.2 {uplevel to same level} {
  69.     set x 33
  70.     uplevel 0 set x
  71. } 33
  72. test uplevel-3.3 {uplevel to same level} {
  73.     set y xxx
  74.     proc a1 {} {set y 55; uplevel 0 set y 66; return $y}
  75.     a1
  76. } 66
  77. test uplevel-3.4 {uplevel to same level} {
  78.     set y zzz
  79.     proc a1 {} {set y 55; uplevel #1 set y}
  80.     a1
  81. } 55
  82. test uplevel-4.1 {error: non-existent level} {
  83.     list [catch c1 msg] $msg
  84. } {1 {bad level "#2"}}
  85. test uplevel-4.2 {error: non-existent level} {
  86.     proc c2 {} {uplevel 3 {set a b}}
  87.     list [catch c2 msg] $msg
  88. } {1 {bad level "3"}}
  89. test uplevel-4.3 {error: not enough args} {
  90.     list [catch uplevel msg] $msg
  91. } {1 {wrong # args: should be "uplevel ?level? command ?arg ...?"}}
  92. test uplevel-4.4 {error: not enough args} {
  93.     proc upBug {} {uplevel 1}
  94.     list [catch upBug msg] $msg
  95. } {1 {wrong # args: should be "uplevel ?level? command ?arg ...?"}}
  96. proc a2 {} {
  97.     uplevel a3
  98. }
  99. proc a3 {} {
  100.     global x y
  101.     set x [info level]
  102.     set y [info level 1]
  103. }
  104. a2
  105. test uplevel-5.1 {info level} {set x} 1
  106. test uplevel-5.2 {info level} {set y} a3
  107. namespace eval ns1 {
  108.     proc set args {return ::ns1}
  109. }
  110. proc a2 {} {
  111.     uplevel {set x ::}
  112. }
  113. test uplevel-6.1 {uplevel and shadowed cmds} {
  114.     set res [namespace eval ns1 a2]
  115.     lappend res [namespace eval ns2 a2]
  116.     lappend res [namespace eval ns1 a2]
  117.     namespace eval ns1 {rename set {}}
  118.     lappend res [namespace eval ns1 a2]
  119. } {::ns1 :: ::ns1 ::}
  120. # cleanup
  121. ::tcltest::cleanupTests
  122. return