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

通讯编程

开发平台:

Visual C++

  1. # Commands covered:  load
  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) 1995 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: load.test,v 1.11.2.2 2007/08/14 06:34:13 das Exp $
  14. if {[lsearch [namespace children] ::tcltest] == -1} {
  15.     package require tcltest 2
  16.     namespace import -force ::tcltest::*
  17. }
  18. # Figure out what extension is used for shared libraries on this
  19. # platform.
  20. if {$tcl_platform(platform) == "macintosh"} {
  21.     puts "can't run dynamic library tests on macintosh machines"
  22.     ::tcltest::cleanupTests
  23.     return
  24. }
  25. # Tests require the existence of one of the DLLs in the dltest directory.
  26. set ext [info sharedlibextension]
  27. set testDir [file join [file dirname [info nameofexecutable]] dltest]
  28. set x [file join $testDir pkga$ext]
  29. set dll "[file tail $x]Required"
  30. ::tcltest::testConstraint $dll [file readable $x]
  31. # Tests also require that this DLL has not already been loaded.
  32. set loaded "[file tail $x]Loaded"
  33. set alreadyLoaded [info loaded]
  34. ::tcltest::testConstraint $loaded 
  35. [expr {![string match *pkga* $alreadyLoaded]}]
  36. set alreadyTotalLoaded [info loaded]
  37. # Certain tests require the 'teststaticpkg' command from tcltest
  38. ::tcltest::testConstraint teststaticpkg 
  39. [string compare {} [info commands teststaticpkg]]
  40. # Test load-10.1 requires the 'testsimplefilesystem' command from tcltest
  41. ::tcltest::testConstraint testsimplefilesystem 
  42. [string compare {} [info commands testsimplefilesystem]]
  43. test load-1.1 {basic errors} {} {
  44.     list [catch {load} msg] $msg
  45. } "1 {wrong # args: should be "load fileName ?packageName? ?interp?"}"
  46. test load-1.2 {basic errors} {} {
  47.     list [catch {load a b c d} msg] $msg
  48. } "1 {wrong # args: should be "load fileName ?packageName? ?interp?"}"
  49. test load-1.3 {basic errors} {} {
  50.     list [catch {load a b foobar} msg] $msg
  51. } {1 {could not find interpreter "foobar"}}
  52. test load-1.4 {basic errors} {} {
  53.     list [catch {load {}} msg] $msg
  54. } {1 {must specify either file name or package name}}
  55. test load-1.5 {basic errors} {} {
  56.     list [catch {load {} {}} msg] $msg
  57. } {1 {must specify either file name or package name}}
  58. test load-1.6 {basic errors} {} {
  59.     list [catch {load {} Unknown} msg] $msg
  60. } {1 {package "Unknown" isn't loaded statically}}
  61. test load-2.1 {basic loading, with guess for package name} 
  62. [list $dll $loaded] {
  63.     load [file join $testDir pkga$ext]
  64.     list [pkga_eq abc def] [info commands pkga_*]
  65. } {0 {pkga_eq pkga_quote}}
  66. interp create -safe child
  67. test load-2.2 {loading into a safe interpreter, with package name conversion} 
  68. [list $dll $loaded] {
  69.     load [file join $testDir pkgb$ext] pKgB child
  70.     list [child eval pkgb_sub 44 13] [catch {child eval pkgb_unsafe} msg] $msg 
  71.     [catch {pkgb_sub 12 10} msg2] $msg2
  72. } {31 1 {invalid command name "pkgb_unsafe"} 1 {invalid command name "pkgb_sub"}}
  73. test load-2.3 {loading with no _Init procedure} -constraints [list $dll $loaded] 
  74. -body {
  75.     list [catch {load [file join $testDir pkgc$ext] foo} msg] $msg
  76. } -match glob -result {1 {*couldn't find procedure Foo_Init}}
  77. test load-2.4 {loading with no _SafeInit procedure} [list $dll $loaded] {
  78.     list [catch {load [file join $testDir pkga$ext] {} child} msg] $msg
  79. } {1 {can't use package in a safe interpreter: no Pkga_SafeInit procedure}}
  80. test load-3.1 {error in _Init procedure, same interpreter} 
  81. [list $dll $loaded] {
  82.     list [catch {load [file join $testDir pkge$ext] pkge} msg] 
  83.     $msg $errorInfo $errorCode
  84. } {1 {couldn't open "non_existent": no such file or directory} {couldn't open "non_existent": no such file or directory
  85.     while executing
  86. "open non_existent"
  87.     invoked from within
  88. "if 44 {open non_existent}"
  89.     invoked from within
  90. "load [file join $testDir pkge$ext] pkge"} {POSIX ENOENT {no such file or directory}}}
  91. test load-3.2 {error in _Init procedure, slave interpreter} 
  92. [list $dll $loaded] {
  93.     catch {interp delete x}
  94.     interp create x
  95.     set errorCode foo
  96.     set errorInfo bar
  97.     set result [list [catch {load [file join $testDir pkge$ext] pkge x} msg] 
  98.     $msg $errorInfo $errorCode]
  99.     interp delete x
  100.     set result
  101. } {1 {couldn't open "non_existent": no such file or directory} {couldn't open "non_existent": no such file or directory
  102.     while executing
  103. "open non_existent"
  104.     invoked from within
  105. "if 44 {open non_existent}"
  106.     invoked from within
  107. "load [file join $testDir pkge$ext] pkge x"} {POSIX ENOENT {no such file or directory}}}
  108. test load-4.1 {reloading package into same interpreter} [list $dll $loaded] {
  109.     list [catch {load [file join $testDir pkga$ext] pkga} msg] $msg
  110. } {0 {}}
  111. test load-4.2 {reloading package into same interpreter} [list $dll $loaded] {
  112.     list [catch {load [file join $testDir pkga$ext] pkgb} msg] $msg
  113. } [list 1 "file "[file join $testDir pkga$ext]" is already loaded for package "Pkga""]
  114. test load-5.1 {file name not specified and no static package: pick default} 
  115. [list $dll $loaded] {
  116.     catch {interp delete x}
  117.     interp create x
  118.     load [file join $testDir pkga$ext] pkga
  119.     load {} pkga x
  120.     set result [info loaded x]
  121.     interp delete x
  122.     set result
  123. } [list [list [file join $testDir pkga$ext] Pkga]]
  124. # On some platforms, like SunOS 4.1.3, these tests can't be run because
  125. # they cause the process to exit.
  126. test load-6.1 {errors loading file} [list $dll $loaded nonPortable] {
  127.     catch {load foo foo}
  128. } {1}
  129. test load-7.1 {Tcl_StaticPackage procedure} [list teststaticpkg] {
  130.     set x "not loaded"
  131.     teststaticpkg Test 1 0
  132.     load {} Test
  133.     load {} Test child
  134.     list [set x] [child eval set x]
  135. } {loaded loaded}
  136. test load-7.2 {Tcl_StaticPackage procedure} [list teststaticpkg] {
  137.     set x "not loaded"
  138.     teststaticpkg Another 0 0
  139.     load {} Another
  140.     child eval {set x "not loaded"}
  141.     list [catch {load {} Another child} msg] $msg 
  142. [child eval set x] [set x]
  143. } {1 {can't use package in a safe interpreter: no Another_SafeInit procedure} {not loaded} loaded}
  144. test load-7.3 {Tcl_StaticPackage procedure} [list teststaticpkg] {
  145.     set x "not loaded"
  146.     teststaticpkg More 0 1
  147.     load {} More
  148.     set x
  149. } {not loaded}
  150. test load-7.4 {Tcl_StaticPackage procedure, redundant calls} 
  151.     [list teststaticpkg $dll $loaded] {
  152. teststaticpkg Double 0 1
  153. teststaticpkg Double 0 1
  154. info loaded
  155.     } [concat [list {{} Double} {{} More} {{} Another} {{} Test} [list [file join $testDir pkge$ext] Pkge] [list [file join $testDir pkgb$ext] Pkgb] [list [file join $testDir pkga$ext] Pkga]] $alreadyTotalLoaded]
  156. test load-8.1 {TclGetLoadedPackages procedure} [list teststaticpkg $dll $loaded] {
  157.     info loaded
  158. } [concat [list {{} Double} {{} More} {{} Another} {{} Test} [list [file join $testDir pkge$ext] Pkge] [list [file join $testDir pkgb$ext] Pkgb] [list [file join $testDir pkga$ext] Pkga]] $alreadyTotalLoaded]
  159. test load-8.2 {TclGetLoadedPackages procedure} [list teststaticpkg] {
  160.     list [catch {info loaded gorp} msg] $msg
  161. } {1 {could not find interpreter "gorp"}}
  162. test load-8.3 {TclGetLoadedPackages procedure} [list teststaticpkg $dll $loaded] {
  163.     list [info loaded {}] [info loaded child]
  164. } [list [concat [list {{} Double} {{} More} {{} Another} {{} Test} [list [file join $testDir pkga$ext] Pkga]] $alreadyLoaded] [list {{} Test} [list [file join $testDir pkgb$ext] Pkgb]]]
  165. test load-8.4 {TclGetLoadedPackages procedure} [list $dll $loaded teststaticpkg] {
  166.     load [file join $testDir pkgb$ext] pkgb
  167.     list [info loaded {}] [lsort [info commands pkgb_*]]
  168. } [list [concat [list [list [file join $testDir pkgb$ext] Pkgb] {{} Double} {{} More} {{} Another} {{} Test} [list [file join $testDir pkga$ext] Pkga]] $alreadyLoaded] {pkgb_sub pkgb_unsafe}]
  169. interp delete child
  170. test load-9.1 {Tcl_StaticPackage, load already-loaded package into another interp} 
  171.     -constraints {teststaticpkg} 
  172.     -setup {
  173. interp create child1
  174. interp create child2
  175. load {} Tcltest child1
  176. load {} Tcltest child2
  177.     } 
  178.     -body {
  179. child1 eval { teststaticpkg Loadninepointone 0 1 }
  180. child2 eval { teststaticpkg Loadninepointone 0 1 }
  181. list 
  182.     [child1 eval { info loaded {} }] 
  183.     [child2 eval { info loaded {} }]
  184.     } 
  185.     -result {{{{} Loadninepointone} {{} Tcltest}} {{{} Loadninepointone} {{} Tcltest}}} 
  186.     -cleanup { interp delete child1 ; interp delete child2 }
  187. test load-10.1 {load from vfs} 
  188.     -constraints [list $dll $loaded testsimplefilesystem] 
  189.     -setup {set dir [pwd]; cd $testDir; testsimplefilesystem 1} 
  190.     -body {list [catch {load simplefs:/pkgd$ext pkgd} msg] $msg} 
  191.     -result {0 {}} 
  192.     -cleanup {testsimplefilesystem 0; cd $dir; unset dir}
  193. # cleanup
  194. ::tcltest::cleanupTests
  195. return