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

通讯编程

开发平台:

Visual C++

  1. # Package covered:  opt1.0/optparse.tcl
  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-1997 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: opt.test,v 1.8 2000/07/18 21:30:41 ericm Exp $
  15. if {[lsearch [namespace children] ::tcltest] == -1} {
  16.     package require tcltest
  17.     namespace import -force ::tcltest::*
  18. }
  19. # the package we are going to test
  20. package require opt 0.4.1
  21. # we are using implementation specifics to test the package
  22. #### functions tests #####
  23. set n $::tcl::OptDescN
  24. test opt-1.1 {OptKeyRegister / check that auto allocation is skipping existing keys} {
  25.     list [::tcl::OptKeyRegister {} $n] [::tcl::OptKeyRegister {} [expr $n+1]] [::tcl::OptKeyRegister {}]
  26. } "$n [expr $n+1] [expr $n+2]"
  27. test opt-2.1 {OptKeyDelete} {
  28.     list [::tcl::OptKeyRegister {} testkey] 
  29.     [info exists ::tcl::OptDesc(testkey)] 
  30.     [::tcl::OptKeyDelete testkey] 
  31.     [info exists ::tcl::OptDesc(testkey)]
  32. } {testkey 1 {} 0}
  33. test opt-3.1 {OptParse / temp key is removed} {
  34.     set n $::tcl::OptDescN
  35.     set prev [array names ::tcl::OptDesc]
  36.     ::tcl::OptKeyRegister {} $n
  37.     list [info exists ::tcl::OptDesc($n)]
  38.     [::tcl::OptKeyDelete $n]
  39.     [::tcl::OptParse {{-foo}} {}]
  40.     [info exists ::tcl::OptDesc($n)]
  41.     [expr {"[lsort $prev]"=="[lsort [array names ::tcl::OptDesc]]"}]
  42. } {1 {} {} 0 1}
  43. test opt-3.2 {OptParse / temp key is removed even on errors} {
  44.     set n $::tcl::OptDescN
  45.     catch {::tcl::OptKeyDelete $n}
  46.     list [catch {::tcl::OptParse {{-foo}} {-blah}}] 
  47.     [info exists ::tcl::OptDesc($n)]
  48. } {1 0}
  49. test opt-4.1 {OptProc} {
  50.     ::tcl::OptProc optTest {} {}
  51.     optTest ;
  52.     ::tcl::OptKeyDelete optTest
  53. } {}
  54. test opt-5.1 {OptProcArgGiven} {
  55.     ::tcl::OptProc optTest {{-foo}} {
  56. if {[::tcl::OptProcArgGiven "-foo"]} {
  57.     return 1
  58. } else {
  59.     return 0
  60. }
  61.     }
  62.     list [optTest] [optTest -f] [optTest -F] [optTest -fOO]
  63. } {0 1 1 1}
  64. test opt-6.1 {OptKeyParse} {
  65.     ::tcl::OptKeyRegister {} test;
  66.     list [catch {::tcl::OptKeyParse test {-help}} msg] $msg
  67. } {1 {Usage information:
  68.     Var/FlagName Type Value Help
  69.     ------------ ---- ----- ----
  70.     ( -help                 gives this help )}}
  71. test opt-7.1 {OptCheckType} {
  72.     list 
  73.     [::tcl::OptCheckType 23 int] 
  74.     [::tcl::OptCheckType 23 float] 
  75.     [::tcl::OptCheckType true boolean] 
  76.     [::tcl::OptCheckType "-blah" any] 
  77.     [::tcl::OptCheckType {a b c} list] 
  78.     [::tcl::OptCheckType maYbe choice {yes maYbe no}] 
  79.     [catch {::tcl::OptCheckType "-blah" string}] 
  80.     [catch {::tcl::OptCheckType 6 boolean}] 
  81.     [catch {::tcl::OptCheckType x float}] 
  82.     [catch {::tcl::OptCheckType "a { c" list}] 
  83.     [catch {::tcl::OptCheckType 2.3 int}] 
  84.     [catch {::tcl::OptCheckType foo choice {x y Foo z}}]
  85. } {23 23.0 1 -blah {a b c} maYbe 1 1 1 1 1 1}
  86. test opt-8.1 {List utilities} {
  87.     ::tcl::Lempty {}
  88. } 1
  89. test opt-8.2 {List utilities} {
  90.     ::tcl::Lempty {a b c}
  91. } 0
  92. test opt-8.3 {List utilities} {
  93.     ::tcl::Lget {a {b c d} e} {1 2}
  94. } d
  95. test opt-8.4 {List utilities} {
  96.     set l {a {b c d e} f}
  97.     ::tcl::Lvarset l {1 2} D
  98.     set l
  99. } {a {b c D e} f}
  100. test opt-8.5 {List utilities} {
  101.     set l {a b c}
  102.     ::tcl::Lvarset1 l 6 X
  103.     set l
  104. } {a b c {} {} {} X}
  105. test opt-8.6 {List utilities} {
  106.     set l {a {b c 7 e} f}
  107.     ::tcl::Lvarincr l {1 2}
  108.     set l
  109. } {a {b c 8 e} f}
  110. test opt-8.7 {List utilities} {
  111.     set l {a {b c 7 e} f}
  112.     ::tcl::Lvarincr l {1 2} -9
  113.     set l
  114. } {a {b c -2 e} f}
  115. test opt-8.10 {List utilities} {
  116.     set l {a {b c 7 e} f}
  117.     ::tcl::Lvarpop l
  118.     set l
  119. } {{b c 7 e} f}
  120. test opt-8.11 {List utilities} {
  121.     catch {unset x}
  122.     set l {a {b c 7 e} f}
  123.     list [::tcl::Lassign $l u v w x] 
  124.     $u $v $w [info exists x]
  125. } {3 a {b c 7 e} f 0}
  126. test opt-9.1 {Misc utilities} {
  127.     catch {unset v}
  128.     ::tcl::SetMax v 3
  129.     ::tcl::SetMax v 7
  130.     ::tcl::SetMax v 6
  131.     set v
  132. } 7
  133. test opt-9.2 {Misc utilities} {
  134.     catch {unset v}
  135.     ::tcl::SetMin v 3
  136.     ::tcl::SetMin v -7
  137.     ::tcl::SetMin v 1
  138.     set v
  139. } -7
  140. #### behaviour tests #####
  141. test opt-10.1 {ambigous flags} {
  142.     ::tcl::OptProc optTest {{-fla} {-other} {-flag2xyz} {-flag3xyz}} {}
  143.     catch {optTest -fL} msg
  144.     set msg
  145. } {ambigous option "-fL", choose from:
  146.     -fla      boolflag (false) 
  147.     -flag2xyz boolflag (false) 
  148.     -flag3xyz boolflag (false) }
  149. test opt-10.2 {non ambigous flags} {
  150.     ::tcl::OptProc optTest {{-flag1xyz} {-other} {-flag2xyz} {-flag3xyz}} {
  151. return $flag2xyz
  152.     }
  153.     optTest -fLaG2
  154. } 1
  155. test opt-10.3 {non ambigous flags because of exact match} {
  156.     ::tcl::OptProc optTest {{-flag1x} {-other} {-flag1} {-flag1xy}} {
  157. return $flag1
  158.     }
  159.     optTest -flAg1
  160. } 1
  161. test opt-10.4 {ambigous flags, not exact match} {
  162.     ::tcl::OptProc optTest {{-flag1xy} {-other} {-flag1} {-flag1xyz}} {
  163. return $flag1
  164.     }
  165.     catch {optTest -fLag1X} msg
  166.     set msg
  167. } {ambigous option "-fLag1X", choose from:
  168.     -flag1xy  boolflag (false) 
  169.     -flag1xyz boolflag (false) }
  170. # medium size overall test example: (defined once)
  171. ::tcl::OptProc optTest {
  172.     {cmd -choice {print save delete} "sub command to choose"}
  173.     {-allowBoing -boolean true}
  174.     {arg2 -string "this is help"}
  175.     {?arg3? 7 "optional number"}
  176.     {-moreflags}
  177. } {
  178.     list $cmd $allowBoing $arg2 $arg3 $moreflags
  179. }
  180. test opt-10.5 {medium size overall test} {
  181.     list [catch {optTest} msg] $msg
  182. } {1 {no value given for parameter "cmd" (use -help for full usage) :
  183.     cmd choice (print save delete) sub command to choose}}
  184. test opt-10.6 {medium size overall test} {
  185.     list [catch {optTest -help} msg] $msg
  186. } {1 {Usage information:
  187.     Var/FlagName Type     Value   Help
  188.     ------------ ----     -----   ----
  189.     ( -help                       gives this help )
  190.     cmd          choice   (print save delete) sub command to choose
  191.     -allowBoing  boolean  (true)  
  192.     arg2         string   ()      this is help
  193.     ?arg3?       int      (7)     optional number
  194.     -moreflags   boolflag (false) }}
  195. test opt-10.7 {medium size overall test} {
  196.     optTest save tst
  197. } {save 1 tst 7 0}
  198. test opt-10.8 {medium size overall test} {
  199.     optTest save -allowBoing false -- 8
  200. } {save 0 8 7 0}
  201. test opt-10.9 {medium size overall test} {
  202.     optTest save tst -m --
  203. } {save 1 tst 7 1}
  204. test opt-10.10 {medium size overall test} {
  205.     list [catch {optTest save tst foo} msg] [lindex [split $msg "n"] 0]
  206. } {1 {too many arguments (unexpected argument(s): foo), usage:}}
  207. test opt-11.1 {too many args test 2} {
  208.     set key [::tcl::OptKeyRegister {-foo}]
  209.     list [catch {::tcl::OptKeyParse $key {-foo blah}} msg] $msg
  210.     [::tcl::OptKeyDelete $key]
  211. } {1 {too many arguments (unexpected argument(s): blah), usage:
  212.     Var/FlagName Type     Value   Help
  213.     ------------ ----     -----   ----
  214.     ( -help                       gives this help )
  215.     -foo         boolflag (false) } {}}
  216. test opt-11.2 {default value for args} {
  217.     set args {}
  218.     set key [::tcl::OptKeyRegister {{args -list {a b c} "args..."}}]
  219.     ::tcl::OptKeyParse $key {}
  220.     ::tcl::OptKeyDelete $key
  221.     set args
  222. } {a b c}
  223. # cleanup
  224. ::tcltest::cleanupTests
  225. return