OpenFPGA/libs/EXTERNAL/tcl8.6.12/tests/source.test

313 lines
8.9 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Commands covered: source
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# Copyright (c) 1994-1996 Sun Microsystems, Inc.
# Copyright (c) 1998-2000 by Scriptics Corporation.
# Contributions from Don Porter, NIST, 2003. (not subject to US copyright)
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
if {[catch {package require tcltest 2.1}]} {
puts stderr "Skipping tests in [info script]. tcltest 2.1 required."
return
}
namespace eval ::tcl::test::source {
namespace import ::tcltest::*
test source-1.1 {source command} -setup {
set x "old x value"
set y "old y value"
set z "old z value"
set sourcefile [makeFile {
set x 22
set y 33
set z 44
} source.file]
} -body {
source $sourcefile
list $x $y $z
} -cleanup {
removeFile source.file
} -result {22 33 44}
test source-1.2 {source command} -setup {
set sourcefile [makeFile {list result} source.file]
} -body {
source $sourcefile
} -cleanup {
removeFile source.file
} -result result
test source-1.3 {source command} -setup {
set sourcefile [makeFile {} source.file]
set fd [open $sourcefile w]
fconfigure $fd -translation lf
puts $fd "list a b c \\"
puts $fd "d e f"
close $fd
} -body {
source $sourcefile
} -cleanup {
removeFile source.file
} -result {a b c d e f}
proc ListGlobMatch {expected actual} {
if {[llength $expected] != [llength $actual]} {
return 0
}
foreach e $expected a $actual {
if {![string match $e $a]} {
return 0
}
}
return 1
}
customMatch listGlob [namespace which ListGlobMatch]
test source-2.3 {source error conditions} -setup {
set sourcefile [makeFile {
set x 146
error "error in sourced file"
set y $x
} source.file]
} -body {
list [catch {source $sourcefile} msg] $msg $::errorInfo
} -cleanup {
removeFile source.file
} -match listGlob -result [list 1 {error in sourced file} \
{error in sourced file
while executing
"error "error in sourced file""
(file "*source.file" line 3)
invoked from within
"source $sourcefile"}]
test source-2.4 {source error conditions} -setup {
set sourcefile [makeFile {break} source.file]
} -body {
source $sourcefile
} -cleanup {
removeFile source.file
} -returnCodes break
test source-2.5 {source error conditions} -setup {
set sourcefile [makeFile {continue} source.file]
} -body {
source $sourcefile
} -cleanup {
removeFile source.file
} -returnCodes continue
test source-2.6 {source error conditions} -setup {
set sourcefile [makeFile {} _non_existent_]
removeFile _non_existent_
} -body {
list [catch {source $sourcefile} msg] $msg $::errorCode
} -match listGlob -result [list 1 \
{couldn't read file "*_non_existent_": no such file or directory} \
{POSIX ENOENT {no such file or directory}}]
test source-2.7 {utf-8 with BOM} -setup {
set sourcefile [makeFile {} source.file]
} -body {
set out [open $sourcefile w]
fconfigure $out -encoding utf-8
puts $out "\ufeffset y new-y"
close $out
set y old-y
source -encoding utf-8 $sourcefile
return $y
} -cleanup {
removeFile $sourcefile
} -result {new-y}
test source-3.1 {return in middle of source file} -setup {
set sourcefile [makeFile {
set x new-x
return allDone
set y new-y
} source.file]
} -body {
set x old-x
set y old-y
set z [source $sourcefile]
list $x $y $z
} -cleanup {
removeFile source.file
} -result {new-x old-y allDone}
test source-3.2 {return with special code etc.} -setup {
set sourcefile [makeFile {
set x new-x
return -code break "Silly result"
set y new-y
} source.file]
} -body {
source $sourcefile
} -cleanup {
removeFile source.file
} -returnCodes break -result {Silly result}
test source-3.3 {return with special code etc.} -setup {
set sourcefile [makeFile {
set x new-x
return -code error "Simulated error"
set y new-y
} source.file]
} -body {
list [catch {source $sourcefile} msg] $msg $::errorInfo $::errorCode
} -cleanup {
removeFile source.file
} -result {1 {Simulated error} {Simulated error
while executing
"source $sourcefile"} NONE}
test source-3.4 {return with special code etc.} -setup {
set sourcefile [makeFile {
set x new-x
return -code error -errorinfo "Simulated errorInfo stuff"
set y new-y
} source.file]
} -body {
list [catch {source $sourcefile} msg] $msg $::errorInfo $::errorCode
} -cleanup {
removeFile source.file
} -result {1 {} {Simulated errorInfo stuff
invoked from within
"source $sourcefile"} NONE}
test source-3.5 {return with special code etc.} -setup {
set sourcefile [makeFile {
set x new-x
return -code error -errorinfo "Simulated errorInfo stuff" \
-errorcode {a b c}
set y new-y
} source.file]
} -body {
list [catch {source $sourcefile} msg] $msg $::errorInfo $::errorCode
} -cleanup {
removeFile source.file
} -result {1 {} {Simulated errorInfo stuff
invoked from within
"source $sourcefile"} {a b c}}
test source-4.1 {continuation line parsing} -setup {
set sourcefile [makeFile [string map {CL \\\n} {
format %s "[dict get [info frame 0] type]:CL[dict get [info frame 0] line]CL[dict get [info frame 0] line]CL[dict get [info frame 0] line]"
}] source.file]
} -body {
source $sourcefile
} -cleanup {
removeFile source.file
} -result {source: 3 4 5}
test source-6.1 {source is binary ok} -setup {
# Note [makeFile] writes in the system encoding.
# [source] defaults to reading in the system encoding.
set sourcefile [makeFile [list set x "a b\0c"] source.file]
} -body {
set x {}
source $sourcefile
string length $x
} -cleanup {
removeFile source.file
} -result 5
test source-6.2 {source skips everything after Ctrl-Z: Bug 2040} -setup {
set sourcefile [makeFile "set x ab\32c" source.file]
} -body {
set x {}
source $sourcefile
string length $x
} -cleanup {
removeFile source.file
} -result 2
test source-7.1 {source -encoding test} -setup {
set sourcefile [makeFile {} source.file]
file delete $sourcefile
set f [open $sourcefile w]
fconfigure $f -encoding utf-8
puts $f "set symbol(square-root) \u221A; set x correct"
close $f
} -body {
set x unset
source -encoding utf-8 $sourcefile
set x
} -cleanup {
removeFile source.file
} -result correct
test source-7.2 {source -encoding test} -setup {
# This tests for bad interactions between [source -encoding]
# and use of the Control-Z character (\u001A) as a cross-platform
# EOF character by [source]. Here we write out and the [source] a
# file that contains the byte \x1A, although not the character \u001A in
# the indicated encoding.
set sourcefile [makeFile {} source.file]
file delete $sourcefile
set f [open $sourcefile w]
fconfigure $f -encoding unicode
puts $f "set symbol(square-root) \u221A; set x correct"
close $f
} -body {
set x unset
source -encoding unicode $sourcefile
set x
} -cleanup {
removeFile source.file
} -result correct
test source-7.3 {source -encoding: syntax} -body {
# Have to spell out the -encoding option
source -e utf-8 no_file
} -returnCodes 1 -match glob -result {bad option*}
test source-7.4 {source -encoding: syntax} -setup {
set sourcefile [makeFile {} source.file]
} -body {
source -encoding no-such-encoding $sourcefile
} -cleanup {
removeFile source.file
} -returnCodes 1 -match glob -result {unknown encoding*}
test source-7.5 {source -encoding: correct operation} -setup {
set sourcefile [makeFile {} source.file]
file delete $sourcefile
set f [open $sourcefile w]
fconfigure $f -encoding utf-8
puts $f "proc \u20ac {} {return foo}"
close $f
} -body {
source -encoding utf-8 $sourcefile
\u20ac
} -cleanup {
removeFile source.file
rename \u20ac {}
} -result foo
test source-7.6 {source -encoding: mismatch encoding error} -setup {
set sourcefile [makeFile {} source.file]
file delete $sourcefile
set f [open $sourcefile w]
fconfigure $f -encoding utf-8
puts $f "proc \u20ac {} {return foo}"
close $f
} -body {
source -encoding ascii $sourcefile
\u20ac
} -cleanup {
removeFile source.file
} -returnCodes error -match glob -result {invalid command name*}
test source-8.1 {source and coroutine/yield} -setup {
set sourcefile [makeFile {} source.file]
file delete $sourcefile
} -body {
makeFile {yield 1; yield 2; return 3;} $sourcefile
coroutine coro apply {f {yield;source $f}} $sourcefile
list [coro] [coro] [coro] [info exist coro]
} -cleanup {
catch {rename coro {}}
removeFile source.file
} -result {1 2 3 0}
cleanupTests
}
namespace delete ::tcl::test::source
return
# Local Variables:
# mode: tcl
# End: