OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [start/] [insight/] [tk/] [tests/] [select.test] - Rev 1780

Go to most recent revision | Compare with Previous | Blame | View Log

# 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.
#
# RCS: @(#) $Id: select.test,v 1.1.1.1 2002-01-16 10:25:59 markom Exp $

#
# 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

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.