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

通讯编程

开发平台:

Visual C++

  1. # Commands covered:  rename
  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: rename.test,v 1.10 2001/09/12 20:28:50 dgp Exp $
  15. if {[lsearch [namespace children] ::tcltest] == -1} {
  16.     package require tcltest
  17.     namespace import -force ::tcltest::*
  18. }
  19. # Must eliminate the "unknown" command while the test is running,
  20. # especially if the test is being run in a program with its
  21. # own special-purpose unknown command.
  22. catch {rename unknown unknown.old}
  23. catch {rename r2 {}}
  24. proc r1 {} {return "procedure r1"}
  25. rename r1 r2
  26. test rename-1.1 {simple renaming} {
  27.     r2
  28. } {procedure r1}
  29. test rename-1.2 {simple renaming} {
  30.     list [catch r1 msg] $msg
  31. } {1 {invalid command name "r1"}}
  32. rename r2 {}
  33. test rename-1.3 {simple renaming} {
  34.     list [catch r2 msg] $msg
  35. } {1 {invalid command name "r2"}}
  36. # The test below is tricky because it renames a built-in command.
  37. # It's possible that the test procedure uses this command, so must
  38. # restore the command before calling test again.
  39. rename list l.new
  40. set a [catch list msg1]
  41. set b [l.new a b c]
  42. rename l.new list
  43. set c [catch l.new msg2]
  44. set d [list 111 222]
  45. test rename-2.1 {renaming built-in command} {
  46.     list $a $msg1 $b $c $msg2 $d
  47. } {1 {invalid command name "list"} {a b c} 1 {invalid command name "l.new"} {111 222}}
  48. test rename-3.1 {error conditions} {
  49.     list [catch {rename r1} msg] $msg $errorCode
  50. } {1 {wrong # args: should be "rename oldName newName"} NONE}
  51. test rename-3.2 {error conditions} {
  52.     list [catch {rename r1 r2 r3} msg] $msg $errorCode
  53. } {1 {wrong # args: should be "rename oldName newName"} NONE}
  54. test rename-3.3 {error conditions} {
  55.     proc r1 {} {}
  56.     proc r2 {} {}
  57.     list [catch {rename r1 r2} msg] $msg
  58. } {1 {can't rename to "r2": command already exists}}
  59. test rename-3.4 {error conditions} {
  60.     catch {rename r1 {}}
  61.     catch {rename r2 {}}
  62.     list [catch {rename r1 r2} msg] $msg
  63. } {1 {can't rename "r1": command doesn't exist}}
  64. test rename-3.5 {error conditions} {
  65.     catch {rename _non_existent_command {}}
  66.     list [catch {rename _non_existent_command {}} msg] $msg
  67. } {1 {can't delete "_non_existent_command": command doesn't exist}}
  68. catch {rename unknown {}}
  69. catch {rename unknown.old unknown}
  70. catch {rename bar {}}
  71. if {[info command testdel] == "testdel"} {
  72.     test rename-4.1 {reentrancy issues with command deletion and renaming} {
  73. set x {}
  74. testdel {} foo {lappend x deleted; rename bar {}; lappend x [info command bar]}
  75. rename foo bar
  76. lappend x |
  77. rename bar {}
  78. set x
  79.     } {| deleted {}}
  80.     test rename-4.2 {reentrancy issues with command deletion and renaming} {
  81. set x {}
  82. testdel {} foo {lappend x deleted; rename foo bar}
  83. rename foo {}
  84. set x
  85.     } {deleted}
  86.     test rename-4.3 {reentrancy issues with command deletion and renaming} {
  87. set x {}
  88. testdel {} foo {lappend x deleted; testdel {} foo {lappend x deleted2}}
  89. rename foo {}
  90. lappend x |
  91. rename foo {}
  92. set x
  93.     } {deleted | deleted2}
  94.     test rename-4.4 {reentrancy issues with command deletion and renaming} {
  95. set x {}
  96. testdel {} foo {lappend x deleted; rename foo bar}
  97. rename foo {}
  98. lappend x | [info command bar]
  99.     } {deleted | {}}
  100.     test rename-4.5 {reentrancy issues with command deletion and renaming} {
  101. set env(value) before
  102. interp create foo
  103. testdel foo cmd {set env(value) deleted}
  104. interp delete foo
  105. set env(value)
  106.     } {deleted}
  107.     test rename-4.6 {reentrancy issues with command deletion and renaming} {
  108. proc kill args {
  109.     interp delete foo
  110. }
  111. set env(value) before
  112. interp create foo
  113. foo alias kill kill
  114. testdel foo cmd {set env(value) deleted; kill}
  115. list [catch {foo eval {rename cmd {}}} msg] $msg $env(value)
  116.     } {0 {} deleted}
  117.     test rename-4.7 {reentrancy issues with command deletion and renaming} {
  118. proc kill args {
  119.     interp delete foo
  120. }
  121. set env(value) before
  122. interp create foo
  123. foo alias kill kill
  124. testdel foo cmd {set env(value) deleted; kill}
  125. list [catch {interp delete foo} msg] $msg $env(value)
  126.     } {0 {} deleted}
  127.     if {[info exists env(value)]} {
  128. unset env(value)
  129.     }
  130. }
  131. # Save the unknown procedure which is modified by the following test.
  132. catch {rename unknown unknown.old}
  133. test rename-5.1 {repeated rename deletion and redefinition of same command} {
  134.     set SAVED_UNKNOWN "proc unknown "
  135.     append SAVED_UNKNOWN "{[info args unknown.old]} "
  136.     append SAVED_UNKNOWN "{[info body unknown.old]}"
  137.     for {set i 0} {$i < 10} {incr i} {
  138.         eval $SAVED_UNKNOWN
  139.         tcl_wordBreakBefore "" 0
  140.         rename tcl_wordBreakBefore {}
  141.         rename unknown {}
  142.     }
  143. } {}
  144. catch {rename unknown {}}
  145. catch {rename unknown.old unknown}
  146. test rename-6.1 {old code invalidated (epoch incremented) when cmd with compile proc is renamed } {
  147.     proc x {} {
  148.         set a 123
  149.         set b [incr a]
  150.     }
  151.     x
  152.     rename incr incr.old
  153.     proc incr {} {puts "new incr called!"}
  154.     catch {x} msg
  155.     set msg
  156. } {wrong # args: should be "incr"}
  157. if {[info commands incr.old] != {}} {
  158.     catch {rename incr {}}
  159.     catch {rename incr.old incr}
  160. }
  161. ::tcltest::cleanupTests
  162. return