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

通讯编程

开发平台:

Visual C++

  1. # Commands covered: none
  2. #
  3. # This file contains tests for the procedures in tclStringObj.c
  4. # that implement the Tcl type manager for the string type.
  5. #
  6. # Sourcing this file into Tcl runs the tests and generates output for
  7. # errors. No output means no errors were found.
  8. #
  9. # Copyright (c) 1995-1997 Sun Microsystems, Inc.
  10. # Copyright (c) 1998-1999 by Scriptics Corporation.
  11. #
  12. # See the file "license.terms" for information on usage and redistribution
  13. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  14. #
  15. # RCS: @(#) $Id: stringObj.test,v 1.15 2003/02/11 18:46:33 hobbs Exp $
  16. if {[lsearch [namespace children] ::tcltest] == -1} {
  17.     package require tcltest
  18.     namespace import -force ::tcltest::*
  19. }
  20. if {[info commands testobj] == {}} {
  21.     puts "This application hasn't been compiled with the "testobj""
  22.     puts "command, so I can't test the Tcl type and object support."
  23.     ::tcltest::cleanupTests
  24.     return
  25. }
  26. test stringObj-1.1 {string type registration} {
  27.     set t [testobj types]
  28.     set first [string first "string" $t]
  29.     set result [expr {$first != -1}]
  30. } {1}
  31. test stringObj-2.1 {Tcl_NewStringObj} {
  32.     set result ""
  33.     lappend result [testobj freeallvars]
  34.     lappend result [teststringobj set 1 abcd]
  35.     lappend result [testobj type 1]
  36.     lappend result [testobj refcount 1]
  37. } {{} abcd string 2}
  38. test stringObj-3.1 {Tcl_SetStringObj, existing "empty string" object} {
  39.     set result ""
  40.     lappend result [testobj freeallvars]
  41.     lappend result [testobj newobj 1]
  42.     lappend result [teststringobj set 1 xyz] ;# makes existing obj a string
  43.     lappend result [testobj type 1]
  44.     lappend result [testobj refcount 1]
  45. } {{} {} xyz string 2}
  46. test stringObj-3.2 {Tcl_SetStringObj, existing non-"empty string" object} {
  47.     set result ""
  48.     lappend result [testobj freeallvars]
  49.     lappend result [testintobj set 1 512]
  50.     lappend result [teststringobj set 1 foo]  ;# makes existing obj a string
  51.     lappend result [testobj type 1]
  52.     lappend result [testobj refcount 1]
  53. } {{} 512 foo string 2}
  54. test stringObj-4.1 {Tcl_SetObjLength procedure, string gets shorter} {
  55.     testobj freeallvars
  56.     teststringobj set 1 test
  57.     teststringobj setlength 1 3
  58.     list [teststringobj length 1] [teststringobj length2 1] 
  59.     [teststringobj get 1]
  60. } {3 4 tes}
  61. test stringObj-4.2 {Tcl_SetObjLength procedure, string gets longer} {
  62.     testobj freeallvars
  63.     teststringobj set 1 abcdef
  64.     teststringobj setlength 1 10
  65.     list [teststringobj length 1] [teststringobj length2 1]
  66. } {10 10}
  67. test stringObj-4.3 {Tcl_SetObjLength procedure, string gets longer} {
  68.     testobj freeallvars
  69.     teststringobj set 1 abcdef
  70.     teststringobj append 1 xyzq -1
  71.     list [teststringobj length 1] [teststringobj length2 1] 
  72.     [teststringobj get 1]
  73. } {10 20 abcdefxyzq}
  74. test stringObj-4.4 {Tcl_SetObjLength procedure, "expty string", length 0} {
  75.     testobj freeallvars
  76.     testobj newobj 1
  77.     teststringobj setlength 1 0
  78.     list [teststringobj length2 1] [teststringobj get 1]
  79. } {0 {}}
  80. test stringObj-5.1 {Tcl_AppendToObj procedure, type conversion} {
  81.     testobj freeallvars
  82.     testintobj set2 1 43
  83.     teststringobj append 1 xyz -1
  84.     teststringobj get 1
  85. } {43xyz}
  86. test stringObj-5.2 {Tcl_AppendToObj procedure, length calculation} {
  87.     testobj freeallvars
  88.     teststringobj set 1 {x y }
  89.     teststringobj append 1 bbCCddEE 4
  90.     teststringobj append 1 123 -1
  91.     teststringobj get 1
  92. } {x y bbCC123}
  93. test stringObj-5.3 {Tcl_AppendToObj procedure, reallocating space} {
  94.     testobj freeallvars
  95.     teststringobj set 1 xyz
  96.     teststringobj setlength 1 15
  97.     teststringobj setlength 1 2
  98.     set result {}
  99.     teststringobj append 1 1234567890123 -1
  100.     lappend result [teststringobj length 1] [teststringobj length2 1]
  101.     teststringobj setlength 1 10
  102.     teststringobj append 1 abcdef -1
  103.     lappend result [teststringobj length 1] [teststringobj length2 1] 
  104.     [teststringobj get 1]
  105. } {15 15 16 32 xy12345678abcdef}
  106. test stringObj-6.1 {Tcl_AppendStringsToObj procedure, type conversion} {
  107.     testobj freeallvars
  108.     teststringobj set2 1 [list a b]
  109.     teststringobj appendstrings 1 xyz { 1234 } foo
  110.     teststringobj get 1
  111. } {a bxyz 1234 foo}
  112. test stringObj-6.2 {Tcl_AppendStringsToObj procedure, counting space} {
  113.     testobj freeallvars
  114.     teststringobj set 1 abc
  115.     teststringobj appendstrings 1
  116.     list [teststringobj length 1] [teststringobj get 1]
  117. } {3 abc}
  118. test stringObj-6.3 {Tcl_AppendStringsToObj procedure, counting space} {
  119.     testobj freeallvars
  120.     teststringobj set 1 abc
  121.     teststringobj appendstrings 1 {} {} {} {}
  122.     list [teststringobj length 1] [teststringobj get 1]
  123. } {3 abc}
  124. test stringObj-6.4 {Tcl_AppendStringsToObj procedure, counting space} {
  125.     testobj freeallvars
  126.     teststringobj set 1 abc
  127.     teststringobj appendstrings 1 { 123 } abcdefg
  128.     list [teststringobj length 1] [teststringobj get 1]
  129. } {15 {abc 123 abcdefg}}
  130. test stringObj-6.5 {Tcl_AppendStringsToObj procedure, don't double space if initial string empty} {
  131.     testobj freeallvars
  132.     testobj newobj 1
  133.     teststringobj appendstrings 1 123 abcdefg
  134.     list [teststringobj length 1] [teststringobj length2 1] [teststringobj get 1]
  135. } {10 10 123abcdefg}
  136. test stringObj-6.6 {Tcl_AppendStringsToObj procedure, space reallocation} {
  137.     testobj freeallvars
  138.     teststringobj set 1 abc
  139.     teststringobj setlength 1 10
  140.     teststringobj setlength 1 2
  141.     teststringobj appendstrings 1 34567890
  142.     list [teststringobj length 1] [teststringobj length2 1] 
  143.     [teststringobj get 1]
  144. } {10 10 ab34567890}
  145. test stringObj-6.7 {Tcl_AppendStringsToObj procedure, space reallocation} {
  146.     testobj freeallvars
  147.     teststringobj set 1 abc
  148.     teststringobj setlength 1 10
  149.     teststringobj setlength 1 2
  150.     teststringobj appendstrings 1 34567890x
  151.     list [teststringobj length 1] [teststringobj length2 1] 
  152.     [teststringobj get 1]
  153. } {11 22 ab34567890x}
  154. test stringObj-6.8 {Tcl_AppendStringsToObj procedure, object totally empty} {
  155.     testobj freeallvars
  156.     testobj newobj 1
  157.     teststringobj appendstrings 1 {}
  158.     list [teststringobj length2 1] [teststringobj get 1]
  159. } {0 {}}
  160. test stringObj-7.1 {SetStringFromAny procedure} {
  161.     testobj freeallvars
  162.     teststringobj set2 1 [list a b]
  163.     teststringobj append 1 x -1
  164.     list [teststringobj length 1] [teststringobj length2 1] 
  165.     [teststringobj get 1]
  166. } {4 8 {a bx}}
  167. test stringObj-7.2 {SetStringFromAny procedure, null object} {
  168.     testobj freeallvars
  169.     testobj newobj 1
  170.     teststringobj appendstrings 1 {}
  171.     list [teststringobj length 1] [teststringobj length2 1] 
  172.     [teststringobj get 1]
  173. } {0 0 {}}
  174. test stringObj-7.3 {SetStringFromAny called with non-string obj} {
  175.     set x 2345
  176.     list [incr x] [testobj objtype $x] [string index $x end] 
  177.     [testobj objtype $x]
  178. } {2346 int 6 string}
  179. test stringObj-7.4 {SetStringFromAny called with string obj} {
  180.     set x "abcdef"
  181.     list [string length $x] [testobj objtype $x] 
  182.     [string length $x] [testobj objtype $x]
  183. } {6 string 6 string}
  184. test stringObj-8.1 {DupStringInternalRep procedure} {
  185.     testobj freeallvars
  186.     teststringobj set 1 {}
  187.     teststringobj append 1 abcde -1
  188.     testobj duplicate 1 2
  189.     list [teststringobj length 1] [teststringobj length2 1] 
  190.     [teststringobj ualloc 1] [teststringobj get 1] 
  191.     [teststringobj length 2] [teststringobj length2 2] 
  192.     [teststringobj ualloc 2] [teststringobj get 2]
  193. } {5 10 0 abcde 5 5 0 abcde}
  194. test stringObj-8.2 {DupUnicodeInternalRep, mixed width chars} {
  195.     set x abc锟甮hi
  196.     string length $x
  197.     set y $x
  198.     list [testobj objtype $x] [testobj objtype $y] [append x "