diff options
Diffstat (limited to 'tests/source.test')
| -rw-r--r-- | tests/source.test | 229 | 
1 files changed, 109 insertions, 120 deletions
| diff --git a/tests/source.test b/tests/source.test index 6417af7..0235bd1 100644 --- a/tests/source.test +++ b/tests/source.test @@ -11,8 +11,6 @@  #  # See the file "license.terms" for information on usage and redistribution  # of this file, and for a DISCLAIMER OF ALL WARRANTIES. -# -# RCS: @(#) $Id: source.test,v 1.8.2.2 2004/02/25 23:38:17 dgp Exp $  if {[catch {package require tcltest 2.1}]} {      puts stderr "Skipping tests in [info script]. tcltest 2.1 required." @@ -20,13 +18,8 @@ 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"      set y "old y value" @@ -42,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 { @@ -50,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] @@ -94,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 { @@ -102,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 { @@ -110,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_ @@ -119,7 +107,19 @@ 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] +} -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 { @@ -135,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 @@ -147,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 @@ -161,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 @@ -175,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 @@ -191,109 +187,15 @@ 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] +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 -rsrc rsrcName $sourcefile +    source $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] - +} -result {source: 3 4 5}  test source-6.1 {source is binary ok} -setup {      # Note [makeFile] writes in the system encoding. @@ -306,7 +208,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 { @@ -317,7 +218,95 @@ 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*} + +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: | 
