diff options
Diffstat (limited to 'tests/source.test')
-rw-r--r-- | tests/source.test | 200 |
1 files changed, 75 insertions, 125 deletions
diff --git a/tests/source.test b/tests/source.test index 1e5b732..e79b211 100644 --- a/tests/source.test +++ b/tests/source.test @@ -18,12 +18,7 @@ if {[catch {package require tcltest 2.1}]} { } namespace eval ::tcl::test::source { - namespace import ::tcltest::test - namespace import ::tcltest::testConstraint - namespace import ::tcltest::cleanupTests - namespace import ::tcltest::makeFile - namespace import ::tcltest::removeFile - namespace import ::tcltest::customMatch + namespace import ::tcltest::* test source-1.1 {source command} -setup { set x "old x value" @@ -40,7 +35,6 @@ test source-1.1 {source command} -setup { } -cleanup { removeFile source.file } -result {22 33 44} - test source-1.2 {source command} -setup { set sourcefile [makeFile {list result} source.file] } -body { @@ -48,7 +42,6 @@ test source-1.2 {source command} -setup { } -cleanup { removeFile source.file } -result result - test source-1.3 {source command} -setup { set sourcefile [makeFile {} source.file] set fd [open $sourcefile w] @@ -92,7 +85,6 @@ test source-2.3 {source error conditions} -setup { (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 { @@ -100,7 +92,6 @@ test source-2.4 {source error conditions} -setup { } -cleanup { removeFile source.file } -returnCodes break - test source-2.5 {source error conditions} -setup { set sourcefile [makeFile {continue} source.file] } -body { @@ -108,7 +99,6 @@ test source-2.5 {source error conditions} -setup { } -cleanup { removeFile source.file } -returnCodes continue - test source-2.6 {source error conditions} -setup { set sourcefile [makeFile {} _non_existent_] removeFile _non_existent_ @@ -117,21 +107,18 @@ test source-2.6 {source error conditions} -setup { } -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] - set saveencoding [encoding system] } -body { - encoding system utf-8 set out [open $sourcefile w] + fconfigure $out -encoding utf-8 puts $out "\ufffeset y new-y" close $out set y old-y - source $sourcefile + source -encoding utf-8 $sourcefile return $y } -cleanup { removeFile $sourcefile - encoding system $saveencoding } -result {new-y} test source-3.1 {return in middle of source file} -setup { @@ -148,7 +135,6 @@ test source-3.1 {return in middle of source file} -setup { } -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 @@ -160,7 +146,6 @@ test source-3.2 {return with special code etc.} -setup { } -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 @@ -174,7 +159,6 @@ test source-3.3 {return with special code etc.} -setup { } -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 @@ -188,7 +172,6 @@ test source-3.4 {return with special code etc.} -setup { } -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 @@ -204,110 +187,6 @@ test source-3.5 {return with special code etc.} -setup { invoked from within "source $sourcefile"} {a b c}} - -# Test for the Macintosh specfic features of the source command -test source-4.1 {source error conditions} -constraints macOnly -body { - source -rsrc _no_exist_ -} -result {The resource "_no_exist_" could not be loaded from application.} \ - -returnCodes error - -test source-4.2 {source error conditions} -constraints macOnly -body { - source -rsrcid bad_id -} -returnCodes error -result {expected integer but got "bad_id"} - -test source-4.3 {source error conditions} -constraints macOnly -body { - source -rsrc rsrcName fileName extra -} -returnCodes error -result {wrong # args: should be "source fileName" or "source -rsrc name ?fileName?" or "source -rsrcid id ?fileName?" or "source -encoding name fileName"} - -test source-4.4 {source error conditions} -constraints macOnly -body { - source non_switch rsrcName -} -returnCodes error -result {bad argument: should be "source fileName" or "source -rsrc name ?fileName?" or "source -rsrcid id ?fileName?" or "source -encoding name fileName"} - -test source-4.5 {source error conditions} -constraints macOnly -body { - source -bad_switch argument -} -returnCodes error -result {bad argument: should be "source fileName" or "source -rsrc name ?fileName?" or "source -rsrcid id ?fileName?" or "source -encoding name fileName"} - - -testConstraint testWriteTextResource \ - [llength [info commands testWriteTextResource]] - -test source-5.1 {source resource files} -constraints macOnly -setup { - set sourcefile [makeFile {} bad_file] - removeFile bad_file -} -body { - source -rsrc rsrcName $sourcefile -} -returnCodes error -match glob -result {Error finding the file: "*bad_file".} - -test source-5.2 {source resource files} -constraints macOnly -setup { - set sourcefile [makeFile {return} source.file] -} -body { - source -rsrc rsrcName $sourcefile -} -cleanup { - removeFile source.file -} -returnCodes error -match glob \ - -result {Error reading the file: "*source.file".} - -test source-5.3 {source resource files} -constraints { - macOnly testWriteTextResource -} -setup { - set msg2 unset - set rsrcFile [makeFile {} rsrc.file] - removeFile rsrc.file - testWriteTextResource -rsrc rsrcName -file $rsrc.file {set msg2 ok; return} -} -body { - set result [catch {source -rsrc rsrcName rsrc.file} msg] - list $msg2 $result $msg -} -cleanup { - removeFile rsrc.file -} -result [list ok 0 {}] - -test source-5.4 {source resource files} -constraints { - macOnly testWriteTextResource -} -setup { - set msg2 unset - set rsrsFile [makeFile {} rsrc.file] - removeFile rsrc.file - testWriteTextResource -rsrc fileRsrcName \ - -file $rsrcFile {set msg2 ok; return} -} -body { - source -rsrc fileRsrcName $rsrcFile - set result [catch {source -rsrc fileRsrcName} msg] - list $msg2 $result $msg -} -cleanup { - removeFile rsrc.file -} -result [list ok 1 {The resource "fileRsrcName" could not be loaded from application.}] - -test source-5.5 {source resource files} -constraints { - macOnly testWriteTextResource -} -setup { - set msg2 unset - set rsrcFile [makeFile {} rsrc.file] - removeFile rsrc.file - testWriteTextResource -rsrcid 200 \ - -file $rsrcFile {set msg2 hello; set msg3 bye} -} -body { - set result [catch {source -rsrcid 200 $rsrcFile} msg] - list $msg2 $result $msg -} -cleanup { - removeFile rsrc.file -} -result [list hello 0 bye] - -test source-5.6 {source resource files} -constraints { - macOnly testWriteTextResource -} -setup { - set msg2 unset - set rsrcFile [makeFile {} rsrc.file] - removeFile rsrc.file - testWriteTextResource -rsrcid 200 \ - -file $rsrcFile {set msg2 hello; error bad; set msg3 bye} -} -body { - set result [catch {source -rsrcid 200 rsrc.file} msg] - list $msg2 $result $msg -} -cleanup { - removeFile rsrc.file -} -result [list hello 1 bad] - - test source-6.1 {source is binary ok} -setup { # Note [makeFile] writes in the system encoding. # [source] defaults to reading in the system encoding. @@ -319,7 +198,6 @@ test source-6.1 {source is binary ok} -setup { } -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 { @@ -330,6 +208,78 @@ test source-6.2 {source skips everything after Ctrl-Z: Bug 2040} -setup { 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*} + cleanupTests } namespace delete ::tcl::test::source |