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

通讯编程

开发平台:

Visual C++

  1. # Commands covered:  switch
  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) 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: switch.test,v 1.7 2001/11/27 13:30:54 dkf Exp $
  15. if {[lsearch [namespace children] ::tcltest] == -1} {
  16.     package require tcltest
  17.     namespace import -force ::tcltest::*
  18. }
  19. test switch-1.1 {simple patterns} {
  20.     switch a a {format 1} b {format 2} c {format 3} default {format 4}
  21. } 1
  22. test switch-1.2 {simple patterns} {
  23.     switch b a {format 1} b {format 2} c {format 3} default {format 4}
  24. } 2
  25. test switch-1.3 {simple patterns} {
  26.     switch x a {format 1} b {format 2} c {format 3} default {format 4}
  27. } 4
  28. test switch-1.4 {simple patterns} {
  29.     switch x a {format 1} b {format 2} c {format 3}
  30. } {}
  31. test switch-1.5 {simple pattern matches many times} {
  32.     switch b a {format 1} b {format 2} b {format 3} b {format 4}
  33. } 2
  34. test switch-1.6 {simple patterns} {
  35.     switch default a {format 1} default {format 2} c {format 3} default {format 4}
  36. } 2
  37. test switch-1.7 {simple patterns} {
  38.     switch x a {format 1} default {format 2} c {format 3} default {format 4}
  39. } 4
  40. test switch-2.1 {single-argument form for pattern/command pairs} {
  41.     switch b {
  42. a {format 1}
  43. b {format 2}
  44. default {format 6}
  45.     }
  46. } {2}
  47. test switch-2.2 {single-argument form for pattern/command pairs} {
  48.     list [catch {switch z {a 2 b}} msg] $msg
  49. } {1 {extra switch pattern with no body}}
  50. test switch-3.1 {-exact vs. -glob vs. -regexp} {
  51.     switch -exact aaaab {
  52. ^a*b$ {concat regexp}
  53. *b {concat glob}
  54. aaaab {concat exact}
  55. default {concat none}
  56.     }
  57. } exact
  58. test switch-3.2 {-exact vs. -glob vs. -regexp} {
  59.     switch -regexp aaaab {
  60. ^a*b$ {concat regexp}
  61. *b {concat glob}
  62. aaaab {concat exact}
  63. default {concat none}
  64.     }
  65. } regexp
  66. test switch-3.3 {-exact vs. -glob vs. -regexp} {
  67.     switch -glob aaaab {
  68. ^a*b$ {concat regexp}
  69. *b {concat glob}
  70. aaaab {concat exact}
  71. default {concat none}
  72.     }
  73. } glob
  74. test switch-3.4 {-exact vs. -glob vs. -regexp} {
  75.     switch aaaab {^a*b$} {concat regexp} *b {concat glob} 
  76.     aaaab {concat exact} default {concat none}
  77. } exact
  78. test switch-3.5 {-exact vs. -glob vs. -regexp} {
  79.     switch -- -glob {
  80. ^g.*b$ {concat regexp}
  81. -* {concat glob}
  82. -glob {concat exact}
  83. default {concat none}
  84.     }
  85. } exact
  86. test switch-3.6 {-exact vs. -glob vs. -regexp} {
  87.     list [catch {switch -foo a b c} msg] $msg
  88. } {1 {bad option "-foo": must be -exact, -glob, -regexp, or --}}
  89. test switch-4.1 {error in executed command} {
  90.     list [catch {switch a a {error "Just a test"} default {format 1}} msg] 
  91.     $msg $errorInfo
  92. } {1 {Just a test} {Just a test
  93.     while executing
  94. "error "Just a test""
  95.     ("a" arm line 1)
  96.     invoked from within
  97. "switch a a {error "Just a test"} default {format 1}"}}
  98. test switch-4.2 {error: not enough args} {
  99.     list [catch {switch} msg] $msg
  100. } {1 {wrong # args: should be "switch ?switches? string pattern body ... ?default body?"}}
  101. test switch-4.3 {error: pattern with no body} {
  102.     list [catch {switch a b} msg] $msg
  103. } {1 {extra switch pattern with no body}}
  104. test switch-4.4 {error: pattern with no body} {
  105.     list [catch {switch a b {format 1} c} msg] $msg
  106. } {1 {extra switch pattern with no body}}
  107. test switch-4.5 {error in default command} {
  108.     list [catch {switch foo a {error switch1} b {error switch 3} 
  109.     default {error switch2}} msg] $msg $errorInfo
  110. } {1 switch2 {switch2
  111.     while executing
  112. "error switch2"
  113.     ("default" arm line 1)
  114.     invoked from within
  115. "switch foo a {error switch1} b {error switch 3}  default {error switch2}"}}
  116. test switch-5.1 {errors in -regexp matching} {
  117.     list [catch {switch -regexp aaaab {
  118. *b {concat glob}
  119. aaaab {concat exact}
  120. default {concat none}
  121.     }} msg] $msg
  122. } {1 {couldn't compile regular expression pattern: quantifier operand invalid}}
  123. test switch-6.1 {backslashes in patterns} {
  124.     switch -exact {a$.[} {
  125. a$.[ {concat first}
  126. a\$.\[ {concat second}
  127. \a\$\.\[ {concat third}
  128. {a\$.\[} {concat fourth}
  129. {\a\$\.\[} {concat fifth}
  130. default {concat none}
  131.     }
  132. } third
  133. test switch-6.2 {backslashes in patterns} {
  134.     switch -exact {a$.[} {
  135. a$.[ {concat first}
  136. {a$.[} {concat second}
  137. {{a$.[}} {concat third}
  138. default {concat none}
  139.     }
  140. } second
  141. test switch-7.1 {"-" bodies} {
  142.     switch a {
  143. a -
  144. b -
  145. c {concat 1}
  146. default {concat 2}
  147.     }
  148. } 1
  149. test switch-7.2 {"-" bodies} {
  150.     list [catch {
  151. switch a {
  152.     a -
  153.     b -
  154.     c -
  155. }
  156.     } msg] $msg
  157. } {1 {no body specified for pattern "c"}}
  158. test switch-7.3 {"-" bodies} {
  159.     list [catch {
  160. switch a {
  161.     a -
  162.     b -foo
  163.     c -
  164. }
  165.     } msg] $msg
  166. } {1 {no body specified for pattern "c"}}
  167. test switch-8.1 {empty body} {
  168.     set msg {}
  169.     switch {2} {
  170.      1 {set msg 1}
  171.         2 {}
  172.         default {set msg 2}
  173.     }
  174. } {}
  175. test switch-9.1 {empty pattern/body list} {
  176.     list [catch {switch x} msg] $msg
  177. } {1 {wrong # args: should be "switch ?switches? string pattern body ... ?default body?"}}
  178. test switch-9.2 {empty pattern/body list} {
  179.     list [catch {switch -- x} msg] $msg
  180. } {1 {wrong # args: should be "switch ?switches? string pattern body ... ?default body?"}}
  181. test switch-9.3 {empty pattern/body list} {
  182.     list [catch {switch x {}} msg] $msg
  183. } {1 {wrong # args: should be "switch ?switches? string {pattern body ... ?default body?}"}}
  184. test switch-9.4 {empty pattern/body list} {
  185.     list [catch {switch -- x {}} msg] $msg
  186. } {1 {wrong # args: should be "switch ?switches? string {pattern body ... ?default body?}"}}
  187. test switch-9.5 {unpaired pattern} {
  188.     list [catch {switch x a {} b} msg] $msg
  189. } {1 {extra switch pattern with no body}}
  190. test switch-9.6 {unpaired pattern} {
  191.     list [catch {switch x {a {} b}} msg] $msg
  192. } {1 {extra switch pattern with no body}}
  193. test switch-9.7 {unpaired pattern} {
  194.     list [catch {switch x a {} # comment b} msg] $msg
  195. } {1 {extra switch pattern with no body}}
  196. test switch-9.8 {unpaired pattern} {
  197.     list [catch {switch x {a {} # comment b}} msg] $msg
  198. } {1 {extra switch pattern with no body, this may be due to a comment incorrectly placed outside of a switch body - see the "switch" documentation}}
  199. test switch-9.9 {unpaired pattern} {
  200.     list [catch {switch x a {} x {} # comment b} msg] $msg
  201. } {1 {extra switch pattern with no body}}
  202. test switch-9.10 {unpaired pattern} {
  203.     list [catch {switch x {a {} x {} # comment b}} msg] $msg
  204. } {1 {extra switch pattern with no body, this may be due to a comment incorrectly placed outside of a switch body - see the "switch" documentation}}
  205. # cleanup
  206. ::tcltest::cleanupTests
  207. return