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

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test the code in the file tclUtil.c.
  2. # This file is organized in the standard fashion for Tcl tests.
  3. #
  4. # Copyright (c) 1995-1998 Sun Microsystems, Inc.
  5. # Copyright (c) 1998-1999 by Scriptics Corporation.
  6. #
  7. # See the file "license.terms" for information on usage and redistribution
  8. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  9. #
  10. # RCS: @(#) $Id: util.test,v 1.10.4.4 2005/10/28 03:26:33 mdejong Exp $
  11. if {[lsearch [namespace children] ::tcltest] == -1} {
  12.     package require tcltest
  13.     namespace import -force ::tcltest::*
  14. }
  15. test util-1.1 {TclFindElement procedure - binary element in middle of list} {
  16.     lindex {0 foox00help 1} 1
  17. } "foox00help"
  18. test util-1.2 {TclFindElement procedure - binary element at end of list} {
  19.     lindex {0 foox00help} 1
  20. } "foox00help"
  21. test util-2.1 {TclCopyAndCollapse procedure - normal string} {
  22.     lindex {0 foo} 1
  23. } {foo}
  24. test util-2.2 {TclCopyAndCollapse procedure - string with backslashes} {
  25.     lindex {0 foonx00help 1} 1
  26. } "foonx00help"
  27. test util-3.1 {Tcl_ScanCountedElement procedure - don't leave unmatched braces} {
  28.     # This test checks for a very tricky feature.  Any list element
  29.     # generated with Tcl_ScanCountedElement and Tcl_ConvertElement must
  30.     # have the property that it can be enclosing in curly braces to make
  31.     # an embedded sub-list.  If this property doesn't hold, then
  32.     # Tcl_DStringStartSublist doesn't work.
  33.     set x {}
  34.     lappend x " \{ \"
  35.     concat $x [llength "{$x}"]
  36. } { \{ \ 1}
  37. test util-4.1 {Tcl_ConcatObj - backslash-space at end of argument} {
  38.     concat a {b } c
  39. } {a b  c}
  40. test util-4.2 {Tcl_ConcatObj - backslash-space at end of argument} {
  41.     concat a {b   } c
  42. } {a b  c}
  43. test util-4.3 {Tcl_ConcatObj - backslash-space at end of argument} {
  44.     concat a {b\   } c
  45. } {a b\  c}
  46. test util-4.4 {Tcl_ConcatObj - backslash-space at end of argument} {
  47.     concat a {b } c
  48. } {a b c}
  49. test util-4.5 {Tcl_ConcatObj - backslash-space at end of argument} {
  50.     concat a { } c
  51. } {a c}
  52. test util-4.6 {Tcl_ConcatObj - utf-8 sequence with "whitespace" char} {
  53.     # Check for Bug #227512.  If this violates C isspace, then it returns xc3.
  54.     concat xe0
  55. } xe0
  56. proc Wrapper_Tcl_StringMatch {pattern string} {
  57.     # Forces use of Tcl_StringMatch, not Tcl_UniCharCaseMatch
  58.     switch -glob -- $string $pattern {return 1} default {return 0}
  59. }
  60. test util-5.1 {Tcl_StringMatch} {
  61.     Wrapper_Tcl_StringMatch ab*c abc
  62. } 1
  63. test util-5.2 {Tcl_StringMatch} {
  64.     Wrapper_Tcl_StringMatch ab**c abc
  65. } 1
  66. test util-5.3 {Tcl_StringMatch} {
  67.     Wrapper_Tcl_StringMatch ab* abcdef
  68. } 1
  69. test util-5.4 {Tcl_StringMatch} {
  70.     Wrapper_Tcl_StringMatch *c abc
  71. } 1
  72. test util-5.5 {Tcl_StringMatch} {
  73.     Wrapper_Tcl_StringMatch *3*6*9 0123456789
  74. } 1
  75. test util-5.6 {Tcl_StringMatch} {
  76.     Wrapper_Tcl_StringMatch *3*6*9 01234567890
  77. } 0
  78. test util-5.7 {Tcl_StringMatch: UTF-8} {
  79.     Wrapper_Tcl_StringMatch *u u4e4fu
  80. } 1
  81. test util-5.8 {Tcl_StringMatch} {
  82.     Wrapper_Tcl_StringMatch a?c abc
  83. } 1
  84. test util-5.9 {Tcl_StringMatch: UTF-8} {
  85.     # skip one character in string
  86.     Wrapper_Tcl_StringMatch a?c au4e4fc
  87. } 1
  88. test util-5.10 {Tcl_StringMatch} {
  89.     Wrapper_Tcl_StringMatch a??c abc
  90. } 0
  91. test util-5.11 {Tcl_StringMatch} {
  92.     Wrapper_Tcl_StringMatch ?1??4???8? 0123456789
  93. } 1
  94. test util-5.12 {Tcl_StringMatch} {
  95.     Wrapper_Tcl_StringMatch {[abc]bc} abc
  96. } 1
  97. test util-5.13 {Tcl_StringMatch: UTF-8} {
  98.     # string += Tcl_UtfToUniChar(string, &ch);
  99.     Wrapper_Tcl_StringMatch "[u4e4fxy]bc" "u4e4fbc"
  100. } 1
  101. test util-5.14 {Tcl_StringMatch} {
  102.     # if ((*pattern == ']') || (*pattern == ''))
  103.     # badly formed pattern
  104.     Wrapper_Tcl_StringMatch {[]} {[]}
  105. } 0
  106. test util-5.15 {Tcl_StringMatch} {
  107.     # if ((*pattern == ']') || (*pattern == ''))
  108.     # badly formed pattern
  109.     Wrapper_Tcl_StringMatch {[} {[}
  110. } 0
  111. test util-5.16 {Tcl_StringMatch} {
  112.     Wrapper_Tcl_StringMatch {a[abc]c} abc
  113. } 1
  114. test util-5.17 {Tcl_StringMatch: UTF-8} {
  115.     # pattern += Tcl_UtfToUniChar(pattern, &endChar);
  116.     # get 1 UTF-8 character
  117.     Wrapper_Tcl_StringMatch "a[au4e4fc]c" "au4e4fc"
  118. } 1
  119. test util-5.18 {Tcl_StringMatch: UTF-8} {
  120.     # pattern += Tcl_UtfToUniChar(pattern, &endChar);
  121.     # proper advance: wrong answer would match on UTF trail byte of u4e4f
  122.     Wrapper_Tcl_StringMatch {a[au4e4fc]c} [bytestring au008fc]
  123. } 0
  124. test util-5.19 {Tcl_StringMatch: UTF-8} {
  125.     # pattern += Tcl_UtfToUniChar(pattern, &endChar);
  126.     # proper advance.
  127.     Wrapper_Tcl_StringMatch {a[au4e4fc]c} "acc"
  128. } 1
  129. test util-5.20 {Tcl_StringMatch} {
  130.     Wrapper_Tcl_StringMatch {a[xyz]c} abc
  131. } 0
  132. test util-5.21 {Tcl_StringMatch} {
  133.     Wrapper_Tcl_StringMatch {12[2-7]45} 12345
  134. } 1
  135. test util-5.22 {Tcl_StringMatch: UTF-8 range} {
  136.     Wrapper_Tcl_StringMatch "[u4e00-u4e4f]" "0"
  137. } 0
  138. test util-5.23 {Tcl_StringMatch: UTF-8 range} {
  139.     Wrapper_Tcl_StringMatch "[u4e00-u4e4f]" "u4e33"
  140. } 1
  141. test util-5.24 {Tcl_StringMatch: UTF-8 range} {
  142.     Wrapper_Tcl_StringMatch "[u4e00-u4e4f]" "uff08"
  143. } 0
  144. test util-5.25 {Tcl_StringMatch} {
  145.     Wrapper_Tcl_StringMatch {12[ab2-4cd]45} 12345
  146. } 1
  147. test util-5.26 {Tcl_StringMatch} {
  148.     Wrapper_Tcl_StringMatch {12[ab2-4cd]45} 12b45
  149. } 1
  150. test util-5.27 {Tcl_StringMatch} {
  151.     Wrapper_Tcl_StringMatch {12[ab2-4cd]45} 12d45
  152. } 1
  153. test util-5.28 {Tcl_StringMatch} {
  154.     Wrapper_Tcl_StringMatch {12[ab2-4cd]45} 12145
  155. } 0
  156. test util-5.29 {Tcl_StringMatch} {
  157.     Wrapper_Tcl_StringMatch {12[ab2-4cd]45} 12545
  158. } 0
  159. test util-5.30 {Tcl_StringMatch: forwards range} {
  160.     Wrapper_Tcl_StringMatch {[k-w]} "z"
  161. } 0
  162. test util-5.31 {Tcl_StringMatch: forwards range} {
  163.     Wrapper_Tcl_StringMatch {[k-w]} "w"
  164. } 1
  165. test util-5.32 {Tcl_StringMatch: forwards range} {
  166.     Wrapper_Tcl_StringMatch {[k-w]} "r"
  167. } 1
  168. test util-5.33 {Tcl_StringMatch: forwards range} {
  169.     Wrapper_Tcl_StringMatch {[k-w]} "k"
  170. } 1
  171. test util-5.34 {Tcl_StringMatch: forwards range} {
  172.     Wrapper_Tcl_StringMatch {[k-w]} "a"
  173. } 0
  174. test util-5.35 {Tcl_StringMatch: reverse range} {
  175.     Wrapper_Tcl_StringMatch {[w-k]} "z"
  176. } 0
  177. test util-5.36 {Tcl_StringMatch: reverse range} {
  178.     Wrapper_Tcl_StringMatch {[w-k]} "w"
  179. } 1
  180. test util-5.37 {Tcl_StringMatch: reverse range} {
  181.     Wrapper_Tcl_StringMatch {[w-k]} "r"
  182. } 1
  183. test util-5.38 {Tcl_StringMatch: reverse range} {
  184.     Wrapper_Tcl_StringMatch {[w-k]} "k"
  185. } 1
  186. test util-5.39 {Tcl_StringMatch: reverse range} {
  187.     Wrapper_Tcl_StringMatch {[w-k]} "a"
  188. } 0
  189. test util-5.40 {Tcl_StringMatch: skip correct number of ']'} {
  190.     Wrapper_Tcl_StringMatch {[A-]x} Ax
  191. } 0
  192. test util-5.41 {Tcl_StringMatch: skip correct number of ']'} {
  193.     Wrapper_Tcl_StringMatch {[A-]]x} Ax
  194. } 1
  195. test util-5.42 {Tcl_StringMatch: skip correct number of ']'} {
  196.     Wrapper_Tcl_StringMatch {[A-]]x} ue1x
  197. } 0
  198. test util-5.43 {Tcl_StringMatch: skip correct number of ']'} {
  199.     Wrapper_Tcl_StringMatch [A-]ue1]x ue1x
  200. } 1
  201. test util-5.44 {Tcl_StringMatch: skip correct number of ']'} {
  202.     Wrapper_Tcl_StringMatch {[A-]h]x} hx
  203. } 1
  204. test util-5.45 {Tcl_StringMatch} {
  205.     # if (*pattern == '')
  206.     # badly formed pattern, still treats as a set
  207.     Wrapper_Tcl_StringMatch {[a} a
  208. } 1
  209. test util-5.46 {Tcl_StringMatch} {
  210.     Wrapper_Tcl_StringMatch {a*b} a*b
  211. } 1
  212. test util-5.47 {Tcl_StringMatch} {
  213.     Wrapper_Tcl_StringMatch {a*b} ab
  214. } 0
  215. test util-5.48 {Tcl_StringMatch} {
  216.     Wrapper_Tcl_StringMatch {a*?[]\x} "a*?[]\x"
  217. } 1
  218. test util-5.49 {Tcl_StringMatch} {
  219.     Wrapper_Tcl_StringMatch ** ""
  220. } 1
  221. test util-5.50 {Tcl_StringMatch} {
  222.     Wrapper_Tcl_StringMatch *. ""
  223. } 0
  224. test util-5.51 {Tcl_StringMatch} {
  225.     Wrapper_Tcl_StringMatch "" ""
  226. } 1
  227. test util-6.1 {Tcl_PrintDouble - using tcl_precision} {
  228.     concat x[expr 1.4]
  229. } {x1.4}
  230. test util-6.2 {Tcl_PrintDouble - using tcl_precision} {
  231.     concat x[expr 1.39999999999]
  232. } {x1.39999999999}
  233. test util-6.3 {Tcl_PrintDouble - using tcl_precision} {
  234.     concat x[expr 1.399999999999]
  235. } {x1.4}
  236. test util-6.4 {Tcl_PrintDouble - using tcl_precision} {
  237.     set tcl_precision 5
  238.     concat x[expr 1.123412341234]
  239. } {x1.1234}
  240. set tcl_precision 12
  241. test util-6.5 {Tcl_PrintDouble - make sure there's a decimal point} {
  242.     concat x[expr 2.0]
  243. } {x2.0}
  244. test util-6.6 {Tcl_PrintDouble - make sure there's a decimal point} {eformat} {
  245.     concat x[expr 3.0e98]
  246. } {x3e+98}
  247. test util-7.1 {TclPrecTraceProc - unset callbacks} {
  248.     set tcl_precision 7
  249.     set x $tcl_precision
  250.     unset tcl_precision
  251.     list $x $tcl_precision
  252. } {7 7}
  253. test util-7.2 {TclPrecTraceProc - read traces, sharing among interpreters} {
  254.     set tcl_precision 12
  255.     interp create child
  256.     set x [child eval set tcl_precision]
  257.     child eval {set tcl_precision 6}
  258.     interp delete child
  259.     list $x $tcl_precision
  260. } {12 6}
  261. test util-7.3 {TclPrecTraceProc - write traces, safe interpreters} {
  262.     set tcl_precision 12
  263.     interp create -safe child
  264.     set x [child eval {
  265. list [catch {set tcl_precision 8} msg] $msg
  266.     }]
  267.     interp delete child
  268.     list $x $tcl_precision
  269. } {{1 {can't set "tcl_precision": can't modify precision from a safe interpreter}} 12}
  270. test util-7.4 {TclPrecTraceProc - write traces, bogus values} {
  271.     set tcl_precision 12
  272.     list [catch {set tcl_precision abc} msg] $msg $tcl_precision
  273. } {1 {can't set "tcl_precision": improper value for precision} 12}
  274. set tcl_precision 12
  275. # This test always succeeded in the C locale anyway...
  276. test util-8.1 {TclNeedSpace - correct UTF8 handling} {
  277.     # Bug 411825
  278.     # Note that this test relies on the fact that
  279.     # [interp target] calls on Tcl_AppendElement()
  280.     # which calls on TclNeedSpace().  If [interp target]
  281.     # is ever updated, this test will no longer test
  282.     # TclNeedSpace.
  283.     interp create u5420
  284.     interp create [list u5420 foo]
  285.     interp alias {} fooset [list u5420 foo] set
  286.     set result [interp target {} fooset]
  287.     interp delete u5420
  288.     set result
  289. } "u5420 foo"
  290. tcltest::testConstraint testdstring [expr {[info commands testdstring] != {}}]
  291. test util-8.2 {TclNeedSpace - correct UTF8 handling} testdstring {
  292.     # Bug 411825
  293.     # This tests the same bug as the previous test, but
  294.     # should be more future-proof, as the DString
  295.     # operations will likely continue to call TclNeedSpace
  296.     testdstring free
  297.     testdstring append u5420 -1
  298.     testdstring element foo
  299.     llength [testdstring get]
  300. } 2
  301. test util-8.3 {TclNeedSpace - correct UTF8 handling} testdstring {
  302.     # Bug 411825 - new variant reported by Dossy Shiobara
  303.     testdstring free
  304.     testdstring append u00A0 -1
  305.     testdstring element foo
  306.     llength [testdstring get]
  307. } 2
  308. test util-8.4 {TclNeedSpace - correct UTF8 handling} testdstring {
  309.     # Another bug uncovered while fixing 411825
  310.     testdstring free
  311.     testdstring append { } -1
  312.     testdstring append { -1
  313.     testdstring element foo
  314.     llength [testdstring get]
  315. } 2
  316. test util-8.5 {TclNeedSpace - correct UTF8 handling} testdstring {
  317.     # Note that in this test TclNeedSpace actually gets it wrong,
  318.     # claiming we need a space when we really do not.  Extra space
  319.     # between list elements is harmless though, and better to have
  320.     # extra space in really weird string reps of lists, than to
  321.     # invest the effort required to make TclNeedSpace foolproof.
  322.     testdstring free
  323.     testdstring append {\ } -1
  324.     testdstring element foo
  325.     list [llength [testdstring get]] [string length [testdstring get]]
  326. } {2 7}
  327. test util-8.6 {TclNeedSpace - correct UTF8 handling} testdstring {
  328.     # Another example of TclNeedSpace harmlessly getting it wrong.
  329.     testdstring free
  330.     testdstring append {\ } -1
  331.     testdstring append { -1
  332.     testdstring element foo
  333.     testdstring append } -1
  334.     list [llength [testdstring get]] [string length [testdstring get]]
  335. } {2 9}
  336. # cleanup
  337. ::tcltest::cleanupTests
  338. return