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

通讯编程

开发平台:

Visual C++

  1. # This file contains a collection of tests for tclUtf.c
  2. # Sourcing this file into Tcl runs the tests and generates output for
  3. # errors.  No output means no errors were found.
  4. #
  5. # Copyright (c) 1997 Sun Microsystems, Inc.
  6. # Copyright (c) 1998-1999 by Scriptics Corporation.
  7. #
  8. # See the file "license.terms" for information on usage and redistribution
  9. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  10. #
  11. # RCS: @(#) $Id: utf.test,v 1.8.14.5 2005/09/07 14:35:56 dgp Exp $
  12. if {[lsearch [namespace children] ::tcltest] == -1} {
  13.     package require tcltest 2
  14.     namespace import -force ::tcltest::*
  15. }
  16. catch {unset x}
  17. test utf-1.1 {Tcl_UniCharToUtf: 1 byte sequences} {
  18.     set x x01
  19. } [bytestring "x01"]
  20. test utf-1.2 {Tcl_UniCharToUtf: 2 byte sequences} {
  21.     set x "x00"
  22. } [bytestring "xc0x80"]
  23. test utf-1.3 {Tcl_UniCharToUtf: 2 byte sequences} {
  24.     set x "xe0"
  25. } [bytestring "xc3xa0"]
  26. test utf-1.4 {Tcl_UniCharToUtf: 3 byte sequences} {
  27.     set x "u4e4e"
  28. } [bytestring "xe4xb9x8e"]
  29. test utf-1.5 {Tcl_UniCharToUtf: negative Tcl_UniChar} {
  30.     string length [format %c -1]
  31. } 1
  32. test utf-2.1 {Tcl_UtfToUniChar: low ascii} {
  33.     string length "abc"
  34. } {3}
  35. test utf-2.2 {Tcl_UtfToUniChar: naked trail bytes} {
  36.     string length [bytestring "x82x83x84"]
  37. } {3}
  38. test utf-2.3 {Tcl_UtfToUniChar: lead (2-byte) followed by non-trail} {
  39.     string length [bytestring "xC2"]
  40. } {1}
  41. test utf-2.4 {Tcl_UtfToUniChar: lead (2-byte) followed by trail} {
  42.     string length [bytestring "xC2xa2"]
  43. } {1}
  44. test utf-2.5 {Tcl_UtfToUniChar: lead (3-byte) followed by non-trail} {
  45.     string length [bytestring "xE2"]
  46. } {1}
  47. test utf-2.6 {Tcl_UtfToUniChar: lead (3-byte) followed by 1 trail} {
  48.     string length [bytestring "xE2xA2"]
  49. } {2}
  50. test utf-2.7 {Tcl_UtfToUniChar: lead (3-byte) followed by 2 trail} {
  51.     string length [bytestring "xE4xb9x8e"]
  52. } {1}
  53. test utf-2.8 {Tcl_UtfToUniChar: longer UTF sequences not supported} {
  54.     string length [bytestring "xF4xA2xA2xA2"]
  55. } {4}
  56. test utf-3.1 {Tcl_UtfCharComplete} {
  57. } {}
  58. testConstraint testnumutfchars [llength [info commands testnumutfchars]]
  59. test utf-4.1 {Tcl_NumUtfChars: zero length} testnumutfchars {
  60.     testnumutfchars ""
  61. } {0}
  62. test utf-4.2 {Tcl_NumUtfChars: length 1} testnumutfchars {
  63.     testnumutfchars [bytestring "xC2xA2"]
  64. } {1}
  65. test utf-4.3 {Tcl_NumUtfChars: long string} testnumutfchars {
  66.     testnumutfchars [bytestring "abcxC2xA2xe4xb9x8euA2u4e4e"]
  67. } {7}
  68. test utf-4.4 {Tcl_NumUtfChars: #u0000} testnumutfchars {
  69.     testnumutfchars [bytestring "xC0x80"]
  70. } {1}
  71. test utf-4.5 {Tcl_NumUtfChars: zero length, calc len} testnumutfchars {
  72.     testnumutfchars "" 1
  73. } {0}
  74. test utf-4.6 {Tcl_NumUtfChars: length 1, calc len} testnumutfchars {
  75.     testnumutfchars [bytestring "xC2xA2"] 1
  76. } {1}
  77. test utf-4.7 {Tcl_NumUtfChars: long string, calc len} testnumutfchars {
  78.     testnumutfchars [bytestring "abcxC2xA2xe4xb9x8euA2u4e4e"] 1
  79. } {7}
  80. test utf-4.8 {Tcl_NumUtfChars: #u0000, calc len} testnumutfchars {
  81.     testnumutfchars [bytestring "xC0x80"] 1
  82. } {1}
  83. test utf-5.1 {Tcl_UtfFindFirsts} {
  84. } {}
  85. test utf-6.1 {Tcl_UtfNext} {
  86. } {}
  87. test utf-7.1 {Tcl_UtfPrev} {
  88. } {}
  89. test utf-8.1 {Tcl_UniCharAtIndex: index = 0} {
  90.     string index abcd 0
  91. } {a}
  92. test utf-8.2 {Tcl_UniCharAtIndex: index = 0} {
  93.     string index u4e4eu25a 0
  94. } "u4e4e"
  95. test utf-8.3 {Tcl_UniCharAtIndex: index > 0} {
  96.     string index abcd 2
  97. } {c}
  98. test utf-8.4 {Tcl_UniCharAtIndex: index > 0} {
  99.     string index u4e4eu25axffu543 2
  100. } "uff"
  101. test utf-9.1 {Tcl_UtfAtIndex: index = 0} {
  102.     string range abcd 0 2
  103. } {abc}
  104. test utf-9.2 {Tcl_UtfAtIndex: index > 0} {
  105.     string range u4e4eu25axffu543klmnop 1 5
  106. } "u25axffu543kl"
  107. test utf-10.1 {Tcl_UtfBackslash: dst == NULL} {
  108.     set x n
  109. } {
  110. }
  111. test utf-10.2 {Tcl_UtfBackslash: u subst} {
  112.     set x ua2
  113. } [bytestring "xc2xa2"]
  114. test utf-10.3 {Tcl_UtfBackslash: longer u subst} {
  115.     set x u4e21
  116. } [bytestring "xe4xb8xa1"]
  117. test utf-10.4 {Tcl_UtfBackslash: stops at first non-hex} {
  118.     set x u4e2k
  119. } "[bytestring xd3xa2]k"
  120. test utf-10.5 {Tcl_UtfBackslash: stops after 4 hex chars} {
  121.     set x u4e216
  122. } "[bytestring xe4xb8xa1]6"
  123. proc bsCheck {char num} {
  124.     global errNum
  125.     test utf-10.$errNum {backslash substitution} {
  126. scan $char %c value
  127. set value
  128.     } $num
  129.     incr errNum
  130. }
  131. set errNum 6
  132. bsCheck b 8
  133. bsCheck e 101
  134. bsCheck f 12
  135. bsCheck n 10
  136. bsCheck r 13
  137. bsCheck t 9
  138. bsCheck v 11
  139. bsCheck { 123
  140. bsCheck } 125
  141. bsCheck [ 91
  142. bsCheck ] 93
  143. bsCheck $ 36
  144. bsCheck   32
  145. bsCheck ; 59
  146. bsCheck \ 92
  147. bsCheck Ca 67
  148. bsCheck Ma 77
  149. bsCheck CMa 67
  150. # prior to 8.3, this returned 8, as 8 as accepted as an
  151. # octal value - but it isn't! [Bug: 3975]
  152. bsCheck 8a 56
  153. bsCheck 14 12
  154. bsCheck 141 97
  155. bsCheck b 98
  156. bsCheck x 120
  157. bsCheck xa 10
  158. bsCheck xA 10
  159. bsCheck x41 65
  160. bsCheck x541 65
  161. bsCheck u 117
  162. bsCheck uk 117
  163. bsCheck u41 65
  164. bsCheck ua 10
  165. bsCheck uA 10
  166. bsCheck 340 224
  167. bsCheck ua1 161
  168. bsCheck u4e21 20001
  169. test utf-11.1 {Tcl_UtfToUpper} {
  170.     string toupper {}
  171. } {}
  172. test utf-11.2 {Tcl_UtfToUpper} {
  173.     string toupper abc
  174. } ABC
  175. test utf-11.3 {Tcl_UtfToUpper} {
  176.     string toupper u00e3ab
  177. } u00c3AB
  178. test utf-11.4 {Tcl_UtfToUpper} {
  179.     string toupper u01e3ab
  180. } u01e2AB
  181. test utf-12.1 {Tcl_UtfToLower} {
  182.     string tolower {}
  183. } {}
  184. test utf-12.2 {Tcl_UtfToLower} {
  185.     string tolower ABC
  186. } abc
  187. test utf-12.3 {Tcl_UtfToLower} {
  188.     string tolower u00c3AB
  189. } u00e3ab
  190. test utf-12.4 {Tcl_UtfToLower} {
  191.     string tolower u01e2AB
  192. } u01e3ab
  193. test utf-13.1 {Tcl_UtfToTitle} {
  194.     string totitle {}
  195. } {}
  196. test utf-13.2 {Tcl_UtfToTitle} {
  197.     string totitle abc
  198. } Abc
  199. test utf-13.3 {Tcl_UtfToTitle} {
  200.     string totitle u00e3ab
  201. } u00c3ab
  202. test utf-13.4 {Tcl_UtfToTitle} {
  203.     string totitle u01f3ab
  204. } u01f2ab
  205. test utf-14.1 {Tcl_UtfNcasecmp} {
  206.     string compare -nocase a b
  207. } -1
  208. test utf-14.2 {Tcl_UtfNcasecmp} {
  209.     string compare -nocase b a
  210. } 1
  211. test utf-14.3 {Tcl_UtfNcasecmp} {
  212.     string compare -nocase B a
  213. } 1
  214. test utf-14.4 {Tcl_UtfNcasecmp} {
  215.     string compare -nocase aBcB abca
  216. } 1
  217. test utf-15.1 {Tcl_UniCharToUpper, negative delta} {
  218.     string toupper aA
  219. } AA
  220. test utf-15.2 {Tcl_UniCharToUpper, positive delta} {
  221.     string toupper u0178u00ff
  222. } u0178u0178
  223. test utf-15.3 {Tcl_UniCharToUpper, no delta} {
  224.     string toupper !
  225. } !
  226. test utf-16.1 {Tcl_UniCharToLower, negative delta} {
  227.     string tolower aA
  228. } aa
  229. test utf-16.2 {Tcl_UniCharToLower, positive delta} {
  230.     string tolower u0178u00ff
  231. } u00ffu00ff
  232. test utf-17.1 {Tcl_UniCharToLower, no delta} {
  233.     string tolower !
  234. } !
  235. test utf-18.1 {Tcl_UniCharToTitle, add one for title} {
  236.     string totitle u01c4
  237. } u01c5
  238. test utf-18.2 {Tcl_UniCharToTitle, subtract one for title} {
  239.     string totitle u01c6
  240. } u01c5
  241. test utf-18.3 {Tcl_UniCharToTitle, subtract delta for title (positive)} {
  242.     string totitle u017f
  243. } u0053
  244. test utf-18.4 {Tcl_UniCharToTitle, subtract delta for title (negative)} {
  245.     string totitle u00ff
  246. } u0178
  247. test utf-18.5 {Tcl_UniCharToTitle, no delta} {
  248.     string totitle !
  249. } !
  250. test utf-19.1 {TclUniCharLen} {
  251.     list [regexp \d abc456def foo] $foo
  252. } {1 4}
  253. test utf-20.1 {TclUniCharNcmp} {
  254. } {}
  255. test utf-21.1 {TclUniCharIsAlnum} {
  256.     # this returns 1 with Unicode 3 compliance
  257.     string is alnum u1040u021f
  258. } {1}
  259. test utf-21.2 {unicode alnum char in regc_locale.c} {
  260.     # this returns 1 with Unicode 3 compliance
  261.     list [regexp {^[[:alnum:]]+$} u1040u021f] [regexp {^w+$} u1040u021f]
  262. } {1 1}
  263. test utf-22.1 {TclUniCharIsWordChar} {
  264.     string wordend "xyz123_bar fg" 0
  265. } 10
  266. test utf-22.2 {TclUniCharIsWordChar} {
  267.     string wordend "xu5080z123_baru203c fg" 0
  268. } 10
  269. test utf-23.1 {TclUniCharIsAlpha} {
  270.     # this returns 1 with Unicode 3 compliance
  271.     string is alpha u021f
  272. } {1}
  273. test utf-23.2 {unicode alpha char in regc_locale.c} {
  274.     # this returns 1 with Unicode 3 compliance
  275.     regexp {^[[:alpha:]]+$} u021f
  276. } {1}
  277. test utf-24.1 {TclUniCharIsDigit} {
  278.     # this returns 1 with Unicode 3 compliance
  279.     string is digit u1040
  280. } {1}
  281. test utf-24.2 {unicode digit char in regc_locale.c} {
  282.     # this returns 1 with Unicode 3 compliance
  283.     list [regexp {^[[:digit:]]+$} u1040] [regexp {^d+$} u1040]
  284. } {1 1}
  285. test utf-24.3 {TclUniCharIsSpace} {
  286.     # this returns 1 with Unicode 3 compliance
  287.     string is space u1680
  288. } {1}
  289. test utf-24.4 {unicode space char in regc_locale.c} {
  290.     # this returns 1 with Unicode 3 compliance
  291.     list [regexp {^[[:space:]]+$} u1680] [regexp {^s+$} u1680]
  292. } {1 1}
  293. testConstraint teststringobj [llength [info commands teststringobj]]
  294. test utf-25.1 {Tcl_UniCharNcasecmp} teststringobj {
  295.     testobj freeallvars
  296.     teststringobj set 1 a
  297.     teststringobj set 2 b
  298.     teststringobj getunicode 1
  299.     teststringobj getunicode 2
  300.     string compare -nocase [teststringobj get 1] [teststringobj get 2]
  301. } -1
  302. test utf-25.2 {Tcl_UniCharNcasecmp} teststringobj {
  303.     testobj freeallvars
  304.     teststringobj set 1 b
  305.     teststringobj set 2 a
  306.     teststringobj getunicode 1
  307.     teststringobj getunicode 2
  308.     string compare -nocase [teststringobj get 1] [teststringobj get 2]
  309. } 1
  310. test utf-25.3 {Tcl_UniCharNcasecmp} teststringobj {
  311.     testobj freeallvars
  312.     teststringobj set 1 B
  313.     teststringobj set 2 a
  314.     teststringobj getunicode 1
  315.     teststringobj getunicode 2
  316.     string compare -nocase [teststringobj get 1] [teststringobj get 2]
  317. } 1
  318. test utf-25.4 {Tcl_UniCharNcasecmp} teststringobj {
  319.     testobj freeallvars
  320.     teststringobj set 1 aBcB
  321.     teststringobj set 2 abca
  322.     teststringobj getunicode 1
  323.     teststringobj getunicode 2
  324.     string compare -nocase [teststringobj get 1] [teststringobj get 2]
  325. } 1
  326. # cleanup
  327. ::tcltest::cleanupTests
  328. return