816 lines
22 KiB
Plaintext
816 lines
22 KiB
Plaintext
|
# This file tests the tclWinFCmd.c file.
|
||
|
#
|
||
|
# 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) 1996 Sun Microsystems, Inc.
|
||
|
#
|
||
|
# See the file "license.terms" for information on usage and redistribution
|
||
|
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||
|
#
|
||
|
# SCCS: @(#) winFCmd.test 1.4 96/10/08 17:37:23
|
||
|
#
|
||
|
|
||
|
if {[string compare test [info procs test]] == 1} then {source defs}
|
||
|
|
||
|
if {$tcl_platform(platform) != "windows"} {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
proc createfile {file {string a}} {
|
||
|
set f [open $file w]
|
||
|
puts -nonewline $f $string
|
||
|
close $f
|
||
|
return $string
|
||
|
}
|
||
|
|
||
|
proc contents {file} {
|
||
|
set f [open $file r]
|
||
|
set r [read $f]
|
||
|
close $f
|
||
|
set r
|
||
|
}
|
||
|
|
||
|
proc cleanup {args} {
|
||
|
foreach p ". $args" {
|
||
|
set x ""
|
||
|
catch {
|
||
|
set x [glob [file join $p tf*] [file join $p td*]]
|
||
|
}
|
||
|
if {$x != ""} {
|
||
|
eval file delete -force -- $x
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
set testConfig(95) 0
|
||
|
set testConfig(NT) 0
|
||
|
set testConfig(cdrom) 0
|
||
|
set testConfig(exdev) 0
|
||
|
|
||
|
# find a CD-ROM so we can test read-only filesystems.
|
||
|
|
||
|
set cdrom {}
|
||
|
set nodrive x:
|
||
|
foreach p {d e f g h i j k l m n o p q r s t u v w x y z} {
|
||
|
set name ${p}:/dummy~~.fil
|
||
|
if [catch {set fd [open $name w]}] {
|
||
|
set err [lindex $errorCode 1]
|
||
|
if {$cdrom == "" && $err == "EACCES"} {
|
||
|
set cdrom ${p}:
|
||
|
}
|
||
|
if {$err == "ENOENT"} {
|
||
|
set nodrive ${p}:
|
||
|
}
|
||
|
} else {
|
||
|
close $fd
|
||
|
file delete $name
|
||
|
}
|
||
|
}
|
||
|
|
||
|
proc findfile {dir} {
|
||
|
foreach p [glob $dir/*] {
|
||
|
if {[file type $p] == "file"} {
|
||
|
return $p
|
||
|
}
|
||
|
}
|
||
|
foreach p [glob $dir/*] {
|
||
|
if {[file type $p] == "directory"} {
|
||
|
set f [findfile $p]
|
||
|
if {$f != ""} {
|
||
|
return $f
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return ""
|
||
|
}
|
||
|
|
||
|
if {$cdrom == ""} {
|
||
|
puts "Couldn't find a CD-ROM. Skipping tests that access CD-ROM."
|
||
|
puts "If you have a CD-ROM, insert a data disk and rerun tests."
|
||
|
} else {
|
||
|
set testConfig(cdrom) 1
|
||
|
set cdfile [findfile $cdrom]
|
||
|
}
|
||
|
|
||
|
if {[file exists c:/] && [file exists d:/]} {
|
||
|
catch {file delete d:/tf1}
|
||
|
if {[catch {close [open d:/tf1 w]}] == 0} {
|
||
|
file delete d:/tf1
|
||
|
set testConfig(exdev) 1
|
||
|
}
|
||
|
}
|
||
|
|
||
|
switch $tcl_platform(os) {
|
||
|
"Windows NT" {set testConfig(NT) 1}
|
||
|
"Windows 95" {set testConfig(95) 1}
|
||
|
}
|
||
|
|
||
|
# A really long file name
|
||
|
# length of longname is 1216 chars, which should be greater than any static
|
||
|
# buffer or allowable filename.
|
||
|
|
||
|
set longname "abcdefghihjllmnopqrstuvwxyz01234567890"
|
||
|
append longname $longname
|
||
|
append longname $longname
|
||
|
append longname $longname
|
||
|
append longname $longname
|
||
|
append longname $longname
|
||
|
|
||
|
# Uses the "testfile" command instead of the "file" command. The "file"
|
||
|
# command provides several layers of sanity checks on the arguments and
|
||
|
# it can be difficult to actually forward "insane" arguments to the
|
||
|
# low-level posix emulation layer.
|
||
|
|
||
|
test winFCmd-1.1 {TclpRenameFile: errno: EACCES} {cdrom} {
|
||
|
list [catch {testfile mv $cdfile $cdrom/dummy~~.fil} msg] $msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-1.2 {TclpRenameFile: errno: EEXIST} {
|
||
|
cleanup
|
||
|
file mkdir td1/td2/td3
|
||
|
file mkdir td2
|
||
|
list [catch {testfile mv td2 td1/td2} msg] $msg
|
||
|
} {1 EEXIST}
|
||
|
test winFCmd-1.3 {TclpRenameFile: errno: EINVAL} {
|
||
|
cleanup
|
||
|
list [catch {testfile mv / td1} msg] $msg
|
||
|
} {1 EINVAL}
|
||
|
test winFCmd-1.4 {TclpRenameFile: errno: EINVAL} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
list [catch {testfile mv td1 td1/td2} msg] $msg
|
||
|
} {1 EINVAL}
|
||
|
test winFCmd-1.5 {TclpRenameFile: errno: EISDIR} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
createfile tf1
|
||
|
list [catch {testfile mv tf1 td1} msg] $msg
|
||
|
} {1 EISDIR}
|
||
|
test winFCmd-1.6 {TclpRenameFile: errno: ENOENT} {
|
||
|
cleanup
|
||
|
list [catch {testfile mv tf1 tf2} msg] $msg
|
||
|
} {1 ENOENT}
|
||
|
test winFCmd-1.7 {TclpRenameFile: errno: ENOENT} {
|
||
|
cleanup
|
||
|
list [catch {testfile mv "" tf2} msg] $msg
|
||
|
} {1 ENOENT}
|
||
|
test winFCmd-1.8 {TclpRenameFile: errno: ENOENT} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
list [catch {testfile mv tf1 ""} msg] $msg
|
||
|
} {1 ENOENT}
|
||
|
test winFCmd-1.9 {TclpRenameFile: errno: ENOTDIR} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
createfile tf1
|
||
|
list [catch {testfile mv td1 tf1} msg] $msg
|
||
|
} {1 ENOTDIR}
|
||
|
test winFCmd-1.10 {TclpRenameFile: errno: EXDEV} {exdev} {
|
||
|
file delete -force d:/tf1
|
||
|
file mkdir c:/tf1
|
||
|
set msg [list [catch {testfile mv c:/tf1 d:/tf1} msg] $msg]
|
||
|
file delete -force c:/tf1
|
||
|
set msg
|
||
|
} {1 EXDEV}
|
||
|
test winFCmd-1.11 {TclpRenameFile: errno: EACCES} {
|
||
|
cleanup
|
||
|
set fd [open tf1 w]
|
||
|
set msg [list [catch {testfile mv tf1 tf2} msg] $msg]
|
||
|
close $fd
|
||
|
set msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-1.12 {TclpRenameFile: errno: EACCES} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
set fd [open tf2 w]
|
||
|
set msg [list [catch {testfile mv tf1 tf2} msg] $msg]
|
||
|
close $fd
|
||
|
set msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-1.13 {TclpRenameFile: errno: EACCES} {
|
||
|
cleanup
|
||
|
list [catch {testfile mv nul tf1} msg] $msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-1.14 {TclpRenameFile: errno: EACCES} {95} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
list [catch {testfile mv tf1 nul} msg] $msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-1.15 {TclpRenameFile: errno: EEXIST} {NT} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
list [catch {testfile mv tf1 nul} msg] $msg
|
||
|
} {1 EEXIST}
|
||
|
test winFCmd-1.16 {TclpRenameFile: MoveFile() != FALSE} {
|
||
|
cleanup
|
||
|
createfile tf1 tf1
|
||
|
testfile mv tf1 tf2
|
||
|
list [file exists tf1] [contents tf2]
|
||
|
} {0 tf1}
|
||
|
test winFCmd-1.17 {TclpRenameFile: MoveFile() == FALSE} {
|
||
|
cleanup
|
||
|
list [catch {testfile mv tf1 tf2} msg] $msg
|
||
|
} {1 ENOENT}
|
||
|
test winFCmd-1.18 {TclpRenameFile: srcAttr == -1} {
|
||
|
cleanup
|
||
|
list [catch {testfile mv tf1 tf2} msg] $msg
|
||
|
} {1 ENOENT}
|
||
|
test winFCmd-1.19 {TclpRenameFile: errno == EACCES} {
|
||
|
cleanup
|
||
|
list [catch {testfile mv nul g} msg] $msg
|
||
|
} {1 EACCES}
|
||
|
# under 95, this would actually move the current dir out from under yourself.
|
||
|
test winFCmd-1.20 {TclpRenameFile: src is dir} {NT} {
|
||
|
cleanup
|
||
|
file delete /tf1
|
||
|
list [catch {testfile mv [pwd] /tf1} msg] $msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-1.21 {TclpRenameFile: obscenely long src} {
|
||
|
list [catch {testfile mv $longname tf1} msg] $msg
|
||
|
} {1 ENAMETOOLONG}
|
||
|
test winFCmd-1.22 {TclpRenameFile: obscenely long dst} {NT} {
|
||
|
# return ENOENT if name is too long!
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
list [catch {testfile mv tf1 $longname} msg] $msg
|
||
|
} {1 ENOENT}
|
||
|
test winFCmd-1.23 {TclpRenameFile: obscenely long dst} {95} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
list [catch {testfile mv tf1 $longname} msg] $msg
|
||
|
} {1 ENAMETOOLONG}
|
||
|
test winFCmd-1.24 {TclpRenameFile: move dir into self} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
list [catch {testfile mv [pwd]/td1 td1/td2} msg] $msg
|
||
|
} {1 EINVAL}
|
||
|
test winFCmd-1.25 {TclpRenameFile: move a root dir} {
|
||
|
cleanup
|
||
|
list [catch {testfile mv / $nodrive} msg] $msg
|
||
|
} {1 EINVAL}
|
||
|
test winFCmd-1.26 {TclpRenameFile: cross file systems} {cdrom} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
list [catch {testfile mv td1 $cdrom/td1} msg] $msg
|
||
|
} {1 EXDEV}
|
||
|
test winFCmd-1.27 {TclpRenameFile: readonly fs} {cdrom} {
|
||
|
cleanup
|
||
|
list [catch {testfile mv $cdfile $cdrom/dummy~~.fil} msg] $msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-1.28 {TclpRenameFile: open file} {
|
||
|
cleanup
|
||
|
set fd [open tf1 w]
|
||
|
set msg [list [catch {testfile mv tf1 tf2} msg] $msg]
|
||
|
close $fd
|
||
|
set msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-1.29 {TclpRenameFile: errno == EEXIST} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
createfile tf2
|
||
|
testfile mv tf1 tf2
|
||
|
list [file exist tf1] [file exist tf2]
|
||
|
} {0 1}
|
||
|
test winFCmd-1.30 {TclpRenameFile: src is dir} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
createfile tf1
|
||
|
list [catch {testfile mv td1 tf1} msg] $msg
|
||
|
} {1 ENOTDIR}
|
||
|
test winFCmd-1.31 {TclpRenameFile: dst is dir} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
file mkdir td2/td2
|
||
|
list [catch {testfile mv td1 td2} msg] $msg
|
||
|
} {1 EEXIST}
|
||
|
test winFCmd-1.32 {TclpRenameFile: TclpRemoveDirectory fails} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
file mkdir td2/td2
|
||
|
list [catch {testfile mv td1 td2} msg] $msg
|
||
|
} {1 EEXIST}
|
||
|
test winFCmd-1.33 {TclpRenameFile: TclpRemoveDirectory succeeds} {
|
||
|
cleanup
|
||
|
file mkdir td1/td2
|
||
|
file mkdir td2
|
||
|
testfile mv td1 td2
|
||
|
list [file exist td1] [file exist td2] [file exist td2/td2]
|
||
|
} {0 1 1}
|
||
|
test winFCmd-1.34 {TclpRenameFile: After removing dst dir, MoveFile fails} {exdev} {
|
||
|
file mkdir d:/td1
|
||
|
testchmod 000 d:/td1
|
||
|
set msg [list [catch {testfile mv c:/windows d:/td1} msg] $msg]
|
||
|
set msg "$msg [file writable d:/td1]"
|
||
|
file delete d:/td1
|
||
|
set msg
|
||
|
} {1 EXDEV 0}
|
||
|
test winFCmd-1.35 {TclpRenameFile: src is dir, dst is not} {
|
||
|
file mkdir td1
|
||
|
createfile tf1
|
||
|
list [catch {testfile mv td1 tf1} msg] $msg
|
||
|
} {1 ENOTDIR}
|
||
|
test winFCmd-1.36 {TclpRenameFile: src is not dir, dst is} {
|
||
|
file mkdir td1
|
||
|
createfile tf1
|
||
|
list [catch {testfile mv tf1 td1} msg] $msg
|
||
|
} {1 EISDIR}
|
||
|
test winFCmd-1.37 {TclpRenameFile: src and dst not dir} {
|
||
|
createfile tf1 tf1
|
||
|
createfile tf2 tf2
|
||
|
testfile mv tf1 tf2
|
||
|
contents tf2
|
||
|
} {tf1}
|
||
|
test winFCmd-1.38 {TclpRenameFile: need to restore temp file} {
|
||
|
# Can't figure out how to cause this.
|
||
|
# Need a file that can't be copied.
|
||
|
} {}
|
||
|
|
||
|
test winFCmd-2.1 {TclpCopyFile: errno: EACCES} {cdrom} {
|
||
|
cleanup
|
||
|
list [catch {testfile cp $cdfile $cdrom/dummy~~.fil} msg] $msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-2.2 {TclpCopyFile: errno: EISDIR} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
list [catch {testfile cp td1 tf1} msg] $msg
|
||
|
} {1 EISDIR}
|
||
|
test winFCmd-2.3 {TclpCopyFile: errno: EISDIR} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
file mkdir td1
|
||
|
list [catch {testfile cp tf1 td1} msg] $msg
|
||
|
} {1 EISDIR}
|
||
|
test winFCmd-2.4 {TclpCopyFile: errno: ENOENT} {
|
||
|
cleanup
|
||
|
list [catch {testfile cp tf1 tf2} msg] $msg
|
||
|
} {1 ENOENT}
|
||
|
test winFCmd-2.5 {TclpCopyFile: errno: ENOENT} {
|
||
|
cleanup
|
||
|
list [catch {testfile cp "" tf2} msg] $msg
|
||
|
} {1 ENOENT}
|
||
|
test winFCmd-2.6 {TclpCopyFile: errno: ENOENT} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
list [catch {testfile cp tf1 ""} msg] $msg
|
||
|
} {1 ENOENT}
|
||
|
test winFCmd-2.7 {TclpCopyFile: errno: EACCES} {95} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
set fd [open tf2 w]
|
||
|
set msg [list [catch {testfile cp tf1 tf2} msg] $msg]
|
||
|
close $fd
|
||
|
set msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-2.8 {TclpCopyFile: errno: EACCES} {NT} {
|
||
|
cleanup
|
||
|
list [catch {testfile cp nul tf1} msg] $msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-2.9 {TclpCopyFile: errno: ENOENT} {95} {
|
||
|
cleanup
|
||
|
list [catch {testfile cp nul tf1} msg] $msg
|
||
|
} {1 ENOENT}
|
||
|
test winFCmd-2.10 {TclpCopyFile: CopyFile succeeds} {
|
||
|
cleanup
|
||
|
createfile tf1 tf1
|
||
|
testfile cp tf1 tf2
|
||
|
list [contents tf1] [contents tf2]
|
||
|
} {tf1 tf1}
|
||
|
test winFCmd-2.11 {TclpCopyFile: CopyFile succeeds} {
|
||
|
cleanup
|
||
|
createfile tf1 tf1
|
||
|
createfile tf2 tf2
|
||
|
testfile cp tf1 tf2
|
||
|
list [contents tf1] [contents tf2]
|
||
|
} {tf1 tf1}
|
||
|
test winFCmd-2.12 {TclpCopyFile: CopyFile succeeds} {
|
||
|
cleanup
|
||
|
createfile tf1 tf1
|
||
|
testchmod 000 tf1
|
||
|
testfile cp tf1 tf2
|
||
|
list [contents tf2] [file writable tf2]
|
||
|
} {tf1 0}
|
||
|
test winFCmd-2.13 {TclpCopyFile: CopyFile fails} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
file mkdir td1
|
||
|
list [catch {testfile cp tf1 td1} msg] $msg
|
||
|
} {1 EISDIR}
|
||
|
test winFCmd-2.14 {TclpCopyFile: errno == EACCES} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
list [catch {testfile cp td1 tf1} msg] $msg
|
||
|
} {1 EISDIR}
|
||
|
test winFCmd-2.15 {TclpCopyFile: src is directory} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
list [catch {testfile cp td1 tf1} msg] $msg
|
||
|
} {1 EISDIR}
|
||
|
test winFCmd-2.16 {TclpCopyFile: dst is directory} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
file mkdir td1
|
||
|
list [catch {testfile cp tf1 td1} msg] $msg
|
||
|
} {1 EISDIR}
|
||
|
test winFCmd-2.17 {TclpCopyFile: dst is readonly} {
|
||
|
cleanup
|
||
|
createfile tf1 tf1
|
||
|
createfile tf2 tf2
|
||
|
testchmod 000 tf2
|
||
|
testfile cp tf1 tf2
|
||
|
list [file writable tf2] [contents tf2]
|
||
|
} {1 tf1}
|
||
|
test winFCmd-2.18 {TclpCopyFile: still can't copy onto dst} {95} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
createfile tf2
|
||
|
testchmod 000 tf2
|
||
|
set fd [open tf2]
|
||
|
set msg [list [catch {testfile cp tf1 tf2} msg] $msg]
|
||
|
close $fd
|
||
|
set msg "$msg [file writable tf2]"
|
||
|
} {1 EACCES 0}
|
||
|
|
||
|
test winFCmd-3.1 {TclpDeleteFile: errno: EACCES} {cdrom} {
|
||
|
list [catch {testfile rm $cdfile $cdrom/dummy~~.fil} msg] $msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-3.2 {TclpDeleteFile: errno: EISDIR} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
list [catch {testfile rm td1} msg] $msg
|
||
|
} {1 EISDIR}
|
||
|
test winFCmd-3.3 {TclpDeleteFile: errno: ENOENT} {
|
||
|
cleanup
|
||
|
list [catch {testfile rm tf1} msg] $msg
|
||
|
} {1 ENOENT}
|
||
|
test winFCmd-3.4 {TclpDeleteFile: errno: ENOENT} {
|
||
|
cleanup
|
||
|
list [catch {testfile rm ""} msg] $msg
|
||
|
} {1 ENOENT}
|
||
|
test winFCmd-3.5 {TclpDeleteFile: errno: EACCES} {
|
||
|
cleanup
|
||
|
set fd [open tf1 w]
|
||
|
set msg [list [catch {testfile rm tf1} msg] $msg]
|
||
|
close $fd
|
||
|
set msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-3.6 {TclpDeleteFile: errno: EACCES} {
|
||
|
cleanup
|
||
|
list [catch {testfile rm nul} msg] $msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-3.7 {TclpDeleteFile: DeleteFile succeeds} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
testfile rm tf1
|
||
|
file exist tf1
|
||
|
} {0}
|
||
|
test winFCmd-3.8 {TclpDeleteFile: DeleteFile fails} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
list [catch {testfile rm td1} msg] $msg
|
||
|
} {1 EISDIR}
|
||
|
test winFCmd-3.9 {TclpDeleteFile: errno == EACCES} {
|
||
|
cleanup
|
||
|
set fd [open tf1 w]
|
||
|
set msg [list [catch {testfile rm tf1} msg] $msg]
|
||
|
close $fd
|
||
|
set msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-3.10 {TclpDeleteFile: path is readonly} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
testchmod 000 tf1
|
||
|
testfile rm tf1
|
||
|
file exists tf1
|
||
|
} {0}
|
||
|
test winFCmd-3.11 {TclpDeleteFile: still can't remove path} {
|
||
|
cleanup
|
||
|
set fd [open tf1 w]
|
||
|
testchmod 000 tf1
|
||
|
set msg [list [catch {testfile rm tf1} msg] $msg]
|
||
|
close $fd
|
||
|
set msg
|
||
|
} {1 EACCES}
|
||
|
|
||
|
test winFCmd-4.1 {TclpCreateDirectory: errno: EACCES} {cdrom NT} {
|
||
|
list [catch {testfile mkdir $cdrom/dummy~~.dir} msg] $msg
|
||
|
} {1 EACCES}
|
||
|
test winFCmd-4.2 {TclpCreateDirectory: errno: EACCES} {cdrom 95} {
|
||
|
list [catch {testfile mkdir $cdrom/dummy~~.dir} msg] $msg
|
||
|
} {1 ENOSPC}
|
||
|
test winFCmd-4.3 {TclpCreateDirectory: errno: EEXIST} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
list [catch {testfile mkdir td1} msg] $msg
|
||
|
} {1 EEXIST}
|
||
|
test winFCmd-4.4 {TclpCreateDirectory: errno: ENOENT} {
|
||
|
cleanup
|
||
|
list [catch {testfile mkdir td1/td2} msg] $msg
|
||
|
} {1 ENOENT}
|
||
|
test winFCmd-4.5 {TclpCreateDirectory: CreateDirectory succeeds} {
|
||
|
cleanup
|
||
|
testfile mkdir td1
|
||
|
file type td1
|
||
|
} {directory}
|
||
|
|
||
|
test winFCmd-5.1 {TclpCopyDirectory: calls TraverseWinTree} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
testfile cpdir td1 td2
|
||
|
list [file type td1] [file type td2]
|
||
|
} {directory directory}
|
||
|
|
||
|
test winFCmd-6.1 {TclpRemoveDirectory: errno: EACCES} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
testchmod 000 td1
|
||
|
testfile rmdir td1
|
||
|
file exist td1
|
||
|
} {0}
|
||
|
test winFCmd-6.2 {TclpRemoveDirectory: errno: EEXIST} {
|
||
|
cleanup
|
||
|
file mkdir td1/td2
|
||
|
list [catch {testfile rmdir td1} msg] $msg
|
||
|
} {1 {td1 EEXIST}}
|
||
|
test winFCmd-6.3 {TclpRemoveDirectory: errno: EACCES} {
|
||
|
# can't test this w/o removing everything on your hard disk first!
|
||
|
# testfile rmdir /
|
||
|
} {}
|
||
|
test winFCmd-6.4 {TclpRemoveDirectory: errno: ENOENT} {
|
||
|
cleanup
|
||
|
list [catch {testfile rmdir td1} msg] $msg
|
||
|
} {1 {td1 ENOENT}}
|
||
|
test winFCmd-6.5 {TclpRemoveDirectory: errno: ENOENT} {
|
||
|
cleanup
|
||
|
list [catch {testfile rmdir ""} msg] $msg
|
||
|
} {1 ENOENT}
|
||
|
test winFCmd-6.6 {TclpRemoveDirectory: errno: ENOTDIR} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
list [catch {testfile rmdir tf1} msg] $msg
|
||
|
} {1 {tf1 ENOTDIR}}
|
||
|
test winFCmd-6.7 {TclpRemoveDirectory: RemoveDirectory succeeds} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
testfile rmdir td1
|
||
|
file exists td1
|
||
|
} {0}
|
||
|
test winFCmd-6.8 {TclpRemoveDirectory: RemoveDirectory fails} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
list [catch {testfile rmdir tf1} msg] $msg
|
||
|
} {1 {tf1 ENOTDIR}}
|
||
|
test winFCmd-6.9 {TclpRemoveDirectory: errno == EACCES} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
testchmod 000 td1
|
||
|
testfile rmdir td1
|
||
|
file exists td1
|
||
|
} {0}
|
||
|
test winFCmd-6.10 {TclpRemoveDirectory: attr == -1} {95} {
|
||
|
cleanup
|
||
|
list [catch {testfile rmdir nul} msg] $msg
|
||
|
} {1 {nul EACCES}}
|
||
|
test winFCmd-6.11 {TclpRemoveDirectory: attr == -1} {NT} {
|
||
|
cleanup
|
||
|
list [catch {testfile rmdir /} msg] $msg
|
||
|
} {1 {\ EACCES}}
|
||
|
test winFCmd-6.12 {TclpRemoveDirectory: errno == EACCES} {95} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
list [catch {testfile rmdir tf1} msg] $msg
|
||
|
} {1 {tf1 ENOTDIR}}
|
||
|
test winFCmd-6.13 {TclpRemoveDirectory: write-protected} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
testchmod 000 td1
|
||
|
testfile rmdir td1
|
||
|
file exists td1
|
||
|
} {0}
|
||
|
test winFCmd-6.14 {TclpRemoveDirectory: check if empty dir} {95} {
|
||
|
cleanup
|
||
|
file mkdir td1/td2
|
||
|
list [catch {testfile rmdir td1} msg] $msg
|
||
|
} {1 {td1 EEXIST}}
|
||
|
test winFCmd-6.15 {TclpRemoveDirectory: !recursive} {
|
||
|
cleanup
|
||
|
file mkdir td1/td2
|
||
|
list [catch {testfile rmdir td1} msg] $msg
|
||
|
} {1 {td1 EEXIST}}
|
||
|
test winFCmd-6.16 {TclpRemoveDirectory: recursive, but errno != EEXIST} {
|
||
|
cleanup
|
||
|
createfile tf1
|
||
|
list [catch {testfile rmdir -force tf1} msg] $msg
|
||
|
} {1 {tf1 ENOTDIR}}
|
||
|
test winFCmd-6.17 {TclpRemoveDirectory: calls TraverseWinTree} {
|
||
|
cleanup
|
||
|
file mkdir td1/td2
|
||
|
testfile rmdir -force td1
|
||
|
file exists td1
|
||
|
} {0}
|
||
|
|
||
|
test winFCmd-7.1 {TraverseWinTree: targetPtr == NULL} {
|
||
|
cleanup
|
||
|
file mkdir td1/td2/td3
|
||
|
testfile rmdir -force td1
|
||
|
file exists td1
|
||
|
} {0}
|
||
|
test winFCmd-7.2 {TraverseWinTree: targetPtr != NULL} {
|
||
|
cleanup
|
||
|
file mkdir td1/td2/td3
|
||
|
testfile cpdir td1 td2
|
||
|
list [file exists td1] [file exists td2]
|
||
|
} {1 1}
|
||
|
test winFCmd-7.3 {TraverseWinTree: sourceAttr == -1} {
|
||
|
cleanup
|
||
|
list [catch {testfile cpdir td1 td2} msg] $msg
|
||
|
} {1 {td1 ENOENT}}
|
||
|
test winFCmd-7.4 {TraverseWinTree: source isn't directory} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
createfile td1/tf1 tf1
|
||
|
testfile cpdir td1 td2
|
||
|
contents td2/tf1
|
||
|
} {tf1}
|
||
|
test winFCmd-7.5 {TraverseWinTree: call TraversalCopy: DOTREE_F} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
createfile td1/tf1 tf1
|
||
|
testfile cpdir td1 td2
|
||
|
contents td2/tf1
|
||
|
} {tf1}
|
||
|
test winFCmd-7.6 {TraverseWinTree: call TraversalDelete: DOTREE_F} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
createfile td1/tf1 tf1
|
||
|
testfile rmdir -force td1
|
||
|
file exists td1
|
||
|
} {0}
|
||
|
test winFCmd-7.7 {TraverseWinTree: append \ to source if necessary} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
createfile td1/tf1 tf1
|
||
|
testfile cpdir td1 td2
|
||
|
contents td2/tf1
|
||
|
} {tf1}
|
||
|
test winFCmd-7.8 {TraverseWinTree: append \ to source if necessary} {95 cdrom} {
|
||
|
list [catch {testfile rmdir $cdrom/} msg] $msg
|
||
|
} "1 {$cdrom\\ EEXIST}"
|
||
|
test winFCmd-7.9 {TraverseWinTree: append \ to source if necessary} {NT cdrom} {
|
||
|
list [catch {testfile rmdir $cdrom/} msg] $msg
|
||
|
} "1 {$cdrom\\ EACCES}"
|
||
|
test winFCmd-7.10 {TraverseWinTree: can't read directory: handle == INVALID} {
|
||
|
# can't make it happen
|
||
|
} {}
|
||
|
test winFCmd-7.11 {TraverseWinTree: call TraversalCopy: DOTREE_PRED} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
testchmod 000 td1
|
||
|
createfile td1/tf1 tf1
|
||
|
testfile cpdir td1 td2
|
||
|
list [file exists td2] [file writable td2]
|
||
|
} {1 0}
|
||
|
test winFCmd-7.12 {TraverseWinTree: call TraversalDelete: DOTREE_PRED} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
createfile td1/tf1 tf1
|
||
|
testfile rmdir -force td1
|
||
|
file exists td1
|
||
|
} {0}
|
||
|
test winFCmd-7.13 {TraverseWinTree: append \ to target if necessary} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
createfile td1/tf1 tf1
|
||
|
testfile cpdir td1 td2
|
||
|
contents td2/tf1
|
||
|
} {tf1}
|
||
|
test winFCmd-7.14 {TraverseWinTree: append \ to target if necessary} {95} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
list [catch {testfile cpdir td1 /} msg] $msg
|
||
|
} {1 {\ EEXIST}}
|
||
|
test winFCmd-7.15 {TraverseWinTree: append \ to target if necessary} {NT} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
list [catch {testfile cpdir td1 /} msg] $msg
|
||
|
} {1 {\ EACCES}}
|
||
|
test winFCmd-7.16 {TraverseWinTree: recurse on files: no files} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
testfile cpdir td1 td2
|
||
|
} {}
|
||
|
test winFCmd-7.17 {TraverseWinTree: recurse on files: one file} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
createfile td1/td2
|
||
|
testfile cpdir td1 td2
|
||
|
glob td2/*
|
||
|
} {td2/td2}
|
||
|
test winFCmd-7.18 {TraverseWinTree: recurse on files: several files and dir} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
createfile td1/tf1
|
||
|
createfile td1/tf2
|
||
|
file mkdir td1/td2/td3
|
||
|
createfile td1/tf3
|
||
|
createfile td1/tf4
|
||
|
testfile cpdir td1 td2
|
||
|
glob td2/*
|
||
|
} {td2/tf1 td2/tf2 td2/td2 td2/tf3 td2/tf4}
|
||
|
test winFCmd-7.19 {TraverseWinTree: call TraversalCopy: DOTREE_POSTD} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
testchmod 000 td1
|
||
|
createfile td1/tf1 tf1
|
||
|
testfile cpdir td1 td2
|
||
|
list [file exists td2] [file writable td2]
|
||
|
} {1 0}
|
||
|
test winFCmd-7.20 {TraverseWinTree: call TraversalDelete: DOTREE_POSTD} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
createfile td1/tf1 tf1
|
||
|
testfile rmdir -force td1
|
||
|
file exists td1
|
||
|
} {0}
|
||
|
test winFCmd-7.21 {TraverseWinTree: fill errorPtr} {
|
||
|
cleanup
|
||
|
list [catch {testfile cpdir td1 td2} msg] $msg
|
||
|
} {1 {td1 ENOENT}}
|
||
|
|
||
|
test winFCmd-8.1 {TraversalCopy: DOTREE_F} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
list [catch {testfile cpdir td1 td1} msg] $msg
|
||
|
} {1 {td1 EEXIST}}
|
||
|
test winFCmd-8.2 {TraversalCopy: DOTREE_PRED} {
|
||
|
cleanup
|
||
|
file mkdir td1/td2
|
||
|
testchmod 000 td1
|
||
|
testfile cpdir td1 td2
|
||
|
list [file writable td1] [file writable td1/td2]
|
||
|
} {0 1}
|
||
|
test winFCmd-8.3 {TraversalCopy: DOTREE_POSTD} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
testfile cpdir td1 td2
|
||
|
} {}
|
||
|
|
||
|
test winFCmd-9.1 {TraversalDelete: DOTREE_F} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
createfile td1/tf1
|
||
|
testfile rmdir -force td1
|
||
|
} {}
|
||
|
test winFCmd-9.2 {TraversalDelete: DOTREE_F} {95} {
|
||
|
cleanup
|
||
|
file mkdir td1
|
||
|
set fd [open td1/tf1 w]
|
||
|
set msg [list [catch {testfile rmdir -force td1} msg] $msg]
|
||
|
close $fd
|
||
|
set msg
|
||
|
} {1 {td1\tf1 EACCES}}
|
||
|
test winFCmd-9.3 {TraversalDelete: DOTREE_PRED} {
|
||
|
cleanup
|
||
|
file mkdir td1/td2
|
||
|
testchmod 000 td1
|
||
|
testfile rmdir -force td1
|
||
|
file exists td1
|
||
|
} {0}
|
||
|
test winFCmd-9.4 {TraversalDelete: DOTREE_POSTD} {
|
||
|
cleanup
|
||
|
file mkdir td1/td1/td3/td4/td5
|
||
|
testfile rmdir -force td1
|
||
|
} {}
|
||
|
|
||
|
cleanup
|
||
|
|
||
|
|
||
|
|
||
|
return
|
||
|
|
||
|
foreach source {tef ted tnf tnd "" nul com1} {
|
||
|
foreach chmodsrc {000 755} {
|
||
|
foreach dest "tfn tfe tdn tdempty tdfull td1/td2 $p $p/td1 {} nul" {
|
||
|
foreach chmoddst {000 755} {
|
||
|
puts hi
|
||
|
cleanup
|
||
|
file delete -force ted tef
|
||
|
file mkdir ted
|
||
|
createfile tef
|
||
|
createfile tfe
|
||
|
file mkdir tdempty
|
||
|
file mkdir tdfull/td1/td2
|
||
|
|
||
|
catch {testchmod $chmodsrc $source}
|
||
|
catch {testchmod $chmoddst $dest}
|
||
|
|
||
|
if [catch {file rename $source $dest} msg] {
|
||
|
puts "file rename $source ($chmodsrc) $dest ($chmoddst)"
|
||
|
puts $msg
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|