diff options
Diffstat (limited to 'tests/fileName.test')
-rw-r--r-- | tests/fileName.test | 1199 |
1 files changed, 561 insertions, 638 deletions
diff --git a/tests/fileName.test b/tests/fileName.test index 68c5592..51f00d1 100644 --- a/tests/fileName.test +++ b/tests/fileName.test @@ -1,20 +1,23 @@ # This file tests the filename manipulation routines. # -# 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. +# 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) 1995-1996 Sun Microsystems, Inc. # Copyright (c) 1999 by Scriptics Corporation. # -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. -if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest +if {"::tcltest" ni [namespace children]} { + package require tcltest 2 namespace import -force ::tcltest::* } +::tcltest::loadTestedCommands +catch [list package require -exact Tcltest [info patchlevel]] + testConstraint testsetplatform [llength [info commands testsetplatform]] testConstraint testtranslatefilename [llength [info commands testtranslatefilename]] testConstraint linkDirectory 1 @@ -25,21 +28,28 @@ if {[testConstraint win]} { testConstraint linkDirectory 0 } testConstraint symbolicLinkFile 0 + testConstraint sharedCdrive [expr {![catch {cd //[info hostname]/c}]}] } +# This match compares the first two words of the result. If the wanted result +# is "equal", then this is successful if the words are equal. If the wanted +# result is "not equal", then this is successful if the words are different. +customMatch compareWords {apply {{a b} { + lassign $b w1 w2 + expr {$a eq "equal" ? $w1 eq $w2 : $w1 ne $w2} +}}} +proc touch filename {catch {close [open $filename w]}} global env if {[testConstraint testsetplatform]} { set platform [testgetplatform] } - -# Caution: when using 'testsetplatform' to test different file -# name platform descriptions in this file, one must be very -# careful not to combine such platform manipulation with -# commands like 'cd', 'pwd'. That is because the latter commands -# operate on the real filesystem but will potentially have their -# logic routed through the wrong generic code paths if we've -# used 'testsetplatform'. This can lead to serious problems, -# even crashes. + +# Caution: when using 'testsetplatform' to test different file name platform +# descriptions in this file, one must be very careful not to combine such +# platform manipulation with commands like 'cd', 'pwd'. That is because the +# latter commands operate on the real filesystem but will potentially have +# their logic routed through the wrong generic code paths if we've used +# 'testsetplatform'. This can lead to serious problems, even crashes. test filename-1.1 {Tcl_GetPathType: unix} {testsetplatform} { testsetplatform unix file pathtype / @@ -210,36 +220,33 @@ test filename-4.18 {Tcl_SplitPath: unix} {testsetplatform} { testsetplatform unix file split foo/bar~/baz } {foo bar~ baz} - if {[testConstraint testsetplatform]} { testsetplatform $platform } - -test filename-4.19 {Tcl_SplitPath} { +test filename-4.19 {Tcl_SplitPath} -setup { set oldDir [pwd] - set res [catch { - cd [temporaryDirectory] - file mkdir tildetmp - set nastydir [file join tildetmp ./~tilde] - file mkdir $nastydir - set norm [file normalize $nastydir] - cd tildetmp - cd ./~tilde - glob -nocomplain * - set idx [string first tildetmp $norm] - set norm [string range $norm $idx end] - # fix path away so all platforms are the same - regsub {(.*):$} $norm {\1} norm - regsub -all ":" $norm "/" norm - # make sure we can delete the directory we created - cd $oldDir - file delete -force $nastydir - set norm - } err] + cd [temporaryDirectory] +} -body { + file mkdir tildetmp + set nastydir [file join tildetmp ./~tilde] + file mkdir $nastydir + set norm [file normalize $nastydir] + cd tildetmp + cd ./~tilde + glob -nocomplain * + set idx [string first tildetmp $norm] + set norm [string range $norm $idx end] + # fix path away so all platforms are the same + regsub {(.*):$} $norm {\1} norm + regsub -all ":" $norm "/" norm + # make sure we can delete the directory we created + cd $oldDir + file delete -force $nastydir + return $norm +} -cleanup { cd $oldDir catch {file delete -force [file join [temporaryDirectory] tildetmp]} - list $res $err -} {0 tildetmp/~tilde} +} -result {tildetmp/~tilde} test filename-6.1 {Tcl_SplitPath: win} {testsetplatform} { testsetplatform win @@ -435,7 +442,6 @@ test filename-7.18 {Tcl_JoinPath: unix} {testsetplatform} { file join /// a b } "/a/b" - test filename-9.1 {Tcl_JoinPath: win} {testsetplatform} { testsetplatform win file join a b @@ -512,25 +518,25 @@ test filename-9.19 {Tcl_JoinPath: win} {testsetplatform} { testsetplatform win set res {} lappend res \ - [file join {C:\foo\bar}] \ - [file join C:/blah {C:\foo\bar}] \ - [file join C:/blah C:/blah {C:\foo\bar}] + [file join {C:\foo\bar}] \ + [file join C:/blah {C:\foo\bar}] \ + [file join C:/blah C:/blah {C:\foo\bar}] } {C:/foo/bar C:/foo/bar C:/foo/bar} test filename-9.19.1 {Tcl_JoinPath: win} {testsetplatform} { testsetplatform win set res {} lappend res \ - [file join {foo\bar}] \ - [file join C:/blah {foo\bar}] \ - [file join C:/blah C:/blah {foo\bar}] + [file join {foo\bar}] \ + [file join C:/blah {foo\bar}] \ + [file join C:/blah C:/blah {foo\bar}] } {foo/bar C:/blah/foo/bar C:/blah/foo/bar} test filename-9.19.2 {Tcl_JoinPath: win} {testsetplatform win} { testsetplatform win set res {} lappend res \ - [file join {foo\bar}] \ - [file join [pwd] {foo\bar}] \ - [file join [pwd] [pwd] {foo\bar}] + [file join {foo\bar}] \ + [file join [pwd] {foo\bar}] \ + [file join [pwd] [pwd] {foo\bar}] set nres {} foreach elt $res { lappend nres [string map [list [pwd] pwd] $elt] @@ -541,599 +547,563 @@ test filename-9.20 {Tcl_JoinPath: unix} {testsetplatform} { testsetplatform unix set res {} lappend res \ - [file join {/foo/bar}] \ - [file join /x {/foo/bar}] \ - [file join /x /x {/foo/bar}] + [file join {/foo/bar}] \ + [file join /x {/foo/bar}] \ + [file join /x /x {/foo/bar}] } {/foo/bar /foo/bar /foo/bar} test filename-9.23 {Tcl_JoinPath: win} {testsetplatform} { testsetplatform win set res {} lappend res \ - [file join {foo\bar}] \ - [file join C:/blah {foo\bar}] \ - [file join C:/blah C:/blah {foo\bar}] + [file join {foo\bar}] \ + [file join C:/blah {foo\bar}] \ + [file join C:/blah C:/blah {foo\bar}] string map [list C:/blah ""] $res } {foo/bar /foo/bar /foo/bar} test filename-9.24 {Tcl_JoinPath: unix} {testsetplatform} { testsetplatform unix set res {} lappend res \ - [file join {foo/bar}] \ - [file join /x {foo/bar}] \ - [file join /x /x {foo/bar}] + [file join {foo/bar}] \ + [file join /x {foo/bar}] \ + [file join /x /x {foo/bar}] string map [list /x ""] $res } {foo/bar /foo/bar /foo/bar} -test filename-10.1 {Tcl_TranslateFileName} {testsetplatform} { +test filename-10.1 {Tcl_TranslateFileName} -body { testsetplatform unix - list [catch {testtranslatefilename foo} msg] $msg -} {0 foo} -test filename-10.2 {Tcl_TranslateFileName} {testsetplatform} { + testtranslatefilename foo +} -result {foo} -constraints {testsetplatform testtranslatefilename} +test filename-10.2 {Tcl_TranslateFileName} -body { testsetplatform windows - list [catch {testtranslatefilename {c:/foo}} msg] $msg -} {0 {c:\foo}} -test filename-10.3 {Tcl_TranslateFileName} {testsetplatform} { + testtranslatefilename {c:/foo} +} -result {c:\foo} -constraints {testsetplatform testtranslatefilename} +test filename-10.3 {Tcl_TranslateFileName} -body { testsetplatform windows - list [catch {testtranslatefilename {c:/\\foo/}} msg] $msg -} {0 {c:\foo}} -test filename-10.3.1 {Tcl_TranslateFileName} {testsetplatform} { + testtranslatefilename {c:/\\foo/} +} -result {c:\foo} -constraints {testsetplatform testtranslatefilename} +test filename-10.3.1 {Tcl_TranslateFileName} -body { testsetplatform windows - list [catch {testtranslatefilename {c://///}} msg] $msg -} {0 c:\\} -test filename-10.6 {Tcl_TranslateFileName} {testsetplatform} { + testtranslatefilename {c://///} +} -result c:\\ -constraints {testsetplatform testtranslatefilename} +test filename-10.6 {Tcl_TranslateFileName} -setup { global env set temp $env(HOME) +} -constraints {testsetplatform testtranslatefilename} -body { set env(HOME) "/home/test" testsetplatform unix - set result [list [catch {testtranslatefilename ~/foo} msg] $msg] + testtranslatefilename ~/foo +} -cleanup { set env(HOME) $temp - set result -} {0 /home/test/foo} -test filename-10.7 {Tcl_TranslateFileName} {testsetplatform} { +} -result {/home/test/foo} +test filename-10.7 {Tcl_TranslateFileName} -setup { global env set temp $env(HOME) +} -constraints {testsetplatform testtranslatefilename} -body { unset env(HOME) testsetplatform unix - set result [list [catch {testtranslatefilename ~/foo} msg] $msg] + testtranslatefilename ~/foo +} -returnCodes error -cleanup { set env(HOME) $temp - set result -} {1 {couldn't find HOME environment variable to expand path}} -test filename-10.8 {Tcl_TranslateFileName} {testsetplatform} { +} -result {couldn't find HOME environment variable to expand path} +test filename-10.8 {Tcl_TranslateFileName} -setup { global env set temp $env(HOME) +} -constraints {testsetplatform testtranslatefilename} -body { set env(HOME) "/home/test" testsetplatform unix - set result [list [catch {testtranslatefilename ~} msg] $msg] + testtranslatefilename ~ +} -cleanup { set env(HOME) $temp - set result -} {0 /home/test} -test filename-10.9 {Tcl_TranslateFileName} {testsetplatform} { +} -result {/home/test} +test filename-10.9 {Tcl_TranslateFileName} -setup { global env set temp $env(HOME) +} -constraints {testsetplatform testtranslatefilename} -body { set env(HOME) "/home/test/" testsetplatform unix - set result [list [catch {testtranslatefilename ~} msg] $msg] + testtranslatefilename ~ +} -cleanup { set env(HOME) $temp - set result -} {0 /home/test} -test filename-10.10 {Tcl_TranslateFileName} {testsetplatform} { +} -result {/home/test} +test filename-10.10 {Tcl_TranslateFileName} -setup { global env set temp $env(HOME) +} -constraints {testsetplatform testtranslatefilename} -body { set env(HOME) "/home/test/" testsetplatform unix - set result [list [catch {testtranslatefilename ~/foo} msg] $msg] + testtranslatefilename ~/foo +} -cleanup { set env(HOME) $temp - set result -} {0 /home/test/foo} -test filename-10.17 {Tcl_TranslateFileName} {testsetplatform} { +} -result {/home/test/foo} +test filename-10.17 {Tcl_TranslateFileName} -setup { global env set temp $env(HOME) +} -constraints {testsetplatform testtranslatefilename} -body { set env(HOME) "\\home\\" testsetplatform windows - set result [list [catch {testtranslatefilename ~/foo} msg] $msg] + testtranslatefilename ~/foo +} -cleanup { set env(HOME) $temp - set result -} {0 {\home\foo}} -test filename-10.18 {Tcl_TranslateFileName} {testsetplatform} { +} -result {\home\foo} +test filename-10.18 {Tcl_TranslateFileName} -setup { global env set temp $env(HOME) +} -constraints {testsetplatform testtranslatefilename} -body { set env(HOME) "\\home\\" testsetplatform windows - set result [list [catch {testtranslatefilename ~/foo\\bar} msg] $msg] + testtranslatefilename ~/foo\\bar +} -cleanup { set env(HOME) $temp - set result -} {0 {\home\foo\bar}} -test filename-10.19 {Tcl_TranslateFileName} {testsetplatform} { +} -result {\home\foo\bar} +test filename-10.19 {Tcl_TranslateFileName} -setup { global env set temp $env(HOME) +} -constraints {testsetplatform testtranslatefilename} -body { set env(HOME) "c:" testsetplatform windows - set result [list [catch {testtranslatefilename ~/foo} msg] $msg] + testtranslatefilename ~/foo +} -cleanup { set env(HOME) $temp - set result -} {0 c:foo} -test filename-10.20 {Tcl_TranslateFileName} {testtranslatefilename} { - list [catch {testtranslatefilename ~blorp/foo} msg] $msg -} {1 {user "blorp" doesn't exist}} -test filename-10.21 {Tcl_TranslateFileName} {testsetplatform} { +} -result {c:foo} +test filename-10.20 {Tcl_TranslateFileName} -returnCodes error -body { + testtranslatefilename ~blorp/foo +} -constraints {testtranslatefilename testtranslatefilename} \ + -result {user "blorp" doesn't exist} +test filename-10.21 {Tcl_TranslateFileName} -setup { global env set temp $env(HOME) +} -constraints {testsetplatform testtranslatefilename} -body { set env(HOME) "c:\\" testsetplatform windows - set result [list [catch {testtranslatefilename ~/foo} msg] $msg] + testtranslatefilename ~/foo +} -cleanup { set env(HOME) $temp - set result -} {0 {c:\foo}} -test filename-10.22 {Tcl_TranslateFileName} {testsetplatform} { +} -result {c:\foo} +test filename-10.22 {Tcl_TranslateFileName} -body { testsetplatform windows - list [catch {testtranslatefilename foo//bar} msg] $msg -} {0 {foo\bar}} - + testtranslatefilename foo//bar +} -constraints {testsetplatform testtranslatefilename} -result {foo\bar} if {[testConstraint testsetplatform]} { testsetplatform $platform } - -test filename-10.23 {Tcl_TranslateFileName} {nonPortable} { +test filename-10.23 {Tcl_TranslateFileName} -body { # this test fails if ~ouster is not /home/ouster - list [catch {testtranslatefilename ~ouster} msg] $msg -} {0 /home/ouster} -test filename-10.24 {Tcl_TranslateFileName} {nonPortable} { + testtranslatefilename ~ouster +} -constraints {nonPortable testtranslatefilename} -result {/home/ouster} +test filename-10.24 {Tcl_TranslateFileName} -body { # this test fails if ~ouster is not /home/ouster - list [catch {testtranslatefilename ~ouster/foo} msg] $msg -} {0 /home/ouster/foo} + testtranslatefilename ~ouster/foo +} -result {/home/ouster/foo} -constraints {nonPortable testtranslatefilename} - -test filename-11.1 {Tcl_GlobCmd} { - list [catch {glob} msg] $msg -} {1 {wrong # args: should be "glob ?switches? name ?name ...?"}} -test filename-11.2 {Tcl_GlobCmd} { - list [catch {glob -gorp} msg] $msg -} {1 {bad option "-gorp": must be -directory, -join, -nocomplain, -path, -tails, -types, or --}} -test filename-11.3 {Tcl_GlobCmd} { - list [catch {glob -nocomplai} msg] $msg -} {1 {wrong # args: should be "glob ?switches? name ?name ...?"}} -test filename-11.4 {Tcl_GlobCmd} { - list [catch {glob -nocomplain} msg] $msg -} {1 {wrong # args: should be "glob ?switches? name ?name ...?"}} -test filename-11.5 {Tcl_GlobCmd} { - list [catch {glob -nocomplain * ~xyqrszzz} msg] $msg -} {1 {user "xyqrszzz" doesn't exist}} -test filename-11.6 {Tcl_GlobCmd} { - list [catch {glob ~xyqrszzz} msg] $msg -} {1 {user "xyqrszzz" doesn't exist}} -test filename-11.7 {Tcl_GlobCmd} { - list [catch {glob -- -nocomplain} msg] $msg -} {1 {no files matched glob pattern "-nocomplain"}} -test filename-11.8 {Tcl_GlobCmd} { - list [catch {glob -nocomplain -- -nocomplain} msg] $msg -} {0 {}} -test filename-11.9 {Tcl_GlobCmd} {testsetplatform} { +test filename-11.1 {Tcl_GlobCmd} -returnCodes error -body { + glob +} -result {no files matched glob patterns ""} +test filename-11.2 {Tcl_GlobCmd} -returnCodes error -body { + glob -gorp +} -result {bad option "-gorp": must be -directory, -join, -nocomplain, -path, -tails, -types, or --} +test filename-11.3 {Tcl_GlobCmd} -body { + glob -nocomplai +} -result {} +test filename-11.4 {Tcl_GlobCmd} -body { + glob -nocomplain +} -result {} +test filename-11.5 {Tcl_GlobCmd} -returnCodes error -body { + glob -nocomplain * ~xyqrszzz +} -result {user "xyqrszzz" doesn't exist} +test filename-11.6 {Tcl_GlobCmd} -returnCodes error -body { + glob ~xyqrszzz +} -result {user "xyqrszzz" doesn't exist} +test filename-11.7 {Tcl_GlobCmd} -returnCodes error -body { + glob -- -nocomplain +} -result {no files matched glob pattern "-nocomplain"} +test filename-11.8 {Tcl_GlobCmd} -body { + glob -nocomplain -- -nocomplain +} -result {} +test filename-11.9 {Tcl_GlobCmd} -constraints {testsetplatform} -body { testsetplatform unix - list [catch {glob ~\\xyqrszzz/bar} msg] $msg -} {1 {user "\xyqrszzz" doesn't exist}} -test filename-11.10 {Tcl_GlobCmd} {testsetplatform} { + glob ~\\xyqrszzz/bar +} -returnCodes error -result {user "\xyqrszzz" doesn't exist} +test filename-11.10 {Tcl_GlobCmd} -constraints {testsetplatform} -body { testsetplatform unix - list [catch {glob -nocomplain ~\\xyqrszzz/bar} msg] $msg -} {1 {user "\xyqrszzz" doesn't exist}} -test filename-11.11 {Tcl_GlobCmd} {testsetplatform} { + glob -nocomplain ~\\xyqrszzz/bar +} -returnCodes error -result {user "\xyqrszzz" doesn't exist} +test filename-11.11 {Tcl_GlobCmd} -constraints {testsetplatform} -body { testsetplatform unix - list [catch {glob ~xyqrszzz\\/\\bar} msg] $msg -} {1 {user "xyqrszzz" doesn't exist}} -test filename-11.12 {Tcl_GlobCmd} {testsetplatform} { + glob ~xyqrszzz\\/\\bar +} -returnCodes error -result {user "xyqrszzz" doesn't exist} +test filename-11.12 {Tcl_GlobCmd} -constraints {testsetplatform} -setup { testsetplatform unix set home $env(HOME) +} -body { unset env(HOME) - set x [list [catch {glob ~/*} msg] $msg] + glob ~/* +} -returnCodes error -cleanup { set env(HOME) $home - set x -} {1 {couldn't find HOME environment variable to expand path}} - +} -result {couldn't find HOME environment variable to expand path} if {[testConstraint testsetplatform]} { testsetplatform $platform } - test filename-11.13 {Tcl_GlobCmd} { - list [catch {file join [lindex [glob ~] 0]} msg] $msg -} [list 0 [file join $env(HOME)]] - + file join [lindex [glob ~] 0] +} [file join $env(HOME)] set oldpwd [pwd] set oldhome $env(HOME) -cd [temporaryDirectory] +catch {cd [makeDirectory tcl[pid]]} set env(HOME) [pwd] file delete -force globTest file mkdir globTest/a1/b1 file mkdir globTest/a1/b2 file mkdir globTest/a2/b3 file mkdir globTest/a3 -close [open globTest/x1.c w] -close [open globTest/y1.c w] -close [open globTest/z1.c w] -close [open "globTest/weird name.c" w] -close [open globTest/a1/b1/x2.c w] -close [open globTest/a1/b2/y2.c w] - -catch {close [open globTest/.1 w]} -catch {close [open globTest/x,z1.c w]} - +touch globTest/x1.c +touch globTest/y1.c +touch globTest/z1.c +touch "globTest/weird name.c" +touch globTest/a1/b1/x2.c +touch globTest/a1/b2/y2.c +touch globTest/.1 +touch globTest/x,z1.c test filename-11.14 {Tcl_GlobCmd} { - list [catch {glob ~/globTest} msg] $msg -} [list 0 [list [file join $env(HOME) globTest]]] + glob ~/globTest +} [list [file join $env(HOME) globTest]] test filename-11.15 {Tcl_GlobCmd} { - list [catch {glob ~\\/globTest} msg] $msg -} [list 0 [list [file join $env(HOME) globTest]]] + glob ~\\/globTest +} [list [file join $env(HOME) globTest]] test filename-11.16 {Tcl_GlobCmd} { - list [catch {glob globTest} msg] $msg -} {0 globTest} - + glob globTest +} {globTest} set globname "globTest" set horribleglobname "glob\[\{Test" - test filename-11.17 {Tcl_GlobCmd} {unix} { - list [catch {lsort [glob -directory $globname *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ + lsort [glob -directory $globname *] +} [lsort [list [file join $globname a1] [file join $globname a2]\ [file join $globname a3]\ [file join $globname "weird name.c"]\ [file join $globname x,z1.c]\ [file join $globname x1.c]\ - [file join $globname y1.c] [file join $globname z1.c]]]] + [file join $globname y1.c] [file join $globname z1.c]]] test filename-11.17.1 {Tcl_GlobCmd} {win} { - list [catch {lsort [glob -directory $globname *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ - [file join $globname .1]\ + lsort [glob -directory $globname *] +} [lsort [list [file join $globname a1] [file join $globname a2]\ + [file join $globname .1]\ [file join $globname a3]\ [file join $globname "weird name.c"]\ [file join $globname x,z1.c]\ [file join $globname x1.c]\ - [file join $globname y1.c] [file join $globname z1.c]]]] -test filename-11.17.2 {Tcl_GlobCmd} {notRoot linkDirectory} { + [file join $globname y1.c] [file join $globname z1.c]]] +test filename-11.17.2 {Tcl_GlobCmd} -setup { set dir [pwd] - set ret "error in test" - if {[catch { - cd $globname - file link -symbolic link a1 - cd $dir - set ret [list [catch { - lsort [glob -directory $globname -join * b1] - } msg] $msg] - }]} { - cd $dir - } +} -constraints {notRoot linkDirectory} -body { + cd $globname + file link -symbolic link a1 + cd $dir + lsort [glob -directory $globname -join * b1] +} -cleanup { + cd $dir file delete [file join $globname link] - set ret -} [list 0 [lsort [list [file join $globname a1 b1] \ - [file join $globname link b1]]]] +} -result [list [file join $globname a1 b1] \ + [file join $globname link b1]] # Simpler version of the above test to illustrate a given bug. -test filename-11.17.3 {Tcl_GlobCmd} {notRoot linkDirectory} { +test filename-11.17.3 {Tcl_GlobCmd} -setup { set dir [pwd] - set ret "error in test" - if {[catch { - cd $globname - file link -symbolic link a1 - cd $dir - set ret [list [catch { - lsort [glob -directory $globname -type d *] - } msg] $msg] - }]} { - cd $dir - } +} -constraints {notRoot linkDirectory} -body { + cd $globname + file link -symbolic link a1 + cd $dir + lsort [glob -directory $globname -type d *] +} -cleanup { + cd $dir file delete [file join $globname link] - set ret -} [list 0 [lsort [list [file join $globname a1] \ - [file join $globname a2] \ - [file join $globname a3] \ - [file join $globname link]]]] -# Make sure the bugfix isn't too simple. We don't want -# to break 'glob -type l'. -test filename-11.17.4 {Tcl_GlobCmd} {notRoot linkDirectory} { +} -result [list [file join $globname a1] \ + [file join $globname a2] \ + [file join $globname a3] \ + [file join $globname link]] +# Make sure the bugfix isn't too simple. We don't want to break 'glob -type l' +test filename-11.17.4 {Tcl_GlobCmd} -setup { set dir [pwd] - set ret "error in test" - if {[catch { - cd $globname - file link -symbolic link a1 - cd $dir - set ret [list [catch { - lsort [glob -directory $globname -type l *] - } msg] $msg] - }]} { - cd $dir - } +} -constraints {notRoot linkDirectory} -body { + cd $globname + file link -symbolic link a1 + cd $dir + lsort [glob -directory $globname -type l *] +} -cleanup { + cd $dir file delete [file join $globname link] - set ret -} [list 0 [list [file join $globname link]]] +} -result [list [file join $globname link]] test filename-11.17.5 {Tcl_GlobCmd} { - list [catch {lsort [glob -directory $globname -tails *.c]} msg] $msg -} [list 0 [lsort [list "weird name.c" x,z1.c x1.c y1.c z1.c]]] + lsort [glob -directory $globname -tails *.c] +} [lsort [list "weird name.c" x,z1.c x1.c y1.c z1.c]] test filename-11.17.6 {Tcl_GlobCmd} { - list [catch {lsort [glob -directory $globname -tails *.c *.c]} msg] $msg -} [list 0 [lsort [concat [list "weird name.c" x,z1.c x1.c y1.c z1.c] \ - [list "weird name.c" x,z1.c x1.c y1.c z1.c]]]] -test filename-11.17.7 {Tcl_GlobCmd: broken link and glob -l} {linkDirectory} { + lsort [glob -directory $globname -tails *.c *.c] +} [lsort [concat [list "weird name.c" x,z1.c x1.c y1.c z1.c] \ + [list "weird name.c" x,z1.c x1.c y1.c z1.c]]] +test filename-11.17.7 {Tcl_GlobCmd: broken link and glob -l} -setup { set dir [pwd] - set ret "error in test" - if {[catch { - cd $globname - file mkdir nonexistent - file link -symbolic link nonexistent - file delete nonexistent - cd $dir - set ret [list [catch { - lsort [glob -nocomplain -directory $globname -type l *] - } msg] $msg] - }]} { - cd $dir - } +} -constraints {linkDirectory} -body { + cd $globname + file mkdir nonexistent + file link -symbolic link nonexistent + file delete nonexistent + cd $dir + lsort [glob -nocomplain -directory $globname -type l *] +} -cleanup { + cd $dir file delete [file join $globname link] - set ret -} [list 0 [list [file join $globname link]]] -test filename-11.17.8 {Tcl_GlobCmd: broken link and glob -l} {symbolicLinkFile} { +} -result [list [file join $globname link]] +test filename-11.17.8 {Tcl_GlobCmd: broken link and glob -l} -setup { set dir [pwd] - set ret "error in test" - if {[catch { - cd $globname - close [open "nonexistent" w] - file link -symbolic link nonexistent - file delete nonexistent - cd $dir - set ret [list [catch { - lsort [glob -nocomplain -directory $globname -type l *] - } msg] $msg] - }]} { - cd $dir - } +} -constraints {symbolicLinkFile} -body { + cd $globname + touch "nonexistent" + file link -symbolic link nonexistent + file delete nonexistent + cd $dir + lsort [glob -nocomplain -directory $globname -type l *] +} -cleanup { + cd $dir file delete [file join $globname link] - set ret -} [list 0 [list [file join $globname link]]] +} -result [list [file join $globname link]] test filename-11.18 {Tcl_GlobCmd} {unix} { - list [catch {lsort [glob -path $globname/ *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ + lsort [glob -path $globname/ *] +} [lsort [list [file join $globname a1] [file join $globname a2]\ [file join $globname a3]\ [file join $globname "weird name.c"]\ [file join $globname x,z1.c]\ [file join $globname x1.c]\ - [file join $globname y1.c] [file join $globname z1.c]]]] + [file join $globname y1.c] [file join $globname z1.c]]] test filename-11.18.1 {Tcl_GlobCmd} {win} { - list [catch {lsort [glob -path $globname/ *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ - [file join $globname .1]\ + lsort [glob -path $globname/ *] +} [lsort [list [file join $globname a1] [file join $globname a2]\ + [file join $globname .1]\ [file join $globname a3]\ [file join $globname "weird name.c"]\ [file join $globname x,z1.c]\ [file join $globname x1.c]\ - [file join $globname y1.c] [file join $globname z1.c]]]] + [file join $globname y1.c] [file join $globname z1.c]]] test filename-11.19 {Tcl_GlobCmd} {unix} { - list [catch {lsort [glob -join -path \ - [string range $globname 0 5] * *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ + lsort [glob -join -path [string range $globname 0 5] * *] +} [lsort [list [file join $globname a1] [file join $globname a2]\ [file join $globname a3]\ [file join $globname "weird name.c"]\ [file join $globname x,z1.c]\ [file join $globname x1.c]\ - [file join $globname y1.c] [file join $globname z1.c]]]] + [file join $globname y1.c] [file join $globname z1.c]]] test filename-11.19.1 {Tcl_GlobCmd} {win} { - list [catch {lsort [glob -join -path \ - [string range $globname 0 5] * *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ - [file join $globname .1]\ + lsort [glob -join -path [string range $globname 0 5] * *] +} [lsort [list [file join $globname a1] [file join $globname a2]\ + [file join $globname .1]\ [file join $globname a3]\ [file join $globname "weird name.c"]\ [file join $globname x,z1.c]\ [file join $globname x1.c]\ - [file join $globname y1.c] [file join $globname z1.c]]]] + [file join $globname y1.c] [file join $globname z1.c]]] test filename-11.20 {Tcl_GlobCmd} { - list [catch {lsort [glob -type d -dir $globname *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1]\ + lsort [glob -type d -dir $globname *] +} [lsort [list [file join $globname a1]\ [file join $globname a2]\ - [file join $globname a3]]]] + [file join $globname a3]]] test filename-11.21 {Tcl_GlobCmd} { - list [catch {lsort [glob -type d -path $globname *]} msg] $msg -} [list 0 [lsort [list $globname]]] - -test filename-11.21.1 {Tcl_GlobCmd} { - close [open {[tcl].testremains} w] - set res [list [catch {lsort [glob -path {[tcl]} *]} msg] $msg] + lsort [glob -type d -path $globname *] +} [list $globname] +test filename-11.21.1 {Tcl_GlobCmd} -body { + touch {[tcl].testremains} + lsort [glob -path {[tcl]} *] +} -cleanup { file delete -force {[tcl].testremains} - set res -} [list 0 {{[tcl].testremains}}] - -# Get rid of file/dir if it exists, since it will have -# been left behind by a previous failed run. +} -result {{[tcl].testremains}} +# Get rid of file/dir if it exists, since it will have been left behind by a +# previous failed run. if {[file exists $horribleglobname]} { file delete -force $horribleglobname } file rename globTest $horribleglobname set globname $horribleglobname - test filename-11.22 {Tcl_GlobCmd} {unix} { - list [catch {lsort [glob -dir $globname *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ + lsort [glob -dir $globname *] +} [lsort [list [file join $globname a1] [file join $globname a2]\ [file join $globname a3]\ [file join $globname "weird name.c"]\ [file join $globname x,z1.c]\ [file join $globname x1.c]\ - [file join $globname y1.c] [file join $globname z1.c]]]] + [file join $globname y1.c] [file join $globname z1.c]]] test filename-11.22.1 {Tcl_GlobCmd} {win} { - list [catch {lsort [glob -dir $globname *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ - [file join $globname .1]\ + lsort [glob -dir $globname *] +} [lsort [list [file join $globname a1] [file join $globname a2]\ + [file join $globname .1]\ [file join $globname a3]\ [file join $globname "weird name.c"]\ [file join $globname x,z1.c]\ [file join $globname x1.c]\ - [file join $globname y1.c] [file join $globname z1.c]]]] + [file join $globname y1.c] [file join $globname z1.c]]] test filename-11.23 {Tcl_GlobCmd} {unix} { - list [catch {lsort [glob -path $globname/ *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ + lsort [glob -path $globname/ *] +} [lsort [list [file join $globname a1] [file join $globname a2]\ [file join $globname a3]\ [file join $globname "weird name.c"]\ [file join $globname x,z1.c]\ [file join $globname x1.c]\ - [file join $globname y1.c] [file join $globname z1.c]]]] + [file join $globname y1.c] [file join $globname z1.c]]] test filename-11.23.1 {Tcl_GlobCmd} {win} { - list [catch {lsort [glob -path $globname/ *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ - [file join $globname .1]\ + lsort [glob -path $globname/ *] +} [lsort [list [file join $globname a1] [file join $globname a2]\ + [file join $globname .1]\ [file join $globname a3]\ [file join $globname "weird name.c"]\ [file join $globname x,z1.c]\ [file join $globname x1.c]\ - [file join $globname y1.c] [file join $globname z1.c]]]] + [file join $globname y1.c] [file join $globname z1.c]]] test filename-11.24 {Tcl_GlobCmd} {unix} { - list [catch {lsort [glob -join -path \ - [string range $globname 0 5] * *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ + lsort [glob -join -path [string range $globname 0 5] * *] +} [lsort [list [file join $globname a1] [file join $globname a2]\ [file join $globname a3]\ [file join $globname "weird name.c"]\ [file join $globname x,z1.c]\ [file join $globname x1.c]\ - [file join $globname y1.c] [file join $globname z1.c]]]] + [file join $globname y1.c] [file join $globname z1.c]]] test filename-11.24.1 {Tcl_GlobCmd} {win} { - list [catch {lsort [glob -join -path \ - [string range $globname 0 5] * *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1] [file join $globname a2]\ - [file join $globname .1]\ + lsort [glob -join -path [string range $globname 0 5] * *] +} [lsort [list [file join $globname a1] [file join $globname a2]\ + [file join $globname .1]\ [file join $globname a3]\ [file join $globname "weird name.c"]\ [file join $globname x,z1.c]\ [file join $globname x1.c]\ - [file join $globname y1.c] [file join $globname z1.c]]]] + [file join $globname y1.c] [file join $globname z1.c]]] test filename-11.25 {Tcl_GlobCmd} { - list [catch {lsort [glob -type d -dir $globname *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1]\ + lsort [glob -type d -dir $globname *] +} [lsort [list [file join $globname a1]\ [file join $globname a2]\ - [file join $globname a3]]]] + [file join $globname a3]]] test filename-11.25.1 {Tcl_GlobCmd} { - list [catch {lsort [glob -type {d r} -dir $globname *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1]\ - [file join $globname a2]\ - [file join $globname a3]]]] + lsort [glob -type {d r} -dir $globname *] +} [lsort [list [file join $globname a1]\ + [file join $globname a2]\ + [file join $globname a3]]] test filename-11.25.2 {Tcl_GlobCmd} { - list [catch {lsort [glob -type {d r w} -dir $globname *]} msg] $msg -} [list 0 [lsort [list [file join $globname a1]\ - [file join $globname a2]\ - [file join $globname a3]]]] + lsort [glob -type {d r w} -dir $globname *] +} [lsort [list [file join $globname a1]\ + [file join $globname a2]\ + [file join $globname a3]]] test filename-11.26 {Tcl_GlobCmd} { - list [catch {glob -type d -path $globname *} msg] $msg -} [list 0 [list $globname]] -test filename-11.27 {Tcl_GlobCmd} { - list [catch {glob -types abcde *} msg] $msg -} {1 {bad argument to "-types": abcde}} -test filename-11.28 {Tcl_GlobCmd} { - list [catch {glob -types z *} msg] $msg -} {1 {bad argument to "-types": z}} -test filename-11.29 {Tcl_GlobCmd} { - list [catch {glob -types {abcd efgh} *} msg] $msg -} {1 {only one MacOS type or creator argument to "-types" allowed}} -test filename-11.30 {Tcl_GlobCmd} { - list [catch {glob -types {{macintosh type TEXT} \ - {macintosh creator ALFA} efgh} *} msg] $msg -} {1 {only one MacOS type or creator argument to "-types" allowed}} -test filename-11.31 {Tcl_GlobCmd} { - list [catch {glob -types} msg] $msg -} {1 {missing argument to "-types"}} -test filename-11.32 {Tcl_GlobCmd} { - list [catch {glob -path hello -dir hello *} msg] $msg -} {1 {"-directory" cannot be used with "-path"}} -test filename-11.33 {Tcl_GlobCmd} { - list [catch {glob -path} msg] $msg -} {1 {missing argument to "-path"}} -test filename-11.34 {Tcl_GlobCmd} { - list [catch {glob -direct} msg] $msg -} {1 {missing argument to "-directory"}} -test filename-11.35 {Tcl_GlobCmd} { - list [catch {glob -paths *} msg] $msg -} {1 {bad option "-paths": must be -directory, -join, -nocomplain, -path, -tails, -types, or --}} + glob -type d -path $globname * +} [list $globname] +test filename-11.27 {Tcl_GlobCmd} -returnCodes error -body { + glob -types abcde * +} -result {bad argument to "-types": abcde} +test filename-11.28 {Tcl_GlobCmd} -returnCodes error -body { + glob -types z * +} -result {bad argument to "-types": z} +test filename-11.29 {Tcl_GlobCmd} -returnCodes error -body { + glob -types {abcd efgh} * +} -result {only one MacOS type or creator argument to "-types" allowed} +test filename-11.30 {Tcl_GlobCmd} -returnCodes error -body { + glob -types {{macintosh type TEXT} {macintosh creator ALFA} efgh} * +} -result {only one MacOS type or creator argument to "-types" allowed} +test filename-11.31 {Tcl_GlobCmd} -returnCodes error -body { + glob -types +} -result {missing argument to "-types"} +test filename-11.32 {Tcl_GlobCmd} -returnCodes error -body { + glob -path hello -dir hello * +} -result {"-directory" cannot be used with "-path"} +test filename-11.33 {Tcl_GlobCmd} -returnCodes error -body { + glob -path +} -result {missing argument to "-path"} +test filename-11.34 {Tcl_GlobCmd} -returnCodes error -body { + glob -direct +} -result {missing argument to "-directory"} +test filename-11.35 {Tcl_GlobCmd} -returnCodes error -body { + glob -paths * +} -result {bad option "-paths": must be -directory, -join, -nocomplain, -path, -tails, -types, or --} # Test '-tails' flag to glob. -test filename-11.36 {Tcl_GlobCmd} { - list [catch {glob -tails *} msg] $msg -} {1 {"-tails" must be used with either "-directory" or "-path"}} +test filename-11.36 {Tcl_GlobCmd} -returnCodes error -body { + glob -tails * +} -result {"-tails" must be used with either "-directory" or "-path"} test filename-11.37 {Tcl_GlobCmd} { - list [catch {glob -type d -tails -path $globname *} msg] $msg -} [list 0 [list $globname]] + glob -type d -tails -path $globname * +} [list $globname] test filename-11.38 {Tcl_GlobCmd} { - list [catch {glob -tails -path $globname *} msg] $msg -} [list 0 [list $globname]] + glob -tails -path $globname * +} [list $globname] test filename-11.39 {Tcl_GlobCmd} { - list [catch {glob -tails -join -path $globname *} msg] $msg -} [list 0 [list $globname]] -test filename-11.40 {Tcl_GlobCmd} { - expr {[glob -dir [pwd] -tails *] == [glob *]} -} {1} -test filename-11.41 {Tcl_GlobCmd} { - expr {[glob -dir [pwd] -tails *] != [glob -dir [pwd] *]} -} {1} -test filename-11.42 {Tcl_GlobCmd} { + glob -tails -join -path $globname * +} [list $globname] +test filename-11.40 {Tcl_GlobCmd} -body { + list [glob -dir [pwd] -tails *] [glob *] +} -match compareWords -result equal +test filename-11.41 {Tcl_GlobCmd} -body { + list [glob -dir [pwd] -tails *] [glob -dir [pwd] *] +} -match compareWords -result "not equal" +test filename-11.42 {Tcl_GlobCmd} -body { set res [list] foreach f [glob -dir [pwd] *] { lappend res [file tail $f] } - expr {$res == [glob *]} -} {1} -test filename-11.43 {Tcl_GlobCmd} { - list [catch {glob -t *} msg] $msg -} {1 {ambiguous option "-t": must be -directory, -join, -nocomplain, -path, -tails, -types, or --}} -test filename-11.44 {Tcl_GlobCmd} { - list [catch {glob -tails -path hello -directory hello *} msg] $msg -} {1 {"-directory" cannot be used with "-path"}} -test filename-11.45 {Tcl_GlobCmd on root volume} { + list $res [glob *] +} -match compareWords -result equal +test filename-11.43 {Tcl_GlobCmd} -returnCodes error -body { + glob -t * +} -result {ambiguous option "-t": must be -directory, -join, -nocomplain, -path, -tails, -types, or --} +test filename-11.44 {Tcl_GlobCmd} -returnCodes error -body { + glob -tails -path hello -directory hello * +} -result {"-directory" cannot be used with "-path"} +test filename-11.45 {Tcl_GlobCmd on root volume} -setup { set res1 "" set res2 "" + set tmpd [pwd] +} -body { catch { set res1 [glob -dir [lindex [file volumes] 0] -tails *] } catch { - set tmpd [pwd] cd [lindex [file volumes] 0] set res2 [glob *] - cd $tmpd - } - set res [expr {$res1 == $res2}] - if {!$res} { - lappend res $res1 $res2 } - set res -} {1} -test filename-11.46 {Tcl_GlobCmd} { - list [catch {glob -types abcde -dir foo *} msg] $msg -} {1 {bad argument to "-types": abcde}} -test filename-11.47 {Tcl_GlobCmd} { - list [catch {glob -types abcde -path foo *} msg] $msg -} {1 {bad argument to "-types": abcde}} -test filename-11.48 {Tcl_GlobCmd} { - list [catch {glob -types abcde -dir foo -join * *} msg] $msg -} {1 {bad argument to "-types": abcde}} -test filename-11.49 {Tcl_GlobCmd} { - list [catch {glob -types abcde -path foo -join * *} msg] $msg -} {1 {bad argument to "-types": abcde}} + list $res1 $res2 +} -cleanup { + cd $tmpd +} -match compareWords -result equal +test filename-11.46 {Tcl_GlobCmd} -returnCodes error -body { + glob -types abcde -dir foo * +} -result {bad argument to "-types": abcde} +test filename-11.47 {Tcl_GlobCmd} -returnCodes error -body { + glob -types abcde -path foo * +} -result {bad argument to "-types": abcde} +test filename-11.48 {Tcl_GlobCmd} -returnCodes error -body { + glob -types abcde -dir foo -join * * +} -result {bad argument to "-types": abcde} +test filename-11.49 {Tcl_GlobCmd} -returnCodes error -body { + glob -types abcde -path foo -join * * +} -result {bad argument to "-types": abcde} file rename $horribleglobname globTest set globname globTest unset horribleglobname test filename-12.1 {simple globbing} {unixOrPc} { - list [catch {glob {}} msg] $msg -} {0 .} -test filename-12.1.1 {simple globbing} {unixOrPc} { - list [catch {glob -types f {}} msg] $msg -} {1 {no files matched glob pattern ""}} + glob {} +} {.} +test filename-12.1.1 {simple globbing} -constraints {unixOrPc} -body { + glob -types f {} +} -returnCodes error -result {no files matched glob pattern ""} test filename-12.1.2 {simple globbing} {unixOrPc} { - list [catch {glob -types d {}} msg] $msg -} {0 .} + glob -types d {} +} {.} test filename-12.1.3 {simple globbing} {unix} { - list [catch {glob -types hidden {}} msg] $msg -} {0 .} -test filename-12.1.4 {simple globbing} {win} { - list [catch {glob -types hidden {}} msg] $msg -} {1 {no files matched glob pattern ""}} -test filename-12.1.5 {simple globbing} {win} { - list [catch {glob -types hidden c:/} msg] $msg -} {1 {no files matched glob pattern "c:/"}} + glob -types hidden {} +} {.} +test filename-12.1.4 {simple globbing} -constraints {win} -body { + glob -types hidden {} +} -returnCodes error -result {no files matched glob pattern ""} +test filename-12.1.5 {simple globbing} -constraints {win} -body { + glob -types hidden c:/ +} -returnCodes error -result {no files matched glob pattern "c:/"} test filename-12.1.6 {simple globbing} {win} { - list [catch {glob c:/} msg] $msg -} {0 c:/} + glob c:/ +} {c:/} test filename-12.3 {simple globbing} { - list [catch {glob -nocomplain \{a1,a2\}} msg] $msg -} {0 {}} - + glob -nocomplain \{a1,a2\} +} {} set globPreResult globTest/ set x1 x1.c set y1 y1.c @@ -1141,92 +1111,67 @@ test filename-12.4 {simple globbing} {unixOrPc} { lsort [glob globTest/x1.c globTest/y1.c globTest/foo] } "$globPreResult$x1 $globPreResult$y1" test filename-12.5 {simple globbing} { - list [catch {glob globTest\\/x1.c} msg] $msg -} "0 $globPreResult$x1" + glob globTest\\/x1.c +} "$globPreResult$x1" test filename-12.6 {simple globbing} { - list [catch {glob globTest\\/\\x1.c} msg] $msg -} "0 $globPreResult$x1" -test filename-12.7 {globbing at filesystem root} {unix} { - set res1 [glob -nocomplain /*] - set res2 [glob -path / *] - set equal [string equal $res1 $res2] - if {!$equal} { - lappend equal "not equal" $res1 $res2 - } - set equal -} {1} -test filename-12.8 {globbing at filesystem root} {unix} { - set dir [lindex [glob -type d /*] 0] - set first [string range $dir 0 1] - set res1 [glob -nocomplain ${first}*] - set res2 [glob -path $first *] - set equal [string equal $res1 $res2] - if {!$equal} { - lappend equal "not equal" $res1 $res2 - } - set equal -} {1} -test filename-12.9 {globbing at filesystem root} {win} { - # Can't grab just anything from 'file volumes' because we need a dir - # that has subdirs - assume that C:/ exists across Windows machines. - set dir [lindex [glob -type d C:/*] 0] - set first [string range $dir 0 3] - set res1 [glob -nocomplain ${first}*] - set res2 [glob -path $first *] - set equal [string equal $res1 $res2] - if {!$equal} { - lappend equal "not equal" $res1 $res2 - } - set equal -} {1} - -test filename-12.10 {globbing with volume relative paths} {win} { - set dir [lindex [glob -type d C:/*] 0] + glob globTest\\/\\x1.c +} "$globPreResult$x1" +test filename-12.7 {globbing at filesystem root} -constraints {unix} -body { + list [glob -nocomplain /*] [glob -path / *] +} -match compareWords -result equal +test filename-12.8 {globbing at filesystem root} -constraints {unix} -body { + set first [string range [lindex [glob -type d /*] 0] 0 1] + list [glob -nocomplain ${first}*] [glob -path $first *] +} -match compareWords -result equal +test filename-12.9 {globbing at filesystem root} -constraints {win} -body { + # Can't grab just anything from 'file volumes' because we need a dir that + # has subdirs - assume that C:/ exists across Windows machines. + set first [string range [lindex [glob -type d C:/*] 0] 0 3] + list [glob -nocomplain ${first}*] [glob -path $first *] +} -match compareWords -result equal +test filename-12.10 {globbing with volume relative paths} -setup { set pwd [pwd] +} -body { + set dir [lindex [glob -type d C:/*] 0] cd C:/ - set res1 [glob -nocomplain [string range $dir 2 end]] + list [glob -nocomplain [string range $dir 2 end]] [list $dir] +} -cleanup { cd $pwd - set res2 [list $dir] - set equal [string equal $res1 $res2] - if {!$equal} { - lappend equal "not equal" $res1 $res2 - } - set equal -} {1} +} -constraints {win} -match compareWords -result equal test filename-13.1 {globbing with brace substitution} { - list [catch {glob globTest/\{\}} msg] $msg -} "0 $globPreResult" -test filename-13.2 {globbing with brace substitution} { - list [catch {glob globTest/\{} msg] $msg -} {1 {unmatched open-brace in file name}} -test filename-13.3 {globbing with brace substitution} { - list [catch {glob globTest/\{\\\}} msg] $msg -} {1 {unmatched open-brace in file name}} -test filename-13.4 {globbing with brace substitution} { - list [catch {glob globTest/\{\\} msg] $msg -} {1 {unmatched open-brace in file name}} -test filename-13.5 {globbing with brace substitution} { - list [catch {glob globTest/\}} msg] $msg -} {1 {unmatched close-brace in file name}} + glob globTest/\{\} +} "$globPreResult" +test filename-13.2 {globbing with brace substitution} -body { + glob globTest/\{ +} -returnCodes error -result {unmatched open-brace in file name} +test filename-13.3 {globbing with brace substitution} -body { + glob globTest/\{\\\} +} -returnCodes error -result {unmatched open-brace in file name} +test filename-13.4 {globbing with brace substitution} -body { + glob globTest/\{\\ +} -returnCodes error -result {unmatched open-brace in file name} +test filename-13.5 {globbing with brace substitution} -body { + glob globTest/\} +} -returnCodes error -result {unmatched close-brace in file name} test filename-13.6 {globbing with brace substitution} { - list [catch {glob globTest/\{\}x1.c} msg] $msg -} "0 $globPreResult$x1" + glob globTest/\{\}x1.c +} "$globPreResult$x1" test filename-13.7 {globbing with brace substitution} { - list [catch {glob globTest/\{x\}1.c} msg] $msg -} "0 $globPreResult$x1" + glob globTest/\{x\}1.c +} "$globPreResult$x1" test filename-13.8 {globbing with brace substitution} { - list [catch {glob globTest/\{x\{\}\}1.c} msg] $msg -} "0 $globPreResult$x1" + glob globTest/\{x\{\}\}1.c +} "$globPreResult$x1" test filename-13.9 {globbing with brace substitution} { - list [lsort [catch {glob globTest/\{x,y\}1.c} msg]] $msg -} [list 0 [list $globPreResult$x1 $globPreResult$y1]] + lsort [glob globTest/\{x,y\}1.c] +} [list $globPreResult$x1 $globPreResult$y1] test filename-13.10 {globbing with brace substitution} { - list [lsort [catch {glob globTest/\{x,,y\}1.c} msg]] $msg -} [list 0 [list $globPreResult$x1 $globPreResult$y1]] + lsort [glob globTest/\{x,,y\}1.c] +} [list $globPreResult$x1 $globPreResult$y1] test filename-13.11 {globbing with brace substitution} {unixOrPc} { - list [lsort [catch {glob globTest/\{x,x\\,z,z\}1.c} msg]] $msg -} {0 {globTest/x1.c globTest/x,z1.c globTest/z1.c}} + lsort [glob globTest/\{x,x\\,z,z\}1.c] +} [lsort {globTest/x1.c globTest/x,z1.c globTest/z1.c}] test filename-13.13 {globbing with brace substitution} { lsort [glob globTest/{a,b,x,y}1.c] } [list $globPreResult$x1 $globPreResult$y1] @@ -1242,9 +1187,9 @@ test filename-13.18 {globbing with brace substitution} {unixOrPc} { test filename-13.20 {globbing with brace substitution} {unixOrPc} { lsort [glob globTest/{a,x}1/*/{x,y}*] } {globTest/a1/b1/x2.c globTest/a1/b2/y2.c} -test filename-13.22 {globbing with brace substitution} { - list [catch {glob globTest/\{a,x\}1/*/\{} msg] $msg -} {1 {unmatched open-brace in file name}} +test filename-13.22 {globbing with brace substitution} -body { + glob globTest/\{a,x\}1/*/\{ +} -returnCodes error -result {unmatched open-brace in file name} test filename-14.1 {asterisks, question marks, and brackets} {unixOrPc} { lsort [glob glo*/*.c] @@ -1252,22 +1197,21 @@ test filename-14.1 {asterisks, question marks, and brackets} {unixOrPc} { test filename-14.3 {asterisks, question marks, and brackets} {unixOrPc} { lsort [glob globTest/?1.c] } {globTest/x1.c globTest/y1.c globTest/z1.c} - -# The current directory could be anywhere; do this to stop spurious matches -file mkdir globTestContext -file rename globTest [file join globTestContext globTest] -set savepwd [pwd] -cd globTestContext - -test filename-14.5 {asterisks, question marks, and brackets} {unixOrPc} { +test filename-14.5 {asterisks, question marks, and brackets} -setup { + # The current directory could be anywhere; do this to stop spurious + # matches + file mkdir globTestContext + file rename globTest [file join globTestContext globTest] + set savepwd [pwd] + cd globTestContext +} -constraints {unixOrPc} -body { lsort [glob */*/*/*.c] -} {globTest/a1/b1/x2.c globTest/a1/b2/y2.c} - -# Reset to where we were -cd $savepwd -file rename [file join globTestContext globTest] globTest -file delete globTestContext - +} -cleanup { + # Reset to where we were + cd $savepwd + file rename [file join globTestContext globTest] globTest + file delete globTestContext +} -result {globTest/a1/b1/x2.c globTest/a1/b2/y2.c} test filename-14.7 {asterisks, question marks, and brackets} {unix} { lsort [glob globTest/*] } {globTest/a1 globTest/a2 globTest/a3 {globTest/weird name.c} globTest/x,z1.c globTest/x1.c globTest/y1.c globTest/z1.c} @@ -1286,26 +1230,27 @@ test filename-14.13 {asterisks, question marks, and brackets} {unixOrPc} { test filename-14.15 {asterisks, question marks, and brackets} {unixOrPc} { lsort [glob globTest/*/] } {globTest/a1/ globTest/a2/ globTest/a3/} -test filename-14.17 {asterisks, question marks, and brackets} { +test filename-14.17 {asterisks, question marks, and brackets} -setup { global env set temp $env(HOME) +} -body { set env(HOME) [file join $env(HOME) globTest] - set result [list [catch {glob ~/z*} msg] $msg] + glob ~/z* +} -cleanup { set env(HOME) $temp - set result -} [list 0 [list [file join $env(HOME) globTest z1.c]]] +} -result [list [file join $env(HOME) globTest z1.c]] test filename-14.18 {asterisks, question marks, and brackets} {unixOrPc} { - list [catch {lsort [glob globTest/*.c goo/*]} msg] $msg -} {0 {{globTest/weird name.c} globTest/x,z1.c globTest/x1.c globTest/y1.c globTest/z1.c}} + lsort [glob globTest/*.c goo/*] +} {{globTest/weird name.c} globTest/x,z1.c globTest/x1.c globTest/y1.c globTest/z1.c} test filename-14.20 {asterisks, question marks, and brackets} { - list [catch {glob -nocomplain goo/*} msg] $msg -} {0 {}} -test filename-14.21 {asterisks, question marks, and brackets} { - list [catch {glob globTest/*/gorp} msg] $msg -} {1 {no files matched glob pattern "globTest/*/gorp"}} -test filename-14.22 {asterisks, question marks, and brackets} { - list [catch {glob goo/* x*z foo?q} msg] $msg -} {1 {no files matched glob patterns "goo/* x*z foo?q"}} + glob -nocomplain goo/* +} {} +test filename-14.21 {asterisks, question marks, and brackets} -body { + glob globTest/*/gorp +} -returnCodes error -result {no files matched glob pattern "globTest/*/gorp"} +test filename-14.22 {asterisks, question marks, and brackets} -body { + glob goo/* x*z foo?q +} -returnCodes error -result {no files matched glob patterns "goo/* x*z foo?q"} test filename-14.23 {slash globbing} {unix} { glob / } / @@ -1316,23 +1261,23 @@ test filename-14.24 {slash globbing} {win} { glob {\\} } [file norm /] test filename-14.25 {type specific globbing} {unix} { - list [catch {lsort [glob -dir globTest -types f *]} msg] $msg -} [list 0 [lsort [list \ + lsort [glob -dir globTest -types f *] +} [lsort [list \ [file join $globname "weird name.c"]\ [file join $globname x,z1.c]\ [file join $globname x1.c]\ - [file join $globname y1.c] [file join $globname z1.c]]]] + [file join $globname y1.c] [file join $globname z1.c]]] test filename-14.25.1 {type specific globbing} {win} { - list [catch {lsort [glob -dir globTest -types f *]} msg] $msg -} [list 0 [lsort [list \ - [file join $globname .1]\ + lsort [glob -dir globTest -types f *] +} [lsort [list \ + [file join $globname .1]\ [file join $globname "weird name.c"]\ [file join $globname x,z1.c]\ [file join $globname x1.c]\ - [file join $globname y1.c] [file join $globname z1.c]]]] + [file join $globname y1.c] [file join $globname z1.c]]] test filename-14.26 {type specific globbing} { - list [catch {glob -nocomplain -dir globTest -types {readonly} *} msg] $msg -} [list 0 {}] + glob -nocomplain -dir globTest -types {readonly} * +} {} test filename-14.27 {Bug 2710920} {unixOrPc} { file tail [lindex [lsort [glob globTest/*/]] 0] } a1 @@ -1351,8 +1296,8 @@ test filename-14.31 {Bug 2918610} -setup { makeFile {} bar.soom $d } -body { foreach fn [glob $d/bar.soom] { - set root [file rootname $fn] - close [open $root {WRONLY CREAT}] + set root [file rootname $fn] + close [open $root {WRONLY CREAT}] } llength [glob -directory $d *] } -cleanup { @@ -1363,77 +1308,69 @@ test filename-14.31 {Bug 2918610} -setup { unset globname -# The following tests are only valid for Unix systems. -# On some systems, like AFS, "000" protection doesn't prevent -# access by owner, so the following test is not portable. +# The following tests are only valid for Unix systems. On some systems, like +# AFS, "000" protection doesn't prevent access by owner, so the following test +# is not portable. catch {file attributes globTest/a1 -permissions 0000} test filename-15.1 {unix specific globbing} {unix nonPortable} { - string tolower [list [catch {glob globTest/a1/*} msg] $msg $errorCode] + string tolower [list [catch {glob globTest/a1/*} msg] $msg $errorCode] } {1 {couldn't read directory "globtest/a1": permission denied} {posix eacces {permission denied}}} test filename-15.2 {unix specific no complain: no errors} {unix nonPortable} { glob -nocomplain globTest/a1/* } {} test filename-15.3 {unix specific no complain: no errors, good result} \ {unix nonPortable} { - # test fails because if an error occur , the interp's result - # is reset... + # test fails because if an error occurs, the interp's result is reset... glob -nocomplain globTest/a2 globTest/a1/* globTest/a3 } {globTest/a2 globTest/a3} - catch {file attributes globTest/a1 -permissions 0755} test filename-15.4 {unix specific no complain: no errors, good result} \ {unix nonPortable} { - # test fails because if an error occurs, the interp's result - # is reset... or you don't run at scriptics where the - # outser and welch users exists + # test fails because if an error occurs, the interp's result is reset... + # or you don't run at scriptics where the outser and welch users exists glob -nocomplain ~ouster ~foo ~welch } {/home/ouster /home/welch} test filename-15.4.1 {no complain: errors, sequencing} { - # test used to fail because if an error occurs, the interp's result - # is reset... But, the sequence means we throw a different error - # first. - concat \ - [list [catch {glob -nocomplain ~wontexist ~blahxyz ~} res1] $res1] \ - [list [catch {glob -nocomplain ~ ~blahxyz ~wontexist} res2] $res2] + # test used to fail because if an error occurs, the interp's result is + # reset... But, the sequence means we throw a different error first. + list [catch {glob -nocomplain ~wontexist ~blahxyz ~} res1] $res1 \ + [catch {glob -nocomplain ~ ~blahxyz ~wontexist} res2] $res2 } {1 {user "wontexist" doesn't exist} 1 {user "blahxyz" doesn't exist}} -test filename-15.4.2 {no complain: errors, sequencing} { - # test used to fail because if an error occurs, the interp's result - # is reset... - string equal \ - [list [catch {glob -nocomplain ~wontexist *} res1] $res1] \ - [list [catch {glob -nocomplain * ~wontexist} res2] $res2] -} {1} +test filename-15.4.2 {no complain: errors, sequencing} -body { + # test used to fail because if an error occurs, the interp's result is + # reset... + list [list [catch {glob -nocomplain ~wontexist *} res1] $res1] \ + [list [catch {glob -nocomplain * ~wontexist} res2] $res2] +} -match compareWords -result equal test filename-15.5 {unix specific globbing} {unix nonPortable} { glob ~ouster/.csh* } "/home/ouster/.cshrc" -catch {close [open globTest/odd\\\[\]*?\{\}name w]} -test filename-15.6 {unix specific globbing} {unix} { +touch globTest/odd\\\[\]*?\{\}name +test filename-15.6 {unix specific globbing} -constraints {unix} -setup { global env set temp $env(HOME) +} -body { set env(HOME) $env(HOME)/globTest/odd\\\[\]*?\{\}name - set result [list [catch {glob ~} msg] $msg] + glob ~ +} -cleanup { set env(HOME) $temp - set result -} [list 0 [list [lindex [glob ~] 0]/globTest/odd\\\[\]*?\{\}name]] +} -result [list [lindex [glob ~] 0]/globTest/odd\\\[\]*?\{\}name] catch {file delete -force globTest/odd\\\[\]*?\{\}name} -test filename-15.7 {win specific globbing} {win} { - if {[string index [glob ~] end] == "/"} { - set res "glob ~ is [glob ~] but shouldn't end in a separator" - } else { - set res "ok" - } -} {ok} -test filename-15.8 {win and unix specific globbing} {unixOrWin} { +test filename-15.7 {win specific globbing} -constraints {win} -body { + glob ~ +} -match regexp -result {[^/]$} +test filename-15.8 {win and unix specific globbing} -constraints {unixOrWin} -setup { global env set temp $env(HOME) - catch {close [open $env(HOME)/globTest/anyname w]} err +} -body { + touch $env(HOME)/globTest/anyname set env(HOME) $env(HOME)/globTest/anyname - set result [list [catch {glob ~} msg] $msg] + glob ~ +} -cleanup { set env(HOME) $temp catch {file delete -force $env(HOME)/globTest/anyname} - set result -} [list 0 [list [lindex [glob ~] 0]/globTest/anyname]] +} -result [list [lindex [glob ~] 0]/globTest/anyname] # The following tests are only valid for Windows systems. set oldDir [pwd] @@ -1441,24 +1378,25 @@ if {[testConstraint win]} { cd c:/ file delete -force globTest file mkdir globTest - close [open globTest/x1.BAT w] - close [open globTest/y1.Bat w] - close [open globTest/z1.bat w] + touch globTest/x1.BAT + touch globTest/y1.Bat + touch globTest/z1.bat } test filename-16.1 {windows specific globbing} {win} { lsort [glob globTest/*.bat] } {globTest/x1.BAT globTest/y1.Bat globTest/z1.bat} test filename-16.2 {windows specific globbing} {win} { - list [catch {glob c:} res] $res -} {0 c:} -test filename-16.2.1 {windows specific globbing} {win} { + glob c: +} c: +test filename-16.2.1 {windows specific globbing} -constraints {win} -setup { set dir [pwd] +} -body { cd C:/ - set res [list [catch {glob c:} err] $err] + glob c: +} -cleanup { cd $dir - set res -} {0 c:} +} -result c: test filename-16.3 {windows specific globbing} {win} { glob -nocomplain c:\\\\ } c:/ @@ -1486,13 +1424,7 @@ test filename-16.10 {windows specific globbing} {win} { test filename-16.11 {windows specific globbing} {win} { lsort [glob -nocomplain c:\\\\globTest\\\\*.bat] } {c:/globTest/x1.BAT c:/globTest/y1.Bat c:/globTest/z1.bat} - # some tests require a shared C drive - -if {[testConstraint win]} { - testConstraint sharedCdrive [expr {![catch {cd //[info hostname]/c}]}] -} - test filename-16.12 {windows specific globbing} {win sharedCdrive} { cd //[info hostname]/c glob //[info hostname]/c/*Test @@ -1503,7 +1435,7 @@ test filename-16.13 {windows specific globbing} {win sharedCdrive} { } //[info hostname]/c/globTest test filename-16.14 {windows specific globbing} {win} { cd [lindex [glob -types d -dir C:/ *] 0] - expr {[lsearch -exact [glob {{.,*}*}] ".."] != -1} + expr {".." in [glob {{.,*}*}]} } {1} test filename-16.15 {windows specific globbing} {win} { cd [lindex [glob -types d -dir C:/ *] 0] @@ -1512,18 +1444,13 @@ test filename-16.15 {windows specific globbing} {win} { test filename-16.16 {windows specific globbing} {win} { file tail [lindex [glob -nocomplain "[lindex [glob -types d -dir C:/ *] 0]/.."] 0] } {..} -test filename-16.17 {windows specific globbing} {win} { +test filename-16.17 {windows specific globbing} -constraints {win} -body { cd C:/ - # Ensure correct trimming of tails with absolute and - # volume relative globbing. - set res1 [glob -nocomplain -tails -dir C:/ *] - set res2 [glob -nocomplain -tails -dir C: *] - if {$res1 eq $res2} { - concat ok - } else { - concat $res1 ne $res2 - } -} {ok} + # Ensure correct trimming of tails with absolute and volume relative + # globbing. + list [glob -nocomplain -tails -dir C:/ *] \ + [glob -nocomplain -tails -dir C: *] +} -match compareWords -result equal # Put the working directory back now that we're done with globbing in C:/ if {[testConstraint win]} { @@ -1533,24 +1460,22 @@ if {[testConstraint win]} { test filename-17.1 {windows specific special files} {testsetplatform} { testsetplatform win list [file pathtype com1] [file pathtype con] [file pathtype lpt3] \ - [file pathtype prn] [file pathtype nul] [file pathtype aux] \ - [file pathtype foo] + [file pathtype prn] [file pathtype nul] [file pathtype aux] \ + [file pathtype foo] } {absolute absolute absolute absolute absolute absolute relative} if {[testConstraint testsetplatform]} { testsetplatform $platform } - -test filename-17.2 {windows specific glob with executable} {win} { +test filename-17.2 {windows specific glob with executable} -body { makeDirectory execglob makeFile contents execglob/abc.exe makeFile contents execglob/abc.notexecutable - set res [glob -nocomplain -dir [temporaryDirectory]/execglob \ - -tails -types x *] + glob -nocomplain -dir [temporaryDirectory]/execglob -tails -types x * +} -constraints {win} -cleanup { removeFile execglob/abc.exe removeFile execglob/abc.notexecutable removeDirectory execglob - set res -} {abc.exe} +} -result {abc.exe} test filename-17.3 {Bug 2571597} win { set p /a file pathtype $p @@ -1561,8 +1486,7 @@ test filename-17.3 {Bug 2571597} win { test fileName-18.1 {windows - split ADS name correctly} {win} { # bug 1194458 set x [file split c:/c:d] - set y [eval [linsert $x 0 file join]] - list $x $y + list $x [file join {*}$x] } {{c:/ ./c:d} c:/c:d} test fileName-19.1 {ensure that [Bug 1325099] stays fixed} { @@ -1606,7 +1530,6 @@ test fileName-20.4 {Bug 1750300} -setup { removeFile TAGS $d removeDirectory foo } -result 0 - test fileName-20.5 {Bug 2837800} -setup { set dd [makeDirectory isolate] set d [makeDirectory ./~foo $dd] @@ -1621,7 +1544,6 @@ test fileName-20.5 {Bug 2837800} -setup { removeDirectory ./~foo $dd removeDirectory isolate } -result ~foo/test - test fileName-20.6 {Bug 2837800} -setup { # Recall that we have $env(HOME) set so that references # to ~ point to [temporaryDirectory] @@ -1638,7 +1560,6 @@ test fileName-20.6 {Bug 2837800} -setup { removeDirectory isolate removeFile test ~ } -result {} - test fileName-20.7 {Bug 2806250} -setup { set savewd [pwd] cd [temporaryDirectory] @@ -1651,7 +1572,6 @@ test fileName-20.7 {Bug 2806250} -setup { removeDirectory isolate cd $savewd } -result 1 - test fileName-20.8 {Bug 2806250} -setup { set savewd [pwd] cd [temporaryDirectory] @@ -1664,8 +1584,7 @@ test fileName-20.8 {Bug 2806250} -setup { removeDirectory isolate cd $savewd } -result ./~test - -test fileName-20.9 {} -setup { +test fileName-20.9 {globbing for special chars} -setup { makeFile {} test ~ set d [makeDirectory isolate] set savewd [pwd] @@ -1677,8 +1596,7 @@ test fileName-20.9 {} -setup { removeDirectory isolate removeFile test ~ } -result ~/test - -test fileName-20.10 {} -setup { +test fileName-20.10 {globbing for special chars} -setup { set s [makeDirectory sub ~] makeFile {} fileName-20.10 $s set d [makeDirectory isolate] @@ -1692,12 +1610,13 @@ test fileName-20.10 {} -setup { removeFile fileName-20.10 $s removeDirectory sub ~ } -result ~/sub/fileName-20.10 - + # cleanup catch {file delete -force C:/globTest} cd [temporaryDirectory] file delete -force globTest cd $oldpwd +catch {removeDirectory tcl[pid]} set env(HOME) $oldhome if {[testConstraint testsetplatform]} { testsetplatform $platform @@ -1706,3 +1625,7 @@ if {[testConstraint testsetplatform]} { catch {unset oldhome temp result globPreResult} ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: |