fileSystem.test
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:18k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # This file tests the filesystem and vfs internals.
  2. #
  3. # This file contains a collection of tests for one or more of the Tcl
  4. # built-in commands.  Sourcing this file into Tcl runs the tests and
  5. # generates output for errors.  No output means no errors were found.
  6. #
  7. # Copyright (c) 2002 Vincent Darley.
  8. #
  9. # See the file "license.terms" for information on usage and redistribution
  10. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  11. package require tcltest 2
  12. namespace eval ::tcl::test::fileSystem {
  13.     catch {
  14. namespace import ::tcltest::cleanupTests
  15. namespace import ::tcltest::makeDirectory
  16. namespace import ::tcltest::makeFile
  17. namespace import ::tcltest::removeDirectory
  18. namespace import ::tcltest::removeFile
  19. namespace import ::tcltest::test
  20.     }
  21.     
  22.     catch {
  23. file delete -force link.file
  24. file delete -force dir.link
  25. file delete -force [file join dir.file linkinside.file]
  26.     }
  27. cd [tcltest::temporaryDirectory]
  28. makeFile "test file" gorp.file
  29. makeDirectory dir.file
  30. makeFile "test file in directory" [file join dir.file inside.file]
  31. if {[catch {
  32.     file link link.file gorp.file 
  33.     file link 
  34.       [file join dir.file linkinside.file] 
  35.       [file join dir.file inside.file]
  36.     file link dir.link dir.file
  37. }]} {
  38.     tcltest::testConstraint hasLinks 0
  39. } else {
  40.     tcltest::testConstraint hasLinks 1
  41. }
  42. tcltest::testConstraint testsimplefilesystem 
  43.   [string equal testsimplefilesystem [info commands testsimplefilesystem]]
  44. test filesystem-1.0 {link normalisation} {hasLinks} {
  45.    string equal [file normalize gorp.file] [file normalize link.file]
  46. } {0}
  47. test filesystem-1.1 {link normalisation} {hasLinks} {
  48.    string equal [file normalize dir.file] [file normalize dir.link]
  49. } {0}
  50. test filesystem-1.2 {link normalisation} {hasLinks macOrUnix} {
  51.    string equal [file normalize [file join gorp.file foo]] 
  52.      [file normalize [file join link.file foo]]
  53. } {1}
  54. test filesystem-1.3 {link normalisation} {hasLinks} {
  55.    string equal [file normalize [file join dir.file foo]] 
  56.      [file normalize [file join dir.link foo]]
  57. } {1}
  58. test filesystem-1.4 {link normalisation} {hasLinks} {
  59.    string equal [file normalize [file join dir.file inside.file]] 
  60.      [file normalize [file join dir.link inside.file]]
  61. } {1}
  62. test filesystem-1.5 {link normalisation} {hasLinks} {
  63.    string equal [file normalize [file join dir.file linkinside.file]] 
  64.      [file normalize [file join dir.file linkinside.file]]
  65. } {1}
  66. test filesystem-1.6 {link normalisation} {hasLinks} {
  67.    string equal [file normalize [file join dir.file linkinside.file]] 
  68.      [file normalize [file join dir.link inside.file]]
  69. } {0}
  70. test filesystem-1.7 {link normalisation} {hasLinks macOrUnix} {
  71.    string equal [file normalize [file join dir.link linkinside.file foo]] 
  72.      [file normalize [file join dir.file inside.file foo]]
  73. } {1}
  74. test filesystem-1.8 {link normalisation} {hasLinks} {
  75.    string equal [file normalize [file join dir.file linkinside.filefoo]] 
  76.      [file normalize [file join dir.link inside.filefoo]]
  77. } {0}
  78. test filesystem-1.9 {link normalisation} {macOrUnix hasLinks} {
  79.     file delete -force dir.link
  80.     file link dir.link [file nativename dir.file]
  81.     string equal [file normalize [file join dir.file linkinside.file foo]] 
  82.       [file normalize [file join dir.link inside.file foo]]
  83. } {1}
  84. test filesystem-1.10 {link normalisation: double link} {macOrUnix hasLinks} {
  85.     file link dir2.link dir.link
  86.     string equal [file normalize [file join dir.file linkinside.file foo]] 
  87.       [file normalize [file join dir2.link inside.file foo]]
  88. } {1}
  89. makeDirectory dir2.file
  90. test filesystem-1.11 {link normalisation: double link, back in tree} {macOrUnix hasLinks} {
  91.     file link [file join dir2.file dir2.link] dir2.link
  92.     string equal [file normalize [file join dir.file linkinside.file foo]] 
  93.       [file normalize [file join dir2.file dir2.link inside.file foo]]
  94. } {1}
  95. test filesystem-1.12 {file new native path} {} {
  96.     for {set i 0} {$i < 10} {incr i} {
  97. foreach f [lsort [glob -nocomplain -type l *]] {
  98.     catch {file readlink $f}
  99. }
  100.     }
  101.     # If we reach here we've succeeded. We used to crash above.
  102.     expr 1
  103. } {1}
  104. test filesystem-1.13 {file normalisation} {winOnly} {
  105.     # This used to be broken
  106.     file normalize C:/thislongnamedoesntexist
  107. } {C:/thislongnamedoesntexist}
  108. test filesystem-1.14 {file normalisation} {winOnly} {
  109.     # This used to be broken
  110.     file normalize c:/
  111. } {C:/}
  112. file delete -force dir2.file
  113. file delete -force dir2.link
  114. file delete -force link.file dir.link
  115. removeFile [file join dir.file inside.file]
  116. removeDirectory dir.file
  117. test filesystem-2.0 {new native path} {unixOnly} {
  118.    foreach f [lsort [glob -nocomplain /usr/bin/c*]] {
  119.        catch {file readlink $f}
  120.    }
  121.    # If we reach here we've succeeded. We used to crash above.
  122.    expr 1
  123. } {1}
  124. if {[catch {package require tcltest 2}]} {
  125.     puts stderr "Skipping tests filesystem-{3,4}.*: tcltest 2 required."
  126. } else {
  127.     namespace import ::tcltest::testConstraint
  128.     # Is the Tcltest package loaded?
  129.     #   - that is, the special C-coded testing commands in tclTest.c
  130.     #   - tests use testing commands introduced in Tcltest 8.4
  131.     testConstraint Tcltest [expr {
  132.         [llength [package provide Tcltest]]
  133.         && [package vsatisfies [package provide Tcltest] 8.4]}]
  134. # Make sure the testfilesystem hasn't been registered.
  135. while {![catch {testfilesystem 0}]} {}
  136. test filesystem-3.0 {Tcl_FSRegister} Tcltest {
  137.     testfilesystem 1
  138. } {registered}
  139. test filesystem-3.1 {Tcl_FSUnregister} Tcltest {
  140.     testfilesystem 0
  141. } {unregistered}
  142. test filesystem-3.2 {Tcl_FSUnregister} Tcltest {
  143.     list [catch {testfilesystem 0} err] $err
  144. } {1 failed}
  145. test filesystem-3.3 {Tcl_FSRegister} Tcltest {
  146.     testfilesystem 1
  147.     testfilesystem 1
  148.     testfilesystem 0
  149.     testfilesystem 0
  150. } {unregistered}
  151. test filesystem-3.4 {Tcl_FSRegister} Tcltest {
  152.     testfilesystem 1
  153.     file system bar
  154. } {reporting}
  155. test filesystem-3.5 {Tcl_FSUnregister} Tcltest {
  156.     testfilesystem 0
  157.     lindex [file system bar] 0
  158. } {native}
  159. test filesystem-4.0 {testfilesystem} {
  160.     -constraints Tcltest
  161.     -match glob
  162.     -body {
  163. testfilesystem 1
  164. set filesystemReport {}
  165. file exists foo
  166. testfilesystem 0
  167. set filesystemReport
  168.     }
  169.     -result {* {access foo}}
  170. }
  171. test filesystem-4.1 {testfilesystem} {
  172.     -constraints Tcltest
  173.     -match glob
  174.     -body {
  175. testfilesystem 1
  176. set filesystemReport {}
  177. catch {file stat foo bar}
  178. testfilesystem 0
  179. set filesystemReport
  180.     }
  181.     -result {* {stat foo}}
  182. }
  183. test filesystem-4.2 {testfilesystem} {
  184.     -constraints Tcltest
  185.     -match glob
  186.     -body {
  187. testfilesystem 1
  188. set filesystemReport {}
  189. catch {file lstat foo bar}
  190. testfilesystem 0
  191. set filesystemReport
  192.     }
  193.     -result {* {lstat foo}}
  194. }
  195. test filesystem-4.3 {testfilesystem} {
  196.     -constraints Tcltest
  197.     -match glob
  198.     -body {
  199. testfilesystem 1
  200. set filesystemReport {}
  201. catch {glob *}
  202. testfilesystem 0
  203. set filesystemReport
  204.     }
  205.     -result {* {matchindirectory *}*}
  206. }
  207. test filesystem-5.1 {cache and ~} {
  208.     -constraints Tcltest
  209.     -match regexp
  210.     -body {
  211. set orig $env(HOME)
  212. set ::env(HOME) /foo/bar/blah
  213. set testdir ~
  214. set res1 "Parent of ~ (/foo/bar/blah) is [file dirname $testdir]"
  215. set ::env(HOME) /a/b/c
  216. set res2 "Parent of ~ (/a/b/c) is [file dirname $testdir]"
  217. set ::env(HOME) $orig
  218. list $res1 $res2
  219.     }
  220.     -result {{Parent of ~ (/foo/bar/blah) is (/foo/bar|foo:bar)} {Parent of ~ (/a/b/c) is (/a/b|a:b)}}
  221. }
  222. test filesystem-6.1 {empty file name} {
  223.     list [catch {open ""} msg] $msg
  224. } {1 {couldn't open "": no such file or directory}}
  225. test filesystem-6.2 {empty file name} {
  226.     list [catch {file stat "" arr} msg] $msg
  227. } {1 {could not read "": no such file or directory}}
  228. test filesystem-6.3 {empty file name} {
  229.     list [catch {file atime ""} msg] $msg
  230. } {1 {could not read "": no such file or directory}}
  231. test filesystem-6.4 {empty file name} {
  232.     list [catch {file attributes ""} msg] $msg
  233. } {1 {could not read "": no such file or directory}}
  234. test filesystem-6.5 {empty file name} {
  235.     list [catch {file copy "" ""} msg] $msg
  236. } {1 {error copying "": no such file or directory}}
  237. test filesystem-6.6 {empty file name} {
  238.     list [catch {file delete ""} msg] $msg
  239. } {0 {}}
  240. test filesystem-6.7 {empty file name} {
  241.     list [catch {file dirname ""} msg] $msg
  242. } {0 .}
  243. test filesystem-6.8 {empty file name} {
  244.     list [catch {file executable ""} msg] $msg
  245. } {0 0}
  246. test filesystem-6.9 {empty file name} {
  247.     list [catch {file exists ""} msg] $msg
  248. } {0 0}
  249. test filesystem-6.10 {empty file name} {
  250.     list [catch {file extension ""} msg] $msg
  251. } {0 {}}
  252. test filesystem-6.11 {empty file name} {
  253.     list [catch {file isdirectory ""} msg] $msg
  254. } {0 0}
  255. test filesystem-6.12 {empty file name} {
  256.     list [catch {file isfile ""} msg] $msg
  257. } {0 0}
  258. test filesystem-6.13 {empty file name} {
  259.     list [catch {file join ""} msg] $msg
  260. } {0 {}}
  261. test filesystem-6.14 {empty file name} {
  262.     list [catch {file link ""} msg] $msg
  263. } {1 {could not read link "": no such file or directory}}
  264. test filesystem-6.15 {empty file name} {
  265.     list [catch {file lstat "" arr} msg] $msg
  266. } {1 {could not read "": no such file or directory}}
  267. test filesystem-6.16 {empty file name} {
  268.     list [catch {file mtime ""} msg] $msg
  269. } {1 {could not read "": no such file or directory}}
  270. test filesystem-6.17 {empty file name} {
  271.     list [catch {file mtime "" 0} msg] $msg
  272. } {1 {could not read "": no such file or directory}}
  273. test filesystem-6.18 {empty file name} {
  274.     list [catch {file mkdir ""} msg] $msg
  275. } {1 {can't create directory "": no such file or directory}}
  276. test filesystem-6.19 {empty file name} {
  277.     list [catch {file nativename ""} msg] $msg
  278. } {0 {}}
  279. test filesystem-6.20 {empty file name} {
  280.     list [catch {file normalize ""} msg] $msg
  281. } {0 {}}
  282. test filesystem-6.21 {empty file name} {
  283.     list [catch {file owned ""} msg] $msg
  284. } {0 0}
  285. test filesystem-6.22 {empty file name} {
  286.     list [catch {file pathtype ""} msg] $msg
  287. } {0 relative}
  288. test filesystem-6.23 {empty file name} {
  289.     list [catch {file readable ""} msg] $msg
  290. } {0 0}
  291. test filesystem-6.24 {empty file name} {
  292.     list [catch {file readlink ""} msg] $msg
  293. } {1 {could not readlink "": no such file or directory}}
  294. test filesystem-6.25 {empty file name} {
  295.     list [catch {file rename "" ""} msg] $msg
  296. } {1 {error renaming "": no such file or directory}}
  297. test filesystem-6.26 {empty file name} {
  298.     list [catch {file rootname ""} msg] $msg
  299. } {0 {}}
  300. test filesystem-6.27 {empty file name} {
  301.     list [catch {file separator ""} msg] $msg
  302. } {1 {Unrecognised path}}
  303. test filesystem-6.28 {empty file name} {
  304.     list [catch {file size ""} msg] $msg
  305. } {1 {could not read "": no such file or directory}}
  306. test filesystem-6.29 {empty file name} {
  307.     list [catch {file split ""} msg] $msg
  308. } {0 {}}
  309. test filesystem-6.30 {empty file name} {
  310.     list [catch {file system ""} msg] $msg
  311. } {1 {Unrecognised path}}
  312. test filesystem-6.31 {empty file name} {
  313.     list [catch {file tail ""} msg] $msg
  314. } {0 {}}
  315. test filesystem-6.32 {empty file name} {
  316.     list [catch {file type ""} msg] $msg
  317. } {1 {could not read "": no such file or directory}}
  318. test filesystem-6.33 {empty file name} {
  319.     list [catch {file writable ""} msg] $msg
  320. } {0 0}
  321. # Make sure the testfilesystem hasn't been registered.
  322. while {![catch {testfilesystem 0}]} {}
  323. }
  324. test filesystem-7.1 {load from vfs} {win testsimplefilesystem} {
  325.     # This may cause a crash on exit
  326.     set dir [pwd]
  327.     cd [file dirname [info nameof]]
  328.     set dde [lindex [glob *dde*[info sharedlib]] 0]
  329.     testsimplefilesystem 1
  330.     # This loads dde via a complex copy-to-temp operation
  331.     load simplefs:/$dde dde
  332.     testsimplefilesystem 0
  333.     cd $dir
  334.     set res "ok"
  335.     # The real result of this test is what happens when Tcl exits.
  336. } {ok}
  337. test filesystem-7.2 {cross-filesystem copy from vfs maintains mtime} 
  338.   {testsimplefilesystem} {
  339.     set dir [pwd]
  340.     cd [tcltest::temporaryDirectory]
  341.     # We created this file several tests ago.
  342.     set origtime [file mtime gorp.file]
  343.     testsimplefilesystem 1
  344.     file delete -force theCopy
  345.     file copy simplefs:/gorp.file theCopy
  346.     testsimplefilesystem 0
  347.     set newtime [file mtime theCopy]
  348.     file delete theCopy
  349.     cd $dir
  350.     expr {$origtime == $newtime}
  351. } {1}
  352. removeFile gorp.file
  353. test filesystem-8.1 {relative path objects and caching of pwd} {
  354.     set dir [pwd]
  355.     cd [tcltest::temporaryDirectory]
  356.     makeDirectory abc
  357.     makeDirectory def
  358.     makeFile "contents" [file join abc foo]
  359.     cd abc
  360.     set f "foo"
  361.     set res {}
  362.     lappend res [file exists $f]
  363.     lappend res [file exists $f]
  364.     cd ..
  365.     cd def
  366.     # If we haven't cleared the object's cwd cache, Tcl 
  367.     # will think it still exists.
  368.     lappend res [file exists $f]
  369.     lappend res [file exists $f]
  370.     removeFile [file join abc foo]
  371.     removeDirectory abc
  372.     removeDirectory def
  373.     cd $dir
  374.     set res
  375. } {1 1 0 0}
  376. test filesystem-8.2 {relative path objects and use of pwd} {
  377.     set origdir [pwd]
  378.     cd [tcltest::temporaryDirectory]
  379.     set dir "abc"
  380.     makeDirectory $dir
  381.     makeFile "contents" [file join abc foo]
  382.     cd $dir
  383.     set res [file exists [lindex [glob *] 0]]
  384.     cd ..
  385.     removeFile [file join abc foo]
  386.     removeDirectory abc
  387.     cd $origdir
  388.     set res
  389. } {1}
  390. test filesystem-8.3 {path objects and empty string} {
  391.     set anchor ""
  392.     set dst foo
  393.     set res $dst
  394.     set yyy [file split $anchor]
  395.     set dst [file join  $anchor $dst]
  396.     lappend res $dst $yyy
  397. } {foo foo {}}
  398. proc TestFind1 {d f} {
  399.     set r1 [file exists [file join $d $f]]
  400.     lappend res "[file join $d $f] found: $r1"
  401.     lappend res "is dir a dir? [file isdirectory $d]"
  402.     set r2 [file exists [file join $d $f]]
  403.     lappend res "[file join $d $f] found: $r2"
  404.     set res
  405. }
  406. proc TestFind2 {d f} {
  407.     set r1 [file exists [file join $d $f]]
  408.     lappend res "[file join $d $f] found: $r1"
  409.     lappend res "is dir a dir? [file isdirectory [file join $d]]"
  410.     set r2 [file exists [file join $d $f]]
  411.     lappend res "[file join $d $f] found: $r2"
  412.     set res
  413. }
  414. test filesystem-9.1 {path objects and join and object rep} {
  415.     set origdir [pwd]
  416.     cd [tcltest::temporaryDirectory]
  417.     file mkdir [file join a b c]
  418.     set res [TestFind1 a [file join b . c]]
  419.     file delete -force a
  420.     cd $origdir
  421.     set res
  422. } {{a/b/./c found: 1} {is dir a dir? 1} {a/b/./c found: 1}}
  423. test filesystem-9.2 {path objects and join and object rep} {
  424.     set origdir [pwd]
  425.     cd [tcltest::temporaryDirectory]
  426.     file mkdir [file join a b c]
  427.     set res [TestFind2 a [file join b . c]]
  428.     file delete -force a
  429.     cd $origdir
  430.     set res
  431. } {{a/b/./c found: 1} {is dir a dir? 1} {a/b/./c found: 1}}
  432. test filesystem-9.2.1 {path objects and join and object rep} {
  433.     set origdir [pwd]
  434.     cd [tcltest::temporaryDirectory]
  435.     file mkdir [file join a b c]
  436.     set res [TestFind2 a [file join b .]]
  437.     file delete -force a
  438.     cd $origdir
  439.     set res
  440. } {{a/b/. found: 1} {is dir a dir? 1} {a/b/. found: 1}}
  441. test filesystem-9.3 {path objects and join and object rep} {
  442.     set origdir [pwd]
  443.     cd [tcltest::temporaryDirectory]
  444.     file mkdir [file join a b c]
  445.     set res [TestFind1 a [file join b .. b c]]
  446.     file delete -force a
  447.     cd $origdir
  448.     set res
  449. } {{a/b/../b/c found: 1} {is dir a dir? 1} {a/b/../b/c found: 1}}
  450. test filesystem-9.4 {path objects and join and object rep} {
  451.     set origdir [pwd]
  452.     cd [tcltest::temporaryDirectory]
  453.     file mkdir [file join a b c]
  454.     set res [TestFind2 a [file join b .. b c]]
  455.     file delete -force a
  456.     cd $origdir
  457.     set res
  458. } {{a/b/../b/c found: 1} {is dir a dir? 1} {a/b/../b/c found: 1}}
  459. test filesystem-9.5 {path objects and file tail and object rep} {
  460.     set origdir [pwd]
  461.     cd [tcltest::temporaryDirectory]
  462.     file mkdir dgp
  463.     close [open dgp/test w]
  464.     foreach relative [glob -nocomplain [file join * test]] {
  465. set absolute [file join [pwd] $relative]
  466. set res [list [file tail $absolute] "test"]
  467.     }
  468.     file delete -force dgp 
  469.     cd $origdir
  470.     set res
  471. } {test test}
  472. test filesystem-9.6 {path objects and file join and object rep} {winOnly} {
  473.     set res {}
  474.     set p "C:\toto"
  475.     lappend res [file join $p toto]
  476.     file isdirectory $p
  477.     lappend res [file join $p toto]
  478. } {C:/toto/toto C:/toto/toto}
  479. test filesystem-9.7 {path objects and glob and file tail and tilde} {
  480.     set res {}
  481.     set origdir [pwd]
  482.     cd [tcltest::temporaryDirectory]
  483.     file mkdir tilde
  484.     close [open tilde/~testNotExist w]
  485.     cd tilde
  486.     set file [lindex [glob *test*] 0]
  487.     lappend res [file exists $file] [catch {file tail $file} r] $r
  488.     lappend res $file
  489.     lappend res [file exists $file] [catch {file tail $file} r] $r
  490.     lappend res [catch {file tail $file} r] $r
  491.     cd ..
  492.     file delete -force tilde
  493.     cd $origdir
  494.     set res
  495. } {0 1 {user "testNotExist" doesn't exist} ~testNotExist 0 1 {user "testNotExist" doesn't exist} 1 {user "testNotExist" doesn't exist}}
  496. test filesystem-9.8 {path objects and glob and file tail and tilde} {
  497.     set res {}
  498.     set origdir [pwd]
  499.     cd [tcltest::temporaryDirectory]
  500.     file mkdir tilde
  501.     close [open tilde/~testNotExist w]
  502.     cd tilde
  503.     set file1 [lindex [glob *test*] 0]
  504.     set file2 "~testNotExist"
  505.     lappend res $file1 $file2
  506.     lappend res [catch {file tail $file1} r] $r
  507.     lappend res [catch {file tail $file2} r] $r
  508.     cd ..
  509.     file delete -force tilde
  510.     cd $origdir
  511.     set res
  512. } {~testNotExist ~testNotExist 1 {user "testNotExist" doesn't exist} 1 {user "testNotExist" doesn't exist}}
  513. test filesystem-9.9 {path objects and glob and file tail and tilde} {
  514.     set res {}
  515.     set origdir [pwd]
  516.     cd [tcltest::temporaryDirectory]
  517.     file mkdir tilde
  518.     close [open tilde/~testNotExist w]
  519.     cd tilde
  520.     set file1 [lindex [glob *test*] 0]
  521.     set file2 "~testNotExist"
  522.     lappend res [catch {file exists $file1} r] $r
  523.     lappend res [catch {file exists $file2} r] $r
  524.     lappend res [string equal $file1 $file2]
  525.     cd ..
  526.     file delete -force tilde
  527.     cd $origdir
  528.     set res
  529. } {0 0 0 0 1}
  530. cleanupTests
  531. }
  532. namespace delete ::tcl::test::fileSystem
  533. return