summaryrefslogtreecommitdiffstats
path: root/tests/select.test
diff options
context:
space:
mode:
authorrjohnson <rjohnson@noemail.net>1998-04-01 09:51:45 (GMT)
committerrjohnson <rjohnson@noemail.net>1998-04-01 09:51:45 (GMT)
commit9c5b7f2b7e472536ed2e7c915ead05e2aa264182 (patch)
tree8fb30cb152c4dc191be47fa043d2e6f5ea38c7ba /tests/select.test
parent1d0efcbe267f2c0eb73869862522fb20fb2d63ca (diff)
downloadtk-9c5b7f2b7e472536ed2e7c915ead05e2aa264182.zip
tk-9c5b7f2b7e472536ed2e7c915ead05e2aa264182.tar.gz
tk-9c5b7f2b7e472536ed2e7c915ead05e2aa264182.tar.bz2
Initial revision
FossilOrigin-Name: 2bf55ca9aa942b581137b9f474da5ad9c1480de4
Diffstat (limited to 'tests/select.test')
-rw-r--r--tests/select.test987
1 files changed, 987 insertions, 0 deletions
diff --git a/tests/select.test b/tests/select.test
new file mode 100644
index 0000000..82db030
--- /dev/null
+++ b/tests/select.test
@@ -0,0 +1,987 @@
+# This file is a Tcl script to test out Tk's selection management code,
+# especially the "selection" command. It is organized in the standard
+# fashion for Tcl tests.
+#
+# Copyright (c) 1994 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# SCCS: @(#) select.test 1.17 96/12/09 17:25:48
+
+#
+# Note: Multiple display selection handling will only be tested if the
+# environment variable TK_ALT_DISPLAY is set to an alternate display.
+#
+
+if {[string compare test [info procs test]] == 1} {
+ source defs
+}
+
+eval destroy [winfo child .]
+
+global longValue selValue selInfo
+
+set selValue {}
+set selInfo {}
+
+proc handler {type offset count} {
+ global selValue selInfo
+ lappend selInfo $type $offset $count
+ set numBytes [expr {[string length $selValue] - $offset}]
+ if {$numBytes <= 0} {
+ return ""
+ }
+ string range $selValue $offset [expr $numBytes+$offset]
+}
+
+proc errIncrHandler {type offset count} {
+ global selValue selInfo pass
+ if {$offset == 4000} {
+ if {$pass == 0} {
+ # Just sizing the selection; don't do anything here.
+ set pass 1
+ } else {
+ # Fetching the selection; wait long enough to cause a timeout.
+ after 6000
+ }
+ }
+ lappend selInfo $type $offset $count
+ set numBytes [expr {[string length $selValue] - $offset}]
+ if {$numBytes <= 0} {
+ return ""
+ }
+ string range $selValue $offset [expr $numBytes+$offset]
+}
+
+proc errHandler args {
+ error "selection handler aborted"
+}
+
+proc badHandler {path type offset count} {
+ global selValue selInfo
+ selection handle -type $type $path {}
+ lappend selInfo $path $type $offset $count
+ set numBytes [expr {[string length $selValue] - $offset}]
+ if {$numBytes <= 0} {
+ return ""
+ }
+ string range $selValue $offset [expr $numBytes+$offset]
+}
+proc reallyBadHandler {path type offset count} {
+ global selValue selInfo pass
+ if {$offset == 4000} {
+ if {$pass == 0} {
+ set pass 1
+ } else {
+ selection handle -type $type $path {}
+ }
+ }
+ lappend selInfo $path $type $offset $count
+ set numBytes [expr {[string length $selValue] - $offset}]
+ if {$numBytes <= 0} {
+ return ""
+ }
+ string range $selValue $offset [expr $numBytes+$offset]
+}
+
+# Eliminate any existing selection on the screen. This is needed in case
+# there is a selection in some other application, in order to prevent races
+# from causing false errors in the tests below.
+
+selection clear .
+after 1500
+
+# common setup code
+proc setup {{path .f1} {display {}}} {
+ catch {destroy $path}
+ if {$display == {}} {
+ frame $path
+ } else {
+ toplevel $path -screen $display
+ wm geom $path +0+0
+ }
+ selection own $path
+}
+
+# set up a very large buffer to test INCR retrievals
+set longValue ""
+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} {
+ 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
+ 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
+}
+
+# Now we start the main body of the test code
+
+test select-1.1 {Tk_CreateSelHandler procedure} {
+ setup
+ lsort [selection get TARGETS]
+} {MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW}
+test select-1.2 {Tk_CreateSelHandler procedure} {
+ setup
+ selection handle .f1 {handler TEST} TEST
+ lsort [selection get TARGETS]
+} {MULTIPLE TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}
+test select-1.3 {Tk_CreateSelHandler procedure} {
+ global selValue selInfo
+ setup
+ selection handle .f1 {handler TEST} TEST
+ set selValue "Test value"
+ set selInfo ""
+ list [selection get TEST] $selInfo
+} {{Test value} {TEST 0 4000}}
+test select-1.4 {Tk_CreateSelHandler procedure} {
+ setup
+ selection handle .f1 {handler TEST} TEST
+ selection handle .f1 {handler STRING}
+ lsort [selection get TARGETS]
+} {MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}
+test select-1.5 {Tk_CreateSelHandler procedure} {
+ global selValue selInfo
+ setup
+ selection handle .f1 {handler TEST} TEST
+ selection handle .f1 {handler STRING}
+ set selValue ""
+ set selInfo ""
+ list [selection get] $selInfo
+} {{} {STRING 0 4000}}
+test select-1.6 {Tk_CreateSelHandler procedure} {
+ global selValue selInfo
+ setup
+ selection handle .f1 {handler TEST} TEST
+ selection handle .f1 {handler STRING}
+ set selValue ""
+ set selInfo ""
+ selection get
+ selection get -type TEST
+ selection handle .f1 {handler TEST2} TEST
+ selection get -type TEST
+ list [set selInfo] [lsort [selection get TARGETS]]
+} {{STRING 0 4000 TEST 0 4000 TEST2 0 4000} {MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}}
+test select-1.7 {Tk_CreateSelHandler procedure} {
+ setup
+ selection own -selection CLIPBOARD .f1
+ selection handle -selection CLIPBOARD .f1 {handler TEST} TEST
+ selection handle -selection PRIMARY .f1 {handler TEST2} STRING
+ list [lsort [selection get -selection PRIMARY TARGETS]] \
+ [lsort [selection get -selection CLIPBOARD TARGETS]]
+} {{MULTIPLE STRING TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW} {MULTIPLE TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}}
+test select-1.8 {Tk_CreateSelHandler procedure} {
+ setup
+ selection handle -format INTEGER -type TEST .f1 {handler TEST}
+ lsort [selection get TARGETS]
+} {MULTIPLE TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}
+
+##############################################################################
+
+test select-2.1 {Tk_DeleteSelHandler procedure} {
+ setup
+ selection handle .f1 {handler STRING}
+ selection handle -type TEST .f1 {handler TEST}
+ selection handle -type USER .f1 {handler USER}
+ set result [list [lsort [selection get TARGETS]]]
+ selection handle -type TEST .f1 {}
+ lappend result [lsort [selection get TARGETS]]
+} {{MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW USER} {MULTIPLE STRING TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW USER}}
+test select-2.2 {Tk_DeleteSelHandler procedure} {
+ setup
+ selection handle .f1 {handler STRING}
+ selection handle -type TEST .f1 {handler TEST}
+ selection handle -type USER .f1 {handler USER}
+ set result [list [lsort [selection get TARGETS]]]
+ selection handle -type USER .f1 {}
+ lappend result [lsort [selection get TARGETS]]
+} {{MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW USER} {MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}}
+test select-2.3 {Tk_DeleteSelHandler procedure} {
+ setup
+ selection own -selection CLIPBOARD .f1
+ selection handle -selection PRIMARY .f1 {handler STRING}
+ selection handle -selection CLIPBOARD .f1 {handler STRING}
+ selection handle -selection CLIPBOARD .f1 {}
+ list [lsort [selection get TARGETS]] \
+ [lsort [selection get -selection CLIPBOARD TARGETS]]
+} {{MULTIPLE STRING TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW} {MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW}}
+test select-2.4 {Tk_DeleteSelHandler procedure} {
+ setup
+ selection handle .f1 {handler STRING}
+ list [selection handle .f1 {}] [selection handle .f1 {}]
+} {{} {}}
+
+##############################################################################
+
+test select-3.1 {Tk_OwnSelection procedure} {
+ setup
+ selection own
+} {.f1}
+test select-3.2 {Tk_OwnSelection procedure} {
+ setup .f1
+ set result [selection own]
+ setup .f2
+ lappend result [selection own]
+} {.f1 .f2}
+test select-3.3 {Tk_OwnSelection procedure} {
+ setup .f1
+ setup .f2
+ selection own -selection CLIPBOARD .f1
+ list [selection own] [selection own -selection CLIPBOARD]
+} {.f2 .f1}
+test select-3.4 {Tk_OwnSelection procedure} {
+ global lostSel
+ setup
+ set lostSel {owned}
+ selection own -command { set lostSel {lost} } .f1
+ selection clear .f1
+ set lostSel
+} {lost}
+test select-3.5 {Tk_OwnSelection procedure} {
+ global lostSel
+ setup .f1
+ setup .f2
+ set lostSel {owned}
+ selection own -command { set lostSel {lost1} } .f1
+ selection own -command { set lostSel {lost2} } .f2
+ list $lostSel [selection own]
+} {lost1 .f2}
+test select-3.6 {Tk_OwnSelection procedure} {
+ global lostSel
+ setup
+ set lostSel {owned}
+ selection own -command { set lostSel {lost1} } .f1
+ selection own -command { set lostSel {lost2} } .f1
+ set result $lostSel
+ selection clear .f1
+ lappend result $lostSel
+} {owned lost2}
+test select-3.7 {Tk_OwnSelection procedure} {unixOnly} {
+ global lostSel
+ setup
+ setupbg
+ set lostSel {owned}
+ selection own -command { set lostSel {lost1} } .f1
+ update
+ set result {}
+ lappend result [dobg { selection own . }]
+ lappend result [dobg {selection own}]
+ update
+ cleanupbg
+ lappend result $lostSel
+} {{} . lost1}
+# check reentrancy on selection replacement
+test select-3.8 {Tk_OwnSelection procedure} {
+ setup
+ selection own -selection CLIPBOARD -command { destroy .f1 } .f1
+ selection own -selection CLIPBOARD .
+} {}
+test select-3.9 {Tk_OwnSelection procedure} {
+ setup .f2
+ setup .f1
+ selection own -selection CLIPBOARD -command { destroy .f2 } .f1
+ selection own -selection CLIPBOARD .f2
+} {}
+
+# multiple display tests
+if {[info exists env(TK_ALT_DISPLAY)]} {
+
+ test select-3.10 {Tk_OwnSelection procedure} {
+ setup .f1
+ setup .f2 $env(TK_ALT_DISPLAY)
+ list [selection own -displayof .f1] [selection own -displayof .f2]
+ } {.f1 .f2}
+ test select-3.11 {Tk_OwnSelection procedure} {
+ setup .f1
+ setup .f2 $env(TK_ALT_DISPLAY)
+ setupbg
+ update
+ set result ""
+ lappend result [dobg "toplevel .t -screen $env(TK_ALT_DISPLAY); wm geom .t +0+0; selection own .t; update"]
+ lappend result [selection own -displayof .f1] \
+ [selection own -displayof .f2]
+ cleanupbg
+ set result
+ } {{} .f1 {}}
+
+}
+##############################################################################
+
+test select-4.1 {Tk_ClearSelection procedure} {
+ setup
+ set result [selection own]
+ selection clear .f1
+ lappend result [selection own]
+} {.f1 {}}
+test select-4.2 {Tk_ClearSelection procedure} {
+ setup
+ selection own -selection CLIPBOARD .f1
+ selection clear .f1
+ selection own -selection CLIPBOARD
+} {.f1}
+test select-4.3 {Tk_ClearSelection procedure} {
+ setup
+ list [selection clear .f1] [selection clear .f1]
+} {{} {}}
+test select-4.4 {Tk_ClearSelection procedure} {unixOnly} {
+ global lostSel
+ setup
+ setupbg
+ set lostSel {owned}
+ selection own -command { set lostSel {lost1} } .f1
+ update
+ set result {}
+ lappend result [dobg {selection clear; update}]
+ update
+ cleanupbg
+ lappend result [selection own]
+} {{} {}}
+
+# multiple display tests
+if {[info exists env(TK_ALT_DISPLAY)]} {
+ test select-4.5 {Tk_ClearSelection procedure} {
+ global lostSel lostSel2
+ setup .f1
+ setup .f2 $env(TK_ALT_DISPLAY)
+ set lostSel {owned}
+ set lostSel2 {owned2}
+ selection own -command { set lostSel {lost1} } .f1
+ selection own -command { set lostSel2 {lost2} } .f2
+ update
+ selection clear -displayof .f2
+ update
+ list $lostSel $lostSel2
+ } {owned lost2}
+ test select-4.6 {Tk_ClearSelection procedure} {unixOnly} {
+ setup .f1
+ setup .f2 $env(TK_ALT_DISPLAY)
+ setupbg
+ set lostSel {owned}
+ set lostSel2 {owned2}
+ selection own -command { set lostSel {lost1} } .f1
+ selection own -command { set lostSel2 {lost2} } .f2
+ update
+ set result ""
+ lappend result [dobg "toplevel .t -screen $env(TK_ALT_DISPLAY); wm geom .t +0+0; selection own .t; update"]
+ lappend result [selection own -displayof .f1] \
+ [selection own -displayof .f2] $lostSel $lostSel2
+ cleanupbg
+ set result
+ } {{} .f1 {} owned lost2}
+
+}
+##############################################################################
+
+test select-5.1 {Tk_GetSelection procedure} {
+ setup
+ list [catch {selection get TEST} msg] $msg
+} {1 {PRIMARY selection doesn't exist or form "TEST" not defined}}
+test select-5.2 {Tk_GetSelection procedure} {
+ setup
+ selection get TK_WINDOW
+} {.f1}
+test select-5.3 {Tk_GetSelection procedure} {
+ setup
+ selection handle -selection PRIMARY .f1 {handler TEST} TEST
+ set selValue "Test value"
+ set selInfo ""
+ list [selection get TEST] $selInfo
+} {{Test value} {TEST 0 4000}}
+test select-5.4 {Tk_GetSelection procedure} {
+ setup
+ selection handle .f1 ERROR errHandler
+ list [catch {selection get ERROR} msg] $msg
+} {1 {PRIMARY selection doesn't exist or form "ERROR" not defined}}
+test select-5.5 {Tk_GetSelection procedure} {
+ setup
+ set selValue $longValue
+ set selInfo ""
+ selection handle .f1 {handler STRING}
+ list [selection get] $selInfo
+} "$longValue {STRING 0 4000 STRING 4000 4000 STRING 8000 4000 STRING 12000 4000 STRING 16000 4000}"
+test select-5.6 {Tk_GetSelection procedure} {
+ proc weirdHandler {type offset count} {
+ selection handle .f1 {}
+ handler $type $offset $count
+ }
+ setup
+ set selValue $longValue
+ set selInfo ""
+ selection handle .f1 {weirdHandler STRING}
+ list [catch {selection get} msg] $msg
+} {1 {PRIMARY selection doesn't exist or form "STRING" not defined}}
+test select-5.7 {Tk_GetSelection procedure} {
+ proc weirdHandler {type offset count} {
+ destroy .f1
+ handler $type $offset $count
+ }
+ setup
+ set selValue "Test Value"
+ set selInfo ""
+ selection handle .f1 {weirdHandler STRING}
+ list [catch {selection get} msg] $msg
+} {1 {PRIMARY selection doesn't exist or form "STRING" not defined}}
+test select-5.8 {Tk_GetSelection procedure} {
+ proc weirdHandler {type offset count} {
+ selection clear
+ handler $type $offset $count
+ }
+ setup
+ set selValue $longValue
+ set selInfo ""
+ selection handle .f1 {weirdHandler STRING}
+ list [selection get] $selInfo [catch {selection get} msg] $msg
+} "$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}"
+test select-5.9 {Tk_GetSelection procedure} {unixOnly} {
+ setup
+ setupbg
+ selection handle -selection PRIMARY .f1 {handler TEST} TEST
+ update
+ set selValue "Test value"
+ set selInfo ""
+ set result ""
+ lappend result [dobg {selection get TEST}]
+ cleanupbg
+ lappend result $selInfo
+} {{Test value} {TEST 0 4000}}
+test select-5.10 {Tk_GetSelection procedure} {unixOnly} {
+ setup
+ setupbg
+ selection handle -selection PRIMARY .f1 {handler TEST} TEST
+ update
+ set selValue "Test value"
+ set selInfo ""
+ selection own .f1
+ set result ""
+ fileevent $fd readable {}
+ puts $fd {catch {selection get TEST} msg; update; puts $msg; flush stdout}
+ flush $fd
+ lappend result [gets $fd]
+ cleanupbg
+ lappend result $selInfo
+} {{selection owner didn't respond} {}}
+
+# multiple display tests
+if {[info exists env(TK_ALT_DISPLAY)]} {
+ test select-5.11 {Tk_GetSelection procedure} {
+ setup .f1
+ setup .f2 $env(TK_ALT_DISPLAY)
+ selection handle -selection PRIMARY .f1 {handler TEST} TEST
+ selection handle -selection PRIMARY .f2 {handler TEST2} TEST
+ set selValue "Test value"
+ set selInfo ""
+ set result [list [selection get TEST] $selInfo]
+ set selValue "Test value2"
+ set selInfo ""
+ lappend result [selection get -displayof .f2 TEST] $selInfo
+ } {{Test value} {TEST 0 4000} {Test value2} {TEST2 0 4000}}
+ test select-5.12 {Tk_GetSelection procedure} {
+ global lostSel lostSel2
+ setup .f1
+ setup .f2 $env(TK_ALT_DISPLAY)
+ selection handle -selection PRIMARY .f1 {handler TEST} TEST
+ selection handle -selection PRIMARY .f2 {} TEST
+ set selValue "Test value"
+ set selInfo ""
+ set result [list [catch {selection get TEST} msg] $msg $selInfo]
+ set selValue "Test value2"
+ set selInfo ""
+ lappend result [catch {selection get -displayof .f2 TEST} msg] $msg \
+ $selInfo
+ } {0 {Test value} {TEST 0 4000} 1 {PRIMARY selection doesn't exist or form "TEST" not defined} {}}
+ test select-5.13 {Tk_GetSelection procedure} {unixOnly} {
+ setup .f1
+ setup .f2 $env(TK_ALT_DISPLAY)
+ setupbg
+ selection handle -selection PRIMARY .f1 {handler TEST} TEST
+ selection own .f1
+ selection handle -selection PRIMARY .f2 {handler TEST2} TEST
+ selection own .f2
+ set selValue "Test value"
+ set selInfo ""
+ update
+ set result ""
+ lappend result [dobg "toplevel .t -screen $env(TK_ALT_DISPLAY); wm geom .t +0+0; selection get -displayof .t TEST"]
+ set selValue "Test value2"
+ lappend result [dobg "selection get TEST"]
+ cleanupbg
+ lappend result $selInfo
+ } {{Test value} {Test value2} {TEST2 0 4000 TEST 0 4000}}
+ test select-5.14 {Tk_GetSelection procedure} {unixOnly} {
+ setup .f1
+ setup .f2 $env(TK_ALT_DISPLAY)
+ setupbg
+ selection handle -selection PRIMARY .f1 {handler TEST} TEST
+ selection own .f1
+ selection handle -selection PRIMARY .f2 {} TEST
+ selection own .f2
+ set selValue "Test value"
+ set selInfo ""
+ update
+ set result ""
+ lappend result [dobg "toplevel .t -screen $env(TK_ALT_DISPLAY); wm geom .t +0+0; selection get -displayof .t TEST"]
+ set selValue "Test value2"
+ lappend result [dobg "selection get TEST"]
+ cleanupbg
+ lappend result $selInfo
+ } {{PRIMARY selection doesn't exist or form "TEST" not defined} {Test value2} {TEST 0 4000}}
+
+}
+##############################################################################
+
+test select-6.1 {Tk_SelectionCmd procedure} {
+ list [catch {selection} cmd] $cmd
+} {1 {wrong # args: should be "selection option ?arg arg ...?"}}
+
+# selection clear
+test select-6.2 {Tk_SelectionCmd procedure} {
+ list [catch {selection clear -selection} cmd] $cmd
+} {1 {value for "-selection" missing}}
+test select-6.3 {Tk_SelectionCmd procedure} {
+ setup
+ selection own .
+ set result [selection own]
+ selection clear -displayof .f1
+ lappend result [selection own]
+} {. {}}
+test select-6.4 {Tk_SelectionCmd procedure} {
+ setup
+ selection own -selection CLIPBOARD .f1
+ set result [list [selection own] [selection own -selection CLIPBOARD]]
+ selection clear -selection CLIPBOARD .f1
+ lappend result [selection own] [selection own -selection CLIPBOARD]
+} {.f1 .f1 .f1 {}}
+test select-6.5 {Tk_SelectionCmd procedure} {
+ setup
+ selection own -selection CLIPBOARD .
+ set result [list [selection own] [selection own -selection CLIPBOARD]]
+ selection clear -selection CLIPBOARD -displayof .f1
+ lappend result [selection own] [selection own -selection CLIPBOARD]
+} {.f1 . .f1 {}}
+test select-6.6 {Tk_SelectionCmd procedure} {
+ list [catch {selection clear -badopt foo} cmd] $cmd
+} {1 {unknown option "-badopt"}}
+test select-6.7 {Tk_SelectionCmd procedure} {
+ list [catch {selection clear -selectionfoo foo} cmd] $cmd
+} {1 {unknown option "-selectionfoo"}}
+test select-6.8 {Tk_SelectionCmd procedure} {
+ catch {destroy .f2}
+ list [catch {selection clear -displayof .f2} cmd] $cmd
+} {1 {bad window path name ".f2"}}
+test select-6.9 {Tk_SelectionCmd procedure} {
+ catch {destroy .f2}
+ list [catch {selection clear .f2} cmd] $cmd
+} {1 {bad window path name ".f2"}}
+test select-6.10 {Tk_SelectionCmd procedure} {
+ setup
+ set result [selection own -selection PRIMARY]
+ selection clear
+ lappend result [selection own -selection PRIMARY]
+} {.f1 {}}
+test select-6.11 {Tk_SelectionCmd procedure} {
+ setup
+ selection own -selection CLIPBOARD .f1
+ set result [selection own -selection CLIPBOARD]
+ selection clear -selection CLIPBOARD
+ lappend result [selection own -selection CLIPBOARD]
+} {.f1 {}}
+test select-6.12 {Tk_SelectionCmd procedure} {
+ list [catch {selection clear foo bar} cmd] $cmd
+} {1 {wrong # args: should be "selection clear ?options?"}}
+
+# selection get
+test select-6.13 {Tk_SelectionCmd procedure} {
+ list [catch {selection get -selection} cmd] $cmd
+} {1 {value for "-selection" missing}}
+test select-6.14 {Tk_SelectionCmd procedure} {
+ global selValue selInfo
+ setup
+ selection handle .f1 {handler TEST}
+ set selValue "Test value"
+ set selInfo ""
+ list [selection get -displayof .f1] $selInfo
+} {{Test value} {TEST 0 4000}}
+test select-6.15 {Tk_SelectionCmd procedure} {
+ global selValue selInfo
+ setup
+ selection handle .f1 {handler STRING}
+ selection handle -selection CLIPBOARD .f1 {handler TEST}
+ selection own -selection CLIPBOARD .f1
+ set selValue "Test value"
+ set selInfo ""
+ list [selection get -selection CLIPBOARD] $selInfo
+} {{Test value} {TEST 0 4000}}
+test select-6.16 {Tk_SelectionCmd procedure} {
+ global selValue selInfo
+ setup
+ selection handle -type TEST .f1 {handler TEST}
+ selection handle -type STRING .f1 {handler STRING}
+ set selValue "Test value"
+ set selInfo ""
+ list [selection get -type TEST] $selInfo
+} {{Test value} {TEST 0 4000}}
+test select-6.17 {Tk_SelectionCmd procedure} {
+ list [catch {selection get -badopt foo} cmd] $cmd
+} {1 {unknown option "-badopt"}}
+test select-6.18 {Tk_SelectionCmd procedure} {
+ list [catch {selection get -selectionfoo foo} cmd] $cmd
+} {1 {unknown option "-selectionfoo"}}
+test select-6.19 {Tk_SelectionCmd procedure} {
+ catch { destroy .f2 }
+ list [catch {selection get -displayof .f2} cmd] $cmd
+} {1 {bad window path name ".f2"}}
+test select-6.20 {Tk_SelectionCmd procedure} {
+ list [catch {selection get foo bar} cmd] $cmd
+} {1 {wrong # args: should be "selection get ?options?"}}
+test select-6.21 {Tk_SelectionCmd procedure} {
+ global selValue selInfo
+ setup
+ selection handle -type TEST .f1 {handler TEST}
+ selection handle -type STRING .f1 {handler STRING}
+ set selValue "Test value"
+ set selInfo ""
+ list [selection get TEST] $selInfo
+} {{Test value} {TEST 0 4000}}
+
+# selection handle
+# most of the handle section has been covered earlier
+test select-6.22 {Tk_SelectionCmd procedure} {
+ list [catch {selection handle -selection} cmd] $cmd
+} {1 {value for "-selection" missing}}
+test select-6.23 {Tk_SelectionCmd procedure} {
+ global selValue selInfo
+ setup
+ set selValue "Test value"
+ set selInfo ""
+ list [selection handle -format INTEGER .f1 {handler TEST}] [selection get -displayof .f1] $selInfo
+} {{} {Test value} {TEST 0 4000}}
+test select-6.24 {Tk_SelectionCmd procedure} {
+ list [catch {selection handle -badopt foo} cmd] $cmd
+} {1 {unknown option "-badopt"}}
+test select-6.25 {Tk_SelectionCmd procedure} {
+ list [catch {selection handle -selectionfoo foo} cmd] $cmd
+} {1 {unknown option "-selectionfoo"}}
+test select-6.26 {Tk_SelectionCmd procedure} {
+ list [catch {selection handle} cmd] $cmd
+} {1 {wrong # args: should be "selection handle ?options? window command"}}
+test select-6.27 {Tk_SelectionCmd procedure} {
+ list [catch {selection handle .} cmd] $cmd
+} {1 {wrong # args: should be "selection handle ?options? window command"}}
+test select-6.28 {Tk_SelectionCmd procedure} {
+ list [catch {selection handle . foo bar baz blat} cmd] $cmd
+} {1 {wrong # args: should be "selection handle ?options? window command"}}
+test select-6.29 {Tk_SelectionCmd procedure} {
+ catch { destroy .f2 }
+ list [catch {selection handle .f2 dummy} cmd] $cmd
+} {1 {bad window path name ".f2"}}
+
+# selection own
+test select-6.30 {Tk_SelectionCmd procedure} {
+ list [catch {selection own -selection} cmd] $cmd
+} {1 {value for "-selection" missing}}
+test select-6.31 {Tk_SelectionCmd procedure} {
+ setup
+ selection own .
+ selection own -displayof .f1
+} {.}
+test select-6.32 {Tk_SelectionCmd procedure} {
+ setup
+ selection own .
+ selection own -selection CLIPBOARD .f1
+ list [selection own] [selection own -selection CLIPBOARD]
+} {. .f1}
+test select-6.33 {Tk_SelectionCmd procedure} {
+ global lostSel
+ setup
+ set lostSel owned
+ selection own -command { set lostSel lost } .
+ selection own -selection CLIPBOARD .f1
+ set result $lostSel
+ selection own .f1
+ lappend result $lostSel
+} {owned lost}
+test select-6.34 {Tk_SelectionCmd procedure} {
+ list [catch {selection own -badopt foo} cmd] $cmd
+} {1 {unknown option "-badopt"}}
+test select-6.35 {Tk_SelectionCmd procedure} {
+ list [catch {selection own -selectionfoo foo} cmd] $cmd
+} {1 {unknown option "-selectionfoo"}}
+test select-6.36 {Tk_SelectionCmd procedure} {
+ catch {destroy .f2}
+ list [catch {selection own -displayof .f2} cmd] $cmd
+} {1 {bad window path name ".f2"}}
+test select-6.37 {Tk_SelectionCmd procedure} {
+ catch {destroy .f2}
+ list [catch {selection own .f2} cmd] $cmd
+} {1 {bad window path name ".f2"}}
+test select-6.38 {Tk_SelectionCmd procedure} {
+ list [catch {selection own foo bar baz} cmd] $cmd
+} {1 {wrong # args: should be "selection own ?options? ?window?"}}
+
+test select-6.39 {Tk_SelectionCmd procedure} {
+ list [catch {selection foo} cmd] $cmd
+} {1 {bad option "foo": must be clear, get, handle, or own}}
+
+##############################################################################
+
+ # This test is non-portable because some old X11/News servers ignore
+ # a selection request when the window doesn't exist, which causes a
+ # different error message.
+
+ test select-7.1 {TkSelDeadWindow procedure} {nonPortable} {
+ setup
+ selection handle .f1 { handler TEST }
+ set result [selection own]
+ destroy .f1
+ lappend result [selection own] [catch { selection get } msg] $msg
+ } {.f1 {} 1 {PRIMARY selection doesn't exist or form "STRING" not defined}}
+
+##############################################################################
+
+# Check reentrancy on losing selection
+
+test select-8.1 {TkSelEventProc procedure} {unixOnly} {
+ setup
+ setupbg
+ selection own -selection CLIPBOARD -command { destroy .f1 } .f1
+ update
+ set result [dobg {selection own -selection CLIPBOARD .}]
+ cleanupbg
+ set result
+} {}
+
+##############################################################################
+
+test select-9.1 {SelCvtToX and SelCvtFromX procedures} {unixOnly} {
+ global selValue selInfo
+ setup
+ setupbg
+ set selValue "1024"
+ set selInfo ""
+ selection handle -selection PRIMARY -format INTEGER -type TEST \
+ .f1 {handler TEST}
+ update
+ set result ""
+ lappend result [dobg {selection get TEST}]
+ cleanupbg
+ lappend result $selInfo
+} {0x400 {TEST 0 4000}}
+test select-9.2 {SelCvtToX and SelCvtFromX procedures} {unixOnly} {
+ global selValue selInfo
+ setup
+ setupbg
+ set selValue "1024 0xffff 2048 -2 "
+ set selInfo ""
+ selection handle -selection PRIMARY -format INTEGER -type TEST \
+ .f1 {handler TEST}
+ set result ""
+ lappend result [dobg {selection get TEST}]
+ cleanupbg
+ lappend result $selInfo
+} {{0x400 0xffff 0x800 0xfffffffe} {TEST 0 4000}}
+test select-9.3 {SelCvtToX and SelCvtFromX procedures} {unixOnly} {
+ global selValue selInfo
+ setup
+ setupbg
+ set selValue " "
+ set selInfo ""
+ selection handle -selection PRIMARY -format INTEGER -type TEST \
+ .f1 {handler TEST}
+ set result ""
+ lappend result [dobg {selection get TEST}]
+ cleanupbg
+ lappend result $selInfo
+} {{} {TEST 0 4000}}
+test select-9.4 {SelCvtToX and SelCvtFromX procedures} {unixOnly} {
+ global selValue selInfo
+ setup
+ setupbg
+ set selValue "16 foobar 32"
+ set selInfo ""
+ selection handle -selection PRIMARY -format INTEGER -type TEST \
+ .f1 {handler TEST}
+ set result ""
+ lappend result [dobg {selection get TEST}]
+ cleanupbg
+ lappend result $selInfo
+} {{0x10 0x0 0x20} {TEST 0 4000}}
+
+##############################################################################
+
+# note, we are not testing MULTIPLE style selections
+
+# most control paths have been exercised above
+test select-10.1 {ConvertSelection procedure, race with selection clear} {unixOnly} {
+ setup
+ setupbg
+ set selValue "Just a simple test"
+ set selInfo ""
+ selection handle .f1 {handler STRING}
+ update
+ puts $fd {puts "[catch {selection get} msg] $msg"; puts **DONE**; flush stdout}
+ flush $fd
+ after 200
+ selection own .
+ set bgData {}
+ tkwait variable bgDone
+ cleanupbg
+ list $bgData $selInfo
+} {{1 PRIMARY selection doesn't exist or form "STRING" not defined} {}}
+test select-10.2 {ConvertSelection procedure} {unixOnly} {
+ setup
+ setupbg
+ set selValue [string range $longValue 0 3999]
+ set selInfo ""
+ selection handle .f1 {handler STRING}
+ set result ""
+ lappend result [dobg {selection get}]
+ cleanupbg
+ lappend result $selInfo
+} [list [string range $longValue 0 3999] {STRING 0 4000 STRING 4000 4000 STRING 0 4000 STRING 4000 4000}]
+test select-10.3 {ConvertSelection procedure} {unixOnly} {
+ setup
+ setupbg
+ selection handle .f1 ERROR errHandler
+ set result ""
+ lappend result [dobg {selection get ERROR}]
+ cleanupbg
+ set result
+} {{PRIMARY selection doesn't exist or form "ERROR" not defined}}
+# testing timers
+test select-10.4 {ConvertSelection procedure} {unixOnly} {
+ setup
+ setupbg
+ set selValue $longValue
+ set selInfo ""
+ selection handle .f1 {errIncrHandler STRING}
+ set result ""
+ set pass 0
+ lappend result [dobg {selection get}]
+ cleanupbg
+ lappend result $selInfo
+} {{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}}
+test select-10.5 {ConvertSelection procedure, reentrancy issues} {unixOnly} {
+ setup
+ setupbg
+ set selValue "Test value"
+ set selInfo ""
+ selection handle -type TEST .f1 { handler TEST }
+ selection handle -type STRING .f1 { badHandler .f1 STRING }
+ set result ""
+ lappend result [dobg {selection get}]
+ cleanupbg
+ lappend result $selInfo
+} {{PRIMARY selection doesn't exist or form "STRING" not defined} {.f1 STRING 0 4000}}
+test select-10.6 {ConvertSelection procedure, reentrancy issues} {unixOnly} {
+ proc weirdHandler {type offset count} {
+ destroy .f1
+ handler $type $offset $count
+ }
+ setup
+ setupbg
+ set selValue $longValue
+ set selInfo ""
+ selection handle .f1 {weirdHandler STRING}
+ set result ""
+ lappend result [dobg {selection get}]
+ cleanupbg
+ lappend result $selInfo
+} {{PRIMARY selection doesn't exist or form "STRING" not defined} {STRING 0 4000}}
+
+##############################################################################
+
+# testing reentrancy
+test select-11.1 {TkSelPropProc procedure} {unixOnly} {
+ setup
+ setupbg
+ set selValue $longValue
+ set selInfo ""
+ selection handle -type TEST .f1 { handler TEST }
+ selection handle -type STRING .f1 { reallyBadHandler .f1 STRING }
+ set result ""
+ set pass 0
+ lappend result [dobg {selection get}]
+ cleanupbg
+ lappend result $selInfo
+} {{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}}
+
+##############################################################################
+
+# Note, this assumes we are using CurrentTtime
+test select-12.1 {DefaultSelection procedure} {unixOnly} {
+ setup
+ set result [selection get -type TIMESTAMP]
+ setupbg
+ lappend result [dobg {selection get -type TIMESTAMP}]
+ cleanupbg
+ set result
+} {0x0 0x0}
+test select-12.2 {DefaultSelection procedure} {unixOnly} {
+ setup
+ set result [lsort [list [selection get -type TARGETS]]]
+ setupbg
+ lappend result [dobg {lsort [selection get -type TARGETS]}]
+ cleanupbg
+ set result
+} {{MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW} {MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW}}
+test select-12.3 {DefaultSelection procedure} {unixOnly} {
+ setup
+ selection handle .f1 {handler TEST} TEST
+ set result [list [lsort [selection get -type TARGETS]]]
+ setupbg
+ lappend result [dobg {lsort [selection get -type TARGETS]}]
+ cleanupbg
+ set result
+} {{MULTIPLE TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW} {MULTIPLE TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}}
+test select-12.4 {DefaultSelection procedure} {unixOnly} {
+ setup
+ set result ""
+ lappend result [selection get -type TK_APPLICATION]
+ setupbg
+ lappend result [dobg {selection get -type TK_APPLICATION}]
+ cleanupbg
+ set result
+} [list [winfo name .] [winfo name .]]
+test select-12.5 {DefaultSelection procedure} {unixOnly} {
+ setup
+ set result [selection get -type TK_WINDOW]
+ setupbg
+ lappend result [dobg {selection get -type TK_WINDOW}]
+ cleanupbg
+ set result
+} {.f1 .f1}
+test select-12.6 {DefaultSelection procedure} {
+ global selValue selInfo
+ setup
+ selection handle .f1 {handler TARGETS.f1} TARGETS
+ set selValue "Targets value"
+ set selInfo ""
+ set result [list [selection get TARGETS] $selInfo]
+ selection handle .f1 {} TARGETS
+ lappend result [selection get TARGETS]
+} {{Targets value} {TARGETS.f1 0 4000} {MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW}}
+
+test select-13.1 {SelectionSize procedure, handler deleted} {unixOnly} {
+ proc badHandler {path type offset count} {
+ global selValue selInfo abortCount
+ incr abortCount -1
+ if {$abortCount == 0} {
+ selection handle -type $type $path {}
+ }
+ lappend selInfo $path $type $offset $count
+ set numBytes [expr {[string length $selValue] - $offset}]
+ if {$numBytes <= 0} {
+ return ""
+ }
+ string range $selValue $offset [expr $numBytes+$offset]
+ }
+ setup
+ setupbg
+ set selValue $longValue
+ set selInfo ""
+ selection handle .f1 {badHandler .f1 STRING}
+ set result ""
+ set abortCount 2
+ lappend result [dobg {selection get}]
+ cleanupbg
+ lappend result $selInfo
+} {{PRIMARY selection doesn't exist or form "STRING" not defined} {.f1 STRING 0 4000 .f1 STRING 4000 4000}}
+
+catch {rename weirdHandler {}}
+concat