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

通讯编程

开发平台:

Visual C++

  1. # Commands covered:  source
  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-2000 by Scriptics Corporation.
  10. # Contributions from Don Porter, NIST, 2003.  (not subject to US copyright)
  11. #
  12. # See the file "license.terms" for information on usage and redistribution
  13. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  14. #
  15. # RCS: @(#) $Id: source.test,v 1.8.2.2 2004/02/25 23:38:17 dgp Exp $
  16. if {[catch {package require tcltest 2.1}]} {
  17.     puts stderr "Skipping tests in [info script]. tcltest 2.1 required."
  18.     return
  19. }
  20. namespace eval ::tcl::test::source {
  21.     namespace import ::tcltest::test
  22.     namespace import ::tcltest::testConstraint
  23.     namespace import ::tcltest::cleanupTests
  24.     namespace import ::tcltest::makeFile
  25.     namespace import ::tcltest::removeFile
  26.     namespace import ::tcltest::customMatch
  27. test source-1.1 {source command} -setup {
  28.     set x "old x value"
  29.     set y "old y value"
  30.     set z "old z value"
  31.     set sourcefile [makeFile {
  32. set x 22
  33. set y 33
  34. set z 44
  35.     } source.file]
  36. } -body {
  37.     source $sourcefile
  38.     list $x $y $z
  39. } -cleanup {
  40.     removeFile source.file
  41. } -result {22 33 44}
  42. test source-1.2 {source command} -setup {
  43.     set sourcefile [makeFile {list result} source.file]
  44. } -body {
  45.     source $sourcefile
  46. } -cleanup {
  47.     removeFile source.file
  48. } -result result
  49. test source-1.3 {source command} -setup {
  50.     set sourcefile [makeFile {} source.file]
  51.     set fd [open $sourcefile w]
  52.     fconfigure $fd -translation lf
  53.     puts $fd "list a b c \"
  54.     puts $fd "d e f"
  55.     close $fd
  56. } -body {
  57.     source $sourcefile
  58. } -cleanup {
  59.     removeFile source.file
  60. } -result {a b c d e f}
  61. proc ListGlobMatch {expected actual} {
  62.     if {[llength $expected] != [llength $actual]} {
  63.         return 0
  64.     }
  65.     foreach e $expected a $actual {
  66.         if {![string match $e $a]} {
  67.             return 0
  68.         }
  69.     }
  70.     return 1
  71. }
  72. customMatch listGlob [namespace which ListGlobMatch]
  73. test source-2.3 {source error conditions} -setup {
  74.     set sourcefile [makeFile {
  75. set x 146
  76. error "error in sourced file"
  77. set y $x
  78.     } source.file]
  79. } -body {
  80.     list [catch {source $sourcefile} msg] $msg $::errorInfo
  81. } -cleanup {
  82.     removeFile source.file
  83. } -match listGlob -result [list 1 {error in sourced file} 
  84. {error in sourced file
  85.     while executing
  86. "error "error in sourced file""
  87.     (file "*source.file" line 3)
  88.     invoked from within
  89. "source $sourcefile"}]
  90. test source-2.4 {source error conditions} -setup {
  91.     set sourcefile [makeFile {break} source.file]
  92. } -body {
  93.     source $sourcefile
  94. } -cleanup {
  95.     removeFile source.file
  96. } -returnCodes break
  97. test source-2.5 {source error conditions} -setup {
  98.     set sourcefile [makeFile {continue} source.file]
  99. } -body {
  100.     source $sourcefile
  101. } -cleanup {
  102.     removeFile source.file
  103. } -returnCodes continue
  104. test source-2.6 {source error conditions} -setup {
  105.     set sourcefile [makeFile {} _non_existent_]
  106.     removeFile _non_existent_
  107. } -body {
  108.     list [catch {source $sourcefile} msg] $msg $::errorCode
  109. } -match listGlob -result [list 1 
  110. {couldn't read file "*_non_existent_": no such file or directory} 
  111. {POSIX ENOENT {no such file or directory}}]
  112. test source-3.1 {return in middle of source file} -setup {
  113.     set sourcefile [makeFile {
  114. set x new-x
  115. return allDone
  116. set y new-y
  117.     } source.file]
  118. } -body {
  119.     set x old-x
  120.     set y old-y
  121.     set z [source $sourcefile]
  122.     list $x $y $z
  123. } -cleanup {
  124.     removeFile source.file
  125. } -result {new-x old-y allDone}
  126. test source-3.2 {return with special code etc.} -setup {
  127.     set sourcefile [makeFile {
  128. set x new-x
  129. return -code break "Silly result"
  130. set y new-y
  131.     } source.file]
  132. } -body {
  133.    source $sourcefile
  134. } -cleanup {
  135.     removeFile source.file
  136. } -returnCodes break -result {Silly result}
  137. test source-3.3 {return with special code etc.} -setup {
  138.     set sourcefile [makeFile {
  139. set x new-x
  140. return -code error "Simulated error"
  141. set y new-y
  142.     } source.file]
  143. } -body {
  144.     list [catch {source $sourcefile} msg] $msg $::errorInfo $::errorCode
  145. } -cleanup {
  146.     removeFile source.file
  147. } -result {1 {Simulated error} {Simulated error
  148.     while executing
  149. "source $sourcefile"} NONE}
  150. test source-3.4 {return with special code etc.} -setup {
  151.     set sourcefile [makeFile {
  152. set x new-x
  153. return -code error -errorinfo "Simulated errorInfo stuff"
  154. set y new-y
  155.     } source.file]
  156. } -body {
  157.     list [catch {source $sourcefile} msg] $msg $::errorInfo $::errorCode
  158. } -cleanup {
  159.     removeFile source.file
  160. } -result {1 {} {Simulated errorInfo stuff
  161.     invoked from within
  162. "source $sourcefile"} NONE}
  163. test source-3.5 {return with special code etc.} -setup {
  164.     set sourcefile [makeFile {
  165. set x new-x
  166. return -code error -errorinfo "Simulated errorInfo stuff" 
  167. -errorcode {a b c}
  168. set y new-y
  169.     } source.file]
  170. } -body {
  171.     list [catch {source $sourcefile} msg] $msg $::errorInfo $::errorCode
  172. } -cleanup {
  173.     removeFile source.file
  174. } -result {1 {} {Simulated errorInfo stuff
  175.     invoked from within
  176. "source $sourcefile"} {a b c}}
  177. # Test for the Macintosh specfic features of the source command
  178. test source-4.1 {source error conditions} -constraints macOnly -body {
  179.     source -rsrc _no_exist_
  180. } -result {The resource "_no_exist_" could not be loaded from application.} 
  181.   -returnCodes error 
  182. test source-4.2 {source error conditions} -constraints macOnly -body {
  183.     source -rsrcid bad_id
  184. } -returnCodes error -result {expected integer but got "bad_id"}
  185. test source-4.3 {source error conditions} -constraints macOnly -body {
  186.     source -rsrc rsrcName fileName extra
  187. } -returnCodes error -result {wrong # args: should be "source fileName" or "source -rsrc name ?fileName?" or "source -rsrcid id ?fileName?" or "source -encoding name fileName"}
  188. test source-4.4 {source error conditions} -constraints macOnly -body {
  189.     source non_switch rsrcName
  190. } -returnCodes error -result {bad argument: should be "source fileName" or "source -rsrc name ?fileName?" or "source -rsrcid id ?fileName?" or "source -encoding name fileName"}
  191. test source-4.5 {source error conditions} -constraints macOnly -body {
  192.     source -bad_switch argument
  193. } -returnCodes error -result {bad argument: should be "source fileName" or "source -rsrc name ?fileName?" or "source -rsrcid id ?fileName?" or "source -encoding name fileName"}
  194.  
  195. testConstraint testWriteTextResource 
  196. [llength [info commands testWriteTextResource]]
  197. test source-5.1 {source resource files} -constraints macOnly -setup {
  198.     set sourcefile [makeFile {} bad_file]
  199.     removeFile bad_file
  200. } -body {
  201.     source -rsrc rsrcName $sourcefile
  202. } -returnCodes error -match glob -result {Error finding the file: "*bad_file".}
  203. test source-5.2 {source resource files} -constraints macOnly -setup {
  204.     set sourcefile [makeFile {return} source.file]
  205. } -body {
  206.     source -rsrc rsrcName $sourcefile
  207. } -cleanup {
  208.     removeFile source.file
  209. } -returnCodes error -match glob 
  210.   -result {Error reading the file: "*source.file".}
  211. test source-5.3 {source resource files} -constraints {
  212.     macOnly testWriteTextResource
  213. } -setup {
  214.     set msg2 unset
  215.     set rsrcFile [makeFile {} rsrc.file]
  216.     removeFile rsrc.file
  217.     testWriteTextResource -rsrc rsrcName -file $rsrc.file {set msg2 ok; return}
  218. } -body {
  219.     set result [catch {source -rsrc rsrcName rsrc.file} msg]
  220.     list $msg2 $result $msg
  221. } -cleanup {
  222.     removeFile rsrc.file
  223. } -result [list ok 0 {}]
  224. test source-5.4 {source resource files} -constraints {
  225.     macOnly testWriteTextResource
  226. } -setup {
  227.     set msg2 unset
  228.     set rsrsFile [makeFile {} rsrc.file]
  229.     removeFile rsrc.file
  230.     testWriteTextResource -rsrc fileRsrcName 
  231.     -file $rsrcFile {set msg2 ok; return}
  232. } -body {
  233.     source -rsrc fileRsrcName $rsrcFile
  234.     set result [catch {source -rsrc fileRsrcName} msg]    
  235.     list $msg2 $result $msg
  236. } -cleanup {
  237.     removeFile rsrc.file
  238. } -result [list ok 1 {The resource "fileRsrcName" could not be loaded from application.}]
  239. test source-5.5 {source resource files} -constraints {
  240.     macOnly testWriteTextResource
  241. } -setup {
  242.     set msg2 unset
  243.     set rsrcFile [makeFile {} rsrc.file]
  244.     removeFile rsrc.file
  245.     testWriteTextResource -rsrcid 200 
  246.     -file $rsrcFile {set msg2 hello; set msg3 bye}
  247. } -body {
  248.     set result [catch {source -rsrcid 200 $rsrcFile} msg]
  249.     list $msg2 $result $msg
  250. } -cleanup {
  251.     removeFile rsrc.file
  252. } -result [list hello 0 bye]
  253. test source-5.6 {source resource files} -constraints {
  254.     macOnly testWriteTextResource
  255. } -setup {
  256.     set msg2 unset
  257.     set rsrcFile [makeFile {} rsrc.file]
  258.     removeFile rsrc.file
  259.     testWriteTextResource -rsrcid 200 
  260.     -file $rsrcFile {set msg2 hello; error bad; set msg3 bye}
  261. } -body {
  262.     set result [catch {source -rsrcid 200 rsrc.file} msg]
  263.     list $msg2 $result $msg
  264. } -cleanup {
  265.     removeFile rsrc.file
  266. } -result [list hello 1 bad]
  267. test source-6.1 {source is binary ok} -setup {
  268.     # Note [makeFile] writes in the system encoding.
  269.     # [source] defaults to reading in the system encoding.
  270.     set sourcefile [makeFile [list set x "a bc"] source.file]
  271. } -body {
  272.     set x {}
  273.     source $sourcefile
  274.     string length $x
  275. } -cleanup {
  276.     removeFile source.file
  277. } -result 5
  278. test source-6.2 {source skips everything after Ctrl-Z: Bug 2040} -setup {
  279.     set sourcefile [makeFile "set x ab32c" source.file]
  280. } -body {
  281.     set x {}
  282.     source $sourcefile
  283.     string length $x
  284. } -cleanup {
  285.     removeFile source.file
  286. } -result 2
  287. cleanupTests
  288. }
  289. namespace delete ::tcl::test::source
  290. return