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

通讯编程

开发平台:

Visual C++

  1. # Functionality covered: this file contains a collection of tests for the
  2. # auto loading and namespaces.
  3. #
  4. # Sourcing this file into Tcl runs the tests and generates output for
  5. # errors. No output means no errors were found.
  6. #
  7. # Copyright (c) 1997 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: init.test,v 1.9.2.2 2004/10/26 20:14:36 dgp Exp $
  14. if {[lsearch [namespace children] ::tcltest] == -1} {
  15.     package require tcltest
  16.     namespace import -force ::tcltest::*
  17. }
  18. # Clear out any namespaces called test_ns_*
  19. catch {eval namespace delete [namespace children :: test_ns_*]}
  20. # Six cases - white box testing
  21. test init-1.1 {auto_qualify - absolute cmd - namespace} {
  22.     auto_qualify ::foo::bar ::blue
  23. } ::foo::bar
  24. test init-1.2 {auto_qualify - absolute cmd - global} {
  25.     auto_qualify ::global ::sub
  26. } global
  27. test init-1.3 {auto_qualify - no colons cmd - global} {
  28.     auto_qualify nocolons ::
  29. } nocolons 
  30. test init-1.4 {auto_qualify - no colons cmd - namespace} {
  31.     auto_qualify nocolons ::sub
  32. } {::sub::nocolons nocolons}
  33. test init-1.5 {auto_qualify - colons in cmd - global} {
  34.     auto_qualify foo::bar ::
  35. } ::foo::bar
  36. test init-1.6 {auto_qualify - colons in cmd - namespace} {
  37.     auto_qualify foo::bar ::sub
  38. } {::sub::foo::bar ::foo::bar}
  39. # Some additional tests
  40. test init-1.7 {auto_qualify - multiples colons 1} {
  41.     auto_qualify :::foo::::bar ::blue
  42. } ::foo::bar
  43. test init-1.8 {auto_qualify - multiple colons 2} {
  44.     auto_qualify :::foo ::bar
  45. } foo
  46. # we use a sub interp and auto_reset and double the tests because there is 2
  47. # places where auto_loading occur (before loading the indexes files and after)
  48. set testInterp [interp create]
  49. interp eval $testInterp [list set argv $argv]
  50. interp eval $testInterp [list package require tcltest]
  51. interp eval $testInterp [list namespace import -force ::tcltest::*]
  52. interp eval $testInterp {
  53. auto_reset
  54. catch {rename parray {}}
  55. test init-2.0 {load parray - stage 1} {
  56.     set ret [catch {parray} error]
  57.     rename parray {} ; # remove it, for the next test - that should not fail.
  58.     list $ret $error
  59. } {1 {wrong # args: should be "parray a ?pattern?"}}
  60. test init-2.1 {load parray - stage 2} {
  61.     set ret [catch {parray} error]
  62.     list $ret $error
  63. } {1 {wrong # args: should be "parray a ?pattern?"}}
  64. auto_reset
  65. catch {rename ::safe::setLogCmd {}}
  66. #unset auto_index(::safe::setLogCmd)
  67. #unset auto_oldpath
  68. test init-2.2 {load ::safe::setLogCmd - stage 1} {
  69.     ::safe::setLogCmd
  70.     rename ::safe::setLogCmd {} ; # should not fail
  71. } {}
  72. test init-2.3 {load ::safe::setLogCmd - stage 2} {
  73.     ::safe::setLogCmd
  74.     rename ::safe::setLogCmd {} ; # should not fail
  75. } {}
  76. auto_reset
  77. catch {rename ::safe::setLogCmd {}}
  78. test init-2.4 {load safe:::setLogCmd - stage 1} {
  79.     safe:::setLogCmd ; # intentionally 3 :
  80.     rename ::safe::setLogCmd {} ; # should not fail
  81. } {}
  82. test init-2.5 {load safe:::setLogCmd - stage 2} {
  83.     safe:::setLogCmd ; # intentionally 3 :
  84.     rename ::safe::setLogCmd {} ; # should not fail
  85. } {}
  86. auto_reset
  87. catch {rename ::safe::setLogCmd {}}
  88. test init-2.6 {load setLogCmd from safe:: - stage 1} {
  89.     namespace eval safe setLogCmd 
  90.     rename ::safe::setLogCmd {} ; # should not fail
  91. } {}
  92. test init-2.7 {oad setLogCmd from safe::  - stage 2} {
  93.     namespace eval safe setLogCmd 
  94.     rename ::safe::setLogCmd {} ; # should not fail
  95. } {}
  96. test init-2.8 {load tcl::HistAdd} -setup {
  97.     auto_reset
  98.     catch {rename ::tcl::HistAdd {}}
  99. } -body {
  100.     # 3 ':' on purpose
  101.     list [catch {tcl:::HistAdd} error] $error
  102. } -cleanup {
  103.     rename ::tcl::HistAdd {} ; 
  104. } -result {1 {wrong # args: should be "tcl:::HistAdd command ?exec?"}}
  105. test init-3.0 {random stuff in the auto_index, should still work} {
  106.     set auto_index(foo:::bar::blah) {
  107.         namespace eval foo {namespace eval bar {proc blah {} {return 1}}}
  108.     }
  109.     foo:::bar::blah
  110. } 1
  111. # Tests that compare the error stack trace generated when autoloading
  112. # with that generated when no autoloading is necessary.  Ideally they
  113. # should be the same.
  114. set count 0
  115. foreach arg [subst -nocommands -novariables {
  116. c
  117.                 {argument
  118.                 which spans
  119.                 multiple lines}
  120.                 {argument which is all on one line but which is of such great length that the Tcl C library will truncate it when appending it onto the global error stack}
  121.                 {argument which spans multiple lines
  122.                 and is long enough to be truncated and
  123. "               <- includes a false lead in the prune point search
  124.                 and must be longer still to force truncation}
  125.                 {contrived example: rare circumstance 
  126. where the point at which to prune the
  127. error stack cannot be uniquely determined.
  128. foo bar foo
  129. "}
  130.                 {contrived example: rare circumstance 
  131. where the point at which to prune the
  132. error stack cannot be uniquely determined.
  133. foo bar
  134. "}
  135. {argument that contains non-ASCII character, u20ac, and which is of such great length that it will be longer than 150 bytes so it will be truncated by the Tcl C library}
  136. }] {
  137.     test init-4.$count.0 {::errorInfo produced by [unknown]} {
  138. auto_reset
  139. catch {parray a b $arg}
  140. set first $::errorInfo
  141. catch {parray a b $arg}
  142. set second $::errorInfo
  143. string equal $first $second
  144.     } 1
  145.     test init-4.$count.1 {::errorInfo produced by [unknown]} {
  146. auto_reset
  147. namespace eval junk [list array set $arg [list 1 2 3 4]]
  148. trace variable ::junk::$arg r 
  149. "[list error [subst {Variable "$arg" is write-only}]] ;# "
  150. catch {parray ::junk::$arg}
  151. set first $::errorInfo
  152. catch {parray ::junk::$arg}
  153. set second $::errorInfo
  154. string equal $first $second
  155.     } 1
  156.     incr count
  157. }
  158. cleanupTests
  159. } ;#  End of [interp eval $testInterp]
  160. # cleanup
  161. interp delete $testInterp
  162. ::tcltest::cleanupTests
  163. return