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

通讯编程

开发平台:

Visual C++

  1. # This file tests the filename manipulation routines.
  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) 1995-1996 Sun Microsystems, Inc.
  8. # Copyright (c) 1999 by Scriptics Corporation.
  9. #
  10. # See the file "license.terms" for information on usage and redistribution
  11. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  12. #
  13. # RCS: @(#) $Id: fileName.test,v 1.30.2.7 2005/06/21 19:07:58 kennykb Exp $
  14. if {[lsearch [namespace children] ::tcltest] == -1} {
  15.     package require tcltest
  16.     namespace import -force ::tcltest::*
  17. }
  18. tcltest::testConstraint testsetplatform [string equal testsetplatform [info commands testsetplatform]]
  19. tcltest::testConstraint testtranslatefilename [string equal testtranslatefilename [info commands testtranslatefilename]]
  20. global env
  21. if {[tcltest::testConstraint testsetplatform]} {
  22.     set platform [testgetplatform]
  23. }
  24. test filename-1.1 {Tcl_GetPathType: unix} {testsetplatform} {
  25.     testsetplatform unix
  26.     file pathtype /
  27. } absolute
  28. test filename-1.2 {Tcl_GetPathType: unix} {testsetplatform} {
  29.     testsetplatform unix
  30.     file pathtype /foo
  31. } absolute
  32. test filename-1.3 {Tcl_GetPathType: unix} {testsetplatform} {
  33.     testsetplatform unix
  34.     file pathtype foo
  35. } relative
  36. test filename-1.4 {Tcl_GetPathType: unix} {testsetplatform} {
  37.     testsetplatform unix
  38.     file pathtype c:/foo
  39. } relative
  40. test filename-1.5 {Tcl_GetPathType: unix} {testsetplatform} {
  41.     testsetplatform unix
  42.     file pathtype ~
  43. } absolute
  44. test filename-1.6 {Tcl_GetPathType: unix} {testsetplatform} {
  45.     testsetplatform unix
  46.     file pathtype ~/foo
  47. } absolute
  48. test filename-1.7 {Tcl_GetPathType: unix} {testsetplatform} {
  49.     testsetplatform unix
  50.     file pathtype ~foo
  51. } absolute
  52. test filename-1.8 {Tcl_GetPathType: unix} {testsetplatform} {
  53.     testsetplatform unix
  54.     file pathtype ./~foo
  55. } relative
  56. test filename-2.1 {Tcl_GetPathType: mac, denerate names} {testsetplatform} {
  57.     testsetplatform mac
  58.     file pathtype /
  59. } relative
  60. test filename-2.2 {Tcl_GetPathType: mac, denerate names} {testsetplatform} {
  61.     testsetplatform mac
  62.     file pathtype /.
  63. } relative
  64. test filename-2.3 {Tcl_GetPathType: mac, denerate names} {testsetplatform} {
  65.     testsetplatform mac
  66.     file pathtype /..
  67. } relative
  68. test filename-2.4 {Tcl_GetPathType: mac, denerate names} {testsetplatform} {
  69.     testsetplatform mac
  70.     file pathtype //.//
  71. } relative
  72. test filename-2.5 {Tcl_GetPathType: mac, denerate names} {testsetplatform} {
  73.     testsetplatform mac
  74.     file pathtype //.//../.
  75. } relative
  76. test filename-2.6 {Tcl_GetPathType: mac, tilde names} {testsetplatform} {
  77.     testsetplatform mac
  78.     file pathtype ~
  79. } absolute
  80. test filename-2.7 {Tcl_GetPathType: mac, tilde names} {testsetplatform} {
  81.     testsetplatform mac
  82.     file pathtype ~:
  83. } absolute
  84. test filename-2.8 {Tcl_GetPathType: mac, tilde names} {testsetplatform} {
  85.     testsetplatform mac
  86.     file pathtype ~:foo
  87. } absolute
  88. test filename-2.9 {Tcl_GetPathType: mac, tilde names} {testsetplatform} {
  89.     testsetplatform mac
  90.     file pathtype ~/
  91. } absolute
  92. test filename-2.10 {Tcl_GetPathType: mac, tilde names} {testsetplatform} {
  93.     testsetplatform mac
  94.     file pathtype ~/foo
  95. } absolute
  96. test filename-2.11 {Tcl_GetPathType: mac, unix-style names} {testsetplatform} {
  97.     testsetplatform mac
  98.     file pathtype /foo
  99. } absolute
  100. test filename-2.12 {Tcl_GetPathType: mac, unix-style names} {testsetplatform} {
  101.     testsetplatform mac
  102.     file pathtype /./foo
  103. } absolute
  104. test filename-2.13 {Tcl_GetPathType: mac, unix-style names} {testsetplatform} {
  105.     testsetplatform mac
  106.     file pathtype /..//./foo
  107. } absolute
  108. test filename-2.14 {Tcl_GetPathType: mac, unix-style names} {testsetplatform} {
  109.     testsetplatform mac
  110.     file pathtype /foo/bar
  111. } absolute
  112. test filename-2.15 {Tcl_GetPathType: mac, unix-style names} {testsetplatform} {
  113.     testsetplatform mac
  114.     file pathtype foo/bar
  115. } relative
  116. test filename-2.16 {Tcl_GetPathType: mac, mac-style names} {testsetplatform} {
  117.     testsetplatform mac
  118.     file pathtype :
  119. } relative
  120. test filename-2.17 {Tcl_GetPathType: mac, mac-style names} {testsetplatform} {
  121.     testsetplatform mac
  122.     file pathtype :foo
  123. } relative
  124. test filename-2.18 {Tcl_GetPathType: mac, mac-style names} {testsetplatform} {
  125.     testsetplatform mac
  126.     file pathtype foo:
  127. } absolute
  128. test filename-2.19 {Tcl_GetPathType: mac, mac-style names} {testsetplatform} {
  129.     testsetplatform mac
  130.     file pathtype foo:bar
  131. } absolute
  132. test filename-2.20 {Tcl_GetPathType: mac, mac-style names} {testsetplatform} {
  133.     testsetplatform mac
  134.     file pathtype :foo:bar
  135. } relative
  136. test filename-2.21 {Tcl_GetPathType: mac, mac-style names} {testsetplatform} {
  137.     testsetplatform mac
  138.     file pathtype ::foo:bar
  139. } relative
  140. test filename-2.22 {Tcl_GetPathType: mac, mac-style names} {testsetplatform} {
  141.     testsetplatform mac
  142.     file pathtype ~foo
  143. } absolute
  144. test filename-2.23 {Tcl_GetPathType: mac, mac-style names} {testsetplatform} {
  145.     testsetplatform mac
  146.     file pathtype :~foo
  147. } relative
  148. test filename-2.24 {Tcl_GetPathType: mac, mac-style names} {testsetplatform} {
  149.     testsetplatform mac
  150.     file pathtype ~foo:
  151. } absolute
  152. test filename-2.25 {Tcl_GetPathType: mac, mac-style names} {testsetplatform} {
  153.     testsetplatform mac
  154.     file pathtype foo/bar:
  155. } absolute
  156. test filename-2.26 {Tcl_GetPathType: mac, mac-style names} {testsetplatform} {
  157.     testsetplatform mac
  158.     file pathtype /foo:
  159. } absolute
  160. test filename-2.27 {Tcl_GetPathType: mac, mac-style names} {testsetplatform} {
  161.     testsetplatform mac
  162.     file pathtype foo
  163. } relative
  164. test filename-3.1 {Tcl_GetPathType: windows} {testsetplatform} {
  165.     testsetplatform windows
  166.     file pathtype /
  167. } volumerelative
  168. test filename-3.2 {Tcl_GetPathType: windows} {testsetplatform} {
  169.     testsetplatform windows
  170.     file pathtype \
  171. } volumerelative
  172. test filename-3.3 {Tcl_GetPathType: windows} {testsetplatform} {
  173.     testsetplatform windows
  174.     file pathtype /foo
  175. } volumerelative
  176. test filename-3.4 {Tcl_GetPathType: windows} {testsetplatform} {
  177.     testsetplatform windows
  178.     file pathtype \foo
  179. } volumerelative
  180. test filename-3.5 {Tcl_GetPathType: windows} {testsetplatform} {
  181.     testsetplatform windows
  182.     file pathtype c:/
  183. } absolute
  184. test filename-3.6 {Tcl_GetPathType: windows} {testsetplatform} {
  185.     testsetplatform windows
  186.     file pathtype c:\
  187. } absolute
  188. test filename-3.7 {Tcl_GetPathType: windows} {testsetplatform} {
  189.     testsetplatform windows
  190.     file pathtype c:/foo
  191. } absolute
  192. test filename-3.8 {Tcl_GetPathType: windows} {testsetplatform} {
  193.     testsetplatform windows
  194.     file pathtype c:\foo
  195. } absolute
  196. test filename-3.9 {Tcl_GetPathType: windows} {testsetplatform} {
  197.     testsetplatform windows
  198.     file pathtype c:
  199. } volumerelative
  200. test filename-3.10 {Tcl_GetPathType: windows} {testsetplatform} {
  201.     testsetplatform windows
  202.     file pathtype c:foo
  203. } volumerelative
  204. test filename-3.11 {Tcl_GetPathType: windows} {testsetplatform} {
  205.     testsetplatform windows
  206.     file pathtype foo
  207. } relative
  208. test filename-3.12 {Tcl_GetPathType: windows} {testsetplatform} {
  209.     testsetplatform windows
  210.     file pathtype //foo/bar
  211. } absolute
  212. test filename-3.13 {Tcl_GetPathType: windows} {testsetplatform} {
  213.     testsetplatform windows
  214.     file pathtype ~foo
  215. } absolute
  216. test filename-3.14 {Tcl_GetPathType: windows} {testsetplatform} {
  217.     testsetplatform windows
  218.     file pathtype ~
  219. } absolute
  220. test filename-3.15 {Tcl_GetPathType: windows} {testsetplatform} {
  221.     testsetplatform windows
  222.     file pathtype ~/foo
  223. } absolute
  224. test filename-3.16 {Tcl_GetPathType: windows} {testsetplatform} {
  225.     testsetplatform windows
  226.     file pathtype ./~foo
  227. } relative
  228. test filename-4.1 {Tcl_SplitPath: unix} {testsetplatform} {
  229.     testsetplatform unix
  230.     file split /
  231. } {/}
  232. test filename-4.2 {Tcl_SplitPath: unix} {testsetplatform} {
  233.     testsetplatform unix
  234.     file split /foo
  235. } {/ foo}
  236. test filename-4.3 {Tcl_SplitPath: unix} {testsetplatform} {
  237.     testsetplatform unix
  238.     file split /foo/bar
  239. } {/ foo bar}
  240. test filename-4.4 {Tcl_SplitPath: unix} {testsetplatform} {
  241.     testsetplatform unix
  242.     file split /foo/bar/baz
  243. } {/ foo bar baz}
  244. test filename-4.5 {Tcl_SplitPath: unix} {testsetplatform} {
  245.     testsetplatform unix
  246.     file split foo/bar
  247. } {foo bar}
  248. test filename-4.6 {Tcl_SplitPath: unix} {testsetplatform} {
  249.     testsetplatform unix
  250.     file split ./foo/bar
  251. } {. foo bar}
  252. test filename-4.7 {Tcl_SplitPath: unix} {testsetplatform} {
  253.     testsetplatform unix
  254.     file split /foo/../././foo/bar
  255. } {/ foo .. . . foo bar}
  256. test filename-4.8 {Tcl_SplitPath: unix} {testsetplatform} {
  257.     testsetplatform unix
  258.     file split ../foo/bar
  259. } {.. foo bar}
  260. test filename-4.9 {Tcl_SplitPath: unix} {testsetplatform} {
  261.     testsetplatform unix
  262.     file split {}
  263. } {}
  264. test filename-4.10 {Tcl_SplitPath: unix} {testsetplatform} {
  265.     testsetplatform unix
  266.     file split .
  267. } {.}
  268. test filename-4.11 {Tcl_SplitPath: unix} {testsetplatform} {
  269.     testsetplatform unix
  270.     file split ../
  271. } {..}
  272. test filename-4.12 {Tcl_SplitPath: unix} {testsetplatform} {
  273.     testsetplatform unix
  274.     file split ../..
  275. } {.. ..}
  276. test filename-4.13 {Tcl_SplitPath: unix} {testsetplatform} {
  277.     testsetplatform unix
  278.     file split //foo
  279. } {/ foo}
  280. test filename-4.14 {Tcl_SplitPath: unix} {testsetplatform} {
  281.     testsetplatform unix
  282.     file split foo//bar
  283. } {foo bar}
  284. test filename-4.15 {Tcl_SplitPath: unix} {testsetplatform} {
  285.     testsetplatform unix
  286.     file split ~foo
  287. } {~foo}
  288. test filename-4.16 {Tcl_SplitPath: unix} {testsetplatform} {
  289.     testsetplatform unix
  290.     file split ~foo/~bar
  291. } {~foo ./~bar}
  292. test filename-4.17 {Tcl_SplitPath: unix} {testsetplatform} {
  293.     testsetplatform unix
  294.     file split ~foo/~bar/~baz
  295. } {~foo ./~bar ./~baz}
  296. test filename-4.18 {Tcl_SplitPath: unix} {testsetplatform} {
  297.     testsetplatform unix
  298.     file split foo/bar~/baz
  299. } {foo bar~ baz}
  300. if {[tcltest::testConstraint testsetplatform]} {
  301.     testsetplatform $platform
  302. }
  303. test filename-4.19 {Tcl_SplitPath} {
  304.     set oldDir [pwd]
  305.     set res [catch {
  306. cd [temporaryDirectory]
  307. file mkdir tildetmp
  308. set nastydir [file join tildetmp ./~tilde]
  309. file mkdir $nastydir
  310. set norm [file normalize $nastydir]
  311. cd tildetmp
  312. cd ./~tilde
  313. glob -nocomplain *
  314. set idx [string first tildetmp $norm]
  315. set norm [string range $norm $idx end]
  316. # fix path away so all platforms are the same
  317. regsub {(.*):$} $norm {1} norm
  318. regsub -all ":" $norm "/" norm
  319. # make sure we can delete the directory we created
  320. cd $oldDir
  321. file delete -force $nastydir
  322. set norm
  323.     } err]
  324.     cd $oldDir
  325.     catch {file delete -force [file join [temporaryDirectory] tildetmp]}
  326.     list $res $err
  327. } {0 tildetmp/~tilde}
  328. test filename-5.1 {Tcl_SplitPath: mac} {testsetplatform} {
  329.     testsetplatform mac
  330.     file split a:b
  331. } {a: b}
  332. test filename-5.2 {Tcl_SplitPath: mac} {testsetplatform} {
  333.     testsetplatform mac
  334.     file split a:b:c
  335. } {a: b c}
  336. test filename-5.3 {Tcl_SplitPath: mac} {testsetplatform} {
  337.     testsetplatform mac
  338.     file split a:b:c:
  339. } {a: b c}
  340. test filename-5.4 {Tcl_SplitPath: mac} {testsetplatform} {
  341.     testsetplatform mac
  342.     file split a:
  343. } {a:}
  344. test filename-5.5 {Tcl_SplitPath: mac} {testsetplatform} {
  345.     testsetplatform mac
  346.     file split a::
  347. } {a: ::}
  348. test filename-5.6 {Tcl_SplitPath: mac} {testsetplatform} {
  349.     testsetplatform mac
  350.     file split a:::
  351. } {a: :: ::}
  352. test filename-5.7 {Tcl_SplitPath: mac} {testsetplatform} {
  353.     testsetplatform mac
  354.     file split :a
  355. } {a}
  356. test filename-5.8 {Tcl_SplitPath: mac} {testsetplatform} {
  357.     testsetplatform mac
  358.     file split :a::
  359. } {a ::}
  360. test filename-5.9 {Tcl_SplitPath: mac} {testsetplatform} {
  361.     testsetplatform mac
  362.     file split :
  363. } {:}
  364. test filename-5.10 {Tcl_SplitPath: mac} {testsetplatform} {
  365.     testsetplatform mac
  366.     file split ::
  367. } {::}
  368. test filename-5.11 {Tcl_SplitPath: mac} {testsetplatform} {
  369.     testsetplatform mac
  370.     file split :::
  371. } {:: ::}
  372. test filename-5.12 {Tcl_SplitPath: mac} {testsetplatform} {
  373.     testsetplatform mac
  374.     file split a:::b
  375. } {a: :: :: b}
  376. test filename-5.13 {Tcl_SplitPath: mac} {testsetplatform} {
  377.     testsetplatform mac
  378.     file split /a:b
  379. } {/a: b}
  380. test filename-5.14 {Tcl_SplitPath: mac} {testsetplatform} {
  381.     testsetplatform mac
  382.     file split ~:
  383. } {~:}
  384. test filename-5.15 {Tcl_SplitPath: mac} {testsetplatform} {
  385.     testsetplatform mac
  386.     file split ~/:
  387. } {~/:}
  388. test filename-5.16 {Tcl_SplitPath: mac} {testsetplatform} {
  389.     testsetplatform mac
  390.     file split ~:foo
  391. } {~: foo}
  392. test filename-5.17 {Tcl_SplitPath: mac} {testsetplatform} {
  393.     testsetplatform mac
  394.     file split ~/foo
  395. } {~: foo}
  396. test filename-5.18 {Tcl_SplitPath: mac} {testsetplatform} {
  397.     testsetplatform mac
  398.     file split ~foo:
  399. } {~foo:}
  400. test filename-5.19 {Tcl_SplitPath: mac} {testsetplatform} {
  401.     testsetplatform mac
  402.     file split a:~foo
  403. } {a: :~foo}
  404. test filename-5.20 {Tcl_SplitPath: mac} {testsetplatform} {
  405.     testsetplatform mac
  406.     file split /
  407. } {:/}
  408. test filename-5.21 {Tcl_SplitPath: mac} {testsetplatform} {
  409.     testsetplatform mac
  410.     file split a:b/c
  411. } {a: :b/c}
  412. test filename-5.22 {Tcl_SplitPath: mac} {testsetplatform} {
  413.     testsetplatform mac
  414.     file split /foo
  415. } {foo:}
  416. test filename-5.23 {Tcl_SplitPath: mac} {testsetplatform} {
  417.     testsetplatform mac
  418.     file split /a/b
  419. } {a: b}
  420. test filename-5.24 {Tcl_SplitPath: mac} {testsetplatform} {
  421.     testsetplatform mac
  422.     file split /a/b/foo
  423. } {a: b foo}
  424. test filename-5.25 {Tcl_SplitPath: mac} {testsetplatform} {
  425.     testsetplatform mac
  426.     file split a/b
  427. } {a b}
  428. test filename-5.26 {Tcl_SplitPath: mac} {testsetplatform} {
  429.     testsetplatform mac
  430.     file split ./foo/bar
  431. } {: foo bar}
  432. test filename-5.27 {Tcl_SplitPath: mac} {testsetplatform} {
  433.     testsetplatform mac
  434.     file split ../foo/bar
  435. } {:: foo bar}
  436. test filename-5.28 {Tcl_SplitPath: mac} {testsetplatform} {
  437.     testsetplatform mac
  438.     file split {}
  439. } {}
  440. test filename-5.29 {Tcl_SplitPath: mac} {testsetplatform} {
  441.     testsetplatform mac
  442.     file split .
  443. } {:}
  444. test filename-5.30 {Tcl_SplitPath: mac} {testsetplatform} {
  445.     testsetplatform mac
  446.     file split ././
  447. } {: :}
  448. test filename-5.31 {Tcl_SplitPath: mac} {testsetplatform} {
  449.     testsetplatform mac
  450.     file split ././.
  451. } {: : :}
  452. test filename-5.32 {Tcl_SplitPath: mac} {testsetplatform} {
  453.     testsetplatform mac
  454.     file split ../
  455. } {::}
  456. test filename-5.33 {Tcl_SplitPath: mac} {testsetplatform} {
  457.     testsetplatform mac
  458.     file split ..
  459. } {::}
  460. test filename-5.34 {Tcl_SplitPath: mac} {testsetplatform} {
  461.     testsetplatform mac
  462.     file split ../..
  463. } {:: ::}
  464. test filename-5.35 {Tcl_SplitPath: mac} {testsetplatform} {
  465.     testsetplatform mac
  466.     file split //foo
  467. } {foo:}
  468. test filename-5.36 {Tcl_SplitPath: mac} {testsetplatform} {
  469.     testsetplatform mac
  470.     file split foo//bar
  471. } {foo bar}
  472. test filename-5.37 {Tcl_SplitPath: mac} {testsetplatform} {
  473.     testsetplatform mac
  474.     file split ~foo
  475. } {~foo:}
  476. test filename-5.38 {Tcl_SplitPath: mac} {testsetplatform} {
  477.     testsetplatform mac
  478.     file split ~
  479. } {~:}
  480. test filename-5.39 {Tcl_SplitPath: mac} {testsetplatform} {
  481.     testsetplatform mac
  482.     file split foo
  483. } {foo}
  484. test filename-5.40 {Tcl_SplitPath: mac} {testsetplatform} {
  485.     testsetplatform mac
  486.     file split ~/
  487. } {~:}
  488. test filename-5.41 {Tcl_SplitPath: mac} {testsetplatform} {
  489.     testsetplatform mac
  490.     file split ~foo/~bar
  491. } {~foo: :~bar}
  492. test filename-5.42 {Tcl_SplitPath: mac} {testsetplatform} {
  493.     testsetplatform mac
  494.     file split ~foo/~bar/~baz
  495. } {~foo: :~bar :~baz}
  496. test filename-5.43 {Tcl_SplitPath: mac} {testsetplatform} {
  497.     testsetplatform mac
  498.     file split foo/bar~/baz
  499. } {foo bar~ baz}
  500. test filename-5.44 {Tcl_SplitPath: mac} {testsetplatform} {
  501.     testsetplatform mac
  502.     file split a/../b
  503. } {a :: b}
  504. test filename-5.45 {Tcl_SplitPath: mac} {testsetplatform} {
  505.     testsetplatform mac
  506.     file split a/../../b
  507. } {a :: :: b}
  508. test filename-5.46 {Tcl_SplitPath: mac} {testsetplatform} {
  509.     testsetplatform mac
  510.     file split a/.././../b
  511. } {a :: : :: b}
  512. test filename-5.47 {Tcl_SplitPath: mac} {testsetplatform} {
  513.     testsetplatform mac
  514.     file split /../bar
  515. } {bar:}
  516. test filename-5.48 {Tcl_SplitPath: mac} {testsetplatform} {
  517.     testsetplatform mac
  518.     file split /./bar
  519. } {bar:}
  520. test filename-5.49 {Tcl_SplitPath: mac} {testsetplatform} {
  521.     testsetplatform mac
  522.     file split //.//.././bar
  523. } {bar:}
  524. test filename-5.50 {Tcl_SplitPath: mac} {testsetplatform} {
  525.     testsetplatform mac
  526.     file split /..
  527. } {:/..}
  528. test filename-5.51 {Tcl_SplitPath: mac} {testsetplatform} {
  529.     testsetplatform mac
  530.     file split //.//.././
  531. } {://.//.././}
  532. test filename-6.1 {Tcl_SplitPath: win} {testsetplatform} {
  533.     testsetplatform win
  534.     file split /
  535. } {/}
  536. test filename-6.2 {Tcl_SplitPath: win} {testsetplatform} {
  537.     testsetplatform win
  538.     file split /foo
  539. } {/ foo}
  540. test filename-6.3 {Tcl_SplitPath: win} {testsetplatform} {
  541.     testsetplatform win
  542.     file split /foo/bar
  543. } {/ foo bar}
  544. test filename-6.4 {Tcl_SplitPath: win} {testsetplatform} {
  545.     testsetplatform win
  546.     file split /foo/bar/baz
  547. } {/ foo bar baz}
  548. test filename-6.5 {Tcl_SplitPath: win} {testsetplatform} {
  549.     testsetplatform win
  550.     file split foo/bar
  551. } {foo bar}
  552. test filename-6.6 {Tcl_SplitPath: win} {testsetplatform} {
  553.     testsetplatform win
  554.     file split ./foo/bar
  555. } {. foo bar}
  556. test filename-6.7 {Tcl_SplitPath: win} {testsetplatform} {
  557.     testsetplatform win
  558.     file split /foo/../././foo/bar
  559. } {/ foo .. . . foo bar}
  560. test filename-6.8 {Tcl_SplitPath: win} {testsetplatform} {
  561.     testsetplatform win
  562.     file split ../foo/bar
  563. } {.. foo bar}
  564. test filename-6.9 {Tcl_SplitPath: win} {testsetplatform} {
  565.     testsetplatform win
  566.     file split {}
  567. } {}
  568. test filename-6.10 {Tcl_SplitPath: win} {testsetplatform} {
  569.     testsetplatform win
  570.     file split .
  571. } {.}
  572. test filename-6.11 {Tcl_SplitPath: win} {testsetplatform} {
  573.     testsetplatform win
  574.     file split ../
  575. } {..}
  576. test filename-6.12 {Tcl_SplitPath: win} {testsetplatform} {
  577.     testsetplatform win
  578.     file split ../..
  579. } {.. ..}
  580. test filename-6.13 {Tcl_SplitPath: win} {testsetplatform} {
  581.     testsetplatform win
  582.     file split //foo
  583. } {/ foo}
  584. test filename-6.14 {Tcl_SplitPath: win} {testsetplatform} {
  585.     testsetplatform win
  586.     file split foo//bar
  587. } {foo bar}
  588. test filename-6.15 {Tcl_SplitPath: win} {testsetplatform} {
  589.     testsetplatform win
  590.     file split /\/foo//bar
  591. } {//foo/bar}
  592. test filename-6.16 {Tcl_SplitPath: win} {testsetplatform} {
  593.     testsetplatform win
  594.     file split /\/foo//bar
  595. } {//foo/bar}
  596. test filename-6.17 {Tcl_SplitPath: win} {testsetplatform} {
  597.     testsetplatform win
  598.     file split /\/foo//bar
  599. } {//foo/bar}
  600. test filename-6.18 {Tcl_SplitPath: win} {testsetplatform} {
  601.     testsetplatform win
  602.     file split \\foo\bar
  603. } {//foo/bar}
  604. test filename-6.19 {Tcl_SplitPath: win} {testsetplatform} {
  605.     testsetplatform win
  606.     file split \\foo\bar/baz
  607. } {//foo/bar baz}
  608. test filename-6.20 {Tcl_SplitPath: win} {testsetplatform} {
  609.     testsetplatform win
  610.     file split c:/foo
  611. } {c:/ foo}
  612. test filename-6.21 {Tcl_SplitPath: win} {testsetplatform} {
  613.     testsetplatform win
  614.     file split c:foo
  615. } {c: foo}
  616. test filename-6.22 {Tcl_SplitPath: win} {testsetplatform} {
  617.     testsetplatform win
  618.     file split c:
  619. } {c:}
  620. test filename-6.23 {Tcl_SplitPath: win} {testsetplatform} {
  621.     testsetplatform win
  622.     file split c:\
  623. } {c:/}
  624. test filename-6.24 {Tcl_SplitPath: win} {testsetplatform} {
  625.     testsetplatform win
  626.     file split c:/
  627. } {c:/}
  628. test filename-6.25 {Tcl_SplitPath: win} {testsetplatform} {
  629.     testsetplatform win
  630.     file split c:/./..
  631. } {c:/ . ..}
  632. test filename-6.26 {Tcl_SplitPath: win} {testsetplatform} {
  633.     testsetplatform win
  634.     file split ~foo
  635. } {~foo}
  636. test filename-6.27 {Tcl_SplitPath: win} {testsetplatform} {
  637.     testsetplatform win
  638.     file split ~foo/~bar
  639. } {~foo ./~bar}
  640. test filename-6.28 {Tcl_SplitPath: win} {testsetplatform} {
  641.     testsetplatform win
  642.     file split ~foo/~bar/~baz
  643. } {~foo ./~bar ./~baz}
  644. test filename-6.29 {Tcl_SplitPath: win} {testsetplatform} {
  645.     testsetplatform win
  646.     file split foo/bar~/baz
  647. } {foo bar~ baz}
  648. test filename-6.30 {Tcl_SplitPath: win} {testsetplatform} {
  649.     testsetplatform win
  650.     file split c:~foo
  651. } {c: ./~foo}
  652. test filename-7.1 {Tcl_JoinPath: unix} {testsetplatform} {
  653.     testsetplatform unix
  654.     file join / a
  655. } {/a}
  656. test filename-7.2 {Tcl_JoinPath: unix} {testsetplatform} {
  657.     testsetplatform unix
  658.     file join a b
  659. } {a/b}
  660. test filename-7.3 {Tcl_JoinPath: unix} {testsetplatform} {
  661.     testsetplatform unix
  662.     file join /a c /b d
  663. } {/b/d}
  664. test filename-7.4 {Tcl_JoinPath: unix} {testsetplatform} {
  665.     testsetplatform unix
  666.     file join /
  667. } {/}
  668. test filename-7.5 {Tcl_JoinPath: unix} {testsetplatform} {
  669.     testsetplatform unix
  670.     file join a
  671. } {a}
  672. test filename-7.6 {Tcl_JoinPath: unix} {testsetplatform} {
  673.     testsetplatform unix
  674.     file join {}
  675. } {}
  676. test filename-7.7 {Tcl_JoinPath: unix} {testsetplatform} {
  677.     testsetplatform unix
  678.     file join /a/ b
  679. } {/a/b}
  680. test filename-7.8 {Tcl_JoinPath: unix} {testsetplatform} {
  681.     testsetplatform unix
  682.     file join /a// b
  683. } {/a/b}
  684. test filename-7.9 {Tcl_JoinPath: unix} {testsetplatform} {
  685.     testsetplatform unix
  686.     file join /a/./../. b
  687. } {/a/./.././b}
  688. test filename-7.10 {Tcl_JoinPath: unix} {testsetplatform} {
  689.     testsetplatform unix
  690.     file join ~ a
  691. } {~/a}
  692. test filename-7.11 {Tcl_JoinPath: unix} {testsetplatform} {
  693.     testsetplatform unix
  694.     file join ~a ~b
  695. } {~b}
  696. test filename-7.12 {Tcl_JoinPath: unix} {testsetplatform} {
  697.     testsetplatform unix
  698.     file join ./~a b
  699. } {./~a/b}
  700. test filename-7.13 {Tcl_JoinPath: unix} {testsetplatform} {
  701.     testsetplatform unix
  702.     file join ./~a ~b
  703. } {~b}
  704. test filename-7.14 {Tcl_JoinPath: unix} {testsetplatform} {
  705.     testsetplatform unix
  706.     file join ./~a ./~b
  707. } {./~a/~b}
  708. test filename-7.15 {Tcl_JoinPath: unix} {testsetplatform} {
  709.     testsetplatform unix
  710.     file join a . b
  711. } {a/./b}
  712. test filename-7.16 {Tcl_JoinPath: unix} {testsetplatform} {
  713.     testsetplatform unix
  714.     file join a . ./~b
  715. } {a/./~b}
  716. test filename-7.17 {Tcl_JoinPath: unix} {testsetplatform} {
  717.     testsetplatform unix
  718.     file join //a b
  719. } {/a/b}
  720. test filename-7.18 {Tcl_JoinPath: unix} {testsetplatform} {
  721.     testsetplatform unix
  722.     file join /// a b
  723. } {/a/b}
  724. test filename-8.1 {Tcl_JoinPath: mac} {testsetplatform} {
  725.     testsetplatform mac
  726.     file join a b
  727. } {:a:b}
  728. test filename-8.2 {Tcl_JoinPath: mac} {testsetplatform} {
  729.     testsetplatform mac
  730.     file join :a b
  731. } {:a:b}
  732. test filename-8.3 {Tcl_JoinPath: mac} {testsetplatform} {
  733.     testsetplatform mac
  734.     file join a b:
  735. } {b:}
  736. test filename-8.4 {Tcl_JoinPath: mac} {testsetplatform} {
  737.     testsetplatform mac
  738.     file join a: :b
  739. } {a:b}
  740. test filename-8.5 {Tcl_JoinPath: mac} {testsetplatform} {
  741.     testsetplatform mac
  742.     file join a: :b:
  743. } {a:b}
  744. test filename-8.6 {Tcl_JoinPath: mac} {testsetplatform} {
  745.     testsetplatform mac
  746.     file join a :: b
  747. } {:a::b}
  748. test filename-8.7 {Tcl_JoinPath: mac} {testsetplatform} {
  749.     testsetplatform mac
  750.     file join a :: :: b
  751. } {:a:::b}
  752. test filename-8.8 {Tcl_JoinPath: mac} {testsetplatform} {
  753.     testsetplatform mac
  754.     file join a ::: b
  755. } {:a:::b}
  756. test filename-8.9 {Tcl_JoinPath: mac} {testsetplatform} {
  757.     testsetplatform mac
  758.     file join a: b:
  759. } {b:}
  760. test filename-8.10 {Tcl_JoinPath: mac} {testsetplatform} {
  761.     testsetplatform mac
  762.     file join /a/b
  763. } {a:b}
  764. test filename-8.11 {Tcl_JoinPath: mac} {testsetplatform} {
  765.     testsetplatform mac
  766.     file join /a/b c/d
  767. } {a:b:c:d}
  768. test filename-8.12 {Tcl_JoinPath: mac} {testsetplatform} {
  769.     testsetplatform mac
  770.     file join /a/b :c:d
  771. } {a:b:c:d}
  772. test filename-8.13 {Tcl_JoinPath: mac} {testsetplatform} {
  773.     testsetplatform mac
  774.     file join ~ foo
  775. } {~:foo}
  776. test filename-8.14 {Tcl_JoinPath: mac} {testsetplatform} {
  777.     testsetplatform mac
  778.     file join :: ::
  779. } {:::}
  780. test filename-8.15 {Tcl_JoinPath: mac} {testsetplatform} {
  781.     testsetplatform mac
  782.     file join a: ::
  783. } {a::}
  784. test filename-8.16 {Tcl_JoinPath: mac} {testsetplatform} {
  785.     testsetplatform mac
  786.     file join a {} b
  787. } {:a:b}
  788. test filename-8.17 {Tcl_JoinPath: mac} {testsetplatform} {
  789.     testsetplatform mac
  790.     file join a::: b
  791. } {a:::b}
  792. test filename-8.18 {Tcl_JoinPath: mac} {testsetplatform} {
  793.     testsetplatform mac
  794.     file join a : : :
  795. } {:a}
  796. test filename-8.19 {Tcl_JoinPath: mac} {testsetplatform} {
  797.     testsetplatform mac
  798.     file join :
  799. } {:}
  800. test filename-8.20 {Tcl_JoinPath: mac} {testsetplatform} {
  801.     testsetplatform mac
  802.     file join : a
  803. } {:a}
  804. test filename-8.21 {Tcl_JoinPath: mac} {testsetplatform} {
  805.     testsetplatform mac
  806.     file join a: :b/c
  807. } {a:b/c}
  808. test filename-8.22 {Tcl_JoinPath: mac} {testsetplatform} {
  809.     testsetplatform mac
  810.     file join :a :b/c
  811. } {:a:b/c}
  812. test filename-9.1 {Tcl_JoinPath: win} {testsetplatform} {
  813.     testsetplatform win
  814.     file join a b
  815. } {a/b}
  816. test filename-9.2 {Tcl_JoinPath: win} {testsetplatform} {
  817.     testsetplatform win
  818.     file join /a b
  819. } {/a/b}
  820. test filename-9.3 {Tcl_JoinPath: win} {testsetplatform} {
  821.     testsetplatform win
  822.     file join /a /b
  823. } {/b}
  824. test filename-9.4 {Tcl_JoinPath: win} {testsetplatform} {
  825.     testsetplatform win
  826.     file join c: foo
  827. } {c:foo}
  828. test filename-9.5 {Tcl_JoinPath: win} {testsetplatform} {
  829.     testsetplatform win
  830.     file join c:/ foo
  831. } {c:/foo}
  832. test filename-9.6 {Tcl_JoinPath: win} {testsetplatform} {
  833.     testsetplatform win
  834.     file join c:\bar foo
  835. } {c:/bar/foo}
  836. test filename-9.7 {Tcl_JoinPath: win} {testsetplatform} {
  837.     testsetplatform win
  838.     file join /foo c:bar
  839. } {c:bar}
  840. test filename-9.8 {Tcl_JoinPath: win} {testsetplatform} {
  841.     testsetplatform win
  842.     file join ///host//share dir
  843. } {//host/share/dir}
  844. test filename-9.9 {Tcl_JoinPath: win} {testsetplatform} {
  845.     testsetplatform win
  846.     file join ~ foo
  847. } {~/foo}
  848. test filename-9.10 {Tcl_JoinPath: win} {testsetplatform} {
  849.     testsetplatform win
  850.     file join ~/~foo
  851. } {~/~foo}
  852. test filename-9.11 {Tcl_JoinPath: win} {testsetplatform} {
  853.     testsetplatform win
  854.     file join ~ ./~foo
  855. } {~/~foo}
  856. test filename-9.12 {Tcl_JoinPath: win} {testsetplatform} {
  857.     testsetplatform win
  858.     file join / ~foo
  859. } {~foo}
  860. test filename-9.13 {Tcl_JoinPath: win} {testsetplatform} {
  861.     testsetplatform win
  862.     file join ./a/ b c
  863. } {./a/b/c}
  864. test filename-9.14 {Tcl_JoinPath: win} {testsetplatform} {
  865.     testsetplatform win
  866.     file join ./~a/ b c
  867. } {./~a/b/c}
  868. test filename-9.15 {Tcl_JoinPath: win} {testsetplatform} {
  869.     testsetplatform win
  870.     file join // host share path
  871. } {/host/share/path}
  872. test filename-9.16 {Tcl_JoinPath: win} {testsetplatform} {
  873.     testsetplatform win
  874.     file join foo . bar
  875. } {foo/./bar}
  876. test filename-9.17 {Tcl_JoinPath: win} {testsetplatform} {
  877.     testsetplatform win
  878.     file join foo .. bar
  879. } {foo/../bar}
  880. test filename-9.18 {Tcl_JoinPath: win} {testsetplatform} {
  881.     testsetplatform win
  882.     file join foo/./bar
  883. } {foo/./bar}
  884. test filename-9.19 {Tcl_JoinPath: win} {testsetplatform} {
  885.     testsetplatform win
  886.     set res {}
  887.     lappend res 
  888.       [file join {C:foobar}] 
  889.       [file join C:/blah {C:foobar}] 
  890.       [file join C:/blah C:/blah {C:foobar}]
  891. } {C:/foo/bar C:/foo/bar C:/foo/bar}
  892. test filename-9.19.1 {Tcl_JoinPath: win} {testsetplatform} {
  893.     testsetplatform win
  894.     set res {}
  895.     lappend res 
  896.       [file join {foobar}] 
  897.       [file join C:/blah {foobar}] 
  898.       [file join C:/blah C:/blah {foobar}]
  899. } {foo/bar C:/blah/foo/bar C:/blah/foo/bar}
  900. test filename-9.19.2 {Tcl_JoinPath: win} {testsetplatform winOnly} {
  901.     testsetplatform win
  902.     set res {}
  903.     lappend res 
  904.       [file join {foobar}] 
  905.       [file join [pwd] {foobar}] 
  906.       [file join [pwd] [pwd] {foobar}]
  907.     string map [list [pwd] pwd] $res
  908. } {foo/bar pwd/foo/bar pwd/foo/bar}
  909. test filename-9.20 {Tcl_JoinPath: unix} {testsetplatform} {
  910.     testsetplatform unix
  911.     set res {}
  912.     lappend res 
  913.       [file join {/foo/bar}] 
  914.       [file join /x {/foo/bar}] 
  915.       [file join /x /x {/foo/bar}]
  916. } {/foo/bar /foo/bar /foo/bar}
  917. test filename-9.21 {Tcl_JoinPath: mac} {testsetplatform} {
  918.     testsetplatform mac
  919.     set res {}
  920.     lappend res 
  921.       [file join {/foo/bar}] 
  922.       [file join drive: {/foo/bar}] 
  923.       [file join drive: drive: {/foo/bar}]
  924. } {foo:bar foo:bar foo:bar}
  925. test filename-9.22 {Tcl_JoinPath: mac} {testsetplatform} {
  926.     testsetplatform mac
  927.     set res {}
  928.     lappend res 
  929.       [file join {foo:bar}] 
  930.       [file join drive: {foo:bar}] 
  931.       [file join drive: drive: {foo:bar}]
  932. } {foo:bar foo:bar foo:bar}
  933. test filename-9.23 {Tcl_JoinPath: win} {testsetplatform} {
  934.     testsetplatform win
  935.     set res {}
  936.     lappend res 
  937.       [file join {foobar}] 
  938.       [file join C:/blah {foobar}] 
  939.       [file join C:/blah C:/blah {foobar}]
  940.     string map [list C:/blah ""] $res
  941. } {foo/bar /foo/bar /foo/bar}
  942. test filename-9.24 {Tcl_JoinPath: unix} {testsetplatform} {
  943.     testsetplatform unix
  944.     set res {}
  945.     lappend res 
  946.       [file join {foo/bar}] 
  947.       [file join /x {foo/bar}] 
  948.       [file join /x /x {foo/bar}]
  949.     string map [list /x ""] $res
  950. } {foo/bar /foo/bar /foo/bar}
  951. test filename-9.25 {Tcl_JoinPath: mac} {testsetplatform} {
  952.     testsetplatform mac
  953.     set res {}
  954.     lappend res 
  955.       [file join {foo/bar}] 
  956.       [file join drive: {foo/bar}] 
  957.       [file join drive: drive: {foo/bar}]
  958.     string map [list drive: ""] $res
  959. } {:foo:bar foo:bar foo:bar}
  960. test filename-9.26 {Tcl_JoinPath: mac} {testsetplatform} {
  961.     testsetplatform mac
  962.     set res {}
  963.     lappend res 
  964.       [file join {:foo:bar}] 
  965.       [file join drive: {:foo:bar}] 
  966.       [file join drive: drive: {:foo:bar}]
  967.     string map [list drive: ""] $res
  968. } {:foo:bar foo:bar foo:bar}
  969. test filename-10.1 {Tcl_TranslateFileName} {testsetplatform} {
  970.     testsetplatform unix
  971.     list [catch {testtranslatefilename foo} msg] $msg
  972. } {0 foo}
  973. test filename-10.2 {Tcl_TranslateFileName} {testsetplatform} {
  974.     testsetplatform windows
  975.     list [catch {testtranslatefilename {c:/foo}} msg] $msg
  976. } {0 {c:foo}}
  977. test filename-10.3 {Tcl_TranslateFileName} {testsetplatform} {
  978.     testsetplatform windows
  979.     list [catch {testtranslatefilename {c:/\foo/}} msg] $msg
  980. } {0 {c:foo}}
  981. test filename-10.4 {Tcl_TranslateFileName} {testsetplatform} {
  982.     testsetplatform mac
  983.     list [catch {testtranslatefilename foo} msg] $msg
  984. } {0 :foo}
  985. test filename-10.5 {Tcl_TranslateFileName} {testsetplatform} {
  986.     testsetplatform mac
  987.     list [catch {testtranslatefilename :~foo} msg] $msg
  988. } {0 :~foo}
  989. test filename-10.6 {Tcl_TranslateFileName} {testsetplatform} {
  990.     global env
  991.     set temp $env(HOME)
  992.     set env(HOME) "/home/test"
  993.     testsetplatform unix
  994.     set result [list [catch {testtranslatefilename ~/foo} msg] $msg]
  995.     set env(HOME) $temp
  996.     set result
  997. } {0 /home/test/foo}
  998. test filename-10.7 {Tcl_TranslateFileName} {testsetplatform} {
  999.     global env
  1000.     set temp $env(HOME)
  1001.     unset env(HOME)
  1002.     testsetplatform unix
  1003.     set result [list [catch {testtranslatefilename ~/foo} msg] $msg]
  1004.     set env(HOME) $temp
  1005.     set result
  1006. } {1 {couldn't find HOME environment variable to expand path}}
  1007. test filename-10.8 {Tcl_TranslateFileName} {testsetplatform} {
  1008.     global env
  1009.     set temp $env(HOME)
  1010.     set env(HOME) "/home/test"
  1011.     testsetplatform unix
  1012.     set result [list [catch {testtranslatefilename ~} msg] $msg]
  1013.     set env(HOME) $temp
  1014.     set result
  1015. } {0 /home/test}
  1016. test filename-10.9 {Tcl_TranslateFileName} {testsetplatform} {
  1017.     global env
  1018.     set temp $env(HOME)
  1019.     set env(HOME) "/home/test/"
  1020.     testsetplatform unix
  1021.     set result [list [catch {testtranslatefilename ~} msg] $msg]
  1022.     set env(HOME) $temp
  1023.     set result
  1024. } {0 /home/test}
  1025. test filename-10.10 {Tcl_TranslateFileName} {testsetplatform} {
  1026.     global env
  1027.     set temp $env(HOME)
  1028.     set env(HOME) "/home/test/"
  1029.     testsetplatform unix
  1030.     set result [list [catch {testtranslatefilename ~/foo} msg] $msg]
  1031.     set env(HOME) $temp
  1032.     set result
  1033. } {0 /home/test/foo}
  1034. test filename-10.11 {Tcl_TranslateFileName} {testsetplatform} {
  1035.     global env
  1036.     set temp $env(HOME)
  1037.     set env(HOME) "Root:"
  1038.     testsetplatform mac
  1039.     set result [list [catch {testtranslatefilename ~/foo} msg] $msg]
  1040.     set env(HOME) $temp
  1041.     set result
  1042. } {0 Root:foo}
  1043. test filename-10.12 {Tcl_TranslateFileName} {testsetplatform} {
  1044.     global env
  1045.     set temp $env(HOME)
  1046.     set env(HOME) "Root:home"
  1047.     testsetplatform mac
  1048.     set result [list [catch {testtranslatefilename ~/foo} msg] $msg]
  1049.     set env(HOME) $temp
  1050.     set result
  1051. } {0 Root:home:foo}
  1052. test filename-10.13 {Tcl_TranslateFileName} {testsetplatform} {
  1053.     global env
  1054.     set temp $env(HOME)
  1055.     set env(HOME) "Root:home"
  1056.     testsetplatform mac
  1057.     set result [list [catch {testtranslatefilename ~::foo} msg] $msg]
  1058.     set env(HOME) $temp
  1059.     set result
  1060. } {0 Root:home::foo}
  1061. test filename-10.14 {Tcl_TranslateFileName} {testsetplatform} {
  1062.     global env
  1063.     set temp $env(HOME)
  1064.     set env(HOME) "Root:home"
  1065.     testsetplatform mac
  1066.     set result [list [catch {testtranslatefilename ~} msg] $msg]
  1067.     set env(HOME) $temp
  1068.     set result
  1069. } {0 Root:home}
  1070. test filename-10.15 {Tcl_TranslateFileName} {testsetplatform} {
  1071.     global env
  1072.     set temp $env(HOME)
  1073.     set env(HOME) "Root:home:"
  1074.     testsetplatform mac
  1075.     set result [list [catch {testtranslatefilename ~::foo} msg] $msg]
  1076.     set env(HOME) $temp
  1077.     set result
  1078. } {0 Root:home::foo}
  1079. test filename-10.16 {Tcl_TranslateFileName} {testsetplatform} {
  1080.     global env
  1081.     set temp $env(HOME)
  1082.     set env(HOME) "Root:home::"
  1083.     testsetplatform mac
  1084.     set result [list [catch {testtranslatefilename ~::foo} msg] $msg]
  1085.     set env(HOME) $temp
  1086.     set result
  1087. } {0 Root:home:::foo}
  1088. test filename-10.17 {Tcl_TranslateFileName} {testsetplatform} {
  1089.     global env
  1090.     set temp $env(HOME)
  1091.     set env(HOME) "\home\"
  1092.     testsetplatform windows
  1093.     set result [list [catch {testtranslatefilename ~/foo} msg] $msg]
  1094.     set env(HOME) $temp
  1095.     set result
  1096. } {0 {homefoo}}
  1097. test filename-10.18 {Tcl_TranslateFileName} {testsetplatform} {
  1098.     global env
  1099.     set temp $env(HOME)
  1100.     set env(HOME) "\home\"
  1101.     testsetplatform windows
  1102.     set result [list [catch {testtranslatefilename ~/foo\bar} msg] $msg]
  1103.     set env(HOME) $temp
  1104.     set result
  1105. } {0 {homefoobar}}
  1106. test filename-10.19 {Tcl_TranslateFileName} {testsetplatform} {
  1107.     global env
  1108.     set temp $env(HOME)
  1109.     set env(HOME) "c:"
  1110.     testsetplatform windows
  1111.     set result [list [catch {testtranslatefilename ~/foo} msg] $msg]
  1112.     set env(HOME) $temp
  1113.     set result
  1114. } {0 c:foo}
  1115. test filename-10.20 {Tcl_TranslateFileName} {testtranslatefilename} {
  1116.     list [catch {testtranslatefilename ~blorp/foo} msg] $msg
  1117. } {1 {user "blorp" doesn't exist}}
  1118. test filename-10.21 {Tcl_TranslateFileName} {testsetplatform} {
  1119.     global env
  1120.     set temp $env(HOME)
  1121.     set env(HOME) "c:\"
  1122.     testsetplatform windows
  1123.     set result [list [catch {testtranslatefilename ~/foo} msg] $msg]
  1124.     set env(HOME) $temp
  1125.     set result
  1126. } {0 {c:foo}}
  1127. test filename-10.22 {Tcl_TranslateFileName} {testsetplatform} {
  1128.     testsetplatform windows
  1129.     list [catch {testtranslatefilename foo//bar} msg] $msg
  1130. } {0 {foobar}}
  1131. if {[tcltest::testConstraint testsetplatform]} {
  1132.     testsetplatform $platform
  1133. }
  1134. test filename-10.23 {Tcl_TranslateFileName} {unixOnly nonPortable} {
  1135.     # this test fails if ~ouster is not /home/ouster
  1136.     list [catch {testtranslatefilename ~ouster} msg] $msg
  1137. } {0 /home/ouster}
  1138. test filename-10.24 {Tcl_TranslateFileName} {unixOnly nonPortable} {
  1139.     # this test fails if ~ouster is not /home/ouster
  1140.     list [catch {testtranslatefilename ~ouster/foo} msg] $msg
  1141. } {0 /home/ouster/foo}
  1142. test filename-11.1 {Tcl_GlobCmd} {
  1143.     list [catch {glob} msg] $msg
  1144. } {1 {wrong # args: should be "glob ?switches? name ?name ...?"}}
  1145. test filename-11.2 {Tcl_GlobCmd} {
  1146.     list [catch {glob -gorp} msg] $msg
  1147. } {1 {bad option "-gorp": must be -directory, -join, -nocomplain, -path, -tails, -types, or --}}
  1148. test filename-11.3 {Tcl_GlobCmd} {
  1149.     list [catch {glob -nocomplai} msg] $msg
  1150. } {1 {wrong # args: should be "glob ?switches? name ?name ...?"}}
  1151. test filename-11.4 {Tcl_GlobCmd} {
  1152.     list [catch {glob -nocomplain} msg] $msg
  1153. } {1 {wrong # args: should be "glob ?switches? name ?name ...?"}}
  1154. test filename-11.5 {Tcl_GlobCmd} {
  1155.     list [catch {glob -nocomplain ~xyqrszzz} msg] $msg
  1156. } {0 {}}
  1157. test filename-11.6 {Tcl_GlobCmd} {
  1158.     list [catch {glob ~xyqrszzz} msg] $msg
  1159. } {1 {user "xyqrszzz" doesn't exist}}
  1160. test filename-11.7 {Tcl_GlobCmd} {
  1161.     list [catch {glob -- -nocomplain} msg] $msg
  1162. } {1 {no files matched glob pattern "-nocomplain"}}
  1163. test filename-11.8 {Tcl_GlobCmd} {
  1164.     list [catch {glob -nocomplain -- -nocomplain} msg] $msg
  1165. } {0 {}}
  1166. test filename-11.9 {Tcl_GlobCmd} {testsetplatform} {
  1167.     testsetplatform unix
  1168.     list [catch {glob ~\xyqrszzz/bar} msg] $msg
  1169. } {1 {user "xyqrszzz" doesn't exist}}
  1170. test filename-11.10 {Tcl_GlobCmd} {testsetplatform} {
  1171.     testsetplatform unix
  1172.     list [catch {glob -nocomplain ~\xyqrszzz/bar} msg] $msg
  1173. } {0 {}}
  1174. test filename-11.11 {Tcl_GlobCmd} {testsetplatform} {
  1175.     testsetplatform unix
  1176.     list [catch {glob ~xyqrszzz\/\bar} msg] $msg
  1177. } {1 {user "xyqrszzz" doesn't exist}}
  1178. test filename-11.12 {Tcl_GlobCmd} {testsetplatform} {
  1179.     testsetplatform unix
  1180.     set home $env(HOME)
  1181.     unset env(HOME)
  1182.     set x [list [catch {glob ~/*} msg] $msg]
  1183.     set env(HOME) $home
  1184.     set x
  1185. } {1 {couldn't find HOME environment variable to expand path}}
  1186. if {[tcltest::testConstraint testsetplatform]} {
  1187.     testsetplatform $platform
  1188. }
  1189. test filename-11.13 {Tcl_GlobCmd} {
  1190.     list [catch {file join [lindex [glob ~] 0]} msg] $msg
  1191. } [list 0 [file join $env(HOME)]]
  1192. set oldpwd [pwd]
  1193. set oldhome $env(HOME)
  1194. cd [temporaryDirectory]
  1195. set env(HOME) [pwd]
  1196. file delete -force globTest
  1197. file mkdir globTest/a1/b1
  1198. file mkdir globTest/a1/b2
  1199. file mkdir globTest/a2/b3
  1200. file mkdir globTest/a3
  1201. close [open globTest/x1.c w]
  1202. close [open globTest/y1.c w]
  1203. close [open globTest/z1.c w]
  1204. close [open "globTest/weird name.c" w]
  1205. close [open globTest/a1/b1/x2.c w]
  1206. close [open globTest/a1/b2/y2.c w]
  1207. catch {close [open globTest/.1 w]}
  1208. catch {close [open globTest/x,z1.c w]}
  1209. test filename-11.14 {Tcl_GlobCmd} {
  1210.     list [catch {glob ~/globTest} msg] $msg
  1211. } [list 0 [list [file join $env(HOME) globTest]]]
  1212. test filename-11.15 {Tcl_GlobCmd} {
  1213.     list [catch {glob ~\/globTest} msg] $msg
  1214. } [list 0 [list [file join $env(HOME) globTest]]]
  1215. test filename-11.16 {Tcl_GlobCmd} {
  1216.     list [catch {glob globTest} msg] $msg
  1217. } {0 globTest}
  1218. set globname "globTest"
  1219. set horribleglobname "glob[{Test"
  1220. test filename-11.17 {Tcl_GlobCmd} {unixOnly} {
  1221.     list [catch {lsort [glob -directory $globname *]} msg] $msg
  1222. } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]
  1223. [file join $globname a3]
  1224. [file join $globname "weird name.c"]
  1225. [file join $globname x,z1.c]
  1226. [file join $globname x1.c]
  1227. [file join $globname y1.c] [file join $globname z1.c]]]]
  1228. test filename-11.17.1 {Tcl_GlobCmd} {pcOnly macOnly} {
  1229.     list [catch {lsort [glob -directory $globname *]} msg] $msg
  1230. } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]
  1231.         [file join $globname .1]
  1232. [file join $globname a3]
  1233. [file join $globname "weird name.c"]
  1234. [file join $globname x,z1.c]
  1235. [file join $globname x1.c]
  1236. [file join $globname y1.c] [file join $globname z1.c]]]]
  1237. if {[string equal $tcl_platform(platform) "windows"]} {
  1238.     if {[string index $tcl_platform(osVersion) 0] >= 5 
  1239.       && ([lindex [file system [temporaryDirectory]] 1] == "NTFS")} {
  1240. tcltest::testConstraint linkDirectory 1
  1241.     } else {
  1242. tcltest::testConstraint linkDirectory 0
  1243.     }
  1244. } else {
  1245.     tcltest::testConstraint linkDirectory 1
  1246. }
  1247. if {[string equal $tcl_platform(platform) "windows"]} {
  1248.     tcltest::testConstraint symbolicLinkFile 0
  1249. } else {
  1250.     tcltest::testConstraint symbolicLinkFile 1
  1251. }
  1252. test filename-11.17.2 {Tcl_GlobCmd} {notRoot linkDirectory} {
  1253.     set dir [pwd]
  1254.     set ret "error in test"
  1255.     if {[catch {
  1256. cd $globname
  1257. file link -symbolic link a1
  1258. cd $dir
  1259. set ret [list [catch {
  1260.     lsort [glob -directory $globname -join * b1]
  1261. } msg] $msg]
  1262.     }]} {
  1263. cd $dir
  1264.     }
  1265.     file delete [file join $globname link]
  1266.     set ret
  1267. } [list 0 [lsort [list [file join $globname a1 b1] 
  1268.   [file join $globname link b1]]]]
  1269. # Simpler version of the above test to illustrate a given bug.
  1270. test filename-11.17.3 {Tcl_GlobCmd} {notRoot linkDirectory} {
  1271.     set dir [pwd]
  1272.     set ret "error in test"
  1273.     if {[catch {
  1274. cd $globname
  1275. file link -symbolic link a1
  1276. cd $dir
  1277. set ret [list [catch {
  1278.     lsort [glob -directory $globname -type d *]
  1279. } msg] $msg]
  1280.     }]} {
  1281. cd $dir
  1282.     }
  1283.     file delete [file join $globname link]
  1284.     set ret
  1285. } [list 0 [lsort [list [file join $globname a1] 
  1286.   [file join $globname a2] 
  1287.   [file join $globname a3] 
  1288.   [file join $globname link]]]]
  1289. # Make sure the bugfix isn't too simple.  We don't want
  1290. # to break 'glob -type l'.
  1291. test filename-11.17.4 {Tcl_GlobCmd} {notRoot linkDirectory} {
  1292.     set dir [pwd]
  1293.     set ret "error in test"
  1294.     if {[catch {
  1295. cd $globname
  1296. file link -symbolic link a1
  1297. cd $dir
  1298. set ret [list [catch {
  1299.     lsort [glob -directory $globname -type l *]
  1300. } msg] $msg]
  1301.     }]} {
  1302. cd $dir
  1303.     }
  1304.     file delete [file join $globname link]
  1305.     set ret
  1306. } [list 0 [list [file join $globname link]]]
  1307. test filename-11.17.5 {Tcl_GlobCmd} {
  1308.     list [catch {lsort [glob -directory $globname -tails *.c]} msg] $msg
  1309. } [list 0 [lsort [list "weird name.c" x,z1.c x1.c y1.c z1.c]]]
  1310. test filename-11.17.6 {Tcl_GlobCmd} {
  1311.     list [catch {lsort [glob -directory $globname -tails *.c *.c]} msg] $msg
  1312. } [list 0 [lsort [concat [list "weird name.c" x,z1.c x1.c y1.c z1.c] 
  1313.   [list "weird name.c" x,z1.c x1.c y1.c z1.c]]]]
  1314. test filename-11.17.7 {Tcl_GlobCmd: broken link and glob -l} {linkDirectory} {
  1315.     set dir [pwd]
  1316.     set ret "error in test"
  1317.     if {[catch {
  1318. cd $globname
  1319. file mkdir nonexistent
  1320. file link -symbolic link nonexistent
  1321. file delete nonexistent
  1322. cd $dir
  1323. set ret [list [catch {
  1324.     lsort [glob -nocomplain -directory $globname -type l *]
  1325. } msg] $msg]
  1326.     }]} {
  1327. cd $dir
  1328.     }
  1329.     file delete [file join $globname link]
  1330.     set ret
  1331. } [list 0 [list [file join $globname link]]]
  1332. test filename-11.17.8 {Tcl_GlobCmd: broken link and glob -l} {symbolicLinkFile} {
  1333.     set dir [pwd]
  1334.     set ret "error in test"
  1335.     if {[catch {
  1336. cd $globname
  1337. close [open "nonexistent" w]
  1338. file link -symbolic link nonexistent
  1339. file delete nonexistent
  1340. cd $dir
  1341. set ret [list [catch {
  1342.     lsort [glob -nocomplain -directory $globname -type l *]
  1343. } msg] $msg]
  1344.     }]} {
  1345. cd $dir
  1346.     }
  1347.     file delete [file join $globname link]
  1348.     set ret
  1349. } [list 0 [list [file join $globname link]]]
  1350. test filename-11.18 {Tcl_GlobCmd} {unixOnly} {
  1351.     list [catch {lsort [glob -path $globname/ *]} msg] $msg
  1352. } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]
  1353. [file join $globname a3]
  1354. [file join $globname "weird name.c"]
  1355. [file join $globname x,z1.c]
  1356. [file join $globname x1.c]
  1357. [file join $globname y1.c] [file join $globname z1.c]]]]
  1358. test filename-11.18.1 {Tcl_GlobCmd} {pcOnly macOnly} {
  1359.     list [catch {lsort [glob -path $globname/ *]} msg] $msg
  1360. } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]
  1361.         [file join $globname .1]
  1362. [file join $globname a3]
  1363. [file join $globname "weird name.c"]
  1364. [file join $globname x,z1.c]
  1365. [file join $globname x1.c]
  1366. [file join $globname y1.c] [file join $globname z1.c]]]]
  1367. test filename-11.19 {Tcl_GlobCmd} {unixOnly} {
  1368.     list [catch {lsort [glob -join -path 
  1369.     [string range $globname 0 5] * *]} msg] $msg
  1370. } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]
  1371. [file join $globname a3]
  1372. [file join $globname "weird name.c"]
  1373. [file join $globname x,z1.c]
  1374. [file join $globname x1.c]
  1375. [file join $globname y1.c] [file join $globname z1.c]]]]
  1376. test filename-11.19.1 {Tcl_GlobCmd} {pcOnly macOnly} {
  1377.     list [catch {lsort [glob -join -path 
  1378.     [string range $globname 0 5] * *]} msg] $msg
  1379. } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]
  1380.         [file join $globname .1]
  1381. [file join $globname a3]
  1382. [file join $globname "weird name.c"]
  1383. [file join $globname x,z1.c]
  1384. [file join $globname x1.c]
  1385. [file join $globname y1.c] [file join $globname z1.c]]]]
  1386. test filename-11.20 {Tcl_GlobCmd} {
  1387.     list [catch {lsort [glob -type d -dir $globname *]} msg] $msg
  1388. } [list 0 [lsort [list [file join $globname a1]
  1389. [file join $globname a2]
  1390. [file join $globname a3]]]]
  1391. test filename-11.21 {Tcl_GlobCmd} {
  1392.     list [catch {lsort [glob -type d -path $globname *]} msg] $msg
  1393. } [list 0 [lsort [list $globname]]]
  1394. test filename-11.21.1 {Tcl_GlobCmd} {
  1395.     close [open {[tcl].testremains} w]
  1396.     set res [list [catch {lsort [glob -path {[tcl]} *]} msg] $msg]
  1397.     file delete -force {[tcl].testremains}
  1398.     set res
  1399. } [list 0 {{[tcl].testremains}}]
  1400. # Get rid of file/dir if it exists, since it will have
  1401. # been left behind by a previous failed run.
  1402. if {[file exists $horribleglobname]} {
  1403.     file delete -force $horribleglobname
  1404. }
  1405. file rename globTest $horribleglobname
  1406. set globname $horribleglobname
  1407. test filename-11.22 {Tcl_GlobCmd} {unixOnly} {
  1408.     list [catch {lsort [glob -dir $globname *]} msg] $msg
  1409. } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]
  1410. [file join $globname a3]
  1411. [file join $globname "weird name.c"]
  1412. [file join $globname x,z1.c]
  1413. [file join $globname x1.c]
  1414. [file join $globname y1.c] [file join $globname z1.c]]]]
  1415. test filename-11.22.1 {Tcl_GlobCmd} {pcOnly macOnly} {
  1416.     list [catch {lsort [glob -dir $globname *]} msg] $msg
  1417. } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]
  1418.         [file join $globname .1]
  1419. [file join $globname a3]
  1420. [file join $globname "weird name.c"]
  1421. [file join $globname x,z1.c]
  1422. [file join $globname x1.c]
  1423. [file join $globname y1.c] [file join $globname z1.c]]]]
  1424. test filename-11.23 {Tcl_GlobCmd} {unixOnly} {
  1425.     list [catch {lsort [glob -path $globname/ *]} msg] $msg
  1426. } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]
  1427. [file join $globname a3]
  1428. [file join $globname "weird name.c"]
  1429. [file join $globname x,z1.c]
  1430. [file join $globname x1.c]
  1431. [file join $globname y1.c] [file join $globname z1.c]]]]
  1432. test filename-11.23.1 {Tcl_GlobCmd} {pcOnly macOnly} {
  1433.     list [catch {lsort [glob -path $globname/ *]} msg] $msg
  1434. } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]
  1435.         [file join $globname .1]
  1436. [file join $globname a3]
  1437. [file join $globname "weird name.c"]
  1438. [file join $globname x,z1.c]
  1439. [file join $globname x1.c]
  1440. [file join $globname y1.c] [file join $globname z1.c]]]]
  1441. test filename-11.24 {Tcl_GlobCmd} {unixOnly} {
  1442.     list [catch {lsort [glob -join -path 
  1443.     [string range $globname 0 5] * *]} msg] $msg
  1444. } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]
  1445. [file join $globname a3]
  1446. [file join $globname "weird name.c"]
  1447. [file join $globname x,z1.c]
  1448. [file join $globname x1.c]
  1449. [file join $globname y1.c] [file join $globname z1.c]]]]
  1450. test filename-11.24.1 {Tcl_GlobCmd} {pcOnly macOnly} {
  1451.     list [catch {lsort [glob -join -path 
  1452.     [string range $globname 0 5] * *]} msg] $msg
  1453. } [list 0 [lsort [list [file join $globname a1] [file join $globname a2]
  1454.         [file join $globname .1]
  1455. [file join $globname a3]
  1456. [file join $globname "weird name.c"]
  1457. [file join $globname x,z1.c]
  1458. [file join $globname x1.c]
  1459. [file join $globname y1.c] [file join $globname z1.c]]]]
  1460. test filename-11.25 {Tcl_GlobCmd} {
  1461.     list [catch {lsort [glob -type d -dir $globname *]} msg] $msg
  1462. } [list 0 [lsort [list [file join $globname a1]
  1463. [file join $globname a2]
  1464. [file join $globname a3]]]]
  1465. test filename-11.25.1 {Tcl_GlobCmd} {
  1466.     list [catch {lsort [glob -type {d r} -dir $globname *]} msg] $msg
  1467. } [list 0 [lsort [list [file join $globname a1]
  1468.   [file join $globname a2]
  1469.   [file join $globname a3]]]]
  1470. test filename-11.25.2 {Tcl_GlobCmd} {
  1471.     list [catch {lsort [glob -type {d r w} -dir $globname *]} msg] $msg
  1472. } [list 0 [lsort [list [file join $globname a1]
  1473.   [file join $globname a2]
  1474.   [file join $globname a3]]]]
  1475. test filename-11.26 {Tcl_GlobCmd} {
  1476.     list [catch {glob -type d -path $globname *} msg] $msg
  1477. } [list 0 [list $globname]]
  1478. test filename-11.27 {Tcl_GlobCmd} {
  1479.     list [catch {glob -types abcde *} msg] $msg
  1480. } {1 {bad argument to "-types": abcde}}
  1481. test filename-11.28 {Tcl_GlobCmd} {
  1482.     list [catch {glob -types z *} msg] $msg
  1483. } {1 {bad argument to "-types": z}}
  1484. test filename-11.29 {Tcl_GlobCmd} {
  1485.     list [catch {glob -types {abcd efgh} *} msg] $msg
  1486. } {1 {only one MacOS type or creator argument to "-types" allowed}}
  1487. test filename-11.30 {Tcl_GlobCmd} {
  1488.     list [catch {glob -types {{macintosh type TEXT} 
  1489.     {macintosh creator ALFA} efgh} *} msg] $msg
  1490. } {1 {only one MacOS type or creator argument to "-types" allowed}}
  1491. test filename-11.31 {Tcl_GlobCmd} {
  1492.     list [catch {glob -types} msg] $msg
  1493. } {1 {missing argument to "-types"}}
  1494. test filename-11.32 {Tcl_GlobCmd} {
  1495.     list [catch {glob -path hello -dir hello *} msg] $msg
  1496. } {1 {"-directory" cannot be used with "-path"}}
  1497. test filename-11.33 {Tcl_GlobCmd} {
  1498.     list [catch {glob -path} msg] $msg
  1499. } {1 {missing argument to "-path"}}
  1500. test filename-11.34 {Tcl_GlobCmd} {
  1501.     list [catch {glob -direct} msg] $msg
  1502. } {1 {missing argument to "-directory"}}
  1503. test filename-11.35 {Tcl_GlobCmd} {
  1504.     list [catch {glob -paths *} msg] $msg
  1505. } {1 {bad option "-paths": must be -directory, -join, -nocomplain, -path, -tails, -types, or --}}
  1506. # Test '-tails' flag to glob.
  1507. test filename-11.36 {Tcl_GlobCmd} {
  1508.     list [catch {glob -tails *} msg] $msg
  1509. } {1 {"-tails" must be used with either "-directory" or "-path"}}
  1510. test filename-11.37 {Tcl_GlobCmd} {
  1511.     list [catch {glob -type d -tails -path $globname *} msg] $msg
  1512. } [list 0 [list $globname]]
  1513. test filename-11.38 {Tcl_GlobCmd} {
  1514.     list [catch {glob -tails -path $globname *} msg] $msg
  1515. } [list 0 [list $globname]]
  1516. test filename-11.39 {Tcl_GlobCmd} {
  1517.     list [catch {glob -tails -join -path $globname *} msg] $msg
  1518. } [list 0 [list $globname]]
  1519. test filename-11.40 {Tcl_GlobCmd} {
  1520.     expr {[glob -dir [pwd] -tails *] == [glob *]}
  1521. } {1}
  1522. test filename-11.41 {Tcl_GlobCmd} {
  1523.     expr {[glob -dir [pwd] -tails *] != [glob -dir [pwd] *]}
  1524. } {1}
  1525. test filename-11.42 {Tcl_GlobCmd} {
  1526.     set res [list]
  1527.     foreach f [glob -dir [pwd] *] {
  1528. lappend res [file tail $f]
  1529.     }
  1530.     expr {$res == [glob *]}
  1531. } {1}
  1532. test filename-11.43 {Tcl_GlobCmd} {
  1533.     list [catch {glob -t *} msg] $msg
  1534. } {1 {ambiguous option "-t": must be -directory, -join, -nocomplain, -path, -tails, -types, or --}}
  1535. test filename-11.44 {Tcl_GlobCmd} {
  1536.     list [catch {glob -tails -path hello -directory hello *} msg] $msg
  1537. } {1 {"-directory" cannot be used with "-path"}}
  1538. test filename-11.45 {Tcl_GlobCmd on root volume} {
  1539.     set res1 ""
  1540.     set res2 ""
  1541.     catch {
  1542. set res1 [glob -dir [lindex [file volumes] 0] -tails *]
  1543.     }
  1544.     catch {
  1545. set tmpd [pwd]
  1546. cd [lindex [file volumes] 0]
  1547. set res2 [glob *]
  1548. cd $tmpd
  1549.     }
  1550.     expr {$res1 == $res2}
  1551. } {1}
  1552. test filename-11.46 {Tcl_GlobCmd} {
  1553.     list [catch {glob -types abcde -dir foo *} msg] $msg
  1554. } {1 {bad argument to "-types": abcde}}
  1555. test filename-11.47 {Tcl_GlobCmd} {
  1556.     list [catch {glob -types abcde -path foo *} msg] $msg
  1557. } {1 {bad argument to "-types": abcde}}
  1558. test filename-11.48 {Tcl_GlobCmd} {
  1559.     list [catch {glob -types abcde -dir foo -join * *} msg] $msg
  1560. } {1 {bad argument to "-types": abcde}}
  1561. test filename-11.49 {Tcl_GlobCmd} {
  1562.     list [catch {glob -types abcde -path foo -join * *} msg] $msg
  1563. } {1 {bad argument to "-types": abcde}}
  1564. file rename $horribleglobname globTest
  1565. set globname globTest
  1566. unset horribleglobname
  1567. test filename-12.1 {simple globbing} {unixOrPc} {
  1568.     list [catch {glob {}} msg] $msg
  1569. } {0 .}
  1570. test filename-12.1.1 {simple globbing} {unixOrPc} {
  1571.     list [catch {glob -types f {}} msg] $msg
  1572. } {1 {no files matched glob pattern ""}}
  1573. test filename-12.1.2 {simple globbing} {unixOrPc} {
  1574.     list [catch {glob -types d {}} msg] $msg
  1575. } {0 .}
  1576. test filename-12.1.3 {simple globbing} {unixOnly} {
  1577.     list [catch {glob -types hidden {}} msg] $msg
  1578. } {0 .}
  1579. test filename-12.1.4 {simple globbing} {pcOnly} {
  1580.     list [catch {glob -types hidden {}} msg] $msg
  1581. } {1 {no files matched glob pattern ""}}
  1582. test filename-12.1.5 {simple globbing} {pcOnly} {
  1583.     list [catch {glob -types hidden c:/} msg] $msg
  1584. } {1 {no files matched glob pattern "c:/"}}
  1585. test filename-12.1.6 {simple globbing} {pcOnly} {
  1586.     list [catch {glob c:/} msg] $msg
  1587. } {0 c:/}
  1588. test filename-12.2 {simple globbing} {macOnly} {
  1589.     list [catch {glob {}} msg] $msg
  1590. } {0 :}
  1591. test filename-12.2.1 {simple globbing} {macOnly} {
  1592.     list [catch {glob -types f {}} msg] $msg
  1593. } {1 {no files matched glob pattern ""}}
  1594. test filename-12.2.2 {simple globbing} {macOnly} {
  1595.     list [catch {glob -types d {}} msg] $msg
  1596. } {0 :}
  1597. test filename-12.2.3 {simple globbing} {macOnly} {
  1598.     list [catch {glob -types hidden {}} msg] $msg
  1599. } {1 {no files matched glob pattern ""}}
  1600. test filename-12.3 {simple globbing} {
  1601.     list [catch {glob -nocomplain {a1,a2}} msg] $msg
  1602. } {0 {}}
  1603. if {$tcl_platform(platform) == "macintosh"} {
  1604.     set globPreResult :globTest:
  1605. } else {
  1606.     set globPreResult globTest/
  1607. }
  1608. set x1 x1.c
  1609. set y1 y1.c
  1610. test filename-12.4 {simple globbing} {unixOrPc} {
  1611.     lsort [glob globTest/x1.c globTest/y1.c globTest/foo]
  1612. } "$globPreResult$x1 $globPreResult$y1"
  1613. test filename-12.5 {simple globbing} {
  1614.     list [catch {glob globTest\/x1.c} msg] $msg
  1615. } "0 $globPreResult$x1"
  1616. test filename-12.6 {simple globbing} {
  1617.     list [catch {glob globTest\/\x1.c} msg] $msg
  1618. } "0 $globPreResult$x1"
  1619. test filename-12.7 {globbing at filesystem root} {unixOnly} {
  1620.     set res1 [glob -nocomplain /*]
  1621.     set res2 [glob -path / *]
  1622.     set equal [string equal $res1 $res2]
  1623.     if {!$equal} {
  1624. lappend equal "not equal" $res1 $res2
  1625.     }
  1626.     set equal
  1627. } {1}
  1628. test filename-12.8 {globbing at filesystem root} {unixOnly} {
  1629.     set dir [lindex [glob -type d /*] 0]
  1630.     set first [string range $dir 0 1]
  1631.     set res1 [glob -nocomplain ${first}*]
  1632.     set res2 [glob -path $first *]
  1633.     set equal [string equal $res1 $res2]
  1634.     if {!$equal} {
  1635. lappend equal "not equal" $res1 $res2
  1636.     }
  1637.     set equal
  1638. } {1}
  1639. test filename-12.9 {globbing at filesystem root} {winOnly} {
  1640.     # Can't grab just anything from 'file volumes' because we need a dir
  1641.     # that has subdirs - assume that C:/ exists across Windows machines.
  1642.     set dir [lindex [glob -type d C:/*] 0]
  1643.     set first [string range $dir 0 3]
  1644.     set res1 [glob -nocomplain ${first}*]
  1645.     set res2 [glob -path $first *]
  1646.     set equal [string equal $res1 $res2]
  1647.     if {!$equal} {
  1648. lappend equal "not equal" $res1 $res2
  1649.     }
  1650.     set equal
  1651. } {1}
  1652. test filename-13.1 {globbing with brace substitution} {
  1653.     list [catch {glob globTest/{}} msg] $msg
  1654. } "0 $globPreResult"
  1655. test filename-13.2 {globbing with brace substitution} {
  1656.     list [catch {glob globTest/{} msg] $msg
  1657. } {1 {unmatched open-brace in file name}}
  1658. test filename-13.3 {globbing with brace substitution} {
  1659.     list [catch {glob globTest/{\}} msg] $msg
  1660. } {1 {unmatched open-brace in file name}}
  1661. test filename-13.4 {globbing with brace substitution} {
  1662.     list [catch {glob globTest/{\} msg] $msg
  1663. } {1 {unmatched open-brace in file name}}
  1664. test filename-13.5 {globbing with brace substitution} {
  1665.     list [catch {glob globTest/}} msg] $msg
  1666. } {1 {unmatched close-brace in file name}}
  1667. test filename-13.6 {globbing with brace substitution} {
  1668.     list [catch {glob globTest/{}x1.c} msg] $msg
  1669. } "0 $globPreResult$x1"
  1670. test filename-13.7 {globbing with brace substitution} {
  1671.     list [catch {glob globTest/{x}1.c} msg] $msg
  1672. } "0 $globPreResult$x1"
  1673. test filename-13.8 {globbing with brace substitution} {
  1674.     list [catch {glob globTest/{x{}}1.c} msg] $msg
  1675. } "0 $globPreResult$x1"
  1676. test filename-13.9 {globbing with brace substitution} {
  1677.     list [lsort [catch {glob globTest/{x,y}1.c} msg]] $msg
  1678. } [list 0 [list $globPreResult$x1 $globPreResult$y1]]
  1679. test filename-13.10 {globbing with brace substitution} {
  1680.     list [lsort [catch {glob globTest/{x,,y}1.c} msg]] $msg
  1681. } [list 0 [list $globPreResult$x1 $globPreResult$y1]]
  1682. test filename-13.11 {globbing with brace substitution} {unixOrPc} {
  1683.     list [lsort [catch {glob globTest/{x,x\,z,z}1.c} msg]] $msg
  1684. } {0 {globTest/x1.c globTest/x,z1.c globTest/z1.c}}
  1685. test filename-13.12 {globbing with brace substitution} {macOnly} {
  1686.     list [lsort [catch {glob globTest/{x,x\,z,z}1.c} msg]] $msg
  1687. } {0 {:globTest:x1.c :globTest:x,z1.c :globTest:z1.c}}
  1688. test filename-13.13 {globbing with brace substitution} {
  1689.     lsort [glob globTest/{a,b,x,y}1.c]
  1690. } [list $globPreResult$x1 $globPreResult$y1]
  1691. test filename-13.14 {globbing with brace substitution} {unixOrPc} {
  1692.     lsort [glob {globTest/{x1,y2,weird name}.c}]
  1693. } {{globTest/weird name.c} globTest/x1.c}
  1694. test filename-13.15 {globbing with brace substitution} {macOnly} {
  1695.     lsort [glob {globTest/{x1,y2,weird name}.c}]
  1696. } {{:globTest:weird name.c} :globTest:x1.c}
  1697. test filename-13.16 {globbing with brace substitution} {unixOrPc} {
  1698.     lsort [glob globTest/{x1.c,a1/*}]
  1699. } {globTest/a1/b1 globTest/a1/b2 globTest/x1.c}
  1700. test filename-13.17 {globbing with brace substitution} {macOnly} {
  1701.     lsort [glob globTest/{x1.c,a1/*}]
  1702. } {:globTest:a1:b1 :globTest:a1:b2 :globTest:x1.c}
  1703. test filename-13.18 {globbing with brace substitution} {unixOrPc} {
  1704.     lsort [glob globTest/{x1.c,{a},a1/*}]
  1705. } {globTest/a1/b1 globTest/a1/b2 globTest/x1.c}
  1706. test filename-13.19 {globbing with brace substitution} {macOnly} {
  1707.     lsort [glob globTest/{x1.c,{a},a1/*}]
  1708. } {:globTest:a1:b1 :globTest:a1:b2 :globTest:x1.c}
  1709. test filename-13.20 {globbing with brace substitution} {unixOrPc} {
  1710.     lsort [glob globTest/{a,x}1/*/{x,y}*]
  1711. } {globTest/a1/b1/x2.c globTest/a1/b2/y2.c}
  1712. test filename-13.21 {globbing with brace substitution} {macOnly} {
  1713.     lsort [glob globTest/{a,x}1/*/{x,y}*]
  1714. } {:globTest:a1:b1:x2.c :globTest:a1:b2:y2.c}
  1715. test filename-13.22 {globbing with brace substitution} {
  1716.     list [catch {glob globTest/{a,x}1/*/{} msg] $msg
  1717. } {1 {unmatched open-brace in file name}}
  1718. test filename-14.1 {asterisks, question marks, and brackets} {unixOrPc} {
  1719.     lsort [glob glo*/*.c]
  1720. } {{globTest/weird name.c} globTest/x,z1.c globTest/x1.c globTest/y1.c globTest/z1.c}
  1721. test filename-14.2 {asterisks, question marks, and brackets} {macOnly} {
  1722.     lsort [glob glo*/*.c]
  1723. } {{:globTest:weird name.c} :globTest:x,z1.c :globTest:x1.c :globTest:y1.c :globTest:z1.c}
  1724. test filename-14.3 {asterisks, question marks, and brackets} {unixOrPc} {
  1725.     lsort [glob globTest/?1.c]
  1726. } {globTest/x1.c globTest/y1.c globTest/z1.c}
  1727. test filename-14.4 {asterisks, question marks, and brackets} {macOnly} {
  1728.     lsort [glob globTest/?1.c]
  1729. } {:globTest:x1.c :globTest:y1.c :globTest:z1.c}
  1730. # The current directory could be anywhere; do this to stop spurious matches
  1731. file mkdir globTestContext
  1732. file rename globTest [file join globTestContext globTest]
  1733. set savepwd [pwd]
  1734. cd globTestContext
  1735. test filename-14.5 {asterisks, question marks, and brackets} {unixOrPc} {
  1736.     lsort [glob */*/*/*.c]
  1737. } {globTest/a1/b1/x2.c globTest/a1/b2/y2.c}
  1738. test filename-14.6 {asterisks, question marks, and brackets} {macOnly} {
  1739.     lsort [glob */*/*/*.c]
  1740. } {:globTest:a1:b1:x2.c :globTest:a1:b2:y2.c}
  1741. # Reset to where we were
  1742. cd $savepwd
  1743. file rename [file join globTestContext globTest] globTest
  1744. file delete globTestContext
  1745. test filename-14.7 {asterisks, question marks, and brackets} {unixOnly} {
  1746.     lsort [glob globTest/*]
  1747. } {globTest/a1 globTest/a2 globTest/a3 {globTest/weird name.c} globTest/x,z1.c globTest/x1.c globTest/y1.c globTest/z1.c}
  1748. test filename-14.7.1 {asterisks, question marks, and brackets} {pcOnly} {
  1749.     lsort [glob globTest/*]
  1750. } {globTest/.1 globTest/a1 globTest/a2 globTest/a3 {globTest/weird name.c} globTest/x,z1.c globTest/x1.c globTest/y1.c globTest/z1.c}
  1751. test filename-14.8 {asterisks, question marks, and brackets} {macOnly} {
  1752.     lsort [glob globTest/*]
  1753. } {:globTest:.1 :globTest:a1 :globTest:a2 :globTest:a3 {:globTest:weird name.c} :globTest:x,z1.c :globTest:x1.c :globTest:y1.c :globTest:z1.c}
  1754. test filename-14.9 {asterisks, question marks, and brackets} {unixOrPc} {
  1755.     lsort [glob globTest/.*]
  1756. } {globTest/. globTest/.. globTest/.1}
  1757. test filename-14.10 {asterisks, question marks, and brackets} {macOnly} {
  1758.     lsort [glob globTest/.*]
  1759. } {:globTest:.1}
  1760. test filename-14.11 {asterisks, question marks, and brackets} {unixOrPc} {
  1761.     lsort [glob globTest/*/*]
  1762. } {globTest/a1/b1 globTest/a1/b2 globTest/a2/b3}
  1763. test filename-14.12 {asterisks, question marks, and brackets} {macOnly} {
  1764.     lsort [glob globTest/*/*]
  1765. } {:globTest:a1:b1 :globTest:a1:b2 :globTest:a2:b3}
  1766. test filename-14.13 {asterisks, question marks, and brackets} {unixOrPc} {
  1767.     lsort [glob {globTest/[xyab]1.*}]
  1768. } {globTest/x1.c globTest/y1.c}
  1769. test filename-14.14 {asterisks, question marks, and brackets} {macOnly} {
  1770.     lsort [glob {globTest/[xyab]1.*}]
  1771. } {:globTest:x1.c :globTest:y1.c}
  1772. test filename-14.15 {asterisks, question marks, and brackets} {unixOrPc} {
  1773.     lsort [glob globTest/*/]
  1774. } {globTest/a1/ globTest/a2/ globTest/a3/}
  1775. test filename-14.16 {asterisks, question marks, and brackets} {macOnly} {
  1776.     lsort [glob globTest/*/]
  1777. } {:globTest:a1: :globTest:a2: :globTest:a3:}
  1778. test filename-14.17 {asterisks, question marks, and brackets} {
  1779.     global env
  1780.     set temp $env(HOME)
  1781.     set env(HOME) [file join $env(HOME) globTest]
  1782.     set result [list [catch {glob ~/z*} msg] $msg]
  1783.     set env(HOME) $temp
  1784.     set result
  1785. } [list 0 [list [file join $env(HOME) globTest z1.c]]]
  1786. test filename-14.18 {asterisks, question marks, and brackets} {unixOrPc} {
  1787.     list [catch {lsort [glob globTest/*.c goo/*]} msg] $msg
  1788. } {0 {{globTest/weird name.c} globTest/x,z1.c globTest/x1.c globTest/y1.c globTest/z1.c}}
  1789. test filename-14.19 {asterisks, question marks, and brackets} {macOnly} {
  1790.     list [catch {lsort [glob globTest/*.c goo/*]} msg] $msg
  1791. } {0 {{:globTest:weird name.c} :globTest:x,z1.c :globTest:x1.c :globTest:y1.c :globTest:z1.c}}
  1792. test filename-14.20 {asterisks, question marks, and brackets} {
  1793.     list [catch {glob -nocomplain goo/*} msg] $msg
  1794. } {0 {}}
  1795. test filename-14.21 {asterisks, question marks, and brackets} {
  1796.     list [catch {glob globTest/*/gorp} msg] $msg
  1797. } {1 {no files matched glob pattern "globTest/*/gorp"}}
  1798. test filename-14.22 {asterisks, question marks, and brackets} {
  1799.     list [catch {glob goo/* x*z foo?q} msg] $msg
  1800. } {1 {no files matched glob patterns "goo/* x*z foo?q"}}
  1801. test filename-14.23 {slash globbing} {unixOrPc} {
  1802.     glob /
  1803. } /
  1804. test filename-14.24 {slash globbing} {pcOnly} {
  1805.     glob {\}
  1806. } /
  1807. test filename-14.25 {type specific globbing} {unixOnly} {
  1808.     list [catch {lsort [glob -dir globTest -types f *]} msg] $msg
  1809. } [list 0 [lsort [list 
  1810. [file join $globname "weird name.c"]
  1811. [file join $globname x,z1.c]
  1812. [file join $globname x1.c]
  1813. [file join $globname y1.c] [file join $globname z1.c]]]]
  1814. test filename-14.25.1 {type specific globbing} {pcOnly macOnly} {
  1815.     list [catch {lsort [glob -dir globTest -types f *]} msg] $msg
  1816. } [list 0 [lsort [list 
  1817.         [file join $globname .1]
  1818. [file join $globname "weird name.c"]
  1819. [file join $globname x,z1.c]
  1820. [file join $globname x1.c]
  1821. [file join $globname y1.c] [file join $globname z1.c]]]]
  1822. test filename-14.26 {type specific globbing} {
  1823.     list [catch {glob -nocomplain -dir globTest -types {readonly} *} msg] $msg
  1824. } [list 0 {}]
  1825. unset globname
  1826. # The following tests are only valid for Unix systems.
  1827. # On some systems, like AFS, "000" protection doesn't prevent
  1828. # access by owner, so the following test is not portable.
  1829. catch {file attributes globTest/a1 -permissions 0000}
  1830. test filename-15.1 {unix specific globbing} {unixOnly nonPortable} {
  1831.     string tolower [list [catch {glob globTest/a1/*} msg]  $msg $errorCode]
  1832. } {1 {couldn't read directory "globtest/a1": permission denied} {posix eacces {permission denied}}}
  1833. test filename-15.2 {unix specific no complain: no errors} {unixOnly nonPortable} {
  1834.     glob -nocomplain globTest/a1/*
  1835. } {}
  1836. test filename-15.3 {unix specific no complain: no errors, good result} 
  1837. {unixOnly nonPortable} {
  1838.     # test fails because if an error occur , the interp's result
  1839.     # is reset...
  1840.     glob -nocomplain globTest/a2 globTest/a1/* globTest/a3
  1841. } {globTest/a2 globTest/a3}
  1842. catch {file attributes globTest/a1 -permissions 0755}
  1843. test filename-15.4 {unix specific no complain: no errors, good result} 
  1844. {unixOnly nonPortable} {
  1845.     # test fails because if an error occurs, the interp's result
  1846.     # is reset... or you don't run at scriptics where the
  1847.     # outser and welch users exists
  1848.     glob -nocomplain ~ouster ~foo ~welch
  1849. } {/home/ouster /home/welch}
  1850. test filename-15.4.1 {no complain: no errors, good result} {
  1851.     # test used to fail because if an error occurs, the interp's result
  1852.     # is reset... 
  1853.     string equal [glob -nocomplain ~wontexist ~blah ~] 
  1854.       [glob -nocomplain ~ ~blah ~wontexist]
  1855. } {1}
  1856. test filename-15.5 {unix specific globbing} {unixOnly nonPortable} {
  1857.     glob ~ouster/.csh*
  1858. } "/home/ouster/.cshrc"
  1859. catch {close [open globTest/odd\[]*?{}name w]}
  1860. test filename-15.6 {unix specific globbing} {unixOnly} {
  1861.     global env
  1862.     set temp $env(HOME)
  1863.     set env(HOME) $env(HOME)/globTest/odd\[]*?{}name
  1864.     set result [list [catch {glob ~} msg] $msg]
  1865.     set env(HOME) $temp
  1866.     set result
  1867. } [list 0 [list [lindex [glob ~] 0]/globTest/odd\[]*?{}name]]
  1868. catch {file delete -force globTest/odd\[]*?{}name}
  1869. # The following tests are only valid for Windows systems.
  1870. set oldDir [pwd]
  1871. if {$::tcltest::testConstraints(pcOnly)} {
  1872.     cd c:/
  1873.     file delete -force globTest
  1874.     file mkdir globTest
  1875.     close [open globTest/x1.BAT w]
  1876.     close [open globTest/y1.Bat w]
  1877.     close [open globTest/z1.bat w]
  1878. }
  1879. test filename-16.1 {windows specific globbing} {pcOnly} {
  1880.     lsort [glob globTest/*.bat]
  1881. } {globTest/x1.BAT globTest/y1.Bat globTest/z1.bat}
  1882. test filename-16.2 {windows specific globbing} {pcOnly} {
  1883.     glob c:
  1884. } c:
  1885. test filename-16.3 {windows specific globbing} {pcOnly} {
  1886.     glob c:\\
  1887. } c:/
  1888. test filename-16.4 {windows specific globbing} {pcOnly} {
  1889.     glob c:/
  1890. } c:/
  1891. test filename-16.5 {windows specific globbing} {pcOnly} {
  1892.     glob c:*bTest
  1893. } c:globTest
  1894. test filename-16.6 {windows specific globbing} {pcOnly} {
  1895.     glob c:\\*bTest
  1896. } c:/globTest
  1897. test filename-16.7 {windows specific globbing} {pcOnly} {
  1898.     glob c:/*bTest
  1899. } c:/globTest
  1900. test filename-16.8 {windows specific globbing} {pcOnly} {
  1901.     lsort [glob c:globTest/*.bat]
  1902. } {c:globTest/x1.BAT c:globTest/y1.Bat c:globTest/z1.bat}
  1903. test filename-16.9 {windows specific globbing} {pcOnly} {
  1904.     lsort [glob c:/globTest/*.bat]
  1905. } {c:/globTest/x1.BAT c:/globTest/y1.Bat c:/globTest/z1.bat}
  1906. test filename-16.10 {windows specific globbing} {pcOnly} {
  1907.     lsort [glob c:globTest\\*.bat]
  1908. } {c:globTest/x1.BAT c:globTest/y1.Bat c:globTest/z1.bat}
  1909. test filename-16.11 {windows specific globbing} {pcOnly} {
  1910.     lsort [glob c:\\globTest\\*.bat]
  1911. } {c:/globTest/x1.BAT c:/globTest/y1.Bat c:/globTest/z1.bat}
  1912. # some tests require a shared C drive
  1913. if {[catch {cd //[info hostname]/c}]} {
  1914.     set ::tcltest::testConstraints(sharedCdrive) 0
  1915. } else {
  1916.     set ::tcltest::testConstraints(sharedCdrive) 1
  1917. }
  1918. test filename-16.12 {windows specific globbing} {pcOnly sharedCdrive} {
  1919.     cd //[info hostname]/c
  1920.     glob //[info hostname]/c/*Test
  1921. } //[info hostname]/c/globTest
  1922. test filename-16.13 {windows specific globbing} {pcOnly sharedCdrive} {
  1923.     cd //[info hostname]/c
  1924.     glob "\\\\[info hostname]\\c\\*Test"
  1925. } //[info hostname]/c/globTest
  1926. test filename-16.14 {windows specific globbing} {pcOnly} {
  1927.     cd [lindex [glob -types d -dir C:/ *] 0]
  1928.     expr {[lsearch -exact [glob {{.,*}*}] ".."] != -1}
  1929. } {1}
  1930. test filename-16.15 {windows specific globbing} {pcOnly} {
  1931.     cd [lindex [glob -types d -dir C:/ *] 0]
  1932.     glob ..
  1933. } {..}
  1934. test filename-16.16 {windows specific globbing} {pcOnly} {
  1935.     file tail [lindex [glob "[lindex [glob -types d -dir C:/ *] 0]/.."] 0]
  1936. } {..}
  1937. test filename-17.1 {windows specific special files} {testsetplatform} {
  1938.     testsetplatform win
  1939.     list [file pathtype com1] [file pathtype con] [file pathtype lpt3] 
  1940.       [file pathtype prn] [file pathtype nul] [file pathtype aux] 
  1941.       [file pathtype foo]
  1942. } {absolute absolute absolute absolute absolute absolute relative}
  1943. test filename-17.2 {windows specific glob with executable} {winOnly} {
  1944.     makeDirectory execglob
  1945.     makeFile contents execglob/abc.exe
  1946.     makeFile contents execglob/abc.notexecutable
  1947.     set res [glob -nocomplain -dir [temporaryDirectory]/execglob 
  1948.       -tails -types x *]
  1949.     removeFile execglob/abc.exe
  1950.     removeFile execglob/abc.notexecutable
  1951.     removeDirectory execglob
  1952.     set res
  1953. } {abc.exe}
  1954. test fileName-18.1 {windows - split ADS name correctly} {winOnly} {
  1955.     # bug 1194458
  1956.     set x [file split c:/c:d]
  1957.     set y [eval [linsert $x 0 file join]]
  1958.     list $x $y
  1959. } {{c:/ ./c:d} c:/c:d}
  1960. # cleanup
  1961. catch {file delete -force C:/globTest}
  1962. cd [temporaryDirectory]
  1963. file delete -force globTest
  1964. cd $oldpwd
  1965. set env(HOME) $oldhome
  1966. if {[tcltest::testConstraint testsetplatform]} {
  1967.     testsetplatform $platform
  1968.     catch {unset platform}
  1969. }
  1970. catch {unset oldhome temp result globPreResult}
  1971. ::tcltest::cleanupTests
  1972. return