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

通讯编程

开发平台:

Visual C++

  1. # Commands covered:  none (tests environment variable implementation)
  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) 1991-1993 The Regents of the University of California.
  8. # Copyright (c) 1994 Sun Microsystems, Inc.
  9. # Copyright (c) 1998-1999 by Scriptics Corporation.
  10. #
  11. # See the file "license.terms" for information on usage and redistribution
  12. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  13. #
  14. # RCS: @(#) $Id: env.test,v 1.17.2.5 2007/01/19 01:05:50 das Exp $
  15. package require tcltest 2
  16. namespace import -force ::tcltest::*
  17. #
  18. # These tests will run on any platform (and indeed crashed
  19. # on the Mac).  So put them before you test for the existance
  20. # of exec.
  21. #
  22. test env-1.1 {propagation of env values to child interpreters} {
  23.     catch {interp delete child}
  24.     catch {unset env(test)}
  25.     interp create child
  26.     set env(test) garbage
  27.     set return [child eval {set env(test)}]
  28.     interp delete child
  29.     unset env(test)
  30.     set return
  31. } {garbage}
  32. #
  33. # This one crashed on Solaris under Tcl8.0, so we only
  34. # want to make sure it runs.
  35. #
  36. test env-1.2 {lappend to env value} {
  37.     catch {unset env(test)}
  38.     set env(test) aaaaaaaaaaaaaaaa
  39.     append env(test) bbbbbbbbbbbbbb
  40.     unset env(test)
  41. } {}
  42. test env-1.3 {reflection of env by "array names"} {
  43.     catch {interp delete child}
  44.     catch {unset env(test)}
  45.     interp create child
  46.     child eval {set env(test) garbage}
  47.     set names [array names env]
  48.     interp delete child
  49.     set ix [lsearch $names test]
  50.     catch {unset env(test)}
  51.     expr {$ix >= 0}
  52. } {1}
  53. # Some tests require the "exec" command.
  54. # Skip them if exec is not defined.
  55. testConstraint exec [llength [info commands exec]]
  56. set printenvScript [makeFile {
  57.     proc lrem {listname name} {
  58. upvar $listname list
  59. set i [lsearch $list $name]
  60. if {$i >= 0} {
  61.     set list [lreplace $list $i $i]
  62. }
  63. return $list
  64.     }
  65.     set names [lsort [array names env]]
  66.     if {$tcl_platform(platform) == "windows"} {
  67. lrem names HOME
  68.         lrem names COMSPEC
  69. lrem names ComSpec
  70. lrem names ""
  71.     }
  72.     foreach name {
  73. TCL_LIBRARY PATH LD_LIBRARY_PATH LIBPATH PURE_PROG_NAME DISPLAY
  74. SHLIB_PATH SYSTEMDRIVE SYSTEMROOT DYLD_LIBRARY_PATH DYLD_FRAMEWORK_PATH
  75. DYLD_NEW_LOCAL_SHARED_REGIONS DYLD_NO_FIX_PREBINDING
  76. __CF_USER_TEXT_ENCODING SECURITYSESSIONID
  77.     } {
  78. lrem names $name
  79.     }
  80.     foreach p $names {
  81. puts "$p=$env($p)"
  82.     }
  83.     exit
  84. } printenv]
  85. # [exec] is required here to see the actual environment received
  86. # by child processes.
  87. proc getenv {} {
  88.     global printenvScript tcltest
  89.     catch {exec [interpreter] $printenvScript} out
  90.     if {$out == "child process exited abnormally"} {
  91. set out {}
  92.     }
  93.     return $out
  94. }
  95. # Save the current environment variables at the start of the test.
  96. foreach name [array names env] {
  97.     set env2([string toupper $name]) $env($name)
  98.     unset env($name)
  99. }
  100. # Added the following lines so that child tcltest can actually find its
  101. # library if the initial tcltest is run from a non-standard place.
  102. # ('saved' env vars)
  103. foreach name {
  104. TCL_LIBRARY PATH LD_LIBRARY_PATH LIBPATH DISPLAY SHLIB_PATH
  105. SYSTEMDRIVE SYSTEMROOT DYLD_LIBRARY_PATH DYLD_FRAMEWORK_PATH
  106. DYLD_NEW_LOCAL_SHARED_REGIONS DYLD_NO_FIX_PREBINDING
  107. SECURITYSESSIONID} {
  108.     if {[info exists env2($name)]} {
  109. set env($name) $env2($name);
  110.     }
  111. }
  112. test env-2.1 {adding environment variables} {exec} {
  113.     getenv
  114. } {}
  115. set env(NAME1) "test string"
  116. test env-2.2 {adding environment variables} {exec} {
  117.     getenv
  118. } {NAME1=test string}
  119. set env(NAME2) "more"
  120. test env-2.3 {adding environment variables} {exec} {
  121.     getenv
  122. } {NAME1=test string
  123. NAME2=more}
  124. set env(XYZZY) "garbage"
  125. test env-2.4 {adding environment variables} {exec} {
  126.     getenv
  127. } {NAME1=test string
  128. NAME2=more
  129. XYZZY=garbage}
  130. set env(NAME2) "new value"
  131. test env-3.1 {changing environment variables} {exec} {
  132.     set result [getenv]
  133.     unset env(NAME2)
  134.     set result
  135. } {NAME1=test string
  136. NAME2=new value
  137. XYZZY=garbage}
  138. test env-4.1 {unsetting environment variables} {exec} {
  139.     set result [getenv]
  140.     unset env(NAME1)
  141.     set result
  142. } {NAME1=test string
  143. XYZZY=garbage}
  144. test env-4.2 {unsetting environment variables} {exec} {
  145.     set result [getenv]
  146.     unset env(XYZZY)
  147.     set result
  148. } {XYZZY=garbage}
  149. test env-4.3 {setting international environment variables} {exec} {
  150.     set env(ua7) ub6
  151.     getenv
  152. } "ua7=ub6"
  153. test env-4.4 {changing international environment variables} {exec} {
  154.     set env(ua7) ua7
  155.     getenv
  156. } "ua7=ua7"
  157. test env-4.5 {unsetting international environment variables} {exec} {
  158.     set env(ub6) ua7
  159.     unset env(ua7)
  160.     set result [getenv]
  161.     unset env(ub6)
  162.     set result
  163. } "ub6=ua7"
  164. test env-5.0 {corner cases - set a value, it should exist} {} {
  165.     set env(temp) a
  166.     set result [set env(temp)]
  167.     unset env(temp)
  168.     set result
  169. } {a}
  170. test env-5.1 {corner cases - remove one elem at a time} {} {
  171.     # When no environment variables exist, the env var will
  172.     # contain no entries.  The "array names" call synchs up
  173.     # the C-level environ array with the Tcl level env array.
  174.     # Make sure an empty Tcl array is created.
  175.     set x [array get env]
  176.     foreach e [array names env] {
  177. unset env($e)
  178.     }
  179.     set result [catch {array names env}]
  180.     array set env $x
  181.     set result
  182. } {0}
  183. test env-5.2 {corner cases - unset the env array} {} {
  184.     # Unsetting a variable in an interp detaches the C-level
  185.     # traces from the Tcl "env" variable.
  186.     interp create i 
  187.     i eval { unset env }
  188.     i eval { set env(THIS_SHOULDNT_EXIST) a}
  189.     set result [info exists env(THIS_SHOULDNT_EXIST)]
  190.     interp delete i
  191.     set result
  192. } {0}
  193. test env-5.3 {corner cases - unset the env in master should unset child} {} {
  194.     # Variables deleted in a master interp should be deleted in
  195.     # child interp too.
  196.     interp create i 
  197.     i eval { set env(THIS_SHOULD_EXIST) a}
  198.     set result [set env(THIS_SHOULD_EXIST)]
  199.     unset env(THIS_SHOULD_EXIST)
  200.     lappend result [i eval {catch {set env(THIS_SHOULD_EXIST)}}]
  201.     interp delete i
  202.     set result
  203. } {a 1}
  204. test env-5.4 {corner cases - unset the env array} {} {
  205.     # The info exists command should be in synch with the env array.
  206.     # Know Bug: 1737
  207.     interp create i 
  208.     i eval { set env(THIS_SHOULD_EXIST) a}
  209.     set     result [info exists env(THIS_SHOULD_EXIST)]
  210.     lappend result [set env(THIS_SHOULD_EXIST)]
  211.     lappend result [info exists env(THIS_SHOULD_EXIST)]
  212.     interp delete i
  213.     set result
  214. } {1 a 1}
  215. test env-5.5 {corner cases - cannot have null entries on Windows} {pcOnly} {
  216.     set env() a
  217.     catch {set env()}
  218. } {1}
  219. test env-6.1 {corner cases - add lots of env variables} {} {
  220.     set size [array size env]
  221.     for {set i 0} {$i < 100} {incr i} {
  222. set env(BOGUS$i) $i
  223.     }
  224.     expr {[array size env] - $size}
  225. } 100
  226. # Restore the environment variables at the end of the test.
  227. foreach name [array names env] {
  228.     unset env($name)
  229. }
  230. foreach name [array names env2] {
  231.     set env($name) $env2($name)
  232. }
  233. # cleanup
  234. removeFile $printenvScript
  235. ::tcltest::cleanupTests
  236. return