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

通讯编程

开发平台:

Visual C++

  1. # This file contains tests for the tkUnixSelect.c file.
  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) 1999 by Scriptics Corporation.
  8. #
  9. # See the file "license.terms" for information on usage and redistribution
  10. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  11. #
  12. # RCS: @(#) $Id: unixSelect.test,v 1.8 2003/01/14 19:24:51 jenglish Exp $
  13. package require tcltest 2.1
  14. namespace import -force tcltest::configure
  15. namespace import -force tcltest::testsDirectory
  16. configure -testdir [file join [pwd] [file dirname [info script]]]
  17. configure -loadfile [file join [testsDirectory] constraints.tcl]
  18. tcltest::loadTestedCommands
  19. global longValue selValue selInfo
  20. set selValue {}
  21. set selInfo {}
  22. proc handler {type offset count} {
  23.     global selValue selInfo
  24.     lappend selInfo $type $offset $count
  25.     set numBytes [expr {[string length $selValue] - $offset}]
  26.     if {$numBytes <= 0} {
  27. return ""
  28.     }
  29.     string range $selValue $offset [expr $numBytes+$offset]
  30. }
  31. proc errIncrHandler {type offset count} {
  32.     global selValue selInfo pass
  33.     if {$offset == 4000} {
  34. if {$pass == 0} {
  35.     # Just sizing the selection;  don't do anything here.
  36.     set pass 1
  37. } else {
  38.     # Fetching the selection;  wait long enough to cause a timeout.
  39.     after 6000
  40. }
  41.     }
  42.     lappend selInfo $type $offset $count
  43.     set numBytes [expr {[string length $selValue] - $offset}]
  44.     if {$numBytes <= 0} {
  45. return ""
  46.     }
  47.     string range $selValue $offset [expr $numBytes+$offset]
  48. }
  49. proc errHandler args {
  50.     error "selection handler aborted"
  51. }
  52. proc badHandler {path type offset count} {
  53.     global selValue selInfo
  54.     selection handle -type $type $path {}
  55.     lappend selInfo $path $type $offset $count
  56.     set numBytes [expr {[string length $selValue] - $offset}]
  57.     if {$numBytes <= 0} {
  58. return ""
  59.     }
  60.     string range $selValue $offset [expr $numBytes+$offset]
  61. }
  62. proc reallyBadHandler {path type offset count} {
  63.     global selValue selInfo pass
  64.     if {$offset == 4000} {
  65. if {$pass == 0} {
  66.     set pass 1
  67. } else {
  68.     selection handle -type $type $path {}
  69. }
  70.     }
  71.     lappend selInfo $path $type $offset $count
  72.     set numBytes [expr {[string length $selValue] - $offset}]
  73.     if {$numBytes <= 0} {
  74. return ""
  75.     }
  76.     string range $selValue $offset [expr $numBytes+$offset]
  77. }
  78. # Eliminate any existing selection on the screen.  This is needed in case
  79. # there is a selection in some other application, in order to prevent races
  80. # from causing false errors in the tests below.
  81. selection clear .
  82. after 1500
  83. # common setup code
  84. proc setup {{path .f1} {display {}}} {
  85.     catch {destroy $path}
  86.     if {$display == {}} {
  87. frame $path
  88.     } else {
  89. toplevel $path -screen $display
  90. wm geom $path +0+0
  91.     }
  92.     selection own $path
  93. }
  94. # set up a very large buffer to test INCR retrievals
  95. set longValue ""
  96. foreach i {a b c d e f g j h i j k l m o p q r s t u v w x y z} {
  97.     set j $i.1$i.2$i.3$i.4$i.5$i.6$i.7$i.8$i.9$i.10$i.11$i.12$i.13$i.14
  98.     append longValue A$j B$j C$j D$j E$j F$j G$j H$j I$j K$j L$j M$j N$j
  99. }
  100. test unixSelect-1.1 {TkSelGetSelection procedure: simple i18n text} {unixOnly} {
  101.     setupbg
  102.     entry .e
  103.     pack .e
  104.     update
  105.     .e insert 0 [encoding convertfrom identity u00fcber]
  106.     .e selection range 0 end
  107.     set result [dobg {string bytelength [selection get]}]
  108.     cleanupbg
  109.     destroy .e
  110.     set result
  111. } {5}
  112. test unixSelect-1.2 {TkSelGetSelection procedure: simple i18n text, iso8859-1} {unixOnly} {
  113.     setupbg
  114.     dobg {
  115. entry .e; pack .e; update
  116. .e insert 0 u00fcu0444
  117. .e selection range 0 end
  118.     }
  119.     set x [selection get]
  120.     cleanupbg
  121.     list [string equal u00fc? $x] 
  122.     [string length $x] [string bytelength $x]
  123. } {1 2 3}
  124. test unixSelect-1.4 {TkSelGetSelection procedure: simple i18n text, iso2022} {unixOnly} {
  125.     setupbg
  126.     setup
  127.     selection handle -type COMPOUND_TEXT -format COMPOUND_TEXT . 
  128.     {handler COMPOUND_TEXT}
  129.     selection own .
  130.     set selValue u00fcu0444
  131.     set selInfo {}
  132.     set result [dobg {
  133. set x [selection get -type COMPOUND_TEXT]
  134. list [string equal u00fcu0444 $x] 
  135. [string length $x] [string bytelength $x]
  136.     }]
  137.     cleanupbg
  138.     lappend result $selInfo
  139. } {1 2 4 {COMPOUND_TEXT 0 4000}}
  140. test unixSelect-1.5 {TkSelGetSelection procedure: INCR i18n text, iso2022} {unixOnly} {
  141.     # This test is subtle.  The selection ends up getting fetched twice by
  142.     # Tk:  once to compute the length, and again to actually send the data.
  143.     # The first time through, we don't convert the data to ISO2022, so the
  144.     # buffer boundaries end up being different in the two passes.
  145.     setupbg
  146.     setup
  147.     selection handle -type COMPOUND_TEXT -format COMPOUND_TEXT . 
  148.     {handler COMPOUND_TEXT}
  149.     selection own .
  150.     set selValue [string repeat x 3999]u00fcu0444[string repeat x 3999]
  151.     set selInfo {}
  152.     set result [dobg {
  153. set x [selection get -type COMPOUND_TEXT]
  154. list [string equal 
  155. [string repeat x 3999]u00fcu0444[string repeat x 3999] $x] 
  156. [string length $x] [string bytelength $x]
  157.     }]
  158.     cleanupbg
  159.     lappend result $selInfo
  160. } {1 8000 8002 {COMPOUND_TEXT 0 4000 COMPOUND_TEXT 4000 3999 COMPOUND_TEXT 7998 4000 COMPOUND_TEXT 0 4000 COMPOUND_TEXT 4000 3998 COMPOUND_TEXT 7997 4000}}
  161. test unixSelect-1.6 {TkSelGetSelection procedure: simple i18n text, iso2022} {unixOnly} {
  162.     setupbg
  163.     setup
  164.     selection handle -type COMPOUND_TEXT -format COMPOUND_TEXT . 
  165.     {handler COMPOUND_TEXT}
  166.     selection own .
  167.     set selValue u00fcu0444
  168.     set selInfo {}
  169.     set result [dobg {
  170. set x [selection get -type COMPOUND_TEXT]
  171. list [string equal u00fcu0444 $x] 
  172. [string length $x] [string bytelength $x]
  173.     }]
  174.     cleanupbg
  175.     lappend result $selInfo
  176. } {1 2 4 {COMPOUND_TEXT 0 4000}}
  177. test unixSelect-1.7 {TkSelGetSelection procedure: INCR i18n text} {unixOnly} {
  178.     setupbg
  179.     dobg "entry .e; pack .e; update
  180.     .e insert 0 [encoding convertfrom identity \u00fcber]$longValue
  181.     .e selection range 0 end"
  182.     set result [string bytelength [selection get]]
  183.     cleanupbg
  184.     set result
  185. } [expr {5 + [string bytelength $longValue]}]
  186. test unixSelect-1.8 {TkSelGetSelection procedure: INCR i18n text} {unixOnly} {
  187.     setupbg
  188.     dobg {
  189. entry .e; pack .e; update
  190. .e insert 0 [string repeat x 3999]u00fc
  191. .e selection range 0 end
  192.     }
  193.     set x [selection get]
  194.     cleanupbg
  195.     list [string equal [string repeat x 3999]u00fc $x] 
  196.     [string length $x] [string bytelength $x]
  197. } {1 4000 4001}
  198. test unixSelect-1.9 {TkSelGetSelection procedure: INCR i18n text} {unixOnly} {
  199.     setupbg
  200.     dobg {
  201. entry .e; pack .e; update
  202. .e insert 0 u00fc[string repeat x 3999]
  203. .e selection range 0 end
  204.     }
  205.     set x [selection get]
  206.     cleanupbg
  207.     list [string equal u00fc[string repeat x 3999] $x] 
  208.     [string length $x] [string bytelength $x]
  209. } {1 4000 4001}
  210. test unixSelect-1.10 {TkSelGetSelection procedure: INCR i18n text} {unixOnly} {
  211.     setupbg
  212.     dobg {
  213. entry .e; pack .e; update
  214. .e insert 0 [string repeat x 3999]u00fc[string repeat x 4000]
  215. .e selection range 0 end
  216.     }
  217.     set x [selection get]
  218.     cleanupbg
  219.     list [string equal [string repeat x 3999]u00fc[string repeat x 4000] $x] 
  220.     [string length $x] [string bytelength $x]
  221. } {1 8000 8001}
  222. # Now some tests to make sure that the right thing is done when
  223. # transferring UTF8 selections, to prevent [Bug 614650] and its ilk
  224. # from rearing its ugly head again.
  225. test unixSelect-1.11 {TkSelGetSelection procedure: INCR i18n text, utf-8} {unixOnly} {
  226.     setupbg
  227.     dobg {
  228. entry .e; pack .e; update
  229. .e insert 0 [string repeat x 3999]u00fc
  230. .e selection range 0 end
  231.     }
  232.     set x [selection get -type UTF8_STRING]
  233.     cleanupbg
  234.     list [string equal [string repeat x 3999]u00fc $x] 
  235.     [string length $x] [string bytelength $x]
  236. } {1 4000 4001}
  237. test unixSelect-1.12 {TkSelGetSelection procedure: INCR i18n text, utf-8} {unixOnly} {
  238.     setupbg
  239.     dobg {
  240. entry .e; pack .e; update
  241. .e insert 0 u00fc[string repeat x 3999]
  242. .e selection range 0 end
  243.     }
  244.     set x [selection get -type UTF8_STRING]
  245.     cleanupbg
  246.     list [string equal u00fc[string repeat x 3999] $x] 
  247.     [string length $x] [string bytelength $x]
  248. } {1 4000 4001}
  249. test unixSelect-1.13 {TkSelGetSelection procedure: INCR i18n text, utf-8} {unixOnly} {
  250.     setupbg
  251.     dobg {
  252. entry .e; pack .e; update
  253. .e insert 0 [string repeat x 3999]u00fc[string repeat x 4000]
  254. .e selection range 0 end
  255.     }
  256.     set x [selection get -type UTF8_STRING]
  257.     cleanupbg
  258.     list [string equal [string repeat x 3999]u00fc[string repeat x 4000] $x] 
  259.     [string length $x] [string bytelength $x]
  260. } {1 8000 8001}
  261. test unixSelect-1.14 {TkSelGetSelection procedure: simple i18n text, utf-8} {unixOnly} {
  262.     setupbg
  263.     entry .e
  264.     pack .e
  265.     update
  266.     .e insert 0 [encoding convertfrom identity u00fcberu0444]
  267.     .e selection range 0 end
  268.     set result [dobg {string bytelength [selection get -type UTF8_STRING]}]
  269.     cleanupbg
  270.     destroy .e
  271.     set result
  272. } {5}
  273. test unixSelect-1.15 {TkSelGetSelection procedure: simple i18n text, utf-8} {unixOnly} {
  274.     setupbg
  275.     dobg {
  276. entry .e; pack .e; update
  277. .e insert 0 u00fcu0444
  278. .e selection range 0 end
  279.     }
  280.     set x [selection get -type UTF8_STRING]
  281.     cleanupbg
  282.     list [string equal u00fcu0444 $x] 
  283.     [string length $x] [string bytelength $x]
  284. } {1 2 4}
  285. test unixSelect-1.16 {TkSelGetSelection procedure: INCR i18n text, utf-8} {unixOnly} {
  286.     setupbg
  287.     dobg {
  288. entry .e; pack .e; update
  289. .e insert 0 [string repeat [string repeat u00c4u00e4 50]n 21]
  290. .e selection range 0 end
  291.     }
  292.     set x [selection get -type UTF8_STRING]
  293.     cleanupbg
  294.     list [string equal [string repeat [string repeat u00c4u00e4 50]n 21] $x] 
  295.     [string length $x] [string bytelength $x]
  296. } {1 2121 4221}
  297. test unixSelect-1.17 {TkSelGetSelection procedure: INCR i18n text, utf-8} {unixOnly} {
  298.     setupbg
  299.     dobg {
  300. entry .e; pack .e; update
  301. .e insert 0 i[string repeat [string repeat u00c4u00e4 50]n 21]
  302. .e selection range 0 end
  303.     }
  304.     set x [selection get -type UTF8_STRING]
  305.     cleanupbg
  306.     list [string equal i[string repeat [string repeat u00c4u00e4 50]n 21] $x] 
  307.     [string length $x] [string bytelength $x]
  308. } {1 2122 4222}
  309. test unixSelect-1.18 {TkSelGetSelection procedure: INCR i18n text, utf-8} {unixOnly} {
  310.     setupbg
  311.     dobg {
  312. text .t; pack .t; update
  313. .t insert 1.0 [string repeat [string repeat u00c4u00e4 50]n 21]
  314. # Has to be selected in a separate stage
  315. .t tag add sel 1.0 21.end+1c
  316.     }
  317.     after 10
  318.     set x [selection get -type UTF8_STRING]
  319.     cleanupbg
  320.     list [string equal [string repeat [string repeat u00c4u00e4 50]n 21] $x] 
  321.     [string length $x] [string bytelength $x]
  322. } {1 2121 4221}
  323. test unixSelect-1.19 {TkSelGetSelection procedure: INCR i18n text, utf-8} {unixOnly} {
  324.     setupbg
  325.     dobg {
  326. text .t; pack .t; update
  327. .t insert 1.0 i[string repeat [string repeat u00c4u00e4 50]n 21]
  328. # Has to be selected in a separate stage
  329. .t tag add sel 1.0 21.end+1c
  330.     }
  331.     after 10
  332.     set x [selection get -type UTF8_STRING]
  333.     cleanupbg
  334.     list [string equal i[string repeat [string repeat u00c4u00e4 50]n 21] $x] 
  335.     [string length $x] [string bytelength $x]
  336. } {1 2122 4222}
  337. test unixSelect-1.20 {Automatic UTF8_STRING support for selection handle} {unixOnly} {
  338.     # See Bug #666346 "Selection handling crashes under KDE 3.0"
  339.     label .l 
  340.     selection handle .l  [list handler STRING]
  341.     set selValue "This is the selection value"
  342.     selection own .l
  343.     set result [selection get -type UTF8_STRING]
  344.     destroy .l
  345.     set result
  346. } "This is the selection value"
  347. # cleanup
  348. ::tcltest::cleanupTests
  349. return