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

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test out Tk's selection management code,
  2. # especially the "selection" command.  It is organized in the standard
  3. # fashion for Tcl tests.
  4. #
  5. # Copyright (c) 1994 Sun Microsystems, Inc.
  6. # Copyright (c) 1998-1999 by Scriptics Corporation.
  7. # All rights reserved.
  8. #
  9. # RCS: @(#) $Id: select.test,v 1.9.2.1 2005/11/22 11:32:37 dkf Exp $
  10. #
  11. # Note: Multiple display selection handling will only be tested if the
  12. # environment variable TK_ALT_DISPLAY is set to an alternate display.
  13. #
  14. package require tcltest 2.1
  15. namespace import -force tcltest::configure
  16. namespace import -force tcltest::testsDirectory
  17. configure -testdir [file join [pwd] [file dirname [info script]]]
  18. configure -loadfile [file join [testsDirectory] constraints.tcl]
  19. tcltest::loadTestedCommands
  20. namespace import -force tcltest::interpreter
  21. global longValue selValue selInfo
  22. set selValue {}
  23. set selInfo {}
  24. proc handler {type offset count} {
  25.     global selValue selInfo
  26.     lappend selInfo $type $offset $count
  27.     set numBytes [expr {[string length $selValue] - $offset}]
  28.     if {$numBytes <= 0} {
  29. return ""
  30.     }
  31.     string range $selValue $offset [expr $numBytes+$offset]
  32. }
  33. proc errIncrHandler {type offset count} {
  34.     global selValue selInfo pass
  35.     if {$offset == 4000} {
  36. if {$pass == 0} {
  37.     # Just sizing the selection;  don't do anything here.
  38.     set pass 1
  39. } else {
  40.     # Fetching the selection;  wait long enough to cause a timeout.
  41.     after 6000
  42. }
  43.     }
  44.     lappend selInfo $type $offset $count
  45.     set numBytes [expr {[string length $selValue] - $offset}]
  46.     if {$numBytes <= 0} {
  47. return ""
  48.     }
  49.     string range $selValue $offset [expr $numBytes+$offset]
  50. }
  51. proc errHandler args {
  52.     error "selection handler aborted"
  53. }
  54. proc badHandler {path type offset count} {
  55.     global selValue selInfo
  56.     selection handle -type $type $path {}
  57.     lappend selInfo $path $type $offset $count
  58.     set numBytes [expr {[string length $selValue] - $offset}]
  59.     if {$numBytes <= 0} {
  60. return ""
  61.     }
  62.     string range $selValue $offset [expr $numBytes+$offset]
  63. }
  64. proc reallyBadHandler {path type offset count} {
  65.     global selValue selInfo pass
  66.     if {$offset == 4000} {
  67. if {$pass == 0} {
  68.     set pass 1
  69. } else {
  70.     selection handle -type $type $path {}
  71. }
  72.     }
  73.     lappend selInfo $path $type $offset $count
  74.     set numBytes [expr {[string length $selValue] - $offset}]
  75.     if {$numBytes <= 0} {
  76. return ""
  77.     }
  78.     string range $selValue $offset [expr $numBytes+$offset]
  79. }
  80. # Eliminate any existing selection on the screen.  This is needed in case
  81. # there is a selection in some other application, in order to prevent races
  82. # from causing false errors in the tests below.
  83. selection clear .
  84. after 1500
  85. # common setup code
  86. proc setup {{path .f1} {display {}}} {
  87.     catch {destroy $path}
  88.     if {$display == {}} {
  89. frame $path
  90.     } else {
  91. toplevel $path -screen $display
  92. wm geom $path +0+0
  93.     }
  94.     selection own $path
  95. }
  96. # set up a very large buffer to test INCR retrievals
  97. set longValue ""
  98. 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} {
  99.     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
  100.     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
  101. }
  102. # Now we start the main body of the test code
  103. test select-1.1 {Tk_CreateSelHandler procedure} {
  104.     setup
  105.     lsort [selection get TARGETS]
  106. } {MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW}
  107. test select-1.2 {Tk_CreateSelHandler procedure} {
  108.     setup
  109.     selection handle .f1 {handler TEST} TEST
  110.     lsort [selection get TARGETS]
  111. } {MULTIPLE TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}
  112. test select-1.3 {Tk_CreateSelHandler procedure} {
  113.     global selValue selInfo
  114.     setup
  115.     selection handle .f1 {handler TEST} TEST
  116.     set selValue "Test value"
  117.     set selInfo ""
  118.     list [selection get TEST] $selInfo
  119. } {{Test value} {TEST 0 4000}}
  120. test select-1.4.1 {Tk_CreateSelHandler procedure} {unixOnly} {
  121.     setup
  122.     selection handle .f1 {handler TEST} TEST
  123.     selection handle .f1 {handler STRING}
  124.     lsort [selection get TARGETS]
  125. } {MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW UTF8_STRING}
  126. test select-1.4.2 {Tk_CreateSelHandler procedure} {macOrPc} {
  127.     setup
  128.     selection handle .f1 {handler TEST} TEST
  129.     selection handle .f1 {handler STRING}
  130.     lsort [selection get TARGETS]
  131. } {MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}
  132. test select-1.5 {Tk_CreateSelHandler procedure} {
  133.     global selValue selInfo
  134.     setup
  135.     selection handle .f1 {handler TEST} TEST
  136.     selection handle .f1 {handler STRING}
  137.     set selValue ""
  138.     set selInfo ""
  139.     list [selection get] $selInfo
  140. } {{} {STRING 0 4000}}
  141. test select-1.6.1 {Tk_CreateSelHandler procedure} {unixOnly} {
  142.     global selValue selInfo
  143.     setup
  144.     selection handle .f1 {handler TEST} TEST
  145.     selection handle .f1 {handler STRING}
  146.     set selValue ""
  147.     set selInfo ""
  148.     selection get
  149.     selection get -type TEST
  150.     selection handle .f1 {handler TEST2} TEST
  151.     selection get -type TEST
  152.     list [set selInfo] [lsort [selection get TARGETS]]
  153. } {{STRING 0 4000 TEST 0 4000 TEST2 0 4000} {MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW UTF8_STRING}}
  154. test select-1.6.2 {Tk_CreateSelHandler procedure} {macOrPc} {
  155.     global selValue selInfo
  156.     setup
  157.     selection handle .f1 {handler TEST} TEST
  158.     selection handle .f1 {handler STRING}
  159.     set selValue ""
  160.     set selInfo ""
  161.     selection get
  162.     selection get -type TEST
  163.     selection handle .f1 {handler TEST2} TEST
  164.     selection get -type TEST
  165.     list [set selInfo] [lsort [selection get TARGETS]]
  166. } {{STRING 0 4000 TEST 0 4000 TEST2 0 4000} {MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}}
  167. test select-1.7.1 {Tk_CreateSelHandler procedure} {unixOnly} {
  168.     setup
  169.     selection own -selection CLIPBOARD .f1
  170.     selection handle -selection CLIPBOARD .f1 {handler TEST} TEST
  171.     selection handle -selection PRIMARY .f1 {handler TEST2} STRING
  172.     list [lsort [selection get -selection PRIMARY TARGETS]] 
  173. [lsort [selection get -selection CLIPBOARD TARGETS]] 
  174. } {{MULTIPLE STRING TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW UTF8_STRING} {MULTIPLE TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}}
  175. test select-1.7.2 {Tk_CreateSelHandler procedure} {macOrPc} {
  176.     setup
  177.     selection own -selection CLIPBOARD .f1
  178.     selection handle -selection CLIPBOARD .f1 {handler TEST} TEST
  179.     selection handle -selection PRIMARY .f1 {handler TEST2} STRING
  180.     list [lsort [selection get -selection PRIMARY TARGETS]] 
  181. [lsort [selection get -selection CLIPBOARD TARGETS]] 
  182. } {{MULTIPLE STRING TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW} {MULTIPLE TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}}
  183. test select-1.8 {Tk_CreateSelHandler procedure} {
  184.     setup
  185.     selection handle -format INTEGER -type TEST .f1 {handler TEST}
  186.     lsort [selection get TARGETS]
  187. } {MULTIPLE TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}
  188. ##############################################################################
  189. test select-2.1 {Tk_DeleteSelHandler procedure} {unixOnly} {
  190.     setup
  191.     selection handle .f1 {handler STRING} 
  192.     selection handle -type TEST .f1 {handler TEST} 
  193.     selection handle -type USER .f1 {handler USER} 
  194.     set result [list [lsort [selection get TARGETS]]]
  195.     selection handle -type TEST .f1 {}
  196.     lappend result [lsort [selection get TARGETS]]
  197. } {{MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW USER UTF8_STRING} {MULTIPLE STRING TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW USER UTF8_STRING}}
  198. test select-2.2 {Tk_DeleteSelHandler procedure} {unixOnly} {
  199.     setup
  200.     selection handle .f1 {handler STRING} 
  201.     selection handle -type TEST .f1 {handler TEST} 
  202.     selection handle -type USER .f1 {handler USER} 
  203.     set result [list [lsort [selection get TARGETS]]]
  204.     selection handle -type USER .f1 {}
  205.     lappend result [lsort [selection get TARGETS]]
  206. } {{MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW USER UTF8_STRING} {MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW UTF8_STRING}}
  207. test select-2.3 {Tk_DeleteSelHandler procedure} {unixOnly} {
  208.     setup
  209.     selection own -selection CLIPBOARD .f1
  210.     selection handle -selection PRIMARY .f1 {handler STRING} 
  211.     selection handle -selection CLIPBOARD .f1 {handler STRING} 
  212.     selection handle -selection CLIPBOARD .f1 {}
  213.     list [lsort [selection get TARGETS]] 
  214. [lsort [selection get -selection CLIPBOARD TARGETS]]
  215. } {{MULTIPLE STRING TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW UTF8_STRING} {MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW}}
  216. test select-2.4 {Tk_DeleteSelHandler procedure} {macOrPc} {
  217.     setup
  218.     selection handle .f1 {handler STRING} 
  219.     selection handle -type TEST .f1 {handler TEST} 
  220.     selection handle -type USER .f1 {handler USER} 
  221.     set result [list [lsort [selection get TARGETS]]]
  222.     selection handle -type TEST .f1 {}
  223.     lappend result [lsort [selection get TARGETS]]
  224. } {{MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW USER} {MULTIPLE STRING TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW USER}}
  225. test select-2.5 {Tk_DeleteSelHandler procedure} {macOrPc} {
  226.     setup
  227.     selection handle .f1 {handler STRING} 
  228.     selection handle -type TEST .f1 {handler TEST} 
  229.     selection handle -type USER .f1 {handler USER} 
  230.     set result [list [lsort [selection get TARGETS]]]
  231.     selection handle -type USER .f1 {}
  232.     lappend result [lsort [selection get TARGETS]]
  233. } {{MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW USER} {MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}}
  234. test select-2.6 {Tk_DeleteSelHandler procedure} {macOrPc} {
  235.     setup
  236.     selection own -selection CLIPBOARD .f1
  237.     selection handle -selection PRIMARY .f1 {handler STRING} 
  238.     selection handle -selection CLIPBOARD .f1 {handler STRING} 
  239.     selection handle -selection CLIPBOARD .f1 {}
  240.     list [lsort [selection get TARGETS]] 
  241. [lsort [selection get -selection CLIPBOARD TARGETS]]
  242. } {{MULTIPLE STRING TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW} {MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW}}
  243. test select-2.7 {Tk_DeleteSelHandler procedure} {
  244.     setup
  245.     selection handle .f1 {handler STRING}
  246.     list [selection handle .f1 {}] [selection handle .f1 {}]
  247. } {{} {}}   
  248. ##############################################################################
  249. test select-3.1 {Tk_OwnSelection procedure} {
  250.     setup
  251.     selection own
  252. } {.f1}
  253. test select-3.2 {Tk_OwnSelection procedure} {
  254.     setup .f1
  255.     set result [selection own]
  256.     setup .f2
  257.     lappend result [selection own]
  258. } {.f1 .f2}
  259. test select-3.3 {Tk_OwnSelection procedure} {
  260.     setup .f1
  261.     setup .f2
  262.     selection own -selection CLIPBOARD .f1
  263.     list [selection own] [selection own -selection CLIPBOARD]
  264. } {.f2 .f1}
  265. test select-3.4 {Tk_OwnSelection procedure} {
  266.     global lostSel
  267.     setup
  268.     set lostSel {owned}
  269.     selection own -command { set lostSel {lost} } .f1
  270.     selection clear .f1
  271.     set lostSel
  272. } {lost}
  273. test select-3.5 {Tk_OwnSelection procedure} {
  274.     global lostSel
  275.     setup .f1
  276.     setup .f2
  277.     set lostSel {owned}
  278.     selection own -command { set lostSel {lost1} } .f1
  279.     selection own -command { set lostSel {lost2} } .f2
  280.     list $lostSel [selection own]
  281. } {lost1 .f2}
  282. test select-3.6 {Tk_OwnSelection procedure} {
  283.     global lostSel
  284.     setup
  285.     set lostSel {owned}
  286.     selection own -command { set lostSel {lost1} } .f1
  287.     selection own -command { set lostSel {lost2} } .f1
  288.     set result $lostSel
  289.     selection clear .f1
  290.     lappend result $lostSel
  291. } {owned lost2}
  292. test select-3.7 {Tk_OwnSelection procedure} {unixOnly} {
  293.     global lostSel
  294.     setup
  295.     setupbg
  296.     set lostSel {owned}
  297.     selection own -command { set lostSel {lost1} } .f1
  298.     update
  299.     set result {}
  300.     lappend result [dobg { selection own . }]
  301.     lappend result [dobg {selection own}]
  302.     update
  303.     cleanupbg
  304.     lappend result $lostSel
  305. } {{} . lost1}
  306. # check reentrancy on selection replacement
  307. test select-3.8 {Tk_OwnSelection procedure} {
  308.     setup
  309.     selection own -selection CLIPBOARD -command { destroy .f1 } .f1
  310.     selection own -selection CLIPBOARD .
  311. } {}
  312. test select-3.9 {Tk_OwnSelection procedure} {
  313.     setup .f2
  314.     setup .f1
  315.     selection own -selection CLIPBOARD -command { destroy .f2 } .f1
  316.     selection own -selection CLIPBOARD .f2
  317. } {}
  318. # multiple display tests
  319. test select-3.10 {Tk_OwnSelection procedure} {altDisplay} {
  320.     setup .f1
  321.     setup .f2 $env(TK_ALT_DISPLAY)
  322.     list [selection own -displayof .f1] [selection own -displayof .f2]
  323. } {.f1 .f2}
  324. test select-3.11 {Tk_OwnSelection procedure} {altDisplay} {
  325.     setup .f1
  326.     setup .f2 $env(TK_ALT_DISPLAY)
  327.     setupbg
  328.     update
  329.     set result ""
  330.     lappend result [dobg "toplevel .t -screen $env(TK_ALT_DISPLAY); wm geom .t +0+0; selection own .t; update"]
  331.     lappend result [selection own -displayof .f1] 
  332.     [selection own -displayof .f2]
  333.     cleanupbg
  334.     set result
  335. } {{} .f1 {}}
  336. ##############################################################################
  337. test select-4.1 {Tk_ClearSelection procedure} {
  338.     setup
  339.     set result [selection own]
  340.     selection clear .f1
  341.     lappend result [selection own]
  342. } {.f1 {}}
  343. test select-4.2 {Tk_ClearSelection procedure} {
  344.     setup
  345.     selection own -selection CLIPBOARD .f1
  346.     selection clear .f1
  347.     selection own -selection CLIPBOARD
  348. } {.f1}
  349. test select-4.3 {Tk_ClearSelection procedure} {
  350.     setup
  351.     list [selection clear .f1] [selection clear .f1]
  352. } {{} {}}
  353. test select-4.4 {Tk_ClearSelection procedure} {unixOnly} {
  354.     global lostSel
  355.     setup
  356.     setupbg
  357.     set lostSel {owned}
  358.     selection own -command { set lostSel {lost1} } .f1
  359.     update
  360.     set result {}
  361.     lappend result [dobg {selection clear; update}]
  362.     update
  363.     cleanupbg
  364.     lappend result [selection own]
  365. } {{} {}}
  366. # multiple display tests
  367. test select-4.5 {Tk_ClearSelection procedure} {altDisplay} {
  368.     global lostSel lostSel2
  369.     setup .f1
  370.     setup .f2 $env(TK_ALT_DISPLAY)
  371.     set lostSel {owned}
  372.     set lostSel2 {owned2}
  373.     selection own -command { set lostSel {lost1} } .f1
  374.     selection own -command { set lostSel2 {lost2} } .f2
  375.     update
  376.     selection clear -displayof .f2
  377.     update
  378.     list $lostSel $lostSel2
  379. } {owned lost2}
  380. test select-4.6 {Tk_ClearSelection procedure} {unixOnly altDisplay} {
  381.     setup .f1
  382.     setup .f2 $env(TK_ALT_DISPLAY)
  383.     setupbg
  384.     set lostSel {owned}
  385.     set lostSel2 {owned2}
  386.     selection own -command { set lostSel {lost1} } .f1
  387.     selection own -command { set lostSel2 {lost2} } .f2
  388.     update
  389.     set result ""
  390.     lappend result [dobg "toplevel .t -screen $env(TK_ALT_DISPLAY); wm geom .t +0+0; selection own .t; update"]
  391.     lappend result [selection own -displayof .f1] 
  392.     [selection own -displayof .f2] $lostSel $lostSel2
  393.     cleanupbg
  394.     set result
  395. } {{} .f1 {} owned lost2}
  396. ##############################################################################
  397. test select-5.1 {Tk_GetSelection procedure} {
  398.     setup
  399.     list [catch {selection get TEST} msg] $msg
  400. } {1 {PRIMARY selection doesn't exist or form "TEST" not defined}}
  401. test select-5.2 {Tk_GetSelection procedure} {
  402.     setup
  403.     selection get TK_WINDOW
  404. } {.f1}
  405. test select-5.3 {Tk_GetSelection procedure} {
  406.     setup
  407.     selection handle -selection PRIMARY .f1 {handler TEST} TEST
  408.     set selValue "Test value"
  409.     set selInfo ""
  410.     list [selection get TEST] $selInfo
  411. } {{Test value} {TEST 0 4000}}
  412. test select-5.4 {Tk_GetSelection procedure} {
  413.     setup
  414.     selection handle .f1 ERROR errHandler
  415.     list [catch {selection get ERROR} msg] $msg
  416. } {1 {PRIMARY selection doesn't exist or form "ERROR" not defined}}
  417. test select-5.5 {Tk_GetSelection procedure} {
  418.     setup
  419.     set selValue $longValue
  420.     set selInfo ""
  421.     selection handle .f1 {handler STRING}
  422.     list [selection get] $selInfo
  423. } "$longValue {STRING 0 4000 STRING 4000 4000 STRING 8000 4000 STRING 12000 4000 STRING 16000 4000}"
  424. test select-5.6 {Tk_GetSelection procedure} {
  425.     proc weirdHandler {type offset count} {
  426. selection handle .f1 {}
  427. handler $type $offset $count
  428.     }
  429.     setup
  430.     set selValue $longValue
  431.     set selInfo ""
  432.     selection handle .f1 {weirdHandler STRING}
  433.     list [catch {selection get} msg] $msg
  434. } {1 {PRIMARY selection doesn't exist or form "STRING" not defined}}
  435. test select-5.7 {Tk_GetSelection procedure} {
  436.     proc weirdHandler {type offset count} {
  437. destroy .f1
  438. handler $type $offset $count
  439.     }
  440.     setup
  441.     set selValue "Test Value"
  442.     set selInfo ""
  443.     selection handle .f1 {weirdHandler STRING}
  444.     list [catch {selection get} msg] $msg
  445. } {1 {PRIMARY selection doesn't exist or form "STRING" not defined}}
  446. test select-5.8 {Tk_GetSelection procedure} {
  447.     proc weirdHandler {type offset count} {
  448. selection clear
  449. handler $type $offset $count
  450.     }
  451.     setup
  452.     set selValue $longValue
  453.     set selInfo ""
  454.     selection handle .f1 {weirdHandler STRING}
  455.     list [selection get] $selInfo [catch {selection get} msg] $msg
  456. } "$longValue {STRING 0 4000 STRING 4000 4000 STRING 8000 4000 STRING 12000 4000 STRING 16000 4000} 1 {PRIMARY selection doesn't exist or form "STRING" not defined}"
  457. test select-5.9 {Tk_GetSelection procedure} {unixOnly} {
  458.     setup
  459.     setupbg
  460.     selection handle -selection PRIMARY .f1 {handler TEST} TEST
  461.     update
  462.     set selValue "Test value"
  463.     set selInfo ""
  464.     set result ""
  465.     lappend result [dobg {selection get TEST}]
  466.     cleanupbg
  467.     lappend result $selInfo
  468. } {{Test value} {TEST 0 4000}}
  469. test select-5.10 {Tk_GetSelection procedure} {unixOnly} {
  470.     setup
  471.     setupbg
  472.     selection handle -selection PRIMARY .f1 {handler TEST} TEST
  473.     update
  474.     set selValue "Test value"
  475.     set selInfo ""
  476.     selection own .f1
  477.     set result ""
  478.     lappend result [dobg {selection get TEST} 1]
  479.     cleanupbg
  480.     lappend result $selInfo
  481. } {{selection owner didn't respond} {}}
  482. # multiple display tests
  483. test select-5.11 {Tk_GetSelection procedure} {altDisplay} {
  484.     setup .f1
  485.     setup .f2 $env(TK_ALT_DISPLAY)
  486.     selection handle -selection PRIMARY .f1 {handler TEST} TEST
  487.     selection handle -selection PRIMARY .f2 {handler TEST2} TEST
  488.     set selValue "Test value"
  489.     set selInfo ""
  490.     set result [list [selection get TEST] $selInfo]
  491.     set selValue "Test value2"
  492.     set selInfo ""
  493.     lappend result [selection get -displayof .f2 TEST] $selInfo
  494. } {{Test value} {TEST 0 4000} {Test value2} {TEST2 0 4000}}
  495. test select-5.12 {Tk_GetSelection procedure} {altDisplay} {
  496.     global lostSel lostSel2
  497.     setup .f1
  498.     setup .f2 $env(TK_ALT_DISPLAY)
  499.     selection handle -selection PRIMARY .f1 {handler TEST} TEST
  500.     selection handle -selection PRIMARY .f2 {} TEST
  501.     set selValue "Test value"
  502.     set selInfo ""
  503.     set result [list [catch {selection get TEST} msg] $msg $selInfo]
  504.     set selValue "Test value2"
  505.     set selInfo ""
  506.     lappend result [catch {selection get -displayof .f2 TEST} msg] $msg 
  507.     $selInfo
  508. } {0 {Test value} {TEST 0 4000} 1 {PRIMARY selection doesn't exist or form "TEST" not defined} {}}
  509. test select-5.13 {Tk_GetSelection procedure} {unixOnly altDisplay} {
  510.     setup .f1
  511.     setup .f2 $env(TK_ALT_DISPLAY)
  512.     setupbg
  513.     selection handle -selection PRIMARY .f1 {handler TEST} TEST
  514.     selection own .f1
  515.     selection handle -selection PRIMARY .f2 {handler TEST2} TEST
  516.     selection own .f2
  517.     set selValue "Test value"
  518.     set selInfo ""
  519.     update
  520.     set result ""
  521.     lappend result [dobg "toplevel .t -screen $env(TK_ALT_DISPLAY); wm geom .t +0+0; selection get -displayof .t TEST"]
  522.     set selValue "Test value2"
  523.     lappend result [dobg "selection get TEST"]
  524.     cleanupbg
  525.     lappend result $selInfo
  526. } {{Test value} {Test value2} {TEST2 0 4000 TEST 0 4000}}
  527. test select-5.14 {Tk_GetSelection procedure} {unixOnly altDisplay} {
  528.     setup .f1
  529.     setup .f2 $env(TK_ALT_DISPLAY)
  530.     setupbg
  531.     selection handle -selection PRIMARY .f1 {handler TEST} TEST
  532.     selection own .f1
  533.     selection handle -selection PRIMARY .f2 {} TEST
  534.     selection own .f2
  535.     set selValue "Test value"
  536.     set selInfo ""
  537.     update
  538.     set result ""
  539.     lappend result [dobg "toplevel .t -screen $env(TK_ALT_DISPLAY); wm geom .t +0+0; selection get -displayof .t TEST"]
  540.     set selValue "Test value2"
  541.     lappend result [dobg "selection get TEST"]
  542.     cleanupbg
  543.     lappend result $selInfo
  544. } {{PRIMARY selection doesn't exist or form "TEST" not defined} {Test value2} {TEST 0 4000}}
  545. ##############################################################################
  546. test select-6.1 {Tk_SelectionCmd procedure} {
  547.     list [catch {selection} cmd] $cmd
  548. } {1 {wrong # args: should be "selection option ?arg arg ...?"}}
  549. # selection clear
  550. test select-6.2 {Tk_SelectionCmd procedure} {
  551.     list [catch {selection clear -selection} cmd] $cmd
  552. } {1 {value for "-selection" missing}}
  553. test select-6.3 {Tk_SelectionCmd procedure} {
  554.     setup
  555.     selection own .
  556.     set result [selection own]
  557.     selection clear -displayof .f1
  558.     lappend result [selection own]
  559. } {. {}}
  560. test select-6.4 {Tk_SelectionCmd procedure} {
  561.     setup
  562.     selection own -selection CLIPBOARD .f1
  563.     set result [list [selection own] [selection own -selection CLIPBOARD]]
  564.     selection clear -selection CLIPBOARD .f1
  565.     lappend result [selection own] [selection own -selection CLIPBOARD]
  566. } {.f1 .f1 .f1 {}}
  567. test select-6.5 {Tk_SelectionCmd procedure} {
  568.     setup
  569.     selection own -selection CLIPBOARD .
  570.     set result [list [selection own] [selection own -selection CLIPBOARD]]
  571.     selection clear -selection CLIPBOARD -displayof .f1
  572.     lappend result [selection own] [selection own -selection CLIPBOARD]
  573. } {.f1 . .f1 {}}
  574. test select-6.6 {Tk_SelectionCmd procedure} {
  575.     list [catch {selection clear -badopt foo} cmd] $cmd
  576. } {1 {bad option "-badopt": must be -displayof or -selection}}
  577. test select-6.7 {Tk_SelectionCmd procedure} {
  578.     list [catch {selection clear -selectionfoo foo} cmd] $cmd
  579. } {1 {bad option "-selectionfoo": must be -displayof or -selection}}
  580. test select-6.8 {Tk_SelectionCmd procedure} {
  581.     catch {destroy .f2}
  582.     list [catch {selection clear -displayof .f2} cmd] $cmd
  583. } {1 {bad window path name ".f2"}}
  584. test select-6.9 {Tk_SelectionCmd procedure} {
  585.     catch {destroy .f2}
  586.     list [catch {selection clear .f2} cmd] $cmd
  587. } {1 {bad window path name ".f2"}}
  588. test select-6.10 {Tk_SelectionCmd procedure} {
  589.     setup
  590.     set result [selection own -selection PRIMARY]
  591.     selection clear
  592.     lappend result [selection own -selection PRIMARY]
  593. } {.f1 {}}
  594. test select-6.11 {Tk_SelectionCmd procedure} {
  595.     setup
  596.     selection own -selection CLIPBOARD .f1
  597.     set result [selection own -selection CLIPBOARD]
  598.     selection clear -selection CLIPBOARD
  599.     lappend result [selection own -selection CLIPBOARD]
  600. } {.f1 {}}
  601. test select-6.12 {Tk_SelectionCmd procedure} {
  602.     list [catch {selection clear foo bar} cmd] $cmd
  603. } {1 {wrong # args: should be "selection clear ?options?"}}
  604. # selection get
  605. test select-6.13 {Tk_SelectionCmd procedure} {
  606.     list [catch {selection get -selection} cmd] $cmd
  607. } {1 {value for "-selection" missing}}
  608. test select-6.14 {Tk_SelectionCmd procedure} {
  609.     global selValue selInfo
  610.     setup
  611.     selection handle .f1 {handler TEST}
  612.     set selValue "Test value"
  613.     set selInfo ""
  614.     list [selection get -displayof .f1] $selInfo
  615. } {{Test value} {TEST 0 4000}}
  616. test select-6.15 {Tk_SelectionCmd procedure} {
  617.     global selValue selInfo
  618.     setup
  619.     selection handle .f1 {handler STRING}
  620.     selection handle -selection CLIPBOARD .f1 {handler TEST}
  621.     selection own -selection CLIPBOARD .f1
  622.     set selValue "Test value"
  623.     set selInfo ""
  624.     list [selection get -selection CLIPBOARD] $selInfo
  625. } {{Test value} {TEST 0 4000}}
  626. test select-6.16 {Tk_SelectionCmd procedure} {
  627.     global selValue selInfo
  628.     setup
  629.     selection handle -type TEST .f1 {handler TEST}
  630.     selection handle -type STRING .f1 {handler STRING}
  631.     set selValue "Test value"
  632.     set selInfo ""
  633.     list [selection get -type TEST] $selInfo
  634. } {{Test value} {TEST 0 4000}}
  635. test select-6.17 {Tk_SelectionCmd procedure} {
  636.     list [catch {selection get -badopt foo} cmd] $cmd
  637. } {1 {bad option "-badopt": must be -displayof, -selection, or -type}}
  638. test select-6.18 {Tk_SelectionCmd procedure} {
  639.     list [catch {selection get -selectionfoo foo} cmd] $cmd
  640. } {1 {bad option "-selectionfoo": must be -displayof, -selection, or -type}}
  641. test select-6.19 {Tk_SelectionCmd procedure} {
  642.     catch { destroy .f2 }
  643.     list [catch {selection get -displayof .f2} cmd] $cmd
  644. } {1 {bad window path name ".f2"}}
  645. test select-6.20 {Tk_SelectionCmd procedure} {
  646.     list [catch {selection get foo bar} cmd] $cmd
  647. } {1 {wrong # args: should be "selection get ?options?"}}
  648. test select-6.21 {Tk_SelectionCmd procedure} {
  649.     global selValue selInfo
  650.     setup
  651.     selection handle -type TEST .f1 {handler TEST}
  652.     selection handle -type STRING .f1 {handler STRING}
  653.     set selValue "Test value"
  654.     set selInfo ""
  655.     list [selection get TEST] $selInfo
  656. } {{Test value} {TEST 0 4000}}
  657. # selection handle
  658. # most of the handle section has been covered earlier
  659. test select-6.22 {Tk_SelectionCmd procedure} {
  660.     list [catch {selection handle -selection} cmd] $cmd
  661. } {1 {value for "-selection" missing}}
  662. test select-6.23 {Tk_SelectionCmd procedure} {
  663.     global selValue selInfo
  664.     setup
  665.     set selValue "Test value"
  666.     set selInfo ""
  667.     list [selection handle -format INTEGER .f1 {handler TEST}] [selection get -displayof .f1] $selInfo
  668. } {{} {Test value} {TEST 0 4000}}
  669. test select-6.24 {Tk_SelectionCmd procedure} {
  670.     list [catch {selection handle -badopt foo} cmd] $cmd
  671. } {1 {bad option "-badopt": must be -format, -selection, or -type}}
  672. test select-6.25 {Tk_SelectionCmd procedure} {
  673.     list [catch {selection handle -selectionfoo foo} cmd] $cmd
  674. } {1 {bad option "-selectionfoo": must be -format, -selection, or -type}}
  675. test select-6.26 {Tk_SelectionCmd procedure} {
  676.     list [catch {selection handle} cmd] $cmd
  677. } {1 {wrong # args: should be "selection handle ?options? window command"}}
  678. test select-6.27 {Tk_SelectionCmd procedure} {
  679.     list [catch {selection handle .} cmd] $cmd
  680. } {1 {wrong # args: should be "selection handle ?options? window command"}}
  681. test select-6.28 {Tk_SelectionCmd procedure} {
  682.     list [catch {selection handle . foo bar baz blat} cmd] $cmd
  683. } {1 {wrong # args: should be "selection handle ?options? window command"}}
  684. test select-6.29 {Tk_SelectionCmd procedure} {
  685.     catch { destroy .f2 }
  686.     list [catch {selection handle .f2 dummy} cmd] $cmd
  687. } {1 {bad window path name ".f2"}}
  688. # selection own
  689. test select-6.30 {Tk_SelectionCmd procedure} {
  690.     list [catch {selection own -selection} cmd] $cmd
  691. } {1 {value for "-selection" missing}}
  692. test select-6.31 {Tk_SelectionCmd procedure} {
  693.     setup
  694.     selection own .
  695.     selection own -displayof .f1
  696. } {.}
  697. test select-6.32 {Tk_SelectionCmd procedure} {
  698.     setup
  699.     selection own .
  700.     selection own -selection CLIPBOARD .f1
  701.     list [selection own] [selection own -selection CLIPBOARD]
  702. } {. .f1}
  703. test select-6.33 {Tk_SelectionCmd procedure} {
  704.     global lostSel
  705.     setup
  706.     set lostSel owned
  707.     selection own -command { set lostSel lost } .
  708.     selection own -selection CLIPBOARD .f1
  709.     set result $lostSel
  710.     selection own .f1
  711.     lappend result $lostSel
  712. } {owned lost}
  713. test select-6.34 {Tk_SelectionCmd procedure} {
  714.     list [catch {selection own -badopt foo} cmd] $cmd
  715. } {1 {bad option "-badopt": must be -command, -displayof, or -selection}}
  716. test select-6.35 {Tk_SelectionCmd procedure} {
  717.     list [catch {selection own -selectionfoo foo} cmd] $cmd
  718. } {1 {bad option "-selectionfoo": must be -command, -displayof, or -selection}}
  719. test select-6.36 {Tk_SelectionCmd procedure} {
  720.     catch {destroy .f2}
  721.     list [catch {selection own -displayof .f2} cmd] $cmd
  722. } {1 {bad window path name ".f2"}}
  723. test select-6.37 {Tk_SelectionCmd procedure} {
  724.     catch {destroy .f2}
  725.     list [catch {selection own .f2} cmd] $cmd
  726. } {1 {bad window path name ".f2"}}
  727. test select-6.38 {Tk_SelectionCmd procedure} {
  728.     list [catch {selection own foo bar baz} cmd] $cmd
  729. } {1 {wrong # args: should be "selection own ?options? ?window?"}}
  730. test select-6.39 {Tk_SelectionCmd procedure} {
  731.     list [catch {selection foo} cmd] $cmd
  732. } {1 {bad option "foo": must be clear, get, handle, or own}}
  733. ##############################################################################
  734.     # This test is non-portable because some old X11/News servers ignore
  735.     # a selection request when the window doesn't exist, which causes a
  736.     # different error message.
  737.     test select-7.1 {TkSelDeadWindow procedure} {nonPortable} {
  738. setup
  739. selection handle .f1 { handler TEST }
  740. set result [selection own]
  741. destroy .f1
  742. lappend result [selection own] [catch { selection get } msg] $msg
  743.     } {.f1 {} 1 {PRIMARY selection doesn't exist or form "STRING" not defined}}
  744. ##############################################################################
  745. # Check reentrancy on losing selection
  746. test select-8.1 {TkSelEventProc procedure} {unixOnly} {
  747.     setup
  748.     setupbg
  749.     selection own -selection CLIPBOARD -command { destroy .f1 } .f1
  750.     update
  751.     set result [dobg {selection own -selection CLIPBOARD .}]
  752.     cleanupbg
  753.     set result
  754. } {}
  755. ##############################################################################
  756. test select-9.1 {SelCvtToX and SelCvtFromX procedures} {unixOnly} {
  757.     global selValue selInfo
  758.     setup
  759.     setupbg
  760.     set selValue "1024"
  761.     set selInfo ""
  762.     selection handle -selection PRIMARY -format INTEGER -type TEST 
  763. .f1 {handler TEST}
  764.     update
  765.     set result ""
  766.     lappend result [dobg {selection get TEST}]
  767.     cleanupbg
  768.     lappend result $selInfo
  769. } {0x400 {TEST 0 4000}}
  770. test select-9.2 {SelCvtToX and SelCvtFromX procedures} {unixOnly} {
  771.     global selValue selInfo
  772.     setup
  773.     setupbg
  774.     set selValue "1024 0xffff  2048 -2  "
  775.     set selInfo ""
  776.     selection handle -selection PRIMARY -format INTEGER -type TEST 
  777. .f1 {handler TEST}
  778.     set result ""
  779.     lappend result [dobg {selection get TEST}]
  780.     cleanupbg
  781.     lappend result $selInfo
  782. } {{0x400 0xffff 0x800 0xfffffffe} {TEST 0 4000}}
  783. test select-9.3 {SelCvtToX and SelCvtFromX procedures} {unixOnly} {
  784.     global selValue selInfo
  785.     setup
  786.     setupbg
  787.     set selValue "   "
  788.     set selInfo ""
  789.     selection handle -selection PRIMARY -format INTEGER -type TEST 
  790. .f1 {handler TEST}
  791.     set result ""
  792.     lappend result [dobg {selection get TEST}]
  793.     cleanupbg
  794.     lappend result $selInfo
  795. } {{} {TEST 0 4000}}
  796. test select-9.4 {SelCvtToX and SelCvtFromX procedures} {unixOnly} {
  797.     global selValue selInfo
  798.     setup
  799.     setupbg
  800.     set selValue "16 foobar 32"
  801.     set selInfo ""
  802.     selection handle -selection PRIMARY -format INTEGER -type TEST 
  803. .f1 {handler TEST}
  804.     set result ""
  805.     lappend result [dobg {selection get TEST}]
  806.     cleanupbg
  807.     lappend result $selInfo
  808. } {{0x10 0x0 0x20} {TEST 0 4000}}
  809. test select-9.5 {SelCvtToX and SelCvtFromX procedures} -setup {
  810.     setup
  811.     setupbg
  812. } -constraints unix -body {
  813.     # Ensure that lists of atoms are constructed correctly, even when the
  814.     # atom names have spaces in. [Bug 1353414]
  815.     set selValue "foo bar"
  816.     set selInfo ""
  817.     set selType {text/x-tk-test;detail="foo bar"}
  818.     selection handle -selection PRIMARY -format STRING -type $selType 
  819. .f1 [list handler $selType]
  820.     lsort [dobg {selection get TARGETS}]
  821. } -cleanup {
  822.     cleanupbg
  823. } -result {MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW {text/x-tk-test;detail="foo bar"}}
  824. ##############################################################################
  825. # note, we are not testing MULTIPLE style selections
  826. # most control paths have been exercised above
  827. test select-10.1 {ConvertSelection procedure, race with selection clear} {unixOnly} {
  828.     setup
  829.     proc Ready {fd} {
  830. variable x
  831. lappend x [gets $fd]
  832.     }
  833.     set fd [open "|[list [interpreter] -geometry +0+0 -name tktest]" r+]
  834.     puts $fd "puts foo; flush stdout"
  835.     flush $fd
  836.     gets $fd
  837.     fileevent $fd readable [list Ready $fd]
  838.     set selValue "Just a simple test"
  839.     set selInfo ""
  840.     selection handle .f1 {handler STRING}
  841.     update
  842.     puts $fd {puts "[catch {selection get} msg] $msg"; puts **DONE**; flush stdout}
  843.     flush $fd
  844.     after 200
  845.     selection own .
  846.     set x {}
  847.     vwait [namespace which -variable x]
  848.     puts $fd {exit}
  849.     flush $fd
  850.     close $fd
  851.     lappend x $selInfo
  852. } {{1 PRIMARY selection doesn't exist or form "STRING" not defined} {}}
  853. test select-10.2 {ConvertSelection procedure} {unixOnly} {
  854.     setup
  855.     setupbg
  856.     set selValue [string range $longValue 0 3999]
  857.     set selInfo ""
  858.     selection handle .f1 {handler STRING}
  859.     set result ""
  860.     lappend result [dobg {selection get}]
  861.     cleanupbg
  862.     lappend result $selInfo
  863. } [list [string range $longValue 0 3999] {STRING 0 4000 STRING 4000 4000 STRING 0 4000 STRING 4000 4000}]
  864. test select-10.3 {ConvertSelection procedure} {unixOnly} {
  865.     setup
  866.     setupbg
  867.     selection handle .f1 ERROR errHandler
  868.     set result ""
  869.     lappend result [dobg {selection get ERROR}]
  870.     cleanupbg
  871.     set result
  872. } {{PRIMARY selection doesn't exist or form "ERROR" not defined}}
  873. # testing timers
  874. # This one hangs in Exceed
  875. test select-10.4 {ConvertSelection procedure} {unixOnly noExceed} {
  876.     setup
  877.     setupbg
  878.     set selValue $longValue
  879.     set selInfo ""
  880.     selection handle .f1 {errIncrHandler STRING}
  881.     set result ""
  882.     set pass 0
  883.     lappend result [dobg {selection get}]
  884.     cleanupbg
  885.     lappend result $selInfo
  886. } {{selection owner didn't respond} {STRING 0 4000 STRING 4000 4000 STRING 8000 4000 STRING 12000 4000 STRING 16000 4000 STRING 0 4000 STRING 4000 4000}}
  887. test select-10.5 {ConvertSelection procedure, reentrancy issues} {unixOnly} {
  888.     setup
  889.     setupbg
  890.     set selValue "Test value"
  891.     set selInfo ""
  892.     selection handle -type TEST .f1 { handler TEST }
  893.     selection handle -type STRING .f1 { badHandler .f1 STRING }
  894.     set result ""
  895.     lappend result [dobg {selection get}]
  896.     cleanupbg
  897.     lappend result $selInfo
  898. } {{PRIMARY selection doesn't exist or form "STRING" not defined} {.f1 STRING 0 4000}}
  899. test select-10.6 {ConvertSelection procedure, reentrancy issues} {unixOnly} {
  900.     proc weirdHandler {type offset count} {
  901. destroy .f1
  902. handler $type $offset $count
  903.     }
  904.     setup
  905.     setupbg
  906.     set selValue $longValue
  907.     set selInfo ""
  908.     selection handle .f1 {weirdHandler STRING}
  909.     set result ""
  910.     lappend result [dobg {selection get}]
  911.     cleanupbg
  912.     lappend result $selInfo
  913. } {{PRIMARY selection doesn't exist or form "STRING" not defined} {STRING 0 4000}}
  914. ##############################################################################
  915. # testing reentrancy
  916. test select-11.1 {TkSelPropProc procedure} {unixOnly} {
  917.     setup
  918.     setupbg
  919.     set selValue $longValue
  920.     set selInfo ""
  921.     selection handle -type TEST .f1 { handler TEST }
  922.     selection handle -type STRING .f1 { reallyBadHandler .f1 STRING }
  923.     set result ""
  924.     set pass 0
  925.     lappend result [dobg {selection get}]
  926.     cleanupbg
  927.     lappend result $selInfo
  928. } {{selection owner didn't respond} {.f1 STRING 0 4000 .f1 STRING 4000 4000 .f1 STRING 8000 4000 .f1 STRING 12000 4000 .f1 STRING 16000 4000 .f1 STRING 0 4000 .f1 STRING 4000 4000}}
  929. ##############################################################################
  930. # Note, this assumes we are using CurrentTtime
  931. test select-12.1 {DefaultSelection procedure} {unixOnly} {
  932.     setup
  933.     set result [selection get -type TIMESTAMP]
  934.     setupbg
  935.     lappend result [dobg {selection get -type TIMESTAMP}]
  936.     cleanupbg
  937.     set result
  938. } {0x0 0x0}
  939. test select-12.2 {DefaultSelection procedure} {unixOnly} {
  940.     setup
  941.     set result [lsort [list [selection get -type TARGETS]]]
  942.     setupbg
  943.     lappend result [dobg {lsort [selection get -type TARGETS]}]
  944.     cleanupbg
  945.     set result
  946. } {{MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW} {MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW}}
  947. test select-12.3 {DefaultSelection procedure} {unixOnly} {
  948.     setup
  949.     selection handle .f1 {handler TEST} TEST
  950.     set result [list [lsort [selection get -type TARGETS]]]
  951.     setupbg
  952.     lappend result [dobg {lsort [selection get -type TARGETS]}]
  953.     cleanupbg
  954.     set result
  955. } {{MULTIPLE TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW} {MULTIPLE TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}}
  956. test select-12.4 {DefaultSelection procedure} {unixOnly} {
  957.     setup
  958.     set result ""
  959.     lappend result [selection get -type TK_APPLICATION]
  960.     setupbg
  961.     lappend result [dobg {selection get -type TK_APPLICATION}]
  962.     cleanupbg
  963.     set result
  964. } [list [winfo name .] [winfo name .]]
  965. test select-12.5 {DefaultSelection procedure} {unixOnly} {
  966.     setup
  967.     set result [selection get -type TK_WINDOW]
  968.     setupbg
  969.     lappend result [dobg {selection get -type TK_WINDOW}]
  970.     cleanupbg
  971.     set result
  972. } {.f1 .f1}
  973. test select-12.6 {DefaultSelection procedure} {
  974.     global selValue selInfo
  975.     setup
  976.     selection handle .f1 {handler TARGETS.f1} TARGETS
  977.     set selValue "Targets value"
  978.     set selInfo ""
  979.     set result [list [selection get TARGETS] $selInfo]
  980.     selection handle .f1 {} TARGETS
  981.     lappend result [selection get TARGETS]
  982. } {{Targets value} {TARGETS.f1 0 4000} {MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW}}
  983. test select-13.1 {SelectionSize procedure, handler deleted} {unixOnly} {
  984.     proc badHandler {path type offset count} {
  985. global selValue selInfo abortCount
  986. incr abortCount -1
  987. if {$abortCount == 0} {
  988.     selection handle -type $type $path {}
  989. }
  990. lappend selInfo $path $type $offset $count
  991. set numBytes [expr {[string length $selValue] - $offset}]
  992. if {$numBytes <= 0} {
  993.     return ""
  994. }
  995. string range $selValue $offset [expr $numBytes+$offset]
  996.     }
  997.     setup
  998.     setupbg
  999.     set selValue $longValue
  1000.     set selInfo ""
  1001.     selection handle .f1 {badHandler .f1 STRING}
  1002.     set result ""
  1003.     set abortCount 2
  1004.     lappend result [dobg {selection get}]
  1005.     cleanupbg
  1006.     lappend result $selInfo
  1007. } {{PRIMARY selection doesn't exist or form "STRING" not defined} {.f1 STRING 0 4000 .f1 STRING 4000 4000}}
  1008. catch {rename weirdHandler {}}
  1009. # cleanup
  1010. ::tcltest::cleanupTests
  1011. return