select.test
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:37k
- # 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.
- # Copyright (c) 1998-1999 by Scriptics Corporation.
- # All rights reserved.
- #
- # RCS: @(#) $Id: select.test,v 1.9.2.1 2005/11/22 11:32:37 dkf Exp $
- #
- # Note: Multiple display selection handling will only be tested if the
- # environment variable TK_ALT_DISPLAY is set to an alternate display.
- #
- package require tcltest 2.1
- namespace import -force tcltest::configure
- namespace import -force tcltest::testsDirectory
- configure -testdir [file join [pwd] [file dirname [info script]]]
- configure -loadfile [file join [testsDirectory] constraints.tcl]
- tcltest::loadTestedCommands
- namespace import -force tcltest::interpreter
- 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.1 {Tk_CreateSelHandler procedure} {unixOnly} {
- 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 UTF8_STRING}
- test select-1.4.2 {Tk_CreateSelHandler procedure} {macOrPc} {
- 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.1 {Tk_CreateSelHandler procedure} {unixOnly} {
- 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 UTF8_STRING}}
- test select-1.6.2 {Tk_CreateSelHandler procedure} {macOrPc} {
- 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.1 {Tk_CreateSelHandler procedure} {unixOnly} {
- 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 UTF8_STRING} {MULTIPLE TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW}}
- test select-1.7.2 {Tk_CreateSelHandler procedure} {macOrPc} {
- 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} {unixOnly} {
- 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 UTF8_STRING} {MULTIPLE STRING TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW USER UTF8_STRING}}
- test select-2.2 {Tk_DeleteSelHandler procedure} {unixOnly} {
- 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 UTF8_STRING} {MULTIPLE STRING TARGETS TEST TIMESTAMP TK_APPLICATION TK_WINDOW UTF8_STRING}}
- test select-2.3 {Tk_DeleteSelHandler procedure} {unixOnly} {
- 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 UTF8_STRING} {MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW}}
- test select-2.4 {Tk_DeleteSelHandler procedure} {macOrPc} {
- 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.5 {Tk_DeleteSelHandler procedure} {macOrPc} {
- 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.6 {Tk_DeleteSelHandler procedure} {macOrPc} {
- 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.7 {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
- test select-3.10 {Tk_OwnSelection procedure} {altDisplay} {
- 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} {altDisplay} {
- 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
- test select-4.5 {Tk_ClearSelection procedure} {altDisplay} {
- 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 altDisplay} {
- 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 ""
- lappend result [dobg {selection get TEST} 1]
- cleanupbg
- lappend result $selInfo
- } {{selection owner didn't respond} {}}
- # multiple display tests
- test select-5.11 {Tk_GetSelection procedure} {altDisplay} {
- 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} {altDisplay} {
- 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 altDisplay} {
- 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 altDisplay} {
- 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 {bad option "-badopt": must be -displayof or -selection}}
- test select-6.7 {Tk_SelectionCmd procedure} {
- list [catch {selection clear -selectionfoo foo} cmd] $cmd
- } {1 {bad option "-selectionfoo": must be -displayof or -selection}}
- 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 {bad option "-badopt": must be -displayof, -selection, or -type}}
- test select-6.18 {Tk_SelectionCmd procedure} {
- list [catch {selection get -selectionfoo foo} cmd] $cmd
- } {1 {bad option "-selectionfoo": must be -displayof, -selection, or -type}}
- 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 {bad option "-badopt": must be -format, -selection, or -type}}
- test select-6.25 {Tk_SelectionCmd procedure} {
- list [catch {selection handle -selectionfoo foo} cmd] $cmd
- } {1 {bad option "-selectionfoo": must be -format, -selection, or -type}}
- 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 {bad option "-badopt": must be -command, -displayof, or -selection}}
- test select-6.35 {Tk_SelectionCmd procedure} {
- list [catch {selection own -selectionfoo foo} cmd] $cmd
- } {1 {bad option "-selectionfoo": must be -command, -displayof, or -selection}}
- 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}}
- test select-9.5 {SelCvtToX and SelCvtFromX procedures} -setup {
- setup
- setupbg
- } -constraints unix -body {
- # Ensure that lists of atoms are constructed correctly, even when the
- # atom names have spaces in. [Bug 1353414]
- set selValue "foo bar"
- set selInfo ""
- set selType {text/x-tk-test;detail="foo bar"}
- selection handle -selection PRIMARY -format STRING -type $selType
- .f1 [list handler $selType]
- lsort [dobg {selection get TARGETS}]
- } -cleanup {
- cleanupbg
- } -result {MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW {text/x-tk-test;detail="foo bar"}}
- ##############################################################################
- # 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
- proc Ready {fd} {
- variable x
- lappend x [gets $fd]
- }
- set fd [open "|[list [interpreter] -geometry +0+0 -name tktest]" r+]
- puts $fd "puts foo; flush stdout"
- flush $fd
- gets $fd
- fileevent $fd readable [list Ready $fd]
- 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 x {}
- vwait [namespace which -variable x]
- puts $fd {exit}
- flush $fd
- close $fd
- lappend x $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
- # This one hangs in Exceed
- test select-10.4 {ConvertSelection procedure} {unixOnly noExceed} {
- 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 {}}
- # cleanup
- ::tcltest::cleanupTests
- return