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